Notifications
Clear all

[Closed] Maxscript – Display distance object

I have got a script file used display distance but it’s not perfect, post script section to forum hope everyone can help me

rollout viewDistance "Show Distance" width:342 height:41
(
	-- Creat two button Show/Hide distance
	button btnShow "Show Distance" pos:[11,6] width:150 height:28
	button btnHide "Hide Distance" pos:[171,6] width:150 height:28
	
	global addedObject = #()
	
	
	------------ Events-------------
	on btnShow pressded do
	(
		try
		(
			addedObject = #()
			p = $
			flag = false
			
			if classof p == ChamferBox do
			(
				objBox = Box height:p.Height Width:p.Width Length:p.Length lengthsegs:1  widthsegs:1 heightsegs:1 pos:p.pos
				p = objBox
				flag = true
			)
			
			if classof p== ChamferCyl do
			(
					objSh = Sphere radius:p.Radius
					p = objSh
					flag = true
			)
			
			---------------------------  define GeoSphere pos -------------------------
				local theMesh = convertToMesh (p)
				for v = 1 to getNumVerts theMesh  do
				(
					vert = getVert theMesh v
					geo = GeoSphere radius:1 pos:vert
					join addedObject #(geo)
				)
				update theMesh
		
			------------------------------------------------------------------------------
			
			local theEditablePoly = convertToPoly (p)
	   
				for iEdge = 1 to theEditablePoly.getNumEdges() do
				(
					 --getEdgeLength p i
					------ calculate distance -------------------------------
						-- get vertexes defining the edge into an Array
				local aiEdgeVerts = polyOp.getEdgeVerts theEditablePoly iEdge
		
						-- get vertexes positions into an Array
				local ap3VertPosition = for iVert in aiEdgeVerts collect
				polyOp.getVert theEditablePoly iVert
			
						-- return the distance between vertexes
						--return (distance ap3VertPosition[1] ap3VertPosition[2])
					dis = distance ap3VertPosition[1] ap3VertPosition[2]
			
				--format "Length of edge % is: %
"	 iEdge dis
				--------- Draw line-----------------------------
				
				newSpline = SplineShape thickness:3 pos: ap3VertPosition[1] render_useViewportSettings:true

				addNewSpline newSpline
				addKnot newSpline 1 #corner #line  ap3VertPosition[1]
				addKnot newSpline 1 #corner #line  ap3VertPosition[2]
				updateShape newSpline
				
				--ss
				--newSpline = drawLineBetweenTwoPoints ap3VertPosition[1] ap3VertPosition[2]
				join addedObject #(newSpline)
				--[10,20,30] [100,200,10]--
				
				----- inout text------------
				x = (ap3VertPosition[2].x + ap3VertPosition[1].x + 1)/2
				y = (ap3VertPosition[2].y  + ap3VertPosition[1].y)/2
				z = (ap3VertPosition[2].z  + ap3VertPosition[1].z - 1)/2
				
				textStr = dis as string+units.MetricType as string
				
				--txt = inputText [x,y,z] textStr
				
				txt = Text text:textStr size:5 pos: [x,y,z] 
				convertToPoly txt
				join addedObject #(txt)
				--txt.rotation = quat 0.71902 -0.279805 -0.178069 0.610746
				update txt
				)
				if flag = true then
				(
					delete  p
				)
			)
			catch(
				messagebox "Select object, pls"
				)
			
		
	)
	
	on btnHide pressed do
	(
		try(
			for o in addedObject do
			(
				delete o
			)
			
			)
			catch()
	)
	fn drawLineBetweenTwoPoints pointA pointB =
	(
	
	 ss = SplineShape thickness:3 pos:pointA render_useViewportSettings:true

	  addNewSpline ss
	  addKnot ss 1 #corner #line PointA
	  addKnot ss 1 #corner #line PointB
	  updateShape ss
	  ss
	)
)

createDialog viewDistance
	-- 2 commands go together for auto display
