Notifications
Clear all

[Closed] Getting the angle of two attached faces

Hello everyone.
I am working on a script that will select the edges of a mesh whose attached faces fall below a certain angle threshold. If the two faces are say, less than 10 degrees in their hinge angle, the edge will be selected.

The problem I am having is getting the angle between two faces attached to a common edge.

Heres an excerpt of the script:

////////////////////////////////////////////////
local edge_selection = #{}
local base_obj = $.baseobject
local num_edges = polyop.getNumEdges base_obj

for f = 1 to num_edges do
(
local edge_faces = polyop.getEdgeFaces base_obj f
local faces_angle = polyop.getFacesAngle edge_faces
if faces_angle < 10 do edge_selection[f] = true
)
///////////////////////////////////////////////

Of course, there is no “polyop.getFacesAngle”, that returns the angle between two faces, but this illustrates what I am trying to do.

So how can I do this? Any Ideas are appreciated!

Thanks!

2 Replies

Get the normal for each face and compare the angle between them. If you run into trouble with that I can help, but I’m all out of time for an example right now.

RH

Thank you so much! Ok heres the whole thing, seems to work!

////////////////////////////////////////////
macroscript Select_Low_Angle_Edges

(
on isEnabled return
(
selection.count == 1 and classOf selection[1].baseobject == Editable_Poly
)
on execute do
(
local edge_selection = #{}
local base_obj = $.baseobject
local num_edges = polyop.getNumEdges base_obj
local edge_faces = #() – array to hold selected edge faces

for f = 1 to num_edges do 
( 
  edge_faces = polyop.getEdgeFaces base_obj f 
  local face_angle1 = polyop.getFaceNormal base_obj edge_faces[1]
  local face_angle2 = polyop.getFaceNormal base_obj edge_faces[2]
  local faces_angle_diff = (acos (dot face_angle1 face_angle2))
  if faces_angle_diff &lt; 5 do edge_selection[f] = true 
)

polyop.setEdgeSelection base_obj edge_selection 
max modify mode 
modPanel.setCurrentObject base_obj 
subobjectlevel = 2 

)
)
////////////////////////////////////////////

Thanks!