csWorkPlane v1.52 - Align Workplane to FaceSelection

This script only works on Mesh Faces. How to add Poly Faces? Unfortunately, I don’t know coding, I will be grateful if you could help me. Thank you!

macroScript AlignWorkplaneToFaceSelection category:"csTools" tooltip:"AlignWorkplaneToFaceSelection"
(
macros.run "csTools" "RemoveWorkPlane"
fn placeGridOnSelectedFace = (
	local o = selection[1]
	local omesh = o.mesh
	local totalPos = [0,0,0]
	local totalNormal = [0,0,0]
 
	local selFaces = omesh.selectedFaces
	if selFaces.count > 0 then (
		for fc in selFaces do (
			totalPos = totalPos + (meshop.getFaceCenter omesh fc.index)
			totalNormal = totalNormal + (meshop.getFaceRNormals omesh fc.index)[1]		
		)
		local center = totalPos/selFaces.count		
		local normal = totalNormal/selFaces.count
 
		local selVerts = ((meshop.GetVertsUsingFace omesh selFaces) as array)
 
		local firstEdge = normalize((meshop.getVert omesh selVerts[2])  - (meshop.getVert omesh selVerts[1]))
		local xaxis = cross normal firstEdge
		local yaxis = cross  normal xaxis
		local gridTm = (matrix3 (normalize xaxis)  (normalize yaxis) normal center)
		local worldTM = gridTm*o.transform
 
		global workplane = (grid name:"workPlane" grid:10.0)
		format "-- Genrating WorkPlane.\n"	
 
		workplane.width = workplane.length = (distance o.min o.max)
		workplane.transform = worldTM
		local tmpSelection = (selection as array)
		select workplane
		max activate grid object
		select tmpSelection
		toolmode.commandmode = #ROTATE 
		toolMode.coordsys #grid			
		toolmode.commandmode = #USCALE
		toolMode.coordsys #grid		
		toolmode.commandmode = #MOVE 
		toolMode.coordsys #grid				
	)
	else(
		messagebox "Select face(s) on an object"
	)
)
if selection.count == 1 and (canConvertTo selection[1] editable_mesh) == true then (
	placeGridOnSelectedFace() 
)
else(
	messagebox "Select a Face on a Mesh"
)
)

I think should change these pieces to “Poly.” but … not working polyOp/opoly

local omesh = o.mesh
omesh.selectedFaces
(meshop.getFaceCenter omesh fc.index)
(meshop.getFaceRNormals omesh fc.index)[1]
((meshop.GetVertsUsingFace omesh selFaces) as array)
normalize((meshop.getVert omesh selVerts[2]) - (meshop.getVert omesh selVerts[1]))
(canConvertTo selection[1] editable_mesh)

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
miauu's picture

.

Paid script that works with Poly and Mesh objects:miauu's Work Plane.

yanakey's picture

It does work with polys

It does work with polys, no need to change anything in the script.
But sometimes script throws an exception, not sure why...
As a workaround I just detach problematic polygon(s), align grid and attach them back.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.