mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
-- 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)
 |