由程序改写的对齐资料。还是资料不完善

fn g_filter o = superclassof o == Geometryclass
fn find_intersection z_node node_to_z =
(
 --同样的条件 数字及计算要比字符串快 所以能用数字 不用字符串。
 
oop=case of

  (

  (gt_yc_Ail.conunt_spn1.value ==1): [0,0,-1]

  (gt_yc_Ail.conunt_spn1.value ==2): [0,0,1]
   
  (gt_yc_Ail.conunt_spn1.value ==3):[-1,0,0]
   
  (gt_yc_Ail.conunt_spn1.value ==4):[1,0,0]
   
  (gt_yc_Ail.conunt_spn1.value ==5):[0,-1,0]
   
  (gt_yc_Ail.conunt_spn1.value ==6):[0,1,0]

  --default: reference $foo
  )

 local testRay = ray node_to_z.pos  oop
 local nodeMaxZ
  case oop  of
  (  ------Z 轴
   ([0,0,-1]) :(nodeMaxZ = z_node.max.z
    testRay.pos.z = nodeMaxZ + 0.0001 * abs nodeMaxZ
    
    )
   ([0,0,1]) :(nodeMaxZ = z_node.min.z
    testRay.pos.z = nodeMaxZ - 0.0001 * abs nodeMaxZ  
   )
   -------X轴 
   ([-1,0,0]) : (nodeMaxZ = z_node.max.x
    testRay.pos.x = nodeMaxZ + 0.0001 * abs nodeMaxZ   
   )
   ([1,0,0]) : (nodeMaxZ = z_node.min.x
   testRay.pos.x = nodeMaxZ - 0.0001 * abs nodeMaxZ   
   )
  ------- Y轴
         ([0,-1,0]) : (nodeMaxZ = z_node.max.y
   testRay.pos.y = nodeMaxZ + 0.0001 * abs nodeMaxZ   
   )
   ([0,1,0]) : (nodeMaxZ = z_node.min.y
   testRay.pos.y = nodeMaxZ - 0.0001 * abs nodeMaxZ   
   )
   
   
  )  
 
 --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

原文地址:https://www.cnblogs.com/gaitian00/p/2015933.html