zoukankan      html  css  js  c++  java
  • 模型变形第一版 (创建参考面)。

    ----第一部就是在模型的左右上下建模面片
    ----如选择物体的前方创建面片,就是
    /*
     $.pivot.x=$.min.x+0.5*($.max.x-$.min.x);
    $.pivot.y=$.min.y+0.5*($.max.y-$.min.y);
     $.pivot.z=$.min.z+0.5*($.max.z-$.min.z)
     */
     ----用下面的方法来创建片的创建位置。
     /*
     CenterPivot $
    $.pivot.y=$.max.y+($.max.y-$.min.y)
    */
    ----用收集坐标的变量来进行收集活动。
    ----事件处理之后要的一个三维坐标。
    -----这个最好不要对组操作。

    -----y的正方向
    -----做好了函数要改,现在都是正方向,不是很对,
    -----我用鼠标创建了点 我只是想叫他在所在的轴向上向外移动出本身。
    function sel_pivot_axis axis_string  =
    (
     case of
     (
     (axis_string == "y+") :
      (
     --sel_pivot_y =$.pos

     sel_pivot_y=$.max.y+($.max.y-$.min.y)

     sel_pivot_y
     ----上面的方法是一个获得点坐标的方法,其实是从位置哪里找到数组。在自动修改。
      )
           
     ----y的负方向
         (axis_string == "y-") :
             (  
     --sel_pivot_y_ =$.pos
     sel_pivot_y_=$.min.y+($.min.y-$.max.y)
     sel_pivot_y_
       )
     ---- z 的正方向
          (axis_string =="z+"):
       (
     --sel_pivot_z= $.pos
     sel_pivot_z=$.max.z+($.max.z-$.min.z)
     sel_pivot_z
       )
     --------z负方向
        (axis_string =="z-"):
             (  
     --sel_pivot_z_= $.pos
     sel_pivot_z_= $.min.z+($.min.z-$.max.z)
     sel_pivot_z_
       )
     ----x 轴的正方向
      (axis_string=="x+"):
           (  
     --sel_pivot_x =$.pos
     sel_pivot_x=$.max.x+($.max.x-$.min.x)
     sel_pivot_x
        )
     ----x轴的负方向
        (axis_string=="x-"):
        (
     --sel_pivot_x_ =$.pos
     sel_pivot_x_=$.min.x+($.min.x-$.max.x)
     sel_pivot_x_
        )
     -----写完了想写成一个函数的形式,方便下来的调用,
       )----end case
     
     
    )---end fn (收集片的坐标。)

    ----函数sel_pivot_axis 是出来两倍的函数,这个函数以后用在创建面片上,
    -----我用鼠标创建了点 我只是想叫他在所在的轴向上向外移动出本身。

    function sel_pivot_axis_fold axis_string  =
    (
     case of
     (
     (axis_string == "y+") :
      (
     --sel_pivot_y =$.pos

     sel_pivot_y=$.max.y

     sel_pivot_y
     ----上面的方法是一个获得点坐标的方法,其实是从位置哪里找到数组。在自动修改。
      )
           
     ----y的负方向
         (axis_string == "y-") :
             (  
     --sel_pivot_y_ =$.pos
     sel_pivot_y_=$.min.y
     sel_pivot_y_
       )
     ---- z 的正方向
          (axis_string =="z+"):
       (
     --sel_pivot_z= $.pos
     sel_pivot_z=$.max.z
     sel_pivot_z
       )
     --------z负方向
        (axis_string =="z-"):
             (  
     --sel_pivot_z_= $.pos
     sel_pivot_z_= $.min.z
     sel_pivot_z_
       )
     ----x 轴的正方向
      (axis_string=="x+"):
           (  
     --sel_pivot_x =$.pos
     sel_pivot_x=$.max.x
     sel_pivot_x
        )
     ----x轴的负方向
        (axis_string=="x-"):
        (
     --sel_pivot_x_ =$.pos
     sel_pivot_x_=$.min.x
     sel_pivot_x_
        )
     -----写完了想写成一个函数的形式,方便下来的调用,
       )----end case
     
     
    )---end fn (收集片的坐标。)

    ----下面应该是鼠标工具函数,这个很重要,这里还不能纯粹的用鼠标工具
    ---要用到屏幕射线。

    --1.当我点击屏幕对应的射线。交到物体有一个坐标,然后收集 坐标数。把其中的一个数换成我上面轴的函数对应的数。
    --2.这样数字就会在一个平面上,利用平面数据,得出长宽,创建面片,转正mesh 显示所以线(应为三角具有稳定性。)

     --mouseray = mapScreenToWorldRay mouse.pos --这里应该是鼠标屏幕对应的射线
     --sectray = intersectRAY $ mouseray  --返回节点还是就是射线的焦点。)
    ---就是鼠标所指的 物体上的坐标,还有一条射线的方向。
    ---下面先创建一个鼠标工具,如果是需要什么函数,就在上面写啦。

    ---先写一个删除物体函数
    global gt_become_deformed_Align_bush_pos  ,gt_bush_pos_ray ,gt_become_deformed_Align_sphere_s,gt_become_deformed_Align_s2,gt_become_deformed_Align_sel_seltion
    fn deleting_marker_sp   =
     (
       try (
      if  isdeleted gt_become_deformed_Align_sphere_s == true or isdeleted gt_become_deformed_Align_s2 == true  then
      () else
      (
       delete gt_become_deformed_Align_sphere_s
       delete gt_become_deformed_Align_s2
      )
         ) catch () ---是为了还没有创建玩,我们只能删除一个的防止报错
     ) 


    fn mouse_tools_customize  axis_ leng_theg width_thge  =

     global gt_kooc_in_form  ---我用的函数内部传,全局
      global gt_count_zore =#()
      global gt_leng_theg=leng_theg ,gt_width_thge=width_thge
     
     
      gt_kooc_in_form = axis_
     tool drawing__   numPoints:3
     (
      on start do
      (
          ---提前创建球体。
             gt_become_deformed_Align_sphere_s =   sphere radius:2 segs:10  smooth:true colorBylayer:false wirecolor:red
       setSysCur #uscale 
      )---end start   
      ----- 当鼠标点击时,把 
     on mousepoint clickno do 
     (
       case clickno of
     (
       1:
      (
       local sectray
             mouseray = mapScreenToWorldRay mouse.pos
             try (sectray = intersectRAY $ mouseray)catch()
      if sectray==undefined then
      (  if  isdeleted gt_become_deformed_Align_sphere_s == false then
       delete gt_become_deformed_Align_sphere_s ---这里应该会是结束鼠标工具,但是又不能写因为 我要不断的点击尝试啊。
       --return false 
      )else
      (
       --- 在这里面球在创建活动,产看变量是否删除在 鼠标工具中用到了
       if  isdeleted gt_become_deformed_Align_sphere_s == true then
       (
       gt_become_deformed_Align_sphere_s =   sphere radius:2 segs:10  smooth:true colorBylayer:false wirecolor:red
       )
       --sel_pivot_axis_fold axis_string
       ---在用一个case
                    --  ray_ra= sectray.pos
        -- ray_ra[2]=sel_pivot_axis_fold  axis_string
         --sphere_s.pos =ray_ra
        
       case gt_kooc_in_form  of
       (
        ("y+"):
        (
         ray_ra= sectray.pos
         ray_ra[2]=sel_pivot_axis_fold "y+"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
        )----end ()
        ("y-"):
        (
         ray_ra= sectray.pos
         ray_ra[2]=sel_pivot_axis_fold "y-"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
        )----end ()
        ("z+"):
        (
         ray_ra= sectray.pos
         ray_ra[3]=sel_pivot_axis_fold "z+"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
        )----end ()
        ("z-"):
        (
         ray_ra= sectray.pos
         ray_ra[3]=sel_pivot_axis_fold "z-"
         gt_become_deformed_Align_sphere_s.pos =ray_ra

         
        )----end ()
        ("x+"):
        (
         ray_ra= sectray.pos
         ray_ra[1]=sel_pivot_axis_fold "x+"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
         
        )----end ()
        ("x-"):
        (
         ray_ra= sectray.pos
         ray_ra[1]=sel_pivot_axis_fold "x-"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
        )----end ()
        
        default:()


       )---end case
       
       
      )
      ---因为鼠标工具在点击时每次都是2次 好像是第一个还是3次 所以这里面加入了强有利的报错机制。
      ---实现了点的坐标。
     )---end()
        2:()
      3:
      (
       gt_become_deformed_Align_sel_seltion = $  ---选择的物体做积累
       clearSelection() ----清除
       select gt_become_deformed_Align_sphere_s   ---选择我之前的球 
      -- maxOps.cloneNodes $ cloneType:#copy newnodes:&s2  ---做一个拷贝 这样出来是个数组
       gt_become_deformed_Align_s2 =copy $
       gt_become_deformed_Align_s2.wirecolor=red
       clearSelection()    --在清除
       select gt_become_deformed_Align_sel_seltion  ---在选择回之前选择的物体
       
             mouseray = mapScreenToWorldRay mouse.pos
             try (sectray_y = intersectRAY $ mouseray)catch()
       
           --  s2.pos=sectray_y.pos
       --sel_pivot_axis_fold axis_string
       ---在用一个case
                    --  ray_ra= sectray.pos
        -- ray_ra[2]=sel_pivot_axis_fold  axis_string
         --sphere_s.pos =ray_ra
        
       case gt_kooc_in_form  of
       (
        ("y+"):
        (
         ray_ra= sectray_y.pos
         ray_ra[2]=sel_pivot_axis_fold "y+"
         gt_become_deformed_Align_s2.pos =ray_ra
         
        )----end ()
        ("y-"):
        (
         ray_ra= sectray_y.pos
         ray_ra[2]=sel_pivot_axis_fold "y-"
         gt_become_deformed_Align_s2.pos =ray_ra
         
        )----end ()
        ("z+"):
        (
         ray_ra= sectray_y.pos
         ray_ra[3]=sel_pivot_axis_fold "z+"
         gt_become_deformed_Align_s2.pos =ray_ra
         
        )----end ()
        ("z-"):
        (
         ray_ra= sectray_y.pos
         ray_ra[3]=sel_pivot_axis_fold "z-"
         gt_become_deformed_Align_s2.pos =ray_ra

         
        )----end ()
        ("x+"):
        (
         ray_ra= sectray_y.pos
         ray_ra[1]=sel_pivot_axis_fold "x+"
         gt_become_deformed_Align_s2.pos =ray_ra
         
         
        )----end ()
        ("x-"):
        (
         ray_ra= sectray_y.pos
         ray_ra[1]=sel_pivot_axis_fold "x-"
         gt_become_deformed_Align_s2.pos =ray_ra
         
        )----end ()
        
        default:()


       )---end case
       
       
      
      ---因为鼠标工具在点击时每次都是2次 好像是第一个还是3次 所以这里面加入了强有利的报错机制。
      ---实现了点的坐标。

      )
      ---想到这里我又感觉我上面的方向有点少,效果不是很理想。
      ---现在想想应该还好。我只是在每个轴上自己选择一下。
     )---end case

     )---叫创建的球到物体的外形的box上,这个也是我干干想的,  
     
     on mouseMove  a do
     (  ---1.当我自由移动时,标记自由的跟随。
      ---思路临时错误
      --2.单我点击第一下是(按下时创建第一个球体)
      --3.然后自由一定距离。我抬起鼠标在次创建,
      --4.然后是取消创建,完成相应的操作。


      /* 这个是错了的思想
      --做到现在要是出现想要的效果还是有些困难,原因是自己的思路考虑有点不对头。
      if ctrlKey==true then
      (
       while gt_bush_count ==1 do
       (
       
      sel_seltion = $  ---选择的物体做积累
      clearSelection() ----清除
       select sphere_s   ---选择我之前的球 
      maxOps.cloneNodes $ cloneType:#copy newnodes:&s2  ---做一个拷贝
      clearSelection()    --在清除
      select sel_seltion  ---在选择回之前选择的物体
       append gt_array_con_yu  s2 
       
      
             mouseray = mapScreenToWorldRay mouse.pos  
             try (sectray = intersectRAY $ mouseray)catch()  ---鼠标取焦点,
      if sectray==undefined then
      (  if  isdeleted s2 == false then
       delete s2 ---这里应该会是结束鼠标工具,但是又不能写因为 我要不断的点击尝试啊。
       --return false 
      )else
      (
       if s2!=undefined then
       (
       if  isdeleted s2 == true or  isdeleted s2 == ok  then
       (
         s2 =   sphere radius:10 segs:10  smooth:true colorBylayer:false wirecolor:red
       )----如果s2删掉了 在重新建立s2
       ray_ra= sectray.pos
       s2.pos =ray_ra
          )
      )
       if gt_array_con_yu.count>1 then
       (
        gt_bush_count=2
       )---end if (控制循环)
      
      
       )---end while
     )---end if ctrlkey
      */
      
     )---end mouseMove

     ----单自由移动估计要该一会 因为他设计到点击一次自由移动 还是点击多次自由移动,还是就是上来就自由移动
     on freeMove do
     (
      ---我想我自由移动是要一定复制的那个,如果移动第一个,我顶上的点就有了问题,所以这个很重要。
      
             mouseray = mapScreenToWorldRay mouse.pos
             try (sectray = intersectRAY $ mouseray)catch()
      if sectray==undefined then
      (  if  isdeleted gt_become_deformed_Align_sphere_s == false then
       delete gt_become_deformed_Align_sphere_s ---这里应该会是结束鼠标工具,但是又不能写因为 我要不断的点击尝试啊。
       --return false 
      )else
      (
       --- 在这里面球在创建活动,产看变量是否删除在 鼠标工具中用到了
       if  isdeleted gt_become_deformed_Align_sphere_s == true then
       (
       gt_become_deformed_Align_sphere_s =   sphere radius:2 segs:10  smooth:true colorBylayer:false wirecolor:red
       )
       --sel_pivot_axis_fold axis_string
       ---在用一个case
                    --  ray_ra= sectray.pos
        -- ray_ra[2]=sel_pivot_axis_fold  axis_string
         --sphere_s.pos =ray_ra
        
       case gt_kooc_in_form  of
       (
        ("y+"):
        (
         ray_ra= sectray.pos
         ray_ra[2]=sel_pivot_axis_fold "y+"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
        )----end ()
        ("y-"):
        (
         ray_ra= sectray.pos
         ray_ra[2]=sel_pivot_axis_fold "y-"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
        )----end ()
        ("z+"):
        (
         ray_ra= sectray.pos
         ray_ra[3]=sel_pivot_axis_fold "z+"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
        )----end ()
        ("z-"):
        (
         ray_ra= sectray.pos
         ray_ra[3]=sel_pivot_axis_fold "z-"
         gt_become_deformed_Align_sphere_s.pos =ray_ra

         
        )----end ()
        ("x+"):
        (
         ray_ra= sectray.pos
         ray_ra[1]=sel_pivot_axis_fold "x+"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
         
        )----end ()
        ("x-"):
        (
         ray_ra= sectray.pos
         ray_ra[1]=sel_pivot_axis_fold "x-"
         gt_become_deformed_Align_sphere_s.pos =ray_ra
         
        )----end ()
        
        default:()


       )---end case
       
       
      )
      ---因为鼠标工具在点击时每次都是2次 好像是第一个还是3次 所以这里面加入了强有利的报错机制。
      ---实现了点的坐标。
      
     )---end FreeMove
       on  mouseAbort clickno do ---右键中断
       (
        deleting_marker_sp() 
       )

        on abort do
     (
      
     deleting_marker_sp() 
     )
        on stop do ---单鼠标次数执行玩后
     (-----这里做我要做的事件。
        ---- 1.收集两个坐标的坐标
     -----2. gt_kooc_in_form 等于不同的轴,画出不同的形状。
     -----3. 在坐标上使用2倍的坐标。 
     -----4. 最后删除完成创建。
      try (
            try ( select gt_become_deformed_Align_sphere_s )catch ()
      selectMore gt_become_deformed_Align_s2
        greate_plane_center  = selection.center --- 面的坐标
        greate_plane_one =gt_become_deformed_Align_sphere_s.pos 
        greate_plane_two =gt_become_deformed_Align_s2.pos
      
     ----选择不同的平面创建 
     --  fn plane_p = ( Plane length:211.796 406.306 pos:greate_plane_center )
      case  gt_kooc_in_form of
      (
       ("y+"):
       ( ---球长宽 做位置,在旋转就好。
        wid= abs (amax greate_plane_one[1] greate_plane_two[1])-(amin greate_plane_one[1] greate_plane_two[1])
        leng= abs (amax greate_plane_one[3] greate_plane_two[3])-(amin greate_plane_one[3] greate_plane_two[3])
        clearSelection()
        select gt_become_deformed_Align_sel_seltion ---- 选择原物体
        greate_plane_center.y =sel_pivot_axis "y+"
        plane_p = Plane length:leng  wid pos:greate_plane_center
        plane_p.lengthsegs = gt_leng_theg 
        plane_p.widthsegs  = gt_width_thge
        plane_p.rotation.controller[1].value=-90
        ---这里转成mesh ,我想了下这里不进行转接了。针对后面的操作我在进行转换。
        ---坐标最好用两倍的操作。

        deleting_marker_sp() 
        
       )---end()
       
       ("y-"):
       (
        wid= abs (amax greate_plane_one[1] greate_plane_two[1])-(amin greate_plane_one[1] greate_plane_two[1])
        leng= abs (amax greate_plane_one[3] greate_plane_two[3])-(amin greate_plane_one[3] greate_plane_two[3])
        clearSelection()
        select gt_become_deformed_Align_sel_seltion ---- 选择原物体
        greate_plane_center.y =sel_pivot_axis "y-"
        plane_p = Plane length:leng  wid pos:greate_plane_center
        plane_p.lengthsegs= gt_leng_theg 
        plane_p.widthsegs= gt_width_thge
        plane_p.rotation.controller[1].value=90
        ---这里转成mesh ,我想了下这里不进行转接了。针对后面的操作我在进行转换。
        ---坐标最好用两倍的操作。

        deleting_marker_sp() 
        
        
       )---end()
       ("z+"):
       (
        wid= abs (amax greate_plane_one[1] greate_plane_two[1])-(amin greate_plane_one[1] greate_plane_two[1])
        leng= abs (amax greate_plane_one[2] greate_plane_two[2])-(amin greate_plane_one[2] greate_plane_two[2])
        clearSelection()
        select gt_become_deformed_Align_sel_seltion ---- 选择原物体
        greate_plane_center.z =sel_pivot_axis "z+"
        plane_p = Plane length:leng  wid pos:greate_plane_center
        plane_p.lengthsegs= gt_leng_theg 
        plane_p.widthsegs= gt_width_thge
        plane_p.rotation.controller[1].value=0
        ---这里转成mesh ,我想了下这里不进行转接了。针对后面的操作我在进行转换。
        ---坐标最好用两倍的操作。

        deleting_marker_sp() 
        
       )---end()
       
       ("z-"):
       (
        wid= abs (amax greate_plane_one[1] greate_plane_two[1])-(amin greate_plane_one[1] greate_plane_two[1])
        leng= abs (amax greate_plane_one[2] greate_plane_two[2])-(amin greate_plane_one[2] greate_plane_two[2])
        clearSelection()
        select gt_become_deformed_Align_sel_seltion ---- 选择原物体
        greate_plane_center.z =sel_pivot_axis "z-"
        plane_p = Plane length:leng  wid pos:greate_plane_center
        plane_p.lengthsegs= gt_leng_theg 
        plane_p.widthsegs= gt_width_thge
        plane_p.rotation.controller[1].value=180
        ---这里转成mesh ,我想了下这里不进行转接了。针对后面的操作我在进行转换。
        ---坐标最好用两倍的操作。

        deleting_marker_sp()
        
       )---end()
       
       ("x+"):
       (
        wid= abs (amax greate_plane_one[2] greate_plane_two[2])-(amin greate_plane_one[2] greate_plane_two[2])
        leng= abs (amax greate_plane_one[3] greate_plane_two[3])-(amin greate_plane_one[3] greate_plane_two[3])
        clearSelection()
        select gt_become_deformed_Align_sel_seltion ---- 选择原物体
        greate_plane_center.x =sel_pivot_axis "x+"
        plane_p = Plane length:leng  wid pos:greate_plane_center
        plane_p.lengthsegs= gt_leng_theg 
        plane_p.widthsegs= gt_width_thge
        plane_p.rotation.controller[3].value=90
        plane_p.rotation.controller[1].value=90
        ---这里转成mesh ,我想了下这里不进行转接了。针对后面的操作我在进行转换。
        ---坐标最好用两倍的操作。

        deleting_marker_sp()
        
       )---end()
       
       ("x-"):
       (
        wid= abs (amax greate_plane_one[2] greate_plane_two[2])-(amin greate_plane_one[2] greate_plane_two[2])
        leng= abs (amax greate_plane_one[3] greate_plane_two[3])-(amin greate_plane_one[3] greate_plane_two[3])
        clearSelection()
        select gt_become_deformed_Align_sel_seltion ---- 选择原物体
        greate_plane_center.x =sel_pivot_axis "x-"
        plane_p = Plane length:leng  wid pos:greate_plane_center
        plane_p.lengthsegs= gt_leng_theg 
        plane_p.widthsegs= gt_width_thge
        plane_p.rotation.controller[3].value=90
        plane_p.rotation.controller[1].value=-90
        ---这里转成mesh ,我想了下这里不进行转接了。针对后面的操作我在进行转换。
        ---坐标最好用两倍的操作。

        deleting_marker_sp()
        
       )---end()
       
      )---end case
      
     )catch (deleting_marker_sp())--- 为了在还没有创建完成就提前结束,的措施
      
      
     
     )
      
     )
     ---下面是开始工具
     starttool drawing__
     
    )----end mouse_tools_customize

  • 相关阅读:
    WCF 第八章 安全 确定替代身份(中)使用AzMan认证
    WCF 第八章 安全 总结
    WCF 第八章 安全 因特网上的安全服务(下) 其他认证模式
    WCF Membership Provider
    WCF 第八章 安全 确定替代身份(下)模仿用户
    WCF 第八章 安全 因特网上的安全服务(上)
    WCF 第九章 诊断
    HTTPS的七个误解(转载)
    WCF 第八章 安全 日志和审计
    基于比较的排序算法集
  • 原文地址:https://www.cnblogs.com/gaitian00/p/2039044.html
Copyright © 2011-2022 走看看