zoukankan      html  css  js  c++  java
  • 这个工具首先是对uv进行操作的。首先是要 hold 住在进行操作。

    --******************************************************************************************************
    -- Created:   05-05-2011
    -- Last Updated: 05-05-2011
    -- Version:   1.0
    --
    -- Author :  Kostadin Kotev / miau_u@yahoo.com /
    -- Version:  3ds max 2009 (should work in older versions too!)
    --
    -- Discription:
    --   Randomly rotate the selected UV islands.
    -- 
    -- Usage:
    --  UVW_Unwrap modifier must be applyed to object and the "Edit UVWs" rollout must be open.
    --  Select some UV islands or select some verts,edges or faces of each UV islands and press the "Hold Selection" button.
    --  Press the "Random Rotate" button several times.
    --
    --******************************************************************************************************
    -- MODIFY THIS AT YOUR OWN RISK
    /*
    macroscript UVRandomRotate_v1
    category:"miauu"
    tooltip:"UV Random Rotate v1.0"
    buttonText:"UV Random Rotate"
    */
    ---2011.9.02 盖天解释
    --这个工具首先是对uv进行操作的。首先是要 hold 住在进行操作。
    --这个好。
    --通过使用和粗看我觉得是 随即的旋转uv 并且 hold 是旋转部分见整体。
    --我现在觉得思路是记录所有点的位置, 加上移动位置 在设定旋转后的位置,
    --2011.9.10 延迟了8 天进行操作。

    (
     global rol_UVRandomRotate
     try(destroyDialog rol_UVRandomRotate)catch()
     rollout rol_UVRandomRotate "UV Rotate"
     (
      local uvIslands = #()
      local uv = undefined
      local subObjLevel = undefined
      
      checkbutton chkbtn_holdSelection "Hold Selection"
      button btn_rotateRandom "Random Rotate"
      
      function RandomRotateInVertSOL =  ---这个函数就是把部分因素转到全部因素进行处理,--这个函数是对于点的操作,这个很好 有用。
      (
       -- get all selected vertices
       allVerts = uv.getSelectedVertices() ---收积选择的点
       if not allVerts.isEmpty then ---not allVerts.isEmpty  判断他是否有效的 我一搬都是转数组。
       (
        -- find and separate selected elements
        while not allVerts.isEmpty do --这里真由必要吗、?
        (    
         -- set the first vertex as selected
         uv.selectVertices #{(allVerts as array)[1]}
         -- select the element of that vertex
         uv.SelectElement()-----选择因素的函数。
         -- select all vertices of this element
         elem01verts = uv.getSelectedVertices()
         append uvIslands elem01verts ------------在一次收集选择的加入到数组。是把整个点的位组加入到了数组, 好在下面引用。
         -- remove this vertices from original selection
         allVerts = allVerts-elem01verts ---然后又清空了 难道这个能释放内存,不是max 自己收集吗,我从来没有注意过这个。
        )
       )
       else
       (
        messagebox "Select some UV islands!" title:"miauu Script Error!!!"
        chkbtn_holdSelection.state = false
       )
      )
      
      --下面的操作和上面是一样的,也可以放到一个函数中进行判断。
      
      function RandomRotateInEdgeSOL =
      (
       allEdges = uv.getSelectedEdges()
       if not allEdges.isEmpty then
       (
        while not allEdges.isEmpty do
        (
         uv.selectEdges #{(allEdges as array)[1]}
         uv.SelectElement()
         elem01verts = uv.getSelectedEdges()
         append uvIslands elem01verts  --------设计方法是用一个数字 加入三个位 我一般都是用3 个数组 分别操作 这个办法很好。
         allEdges = allEdges-elem01verts
        )
       )
       else
       (
        messagebox "Select some UV islands!" title:"miauu Script Error!!!"
        chkbtn_holdSelection.state = false
       )
      )
      function RandomRotateInFaceSOL =
      (
       allFaces = uv.getSelectedFaces()
       if not allFaces.isEmpty then
       (
        while not allFaces.isEmpty do
        (
         uv.selectFaces #{(allFaces as array)[1]}
         uv.SelectElement()
         elem01faces = uv.getSelectedFaces()
         append uvIslands elem01faces
         allFaces = allFaces-elem01faces
        )
       )
       else
       (
        messagebox "Select some UV islands!" title:"miauu Script Error!!!"
        chkbtn_holdSelection.state = false
       )
      )
       
      on chkbtn_holdSelection changed theState do  ---这个可以在123 层级进行活动
      (
       if theState then
       (
        uv = modpanel.getcurrentobject() ---确定当前选择的层级,这个很重要,在skin插件中就是用这个做判断。
        if classof (uv) == Unwrap_UVW then
        (
         uvIslands = #()
         case uv.getTVsubobjectMode() of --uv.getTVsubobjectMode() 判断uv使用的层级,通过这个确定使用不同的方法。
         (
          1: (RandomRotateInVertSOL(); subObjLevel = 1) --subObjLevel 这里是一个全局变量 这里要往外输出信息。
          2: (RandomRotateInEdgeSOL(); subObjLevel = 2)
          3: (RandomRotateInFaceSOL(); subObjLevel = 3)
         )     
        )
        else
        (
         --没有选择层级的用法,这个应该是很重要。
         messagebox "Open the \"Edit UVWs\" window!" title:"miauu Script Error!!!"
         chkbtn_holdSelection.state = false
        )
       )
       else
       (
        uvIslands = #()
       )
      )
      
      on btn_rotateRandom pressed do
      ( 
       case subObjLevel of ---subObjLevel 这个就是上面输出的单位里,这个就是决定是边的操作 线的操作 还是面的操作/
       (
        1:
        (
         for i=1 to uvIslands.count do ---我觉得这里设计不是很合理。
         (
          uv.selectVertices uvIslands[i] --其实想想也合理; 如果点边都有选择 那么这里就是我在那个层级选择哪一个了
          uv.rotateSelectedCenter (random -3.14159 3.14159)
          --<void><Unwrap_UVW>.moveSelected <point3>offset
          --<void><Unwrap_UVW>.rotateSelected <float>angle <point3>axis
          --上面都有他的语法。
          -- 这样就到到了操作/
         )
        )
        2:
        (
         for i=1 to uvIslands.count do
         (
          uv.selectEdges uvIslands[i]
          uv.rotateSelectedCenter (random -3.14159 3.14159)
         )
        )
        3:
        (
         for i=1 to uvIslands.count do
         (
          uv.selectFaces uvIslands[i]
          uv.rotateSelectedCenter (random -3.14159 3.14159)
         )
        )
       )   
      )
     )
     createdialog rol_UVRandomRotate 84 54 style:#(#style_titlebar, #style_sysmenu,#style_toolwindow)
    )

  • 相关阅读:
    vue路由学习
    vue组件学习
    Vue常用特性
    Vue入门常用指令
    ES6新增语法
    如何搭建一个vue项目(完整步骤)
    OA办公系统
    java有序数组的有序交集
    javascript输出数据到文件
    node js 实现文件上传与反显
  • 原文地址:https://www.cnblogs.com/gaitian00/p/2173015.html
Copyright © 2011-2022 走看看