cui.RegisterDialogBar viewDistance  -- minSize: -1 maxSize: -1  style:(#cui_dock_top, #cui_dock_right )
--#cui_dock_vert 
cui.DockDialogBar  viewDistance #cui_dock_top
10 Replies

Nice ^. I didn’t know about this one.

I have a script section, i found it at www.scriptspot.com forum, but i need modify it that add arrow at start of line and end of line.
This script uses to measure dimension object


 
 macroscript Dimensions
 category:"DIM"
 tooltip:"Dimensions object 2011"
 buttonText:"Dimensions object 2011"
 (
 	global DrawTextOnViewports
 	global rol_TextColor
 	unRegisterRedrawViewsCallback DrawTextOnViewports
 	
 	local drawFaceArea = false
 	local selSpline = undefined
 	local edgeLengthArr = #()
 	local textColor = green
 	local overAll = "Nothing to display ! Go to Edge or Polygon sub-object level !"
 	local objLength = undefined
 	local objHeight = undefined
 	local objWidth = undefined
 	local backLeftBottom = undefined
 	local frontLeftBottom = undefined
 	local backLeftTop = undefined
 	local backRightBottom = undefined
 	local lineArr = #(undefined,undefined,undefined)
 	local linePoints = #([0,0,0], [0,0,0])
 	
 	local moGetFaceArea = meshop.getFaceArea
 	local moGetNumFaces = meshOp.getNumFaces
 	local moGetFaceCenter = meshop.getFaceCenter
 	local meshGetFaceSel = getFaceSelection
 	local moGetVertsUsingEdge = meshop.getVertsUsingEdge
 	local moGetVert = meshop.getVert
 	local moGetFacesUEdge = meshop.getFacesUsingEdge
 	local meshGetEdgeSel = getEdgeSelection
 	local moGetEdgesUVert = meshop.getEdgesUsingVert
 	
 	local poGetNumFaces = polyOp.getNumFaces
 	local poGetFaceCenter = polyop.getFaceCenter
 	local poGetFaceSel = polyOp.getFaceSelection
 	local poGtEdgeVerts = polyOp.getEdgeVerts
 	local poGetVertSel = polyOp.getVertSelection
 	local poGetEdgeSel = polyOp.getEdgeSelection
 	local poGetVert = polyOp.getVert
 	local poGetFaceArea = polyOp.getFaceArea
 	local poGetFacesUEdge = polyop.getFacesUsingEdge
 	local poGetEdgesUVert = polyop.getEdgesUsingVert
 	
 	function ClearViewports =
 	(
 		edgeLengthArr = undefined
 		selSpline = undefined
 		overAll = undefined
 		objLength = undefined
 		objHeight = undefined
 		objWidth = undefined
 		lineArr = #(undefined,undefined,undefined)
 		linePoints = #([0,0,0], [0,0,0])
 		unRegisterRedrawViewsCallback DrawTextOnViewports
 		forceCompleteRedraw()
 	)
 	
 	function VertSelMiddleCenter vertSel curObj sN type =
 	(
 		local posX = 0
 		local posY =0
 		local posZ = 0
 		local cnt = 0
 		case type of
 		(
 			1:	--	editable_poly
 			(
 				for i in vertSel do
 				(
 					posX = posX + (in coordsys world (poGetVert curObj i).x)
 					posY = posY + (in coordsys world (poGetVert curObj i).y)
 					posZ = posZ + (in coordsys world (poGetVert curObj i).z)
 					cnt = cnt + 1	
 				)
 			)
 			2:	--	edit_poly
 			(
 				for i in vertSel do
 				(
 					posX = posX + (in coordsys world (curObj.GetVertex i).x)
 					posY = posY + (in coordsys world (curObj.GetVertex i).y)
 					posZ = posZ + (in coordsys world (curObj.GetVertex i).z)
 					cnt = cnt + 1	
 				)
 			)
 			3:	--	editable_mesh
 			(
 				for i in vertSel do
 				(
 					posX = posX + (in coordsys world (moGetVert curObj i).x)
 					posY = posY + (in coordsys world (moGetVert curObj i).y)
 					posZ = posZ + (in coordsys world (moGetVert curObj i).z)
 					cnt = cnt + 1	
 				)
 			)
 			4:	--	editable_spline
 			(
 				for i in vertSel do
 				(
 					posX = posX + (in coordsys world (getKnotPoint curObj sN i).x)
 					posY = posY + (in coordsys world (getKnotPoint curObj sN i).y)
 					posZ = posZ + (in coordsys world (getKnotPoint curObj sN i).z)
 					cnt = cnt + 1	
 				)
 			)
 		)
 		middleX = posX / cnt
 		middleY = posY / cnt
 		middleZ = posZ / cnt
 		
 		point3 middleX middleY middleZ 
 	)
 	
 	function GetEdgeUsingVertsEPM curSel edges =
 	(
 		local edgeVerts = #()
 		for i in edges do
 		(
 			edgeVerts[1] = curSel.GetEdgeVertex i 1 node:$
 			edgeVerts[2] = curSel.GetEdgeVertex i 2 node:$
 		)
 		edgeVerts
 	)
 	function GetEdgeLength curSel edgeIdx mode =
 	(
 		local vertPos = undefined
 		case mode of
 		(
 			1:
 			(
 				local edgeVerts = poGtEdgeVerts curSel edgeIdx
 				vertPos = for iVert in edgeVerts collect poGetVert curSel iVert						
 			)
 			2:
 			(
 				local edgeVerts = GetEdgeUsingVertsEPM curSel #(edgeIdx)
 				vertPos = for iVert in edgeVerts collect curSel.GetVertex iVert
 			)
 			3:
 			(
 				local edgeVerts = moGetVertsUsingEdge curSel edgeIdx
 				vertPos = for iVert in edgeVerts collect moGetVert curSel iVert 						
 			)
 		)		
 		distance vertPos[1] vertPos[2]
 	)
 	function GetEdgesLengthEP selEdges =
 	(
 		local curO = selection[1]		
 		edgeLengthArr = #()
 		local fullLength = 0
 		for i = 1 to selEdges.count do
 		(
 			curLength = GetEdgeLength curO selEdges[i] 1
 			fullLength += curLength
 			edgeVerts = poGtEdgeVerts curO selEdges[i]
 			append edgeLengthArr #(curLength,(VertSelMiddleCenter edgeVerts curO 0 1))
 		)
 		overAll = "Total length: "+(units.formatValue fullLength) as string
 	)
 	function GetEdgesLengthEPM curObj selEdges =
 	(
 		edgeLengthArr = #()	
 		local fullLength = 0
 		for i = 1 to selEdges.count do
 		(
 			edgeVerts = GetEdgeUsingVertsEPM curObj #(selEdges[i])
 			curLength = GetEdgeLength curObj selEdges[i] 2
 			fullLength += curLength
 			append edgeLengthArr #(curLength,(VertSelMiddleCenter edgeVerts curObj 0 2))
 		)
 		overAll = "Total length: "+(units.formatValue fullLength) as string
 	)
 	function GetEdgesLengthEM selEdges =
 	(
 		local curO = selection[1]		
 		edgeLengthArr = #()
 		local fullLength = 0
 		for i = 1 to selEdges.count do
 		(
 			edgeVerts = moGetVertsUsingEdge curO selEdges[i]
 			curLength = GetEdgeLength curO selEdges[i] 3
 			fullLength += curLength
 			append edgeLengthArr #(curLength,(VertSelMiddleCenter edgeVerts curO 0 3))
 		)	
 		overAll = "Total length: "+(units.formatValue fullLength) as string	
 	)
 	
 	function DrawTextOnViewports =
 	(
 		gw.setTransform(Matrix3 1)
 		
 		if edgeLengthArr.count < 10 do
 		(--	show the length/area only if the count of selected edges/segments/faces is less then 10
 			for i = 1 to edgeLengthArr.count do
 			(
 				posInScreen = gw.TransPoint edgeLengthArr[i][2]
 				if drawFaceArea then	--	show face area in only generic units
 					lengthTXT = (edgeLengthArr[i][1] as string)
 				else	--	show length in user defined units
 					lengthTXT = units.formatValue ((edgeLengthArr[i][1])as float) 	
 				gw.wText posInScreen lengthTXT color:textColor	
 			)			
 		)
 		--	draw the overall length/area in top left corner of the viewport
 		gw.wText [4,32,0] overAll color:textColor
 		--	draw objects length-width-height cage
 		if objLength != undefined and objHeight != undefined and objWidth != undefined do
 		(
 			for i = 1 to lineArr.count do
 			(
 				linePoints[1]= gw.wTransPoint lineArr[i][1]
 				linePoints[2]= gw.wTransPoint lineArr[i][2]
 				gw.setColor #line textColor
 				gw.wPolyline linePoints false
 				gw.wMarker linePoints[1] #plusSign color:[255,0,0]
 				gw.wMarker linePoints[2] #plusSign color:[255,0,0]
 			)
 		)
 		gw.enlargeUpdateRect #whole
 		gw.updateScreen()
 	)
 	registerRedrawViewsCallback DrawTextOnViewports
 	function StartDrawing =
 	(
 -- 		unRegisterRedrawViewsCallback DrawTextOnViewports
 -- 		registerRedrawViewsCallback DrawTextOnViewports
 		DrawTextOnViewports()
 		forceCompleteRedraw()
 	)
 		
 	
 	function GetObjDimension02 curObj getVertPos =
 	(
 		edgeLengthArr = #()
 		local theMaxX = -2147483648
 		local theMaxY = -2147483648
 		local theMaxZ = -2147483648
 		local theMinX = 2147483648
 		local theMinY = 2147483648
 		local theMinZ = 2147483648
 		
 		for v = 1 to curObj.numverts do
 		(
 			thePos = ( if (classOf curObj) == PolyMeshObject then (getVertPos v) else (getVertPos curObj v) )
 			if thePos.x > theMaxX then theMaxX = thePos.x			
 			if thePos.y > theMaxY then theMaxY = thePos.y		
 			if thePos.z > theMaxZ then theMaxZ = thePos.z
 			
 			if thePos.x < theMinX then theMinX = thePos.x			
 			if thePos.y < theMinY then theMinY = thePos.y		
 			if thePos.z < theMinZ then theMinZ = thePos.z
 		)
 		
 		theWidth = (theMaxX) - (theMinX)
 		theLength = (theMaxY) - (theMinY)
 		theHeight = (theMaxZ) - (theMinZ)
 		
 		backLeftTop = [theMinX, theMaxY, theMaxZ]
 		backLeftBottom = [theMinX, theMaxY, theMinZ]
 		frontLeftBottom = [theMinX, theMinY, theMinZ]				
 		backRightBottom = [theMaxX, theMaxY, theMinZ]
 		
 		objLength = distance backLeftBottom frontLeftBottom
 		objHeight = distance backLeftBottom backLeftTop
 		objWidth = distance backLeftBottom backRightBottom
 		
 		lineArr = #(#(backLeftBottom,frontLeftBottom),#(backLeftBottom,backLeftTop),#(backLeftBottom,backRightBottom))
 		edgeLengthArr = #(#(objLength,frontLeftBottom),#(objHeight,backLeftTop),#(objWidth,backRightBottom))
 		overAll = "Object dimension"
 		StartDrawing()
 	)	
 	function GetObjDimension01 =
 	(
 		local curObj = selection[1]
 		case (classOf curObj) of
 		(
 			Editable_Poly: (GetObjDimension02 curObj poGetVert)
 			Editable_Mesh: (GetObjDimension02 curObj moGetVert)
 			Edit_Poly: (GetObjDimension02 curObj (selection[1].modifiers[#Edit_Poly].GetVertex))
 			default:	--	for primitives
 			(
 				theMesh = snapshotasmesh curObj	
 				GetObjDimension02 theMesh getVert				
 				delete theMesh
 			)
 		)	
 	)
 	
 	function StartMainFN =
 	(
 		if selection.count == 1 do
 		(
 			if getCommandPanelTaskMode() == #modify do
 			(
 				if subobjectlevel == 2 or subobjectlevel == 3 do
 				(
 					drawFaceArea = false
 					ShowInViewport()
 				)
 				if subobjectlevel == 4 or subobjectlevel == 5 do
 				(
 					drawFaceArea = true
 					GetFaceArea()
 				)
 				if subobjectlevel == 0 do
 				(
 					drawFaceArea = false
 					GetObjDimension01()
 				)
 			)
 			if getCommandPanelTaskMode() == #create do
 			(
 				drawFaceArea = false
 				GetObjDimension01()
 			)
 		)
 	)	
 	
 	on isChecked return ::drawInViewportEnabled
 		
 	on execute do
 	(
 		if ::drawInViewportEnabled != true and ::drawInViewportEnabled != false do ::drawInViewportEnabled = false
 		::drawInViewportEnabled = not ::drawInViewportEnabled
 		if ::drawInViewportEnabled then
 		(
 			unRegisterRedrawViewsCallback DrawTextOnViewports
 			registerRedrawViewsCallback DrawTextOnViewports
 			StartMainFN()
 			forceCompleteRedraw()
 			if selection.count == 1 do
 			(
 				if (classOf (modPanel.getCurrentObject())) == Edit_Poly then
 				(
 					when select (modPanel.getCurrentObject()) changes id:#SubObj_selectionChange do
 					(
 						StartMainFN()
 					)
 					when geometry (modPanel.getCurrentObject()) changes id:#FaceScaleChange do
 					(
 						if subobjectlevel == 4 or subobjectlevel == 5 do
 						( 
 							local selFaces = (selection[1].modifiers[#Edit_Poly].getSelection #Face) as array
 							local faceArea = 0
 							edgeLengthArr = #()
 							for f in selFaces do
 							(
 								fa = selection[1].modifiers[#Edit_Poly].getFaceArea f
 								faceArea += fa
 								append edgeLengthArr #((fa),(selection[1].modifiers[#Edit_Poly].getFaceCenter f))
 							)
 							overAll = ("Total face area: "+(faceArea as string))
 						)
 						if subobjectlevel == 2 or subobjectlevel == 3 do
 						(
 							local vertEdges = (selection[1].modifiers[#Edit_Poly].getSelection #Edge) as array
 							GetEdgesLengthEPM (selection[1].modifiers[#Edit_Poly]) vertEdges
 						)
 						if subobjectlevel == 1 do
 						(
 							selection[1].modifiers[#Edit_Poly].ConvertSelection #Vertex #Edge					
 							local vertEdges = (selection[1].modifiers[#Edit_Poly].getSelection #Edge) as array
 							GetEdgesLengthEPM (selection[1].modifiers[#Edit_Poly]) vertEdges					
 						)
 					)
 				)
 				else
 				(
 					when select selection[1] changes id:#SubObj_SelectionChange do
 					(
 						StartMainFN()
 					)
 					when geometry selection[1] changes id:#FaceScaleChange do
 					(
 						curObj = selection[1]
 						if subobjectlevel == 4 or subobjectlevel == 5 do
 						( 
 							local curObj = selection[1]
 							case (classOf curObj) of
 							(
 								Editable_Poly:
 								(
 									local selFaces = poGetFaceSel curObj
 									local faceArea = 0
 									edgeLengthArr = #()
 									for f in selFaces do
 									(
 										fa = (poGetFaceArea curObj f)
 										faceArea += fa
 										append edgeLengthArr #((fa),(poGetFaceCenter curObj f))
 									)
 									overAll = ("Total face area: "+(faceArea as string))
 								)
 								Editable_Mesh:
 								(
 									local selFaces = meshGetFaceSel curObj
 									local faceArea = 0
 									edgeLengthArr = #()
 									for f in selFaces do
 									(
 										fa = (moGetFaceArea curObj f)
 										faceArea += fa
 										append edgeLengthArr #((fa),(moGetFaceCenter curObj f))
 									)
 									overAll = ("Total face area: "+(faceArea as string))
 								)
 								PolyMeshObject:
 								(
 									tmpMesh = snapShotAsMesh curObj
 									local selFaces = meshGetFaceSel tmpMesh
 									local faceArea = 0
 									edgeLengthArr = #()
 									for f in selFaces do
 									(
 										fa = (moGetFaceArea tmpMesh f)
 										faceArea += fa
 										append edgeLengthArr #((fa),(moGetFaceCenter tmpMesh f))
 									)
 									delete tmpMesh
 									overAll = ("Total face area: "+(faceArea as string))
 								)
 							)
 						)
 						if subobjectlevel == 2 or subobjectlevel == 3 do
 						(
 							local curObj = selection[1]
 							case (classOf curObj) of
 							(
 								Editable_Poly:
 								(
 									local selEdges = poGetEdgeSel curObj as array
 									GetEdgesLengthEP selEdges
 								)
 								Editable_Mesh:
 								(
 									local selEdges = for i in curObj.selectedEdges collect i.index
 									GetEdgesLengthEM selEdges
 								)
 								PolyMeshObject:
 								(
 									tmpMesh = snapShotAsMesh curObj
 									local selEdges = for i in tmpMesh.selectedEdges collect i.index
 									GetEdgesLengthEM selEdges
 									delete tmpMesh
 								)
 							)
 						)
 						if subobjectlevel == 1 do
 						(
 							case (classOf curObj) of
 							(
 								Editable_Poly:
 								(
 									local selVert = poGetVertSel curObj
 									local vertEdges = poGetEdgesUVert curObj selVert as array
 									GetEdgesLengthEP vertEdges
 								)
 		-- 						Editable_Mesh:	(--	not worked)						
 							)
 						)
 					)
 				)
 				
 				if classOf selection[1] == SplineShape or classOf selection[1] == Line do
 				(
 					when geometry selection[1] changes id:#SplineKnotMove do
 					(
 						if subobjectlevel == 1 do
 						(
 							local splineNum = numSplines selection[1]
 							local totalLenght = 0
 							edgeLengthArr = #()		
 							if splineNum != 0 then
 							(
 								for s=1 to splineNum do
 								(
 									selKnot = getKnotSelection selection[1] s
 									if selKnot.count == 1 then
 									(
 										local selSegm = undefined
 										case selKnot[1] of
 										(
 											1: (selSegm = #(1))	--	the first knot is selected work with first segment
 											(numKnots selection[1] s): (selSegm = #((numKnots selection[1] s)-1))	--	if the last knot is selected work with last segment
 											default: (selSegm = #((selKnot[1]-1),selKnot[1]))	--	otherwise work with the previous and the next segments
 										)							
 										for i in selSegm do
 										(
 											local lengthArray = #()
 											local segmentArray = #()
 											local segmentArray = getSegLengths selection[1] s
 											local segNum = numSegments selection[1] s
 											
 											for j = (segNum+1) to (segmentArray.count-1) do
 											(
 												append lengthArray segmentArray[j]
 											)								
 											curSegmLength = lengthArray[i]				
 											totalLenght += curSegmLength
 											local curSegmKnots = undefined
 											if (isClosed selection[1] s) == true then
 											(--	if spline is closed
 												if i == segNum then--	text in the center	  / 	text in second knot of segment
 													curSegmKnots = #(i,1)							--	#(1)
 												else
 													curSegmKnots = #(i,i+1)							--	#(i)
 											)
 											else
 												curSegmKnots = #(i,i+1)								--	#(i)
 											append edgeLengthArr #(curSegmLength,(VertSelMiddleCenter curSegmKnots selection[1] s 4))							
 										)
 										overAll = "Total length: "+(units.formatValue totalLenght) as string
 									)
 									else
 									(
 										messagebox "Only one vertex must be selected" title:"miauu Script Error!!!"
 									)
 								)
 							)
 							StartDrawing()
 						)
 						if subobjectlevel == 2 do
 						(
 							GetSegmentLength selection[1]
 						)
 					)
 				)
 				try(destroyDialog rol_TextColor)catch()
 				rollout rol_TextColor ""
 				(
 					ImgTag it_green bitmap:(bitmap 2 2 color:green) pos:[0,0]  width:10 height:10
 					ImgTag it_red bitmap:(bitmap 2 2 color:red) pos:[10,0]  width:10 height:10
 					ImgTag it_blue bitmap:(bitmap 2 2 color:blue) pos:[20,0]  width:10 height:10
 					ImgTag it_white bitmap:(bitmap 2 2 color:white) pos:[30,0]  width:10 height:10
 					on it_green lbuttondown do
 					(
 						textColor = green
 						StartDrawing()
 					)
 					on it_red lbuttondown do
 					(
 						textColor = red
 						StartDrawing()
 					)
 					on it_blue lbuttondown do
 					(
 						textColor = blue
 						StartDrawing()
 					)
 					on it_white lbuttondown do
 					(
 						textColor = white
 						StartDrawing()
 					)
 				)
 				createdialog rol_TextColor 40 10 8 135 style:#()
 			)
 		)
 		else
 		(
 			destroyDialog rol_TextColor
 			deleteAllChangeHandlers id:#SubObj_SelectionChange
 			deleteAllChangeHandlers id:#SplineKnotMove
 			deleteAllChangeHandlers id:#FaceScaleChange
 			ClearViewports()
 		)
 		forceCompleteRedraw()
 	)	
 )
 

yes, above script is livemeasure, but,now i want modify it to add arrow for line
who can help me,
I’m editing it but has finish yet

I am the author of the liveMeasure, so why you don’t ask me to add this arrows?

I’m really sorry miauu, i forgot you are the author of the liveMeasure,
can you help me, please ?

Go here and download version with arrows.
This version uses Cone primitives to represent the arrows, because drawing the arrows with gw methods is verry ugly. Try it

Thanks so much, miauu!
in Viet Nam i’m not found place to learning MaxScript, so my maxscript is very bad
I wish learning from you more,
Thanks !

Page 1 / 2