mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Add example MAXScript files from Autodesk reference
This commit is contained in:
		
							
								
								
									
										29
									
								
								samples/MAXScript/macro-1.mcr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								samples/MAXScript/macro-1.mcr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| -- Taken from an example from Autodesk's MAXScript reference: | ||||
| -- http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_84E24969_C175_4389_B9A6_3B2699B66785_htm | ||||
|  | ||||
| macroscript MoveToSurface | ||||
|     category: "HowTo" | ||||
| ( | ||||
|     fn g_filter o = superclassof o == Geometryclass | ||||
|     fn find_intersection z_node node_to_z = ( | ||||
|         local testRay = ray node_to_z.pos [0,0,-1] | ||||
|         local nodeMaxZ = z_node.max.z | ||||
|         testRay.pos.z = nodeMaxZ + 0.0001 * abs nodeMaxZ | ||||
|         intersectRay z_node testRay | ||||
|     ) | ||||
|      | ||||
|     on isEnabled return selection.count > 0 | ||||
|      | ||||
|     on Execute do ( | ||||
|         target_mesh = pickObject message:"Pick Target Surface:" filter:g_filter | ||||
|          | ||||
|         if isValidNode target_mesh then ( | ||||
|             undo "MoveToSurface" on ( | ||||
|                 for i in selection do ( | ||||
|                     int_point = find_intersection target_mesh i | ||||
|                     if int_point != undefined then i.pos = int_point.pos | ||||
|                 )--end i loop | ||||
|             )--end undo | ||||
|         )--end if | ||||
|     )--end execute | ||||
| )--end script | ||||
							
								
								
									
										53
									
								
								samples/MAXScript/macro-2.mcr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								samples/MAXScript/macro-2.mcr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| -- Taken from an example from Autodesk's MAXScript reference: | ||||
