• 选择因素随机的判断。


    -----还有一个就是随机的选择面熟
    ----这个思路相对明确一些,判断是不是 poly mrsh 到面层级
    ---2. 收集所有面的数组。这里有两种情况
     ---3我要随机的选择100 个面,还有就是我要递增的选择100 个面。
     ---我是这样随即。random 1 到面熟。 选择多少个进行多少次,加到数组
     ----并且我们还不能叫数组有重复的。就好了。
     ---在下面由一个“变体”的功能,其实不错。我是这样考虑的。
     ---1.知道poly的因素数,判断面数所在因素数,这样在选择相应的因素数, 这里面可能有多面在通一个因素上
     ---2.这样这时要叫因素具有唯一性就好。
    --下面开始写随即函数。
    --非常重要的一点。随即函数 在在poly层进行。并且是在基层处理。在这个基层之上
    -- 随机的  点  线  面   。 就是说  如果我预先选择了  点 线 面 就是在选择的基层上进行随机的处理,如果没有就是全局的处理。
    -- 其实还有一点就是因素的随机。这个在后来也是很重要的。这个要记住。
    --在选择里我加入10 % 处理,但是一定到时候要转整数。因为边面点,不存在. 几的问题。
     fn poly_random_type  input_poly  type  count_t  percentage = --函数是 随机选择因素的。type 是因素的种类 (暂时不考虑因素的最后一个)
      --count_t 按数量 percentage 按百分比。 input_poly 输入者
     (
        case of ---这个是我的手动的处理。所以这里面我只列举3 中情况进行处理。
      (

      (type == "vertex"): (
       
       local  vertes_count__ =#()
       ------这里面由两种选择,数量的选择 ,还有就是 % 的选择,到最后我倒ui中要最一个事件
       ----当count_t percentage 同时不为零,报错机制触发,当 count_t ==0 那么 percentage==10 当percentage ==0 那么count_t ==1
       ----选择好选择类型在,处理,我是当前选择了。还是没有选择,进行处理。
       ---先做数量的选择
       if  percentage ==0 and count_t ==0 then return false
       if  percentage !=0 and count_t !=0 then return false  ---这样的报错机制就好了。
        
        if percentage ==0 and count_t !=0 then -----拾取个数的情况。
        (
          local Back_Verts_array
        ---查看当前选择的点,分两种情况进行。数组为空与不为空,分为全局与局部的关系。
         total_Verts_array = polyop.getNumVerts input_poly
         ---全局顶点数,和当前选择的数组。
         if count_t >total_Verts_array then count_t =total_Verts_array ------保证输入的个数不超标
          Back_Verts_array = polyop.getVertSelection  input_poly
                        
         if (Back_Verts_array as array) .count ==0 then --- 全局选择
         (
          for i in 1 to count_t do
          (
           ---这里要加入数组唯一化机制
           random_count=  random 1 total_Verts_array
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
         
         
         )---end back
          if( Back_Verts_array as array) .count !=0 then --- 全局选择
         (
          Back_Verts_array=(Back_Verts_array as array) --这中方式其实就是临时的被改。
         
          if count_t > Back_Verts_array.count then count_t =Back_Verts_array.count  ------保证输入的个数不超标
          for i in 1 to count_t do --同是给输入的数量一个定义
          (
           random_count=   Back_Verts_array [ (random 1 Back_Verts_array.count )]----局部内的点数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
     
          )---end for  i in 1 to count_t ..
     
         )----end if BACK

        
        )---end if percenntage
        if percentage !=0 and count_t ==0 then  ----%比的情况,这个很好。
        (
         ---% 情况其实可以和之前的一模一样,也是吧% 的数组线算出来。
         local Back_Verts_array ,total_Verts_array
        ---查看当前选择的点,分两种情况进行。数组为空与不为空,分为全局与局部的关系。
         total_Verts_array = polyop.getNumVerts input_poly
         ---全局顶点数,和当前选择的数组。
         /*
           percentage_count=  total_Verts_array *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >total_Verts_array then percentage_count =total_Verts_array ------保证输入的个数不超标
          */
          Back_Verts_array = polyop.getVertSelection  input_poly
                        
         if (Back_Verts_array as array) .count ==0 then --- 全局选择
         ( 
          percentage_count=  total_Verts_array *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >total_Verts_array then percentage_count =total_Verts_array ------保证输入的个数不超标
         
          local true_tt =true
           while ( true_tt)do
          (
          --for i in 1 to total_Verts_array do --因为我在上面进行了数量的把控 所以这里面是在真个中循环
         ---我明白了这里就不用加循环了。 while本身就是循环 所以这里就这样就慢死了 
         
          (
           ---这里要加入数组唯一化机制
           random_count=  random 1 total_Verts_array
           ---这里面我要说下,因为是100 % 但是由于随机 经常取一样的值。就是100% 的点中 在跑去相同,所以会出现 不满的情况。
           --我应该最死循环, 知道数组中的数量 符合他的 % 分数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
          if (vertes_count__.count ==percentage_count ) then
          (
           true_tt=false
          )
         
            )---end while
         )---end back
         -----------------------2011.4.22 过了一天接着写
         if (Back_Verts_array as array) .count !=0 then --- 全局选择
         (
          percentage_count=  ((Back_Verts_array as array) .count) *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >((Back_Verts_array as array) .count) then percentage_count =((Back_Verts_array as array) .count) ------保证输入的个数不超标
         
          local true_tt =true
           while ( true_tt)do
          (
          --for i in 1 to total_Verts_array do --因为我在上面进行了数量的把控 所以这里面是在真个中循环
         ---我明白了这里就不用加循环了。 while本身就是循环 所以这里就这样就慢死了 
          (
           ---这里要加入数组唯一化机制
          -- random_count=  random 1 total_Verts_array
           Back_Verts_array=Back_Verts_array as array  ---
           ---2011.4.22 测试不行是,是忘了转会数组,这个很重要。
           random_count=   Back_Verts_array [ (random 1 Back_Verts_array.count )]----局部内的点数。
           ---这里面我要说下,因为是100 % 但是由于随机 经常取一样的值。就是100% 的点中 在跑去相同,所以会出现 不满的情况。
           --我应该最死循环, 知道数组中的数量 符合他的 % 分数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
          if (vertes_count__.count ==percentage_count ) then
          (
           true_tt=false
          )
         
            )---end while
      
         )----end back

        
        )--end if percentage

       
       
        polyop.setVertSelection   input_poly  vertes_count__
       
      )--end ()

      (type == "edge"): (
       
       local  vertes_count__ =#()
       ------这里面由两种选择,数量的选择 ,还有就是 % 的选择,到最后我倒ui中要最一个事件
       ----当count_t percentage 同时不为零,报错机制触发,当 count_t ==0 那么 percentage==10 当percentage ==0 那么count_t ==1
       ----选择好选择类型在,处理,我是当前选择了。还是没有选择,进行处理。
       ---先做数量的选择
       if  percentage ==0 and count_t ==0 then return false
       if  percentage !=0 and count_t !=0 then return false  ---这样的报错机制就好了。
        
        if percentage ==0 and count_t !=0 then -----拾取个数的情况。
        (
          local Back_Verts_array
        ---查看当前选择的点,分两种情况进行。数组为空与不为空,分为全局与局部的关系。
         total_Verts_array = polyop.getNumEdges  input_poly
         ---全局顶点数,和当前选择的数组。
         if count_t >total_Verts_array then count_t =total_Verts_array ------保证输入的个数不超标
          Back_Verts_array = polyop.getEdgeSelection   input_poly
                        
         if (Back_Verts_array as array) .count ==0 then --- 全局选择
         (
          for i in 1 to count_t do
          (
           ---这里要加入数组唯一化机制
           random_count=  random 1 total_Verts_array
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
         
         
         )---end back
          if( Back_Verts_array as array) .count !=0 then --- 全局选择
         (
          Back_Verts_array=(Back_Verts_array as array) --这中方式其实就是临时的被改。
         
          if count_t > Back_Verts_array.count then count_t =Back_Verts_array.count  ------保证输入的个数不超标
          for i in 1 to count_t do --同是给输入的数量一个定义
          (
           random_count=   Back_Verts_array [ (random 1 Back_Verts_array.count )]----局部内的点数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
     
          )---end for  i in 1 to count_t ..
     
         )----end if BACK

        
        )---end if percenntage
        if percentage !=0 and count_t ==0 then  ----%比的情况,这个很好。
        (
         ---% 情况其实可以和之前的一模一样,也是吧% 的数组线算出来。
         local Back_Verts_array ,total_Verts_array
        ---查看当前选择的点,分两种情况进行。数组为空与不为空,分为全局与局部的关系。
         total_Verts_array = polyop.getNumEdges   input_poly
         ---全局顶点数,和当前选择的数组。
         /*
           percentage_count=  total_Verts_array *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >total_Verts_array then percentage_count =total_Verts_array ------保证输入的个数不超标
          */
          Back_Verts_array = polyop.getEdgeSelection   input_poly
                        
         if (Back_Verts_array as array) .count ==0 then --- 全局选择
         ( 
          percentage_count=  total_Verts_array *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >total_Verts_array then percentage_count =total_Verts_array ------保证输入的个数不超标
         
          local true_tt =true
           while ( true_tt)do
          (
          --for i in 1 to total_Verts_array do --因为我在上面进行了数量的把控 所以这里面是在真个中循环
         ---我明白了这里就不用加循环了。 while本身就是循环 所以这里就这样就慢死了 
         
          (
           ---这里要加入数组唯一化机制
           random_count=  random 1 total_Verts_array
           ---这里面我要说下,因为是100 % 但是由于随机 经常取一样的值。就是100% 的点中 在跑去相同,所以会出现 不满的情况。
           --我应该最死循环, 知道数组中的数量 符合他的 % 分数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
          if (vertes_count__.count ==percentage_count ) then
          (
           true_tt=false
          )
         
            )---end while
         )---end back
         -----------------------2011.4.22 过了一天接着写
         if (Back_Verts_array as array) .count !=0 then --- 全局选择
         (
          percentage_count=  ((Back_Verts_array as array) .count) *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >((Back_Verts_array as array) .count) then percentage_count =((Back_Verts_array as array) .count) ------保证输入的个数不超标
         
          local true_tt =true
           while ( true_tt)do
          (
          --for i in 1 to total_Verts_array do --因为我在上面进行了数量的把控 所以这里面是在真个中循环
         ---我明白了这里就不用加循环了。 while本身就是循环 所以这里就这样就慢死了 
          (
           ---这里要加入数组唯一化机制
          -- random_count=  random 1 total_Verts_array
           Back_Verts_array=Back_Verts_array as array  ---
           ---2011.4.22 测试不行是,是忘了转会数组,这个很重要。
           random_count=   Back_Verts_array [ (random 1 Back_Verts_array.count )]----局部内的点数。
           ---这里面我要说下,因为是100 % 但是由于随机 经常取一样的值。就是100% 的点中 在跑去相同,所以会出现 不满的情况。
           --我应该最死循环, 知道数组中的数量 符合他的 % 分数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
          if (vertes_count__.count ==percentage_count ) then
          (
           true_tt=false
          )
         
            )---end while
      
         )----end back

        
        )--end if percentage

       
       
        polyop.setEdgeSelection   input_poly  vertes_count__
       
       
       
      )----end ()

      (type == "polygon"):(
       
       local  vertes_count__ =#()
       ------这里面由两种选择,数量的选择 ,还有就是 % 的选择,到最后我倒ui中要最一个事件
       ----当count_t percentage 同时不为零,报错机制触发,当 count_t ==0 那么 percentage==10 当percentage ==0 那么count_t ==1
       ----选择好选择类型在,处理,我是当前选择了。还是没有选择,进行处理。
       ---先做数量的选择
       if  percentage ==0 and count_t ==0 then return false
       if  percentage !=0 and count_t !=0 then return false  ---这样的报错机制就好了。
        
        if percentage ==0 and count_t !=0 then -----拾取个数的情况。
        (
          local Back_Verts_array
        ---查看当前选择的点,分两种情况进行。数组为空与不为空,分为全局与局部的关系。
         total_Verts_array = polyop.getNumFaces  input_poly
         ---全局顶点数,和当前选择的数组。
         if count_t >total_Verts_array then count_t =total_Verts_array ------保证输入的个数不超标
          Back_Verts_array = polyop.getFaceSelection   input_poly
                        
         if (Back_Verts_array as array) .count ==0 then --- 全局选择
         (
          for i in 1 to count_t do
          (
           ---这里要加入数组唯一化机制
           random_count=  random 1 total_Verts_array
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
         
         
         )---end back
          if( Back_Verts_array as array) .count !=0 then --- 全局选择
         (
          Back_Verts_array=(Back_Verts_array as array) --这中方式其实就是临时的被改。
         
          if count_t > Back_Verts_array.count then count_t =Back_Verts_array.count  ------保证输入的个数不超标
          for i in 1 to count_t do --同是给输入的数量一个定义
          (
           random_count=   Back_Verts_array [ (random 1 Back_Verts_array.count )]----局部内的点数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
     
          )---end for  i in 1 to count_t ..
     
         )----end if BACK

        
        )---end if percenntage
        if percentage !=0 and count_t ==0 then  ----%比的情况,这个很好。
        (
         ---% 情况其实可以和之前的一模一样,也是吧% 的数组线算出来。
         local Back_Verts_array ,total_Verts_array
        ---查看当前选择的点,分两种情况进行。数组为空与不为空,分为全局与局部的关系。
         total_Verts_array = polyop.getNumFaces  input_poly
         ---全局顶点数,和当前选择的数组。
         /*
           percentage_count=  total_Verts_array *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >total_Verts_array then percentage_count =total_Verts_array ------保证输入的个数不超标
          */
          Back_Verts_array = polyop.getFaceSelection   input_poly
                        
         if (Back_Verts_array as array) .count ==0 then --- 全局选择
         ( 
          percentage_count=  total_Verts_array *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >total_Verts_array then percentage_count =total_Verts_array ------保证输入的个数不超标
         
          local true_tt =true
           while ( true_tt)do
          (
          --for i in 1 to total_Verts_array do --因为我在上面进行了数量的把控 所以这里面是在真个中循环
         ---我明白了这里就不用加循环了。 while本身就是循环 所以这里就这样就慢死了 
         
          (
           ---这里要加入数组唯一化机制
           random_count=  random 1 total_Verts_array
           ---这里面我要说下,因为是100 % 但是由于随机 经常取一样的值。就是100% 的点中 在跑去相同,所以会出现 不满的情况。
           --我应该最死循环, 知道数组中的数量 符合他的 % 分数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
          if (vertes_count__.count ==percentage_count ) then
          (
           true_tt=false
          )
         
            )---end while
         )---end back
         -----------------------2011.4.22 过了一天接着写
         if (Back_Verts_array as array) .count !=0 then --- 全局选择
         (
          percentage_count=  ((Back_Verts_array as array) .count) *percentage /100
           percentage_count = percentage_count as integer
         if percentage_count >((Back_Verts_array as array) .count) then percentage_count =((Back_Verts_array as array) .count) ------保证输入的个数不超标
         
          local true_tt =true
           while ( true_tt)do
          (
          --for i in 1 to total_Verts_array do --因为我在上面进行了数量的把控 所以这里面是在真个中循环
         ---我明白了这里就不用加循环了。 while本身就是循环 所以这里就这样就慢死了 
          (
           ---这里要加入数组唯一化机制
          -- random_count=  random 1 total_Verts_array
           Back_Verts_array=Back_Verts_array as array  ---
           ---2011.4.22 测试不行是,是忘了转会数组,这个很重要。
           random_count=   Back_Verts_array [ (random 1 Back_Verts_array.count )]----局部内的点数。
           ---这里面我要说下,因为是100 % 但是由于随机 经常取一样的值。就是100% 的点中 在跑去相同,所以会出现 不满的情况。
           --我应该最死循环, 知道数组中的数量 符合他的 % 分数。
          
           if  findItem vertes_count__  random_count ==0 then
          (
           ---因为我没有循环点。所以不用加入 undefined 机制。 在询问面 返回点的函数时,有时面本来是多了,但是在循环面找点是 就是
           ---undefined  这个自己一定要记住。
           append vertes_count__ random_count
          )---end if finditem
          
          )---end for total
          if (vertes_count__.count ==percentage_count ) then
          (
           true_tt=false
          )
         
            )---end while
      
         )----end back

        
        )--end if percentage

       
       
       polyop.setFaceSelection   input_poly  vertes_count__
       
       
      )


      )--- end  case of

     
     )----end fn


    ---上面的元素基本是完成了。但是我是想找到基于poly的因素的操作。因素里面我就想是基于百分比进行操作。


     try(cui.UnRegisterDialogBar gt_random_select)catch()-----这个是法则。
    try (DestroyDialog gt_random_select )catch()
    rollout gt_random_select "随机的因素选择" 160 height:133
    (
     spinner random_num_spn "随机数:" pos:[19,3] 109 height:16  range:[0,100000000,0] type:#integer
     spinner random_percentage_spn "随机%:" pos:[19,24] 110 height:16 range:[0,100,0] type:#integer
     button vertex_random_btn "点随机选择" pos:[31,47] 80 height:18
     button edge_random_btn "边随机选择" pos:[31,70] 80 height:18
     button face_random_btn "面随机选择" pos:[31,93] 80 height:18
     fn random_m =
     (
      if random_num_spn .value==0 and random_percentage_spn.value ==0 then
      (
       messagebox "随机数和随机% 数,不能同时为零。也不能同时不为零。"title:"永超编写"
      )---end if
      if random_num_spn .value!=0 and random_percentage_spn.value !=0 then
      (
       messagebox "随机数和随机% 数,不能同时为零。也不能同时不为零。"title:"永超编写"
      )---end if
      
     )
     on vertex_random_btn pressed do
     (
      random_m()
      poly_random_type $ "vertex" random_num_spn .value   random_percentage_spn.value
      
     )---end on
      on edge_random_btn pressed do
     (
      random_m()
      poly_random_type $ "edge" random_num_spn .value   random_percentage_spn.value
      
     )---end on
       on face_random_btn pressed do
     (
      random_m()
      poly_random_type $ "polygon" random_num_spn .value   random_percentage_spn.value
      
     )---end on
     
     
     
    )
    createdialog gt_random_select

    cui.RegisterDialogBar gt_random_select style:#(#cui_dock_left,#cui_dock_right, #cui_floatable)
    cui.DockDialogBar gt_random_select #cui_dock_right

  • 相关阅读:
    iota妙用
    io
    http
    gosched
    go设置使用多少个cpu
    go协程的特点
    go条件变量同步机制
    Go奇技淫巧
    U5首次登录
    Maven安装中的问题
  • 原文地址:https://www.cnblogs.com/gaitian00/p/2025678.html
Copyright © 2020-2023  润新知