| -- http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_0876DF46_FAA3_4131_838D_5739A67FF2C1_htm | ||||
|  | ||||
| macroscript FreeSpline category:"HowTo" tooltip:"FreeSpline" ( | ||||
| local old_pos | ||||
| local new_spline | ||||
| local second_knot_set | ||||
|  | ||||
| fn get_mouse_pos pen_pos old_pen_pos = ( | ||||
| 	if old_pos == undefined then old_pos = old_pen_pos | ||||
| 	if distance pen_pos old_pos > 10 then | ||||
| 	( | ||||
| 		if second_knot_set then | ||||
| 			addKnot new_spline 1 #smooth #curve pen_pos | ||||
| 		else | ||||
| 		( | ||||
| 			setKnotPoint new_spline 1 2 pen_pos | ||||
| 			second_knot_set = true | ||||
| 		) | ||||
| 		old_pos = pen_pos | ||||
| 		updateShape new_spline | ||||
| 	)-- end if | ||||
| )-- end fn | ||||
|  | ||||
| fn draw_new_line old_pen_pos = ( | ||||
| 	pickPoint mouseMoveCallback:#(get_mouse_pos,old_pen_pos) | ||||
| ) | ||||
|  | ||||
| undo"Free Spline"on( | ||||
| 	new_spline = splineShape () | ||||
| 	old_pen_pos = pickPoint () | ||||
| 	 | ||||
| 	if old_pen_pos == #RightClick then | ||||
| 		delete new_spline | ||||
| 	else | ||||
| 	( | ||||
| 		select new_spline | ||||
| 		new_spline.pos = old_pen_pos | ||||
| 		addNewSpline new_spline | ||||
| 		addKnot new_spline 1 #smooth #curve old_pen_pos | ||||
| 		addKnot new_spline 1 #smooth #curve old_pen_pos | ||||
| 		second_knot_set = false | ||||
| 		draw_new_line old_pen_pos | ||||
| 		q = querybox "Close Spline?" title:"Free Spline" | ||||
| 		if q then | ||||
| 		( | ||||
| 			close new_spline 1 | ||||
| 			updateshape new_spline | ||||
| 		) | ||||
| 		select new_spline | ||||
| 	)--end else | ||||
| )--end undo | ||||
| )--end script | ||||
							
								
								
									
										64
									
								
								samples/MAXScript/svg-renderer.ms
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								samples/MAXScript/svg-renderer.ms
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| -- Taken from a 3-part tutorial from Autodesk's MAXScript reference | ||||
| -- Source: http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_6B5EDC11_A154_4AA7_A972_A11AC36949E9_htm | ||||
|  | ||||
| fn ColourToHex col = ( | ||||
| 	local theComponents = #(bit.intAsHex col.r, bit.intAsHex col.g, bit.intAsHex col.b) | ||||
| 	local theValue = "#" | ||||
| 	for i in theComponents do  | ||||
| 		theValue += (if i.count == 1 then "0" else "") + i | ||||
| 	theValue | ||||
| ) | ||||
|  | ||||
| local st = timestamp() | ||||
| local theFileName = (getDir #userscripts + "\\PolygonRendering3.svg") | ||||
| local theSVGfile = createFile theFileName | ||||
| format "<svg xmlns=\"http://www.w3.org/2000/svg\"\n" to:theSVGfile | ||||
| format "\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\">\n" to:theSVGfile | ||||
|  | ||||
| local theViewTM =  viewport.getTM() | ||||
| theViewTM.row4 = [0,0,0] | ||||
|  | ||||
| local theViewTM2 = viewport.getTM() | ||||
| local theViewSize = getViewSize() | ||||
| local theViewScale = getViewSize() | ||||
| theViewScale.x /= 1024.0 | ||||
| theViewScale.y /= 1024.0 | ||||
| 	 | ||||
| local theStrokeThickness = 3 | ||||
| 	 | ||||
| gw.setTransform (matrix3 1)	 | ||||
| for o in Geometry where not o.isHiddenInVpt and classof o != TargetObject do ( | ||||
| 	local theStrokeColour = white | ||||
| 	local theFillColour = o.wirecolor | ||||
| 	 | ||||
| 	local theMesh = snapshotAsMesh o | ||||
| 	for f = 1 to theMesh.numfaces do ( | ||||
| 		local theNormal = normalize (getFaceNormal theMesh f) | ||||
| 		 | ||||
| 		if (theNormal*theViewTM).z > 0 do | ||||
| 		( | ||||
| 			local theFace = getFace theMesh f | ||||
| 			local v1 = gw.transPoint (getVert theMesh theFace.x) | ||||
| 			local v2 = gw.transPoint (getVert theMesh theFace.y) | ||||
| 			local v3 = gw.transPoint (getVert theMesh theFace.z) | ||||
| 			 | ||||
| 			v1.x /= theViewScale.x  | ||||
| 			v1.y /= theViewScale.y  | ||||
| 			v2.x /= theViewScale.x  | ||||
| 			v2.y /= theViewScale.y | ||||
| 			v3.x /= theViewScale.x | ||||
| 			v3.y /= theViewScale.y | ||||
| 			 | ||||
| 			format "\t<polygon points='%,%  %,%  %,%' \n" v1.x v1.y v2.x v2.y v3.x v3.y to:theSVGfile | ||||
| 			format "\tstyle='stroke:%; fill:%; stroke-width:%'/>\n" (ColourToHex theStrokeColour) (ColourToHex theFillColour) theStrokeThickness to:theSVGfile			 | ||||
| 		)--end if normal positive | ||||
| 	)--end f loop | ||||
| )--end o loop | ||||
|  | ||||
| format "</svg>\n" to:theSVGfile | ||||
| close theSVGfile | ||||
| local theSVGMap = VectorMap vectorFile:theFileName alphasource:0 | ||||
| local theBitmap = bitmap theViewSize.x theViewSize.y | ||||
| renderMap theSVGMap into:theBitmap filter:true | ||||
| display theBitmap | ||||
| format "Render Time: % sec.\n" ((timestamp()-st)/1000.0) | ||||
							
								
								
									
										22
									
								
								samples/MAXScript/volume-calc.ms
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								samples/MAXScript/volume-calc.ms
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| fn CalculateVolumeAndCentreOfMass obj = | ||||
| ( | ||||
| 	local Volume= 0.0 | ||||
| 	local Centre= [0.0, 0.0, 0.0] | ||||
| 	local theMesh = snapshotasmesh obj | ||||
| 	local numFaces = theMesh.numfaces | ||||
| 	for i = 1 to numFaces do | ||||
| 	( | ||||
| 		local Face= getFace theMesh i | ||||
| 		local vert2 = getVert theMesh Face.z | ||||
| 		local vert1 = getVert theMesh Face.y | ||||
| 		local vert0 = getVert theMesh Face.x | ||||
| 		local dV = Dot (Cross (vert1 - vert0) (vert2 - vert0)) vert0 | ||||
| 		Volume+= dV | ||||
| 		Centre+= (vert0 + vert1 + vert2) * dV | ||||
| 	) | ||||
| 	delete theMesh | ||||
| 	Volume /= 6 | ||||
| 	Centre /= 24 | ||||
| 	Centre /= Volume | ||||
| 	#(Volume,Centre) | ||||
| ) | ||||
		Reference in New Issue
	
	Block a user