home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / POLYEDIT.LZH / MACRO / TRANSB.M < prev    next >
Text File  |  1996-07-02  |  18KB  |  881 lines

  1. //
  2. //    点移動
  3. //
  4. function private _MoveVertex()
  5. {
  6.     var point_temp[2];
  7.     var prev, v, cur_vec, cur_map[2];
  8.     var prev_sel, sel;
  9.     var i, j, vers, key, temp;
  10.     var edge;
  11.     var pick, draw_flag = ON, plane[3];
  12.  
  13.     prev = Cursor();
  14.     if (prev != PolyVertex( prev ))
  15.     {
  16.         Warning();
  17.         if( MESSAGE == ON )
  18.             Message( error_msg1 );
  19.         return ;
  20.     }
  21.  
  22.     prev_sel = Select();
  23.     if(( ShiftStat() & 1 ) == 1 )
  24.     {
  25.         if( SelectPolygons() == 0 )
  26.             SelectAll( TRUE );
  27.     }
  28.     else
  29.         SelectAll( TRUE );
  30.     SelectArea( TRUE, SELECT_AND | SELECT_SUB, prev, prev );
  31.     if( SelectPolygons() == 0 )
  32.     {
  33.         Warning();
  34.         Select( prev_sel );
  35.         return;
  36.     }
  37.     sel = Select();
  38.     edge = EdgeSelect();
  39.     edge = EdgeVertex( edge, prev );
  40.     Select( prev_sel );
  41.  
  42.     PushMenu();
  43.     Status_org = Status_title;
  44.     MenuPosition( Menu( " 動作設定(&S)",
  45.             "移動中止    ESC",    MenuQuit
  46.         ), Menu_Title );
  47.     ClearStatus();
  48.     Status_title[0] = "【点移動中】";
  49.     DrawStatus();
  50.     quit_flag = FALSE;
  51.  
  52.     j = Edges( edge );
  53.     PolyLoadInit();
  54.     PolyLoad();
  55.     plane[0] = PolyGetVertex(0);
  56.     for( i = 1;i< PolyVertexs();i++ )
  57.     {
  58.         plane[1] = PolyGetVertex(i);
  59.         if( plane[0] != plane[1] )
  60.             break;
  61.     }
  62.     temp = Position( plane[1] ) - Position( plane[0] );
  63.     for( i++; i< PolyVertexs(); i++ )
  64.     {
  65.         plane[2] = PolyGetVertex(i);
  66.         if( abs((Position(plane[2])-Position(plane[0]))*temp) != 0 )
  67.             break;
  68.     }
  69.     cur = prev;
  70.     pick = cur;
  71.     fix_vertex = cur;
  72.     input_flag = OFF;
  73.     while( TRUE )
  74.     {
  75.         if( draw_flag == ON )
  76.         {
  77.             for( i = 0;i<j; i++ )
  78.             {
  79.                 EdgeGetVertex( edge, i, point_temp );
  80.                 if( point_temp[0] == prev )
  81.                     DrawLine( point_temp[1], cur );
  82.                 else
  83.                     DrawLine( point_temp[0], cur );
  84.             }
  85.         }
  86.         key = WaitEvent();
  87.         if( key )
  88.             input_flag = ON;
  89.         if( ( ShiftStat() & 1 ) == 1 )
  90.         {
  91.             cur = Cursor();
  92.             TrimCursor(fix_vertex, MouseWindow());
  93.             Cursor( cur );
  94.         }
  95.         else
  96.             cur = Cursor();
  97.         key = KeyCode();
  98.         if( input_flag | key == INPUT_KEY )
  99.         {
  100.             if( prev == cur )
  101.             {
  102.                 Warning();
  103.                 if( MESSAGE == ON )
  104.                     Message( error_msg5 );
  105.             }
  106.             else
  107.                 break;
  108.         }
  109.         else if ( key == ESC | quit_flag == TRUE )
  110.         {
  111.             PopandClear( OVERWRITE );
  112.             Select( prev_sel );
  113.             return ;
  114.         }
  115.         else if ( key == BS )
  116.         {
  117.             if( cur == prev )
  118.             {
  119.                 PopandClear( OVERWRITE );
  120.                 Select( prev_sel );
  121.                 return;
  122.             }
  123.             else
  124.             {
  125.                 cur = prev;
  126.                 fix_vertex = cur;
  127.                 Cursor( cur );
  128.             }
  129.         }
  130.         else if ( key == 'p' )
  131.         {
  132.             cur = PolyPlane( cur, MouseWindow(),
  133.                     plane[0], plane[1], plane[2] );
  134.             Cursor( cur );
  135.         }
  136.         else
  137.             temp = KeyProcess( key );
  138.         if( ((key!=0 ) & (key != INPUT_KEY)) | ( pick != Cursor()) )
  139.         {
  140.             for( i = 0;i<j; i++ )
  141.             {
  142.                 EdgeGetVertex( edge, i, point_temp );
  143.                 if( point_temp[0] == prev )
  144.                     DrawLine( point_temp[1], pick );
  145.                 else
  146.                     DrawLine( point_temp[0], pick );
  147.             }
  148.             draw_flag = ON;
  149.         }
  150.         else
  151.             draw_flag = OFF;
  152.         pick = Cursor();
  153.         input_flag = OFF;
  154.     }
  155.     Clear( OVERWRITE );
  156.     Select( sel );
  157.     v = Position( cur )- Position(prev);
  158.     PolyLoadInit();
  159.     while( PolyLoad())
  160.     {
  161.         vers = PolyVertexs();
  162.         for( i = 0;i<vers;i++ )
  163.         {
  164.             temp = PolyGetVertex( i );
  165.             if( temp == prev )
  166.                 PolySetVertex( temp+v, i );
  167.         }
  168.         PolySave();
  169.     }
  170.     Select( prev_sel );
  171.     Update( CLEAR );
  172.     UpdateObject();
  173.     pers_rotation_flag = FALSE;
  174.     PopMenu();
  175.     Status_title = Status_org;
  176.     DrawStatus();
  177. }
  178.  
  179. //
  180. //    点追加
  181. //
  182. function private _AddVertex()
  183. {
  184.     var point[2], prev, prev2;
  185.     var prev_sel, work_sel, plane[3];
  186.     var cur_pos;
  187.     var i, j, k, vers, key, ty, flag;
  188.     var temp, temp2, temp_vec, temp2_vec, temp_map[2], temp2_map[2];
  189.     var pick, draw_flag = ON;
  190.     var edge;
  191.  
  192.     prev = Cursor();
  193.     if (prev != PolyVertex( prev ))
  194.     {
  195.         Warning();
  196.         if( MESSAGE == ON )
  197.             Message( error_msg1 );
  198.         return ;
  199.     }
  200.  
  201.     prev_sel = Select();
  202.     if( ( ShiftStat() & 1 ) == 1 )
  203.     {
  204.         if( SelectPolygons() == 0 )
  205.             SelectAll( TRUE );
  206.     }
  207.     else
  208.         SelectAll( TRUE );
  209.     SelectArea( TRUE, SELECT_AND | SELECT_SUB, prev, prev );
  210.     if( SelectPolygons() == 0 )
  211.     {
  212.         Warning();
  213.         Select( prev_sel );
  214.         return;
  215.     }
  216.     work_sel = Select();
  217.  
  218.     PushMenu();
  219.     Status_org = Status_title;
  220.     MenuPosition( Menu( " 動作設定(&S)",
  221.             "追加中止    ESC", MenuQuit ), Menu_Title );
  222.     ClearStatus();
  223.     Status_title[0] = "【点追加する辺を指定中】";
  224.     DrawStatus();
  225.     quit_flag = FALSE;
  226.  
  227.     edge = EdgeSelect();
  228.     edge = EdgeVertex( edge, prev );
  229.     j = Edges( edge );
  230.     Select( prev_sel );
  231.  
  232.     PolyLoadInit();
  233.     PolyLoad();
  234.     plane[0] = PolyGetVertex(0);
  235.     for( i = 1;i< PolyVertexs();i++ )
  236.     {
  237.         plane[1] = PolyGetVertex(i);
  238.         if( plane[0] != plane[1] )
  239.             break;
  240.     }
  241.     temp = Position( plane[1] ) - Position( plane[0] );
  242.     for( i++; i< PolyVertexs(); i++ )
  243.     {
  244.         plane[2] = PolyGetVertex(i);
  245.         if( abs((Position(plane[2])-Position(plane[0]))*temp) != 0 )
  246.             break;
  247.     }
  248.  
  249.     k = 0;
  250.     cur = prev;
  251.     pick = cur;
  252.     fix_vertex = cur;
  253.     flag = FALSE;
  254.     while( TRUE )
  255.     {
  256.         input_flag = OFF;
  257.         while( TRUE )
  258.         {
  259.             if( draw_flag == ON )
  260.             {
  261.                 if( flag == FALSE )
  262.                     DrawLine( cur, prev );
  263.                 else
  264.                 {
  265.                     DrawLine( cur, prev );
  266.                     DrawLine( cur, prev2 );
  267.                 }
  268.             }
  269.             key = WaitEvent();
  270.             if( key )
  271.                 input_flag = ON;
  272.             if( ( ShiftStat() & 1 ) == 1 )
  273.             {
  274.                 cur = Cursor();
  275.                 TrimCursor(fix_vertex, MouseWindow());
  276.                 Cursor( cur );
  277.             }
  278.             else
  279.                 cur = Cursor();
  280.             key = KeyCode();
  281.             if ( input_flag | key == INPUT_KEY )
  282.             {
  283.                 if( flag == FALSE )
  284.                 {
  285.                     if ( prev == cur )
  286.                     {
  287.                         Warning();
  288.                         if( MESSAGE == ON )
  289.                             Message( error_msg4 );
  290.                     }
  291.                     else
  292.                     {
  293.                         if( Edges(EdgeVertex( edge, cur )) != 0 )
  294.                         {
  295.                             Select( work_sel );
  296.                             EdgeSelect(EdgeVertex( edge, cur ), TRUE, SELECT_AND );
  297.                             if( MESSAGE == ON )
  298.                                 Message( "指定された辺の真ん中に点を追加しました\n"
  299.                                     +"続いて、この点を移動させることができます" );
  300.                             Status_title[0] = "【点移動中】";
  301.                             DrawStatus();
  302.                             work_sel = Select();
  303.                             Select( prev_sel );
  304.                             break;
  305.                         }
  306.                         else
  307.                         {
  308.                             Warning();
  309.                             if( MESSAGE == ON )
  310.                                 Message( "点を追加する辺を指定してください" );
  311.                         }
  312.                     }
  313.                 }
  314.                 else
  315.                 {
  316.                     if( cur == prev | cur == prev2 )
  317.                     {
  318.                         Warning();
  319.                         if( MESSAGE == ON )
  320.                             Message( "指定した辺の端点と同じ点です" );
  321.                     }
  322.                     else
  323.                         break;
  324.                 }
  325.             }
  326.             else if ( key == ESC | quit_flag == TRUE )
  327.             {
  328.                 PopandClear( OVERWRITE );
  329.                 Select( prev_sel );
  330.                 return ;
  331.             }
  332.             else if ( key == BS )
  333.             {
  334.                 if( flag == FALSE )
  335.                 {
  336.                     if( cur == prev )
  337.                     {
  338.                         PopandClear( OVERWRITE );
  339.                         Select( prev_sel );
  340.                         return;
  341.                     }
  342.                     else
  343.                     {
  344.                         cur = prev;
  345.                         fix_vertex = cur;
  346.                         Cursor( cur );
  347.                     }
  348.                 }
  349.                 else
  350.                 {
  351.                     flag = FALSE;
  352.                     cur = Cursor( prev2 );
  353.                     fix_vertex = cur;
  354.                 }
  355.             }
  356.             else if( key == KEY_ROLLUP & flag == FALSE )
  357.             {
  358.                 if( k < (j-1) )
  359.                     k++;
  360.                 else
  361.                     k = 0;
  362.                 EdgeGetVertex( edge, k, point );
  363.                 if( point[0] == prev )
  364.                     cur = point[1];
  365.                 else
  366.                     cur = point[0];
  367.                 Cursor( cur );
  368.             }
  369.             else if( key == KEY_ROLLDOWN & flag == FALSE )
  370.             {
  371.                 if( k > 0 )
  372.                     k--;
  373.                 else
  374.                     k = j-1;
  375.                 EdgeGetVertex( edge, k, point );
  376.                 if( point[0] == prev )
  377.                     cur = point[1];
  378.                 else
  379.                     cur = point[0];
  380.                 Cursor( cur );
  381.             }
  382.             else if ( key == 'p' )
  383.             {
  384.                 cur = PolyPlane( cur, MouseWindow(),
  385.                         plane[0], plane[1], plane[2] );
  386.                 Cursor( cur );
  387.             }
  388.             else
  389.                 temp = KeyProcess( key );
  390.             if( ((key!=0 ) & (key != INPUT_KEY)) | ( pick != Cursor()) )
  391.             {
  392.                 if( flag == FALSE )
  393.                     DrawLine( pick, prev );
  394.                 else
  395.                 {
  396.                     DrawLine( pick, prev );
  397.                     DrawLine( pick, prev2 );
  398.                 }
  399.                 draw_flag = ON;
  400.             }
  401.             else
  402.                 draw_flag = OFF;
  403.             pick = Cursor();
  404.             input_flag = OFF;
  405.         }
  406.         if( flag == TRUE )
  407.             break;
  408.         else
  409.         {
  410.             flag = TRUE;
  411.             prev2 = cur;
  412.             DrawLine( pick, prev );
  413.             cur = (prev+prev2)*scale(UNIT_MATRIX, 0.5,0.5,0.5 );
  414.             Cursor( cur );
  415.             fix_vertex = cur;
  416.             draw_flag = ON;
  417.             pick = cur;
  418.         }
  419.     }
  420.     Clear( OVERWRITE );
  421.     Select( work_sel );
  422.     cur_pos = Position( cur );
  423.     while( PolyLoad())
  424.     {
  425.         vers = PolyVertexs();
  426.         ty = PolyType();
  427.         for( i = 0; i< vers; i++ )
  428.         {
  429.             temp = PolyGetVertex( i );
  430.             if( temp == prev | temp == prev2 )
  431.             {
  432.                 if( i == 0 )
  433.                 {
  434.                     temp2 = PolyGetVertex( 1 );
  435.                     if( temp2 == prev | temp2 == prev2 )
  436.                     {
  437.                         flag = ON;
  438.                         i++;
  439.                         break;
  440.                     }
  441.                     temp2 = PolyGetVertex( vers -1 );
  442.                     if( temp2 == prev | temp2 == prev2 )
  443.                     {
  444.                         flag = OFF;
  445.                         break;
  446.                     }
  447.                 }
  448.                 else
  449.                 {
  450.                     temp2 = PolyGetVertex( i+1 );
  451.                     if( temp2 == prev | temp2 == prev2 )
  452.                     {
  453.                         i++;
  454.                         flag = ON;
  455.                         break;
  456.                     }
  457.                 }
  458.             }
  459.         }
  460.         if( ty == POLY_SHADE )
  461.         {
  462.             temp_vec = Vector( temp );
  463.             temp2_vec = Vector( temp2 );
  464.             cur = Vertex( cur_pos, unit(temp_vec+temp2_vec ) );
  465.         }
  466.         else if( ty == POLY_UV )
  467.         {
  468.             Mapping( temp, temp_map );
  469.             Mapping( temp2, temp2_map );
  470.             temp_map[0] = (temp_map[0]+temp2_map[0])/2;
  471.             temp_map[1] = (temp_map[1]+temp2_map[1])/2;
  472.             cur = Vertex(    cur_pos, 1, 1, 1,
  473.                     temp_map[0], temp_map[1] );
  474.         }
  475.         else if( ty == POLY_UVSHADE )
  476.         {
  477.             temp_vec = Vector( temp );
  478.             temp2_vec = Vector( temp2 );
  479.             Mapping( temp, temp_map );
  480.             Mapping( temp2, temp2_map );
  481.             temp_map[0] = (temp_map[0]+temp2_map[0])/2;
  482.             temp_map[1] = (temp_map[1]+temp2_map[1])/2;
  483.             cur = Vertex(    cur_pos, unit(temp_vec+temp2_vec ),
  484.                     temp_map[0], temp_map[1] );
  485.         }
  486.         if( flag == ON )
  487.             PolyInsVertex( cur, i );
  488.         else
  489.             PolySetVertex( cur, vers );
  490.         PolyVertexs( vers+1 );
  491.         PolySave();
  492.     }
  493.     Select( prev_sel );
  494.     Update( CLEAR );
  495.     UpdateObject();
  496.     pers_rotation_flag = FALSE;
  497.     PopMenu();
  498.     StatusBar(statustext);
  499.     Status_title = Status_org;
  500.     DrawStatus();
  501. }
  502.  
  503. //
  504. //    点削除
  505. //
  506. function private _DelVertex()
  507. {
  508.     var prev_sel;
  509.     var i, vers, flag;
  510.  
  511.     cur = Cursor();
  512.     if (cur != PolyVertex( cur ))
  513.     {
  514.         Warning();
  515.         if( MESSAGE == ON )
  516.             Message( error_msg1 );
  517.         return ;
  518.     }
  519.  
  520.     prev_sel = Select();
  521.     if(( ShiftStat() & 1 ) == 1 )
  522.     {
  523.         if( SelectPolygons() == 0 )
  524.             SelectAll( TRUE );
  525.     }
  526.     else
  527.         SelectAll( TRUE );
  528.     SelectArea( TRUE, SELECT_AND | SELECT_SUB, cur, cur );
  529.     if( SelectPolygons() == 0 )
  530.     {
  531.         Warning();
  532.         Select( prev_sel );
  533.         return;
  534.     }
  535.  
  536.     flag = FALSE;
  537.     while( PolyLoad())
  538.     {
  539.         vers = PolyVertexs();
  540.         if( vers > 3 )
  541.         {
  542.             for( i = 0;i<vers;i++ )
  543.             {
  544.                 if( PolyGetVertex( i ) == cur )
  545.                     break;
  546.             }
  547.             if( i < vers )
  548.             {
  549.                 PolyDelVertex( i );
  550.                 PolySave();
  551.                 flag = TRUE;
  552.             }
  553.         }
  554.     }
  555.     Select( prev_sel );
  556.     if( flag == FALSE )
  557.         Warning();
  558.     else
  559.     {
  560.         Update( CLEAR );
  561.         pers_rotation_flag = FALSE;
  562.         UpdateObject();
  563.     }
  564. }
  565.  
  566. //
  567. //    選択範囲を平行移動
  568. //
  569. function _MoveSelect()
  570. {
  571.     var    org, org_pos[2], point[2], temp_point[2];
  572.     var    i, j, k, vers;
  573.     var    mat, move_vec[3];
  574.     var    key;
  575.     var    temp, temp2, temp3;
  576.     var    pick, draw_flag = ON, mode = OFF;
  577.     var    edge, edge1, edge2, edge_temp;
  578.     var    prev_sel, sel1, sel2;
  579.     var    change_ver[MAXVERTEX], change;
  580.     var    change_flag = OFF;
  581.  
  582.     if ( SelectPolygons() == 0 )
  583.     {
  584.         Warning();
  585.         if( MESSAGE == ON )
  586.             Message( error_msg3 );
  587.         return ;
  588.     }
  589.  
  590.     PushMenu();
  591.     Status_org = Status_title;
  592.     MenuPosition( Menu( " 動作設定(&S)",
  593.             "移動中止    ESC",    MenuQuit
  594.         ), Menu_Title );
  595.     ClearStatus();
  596.     Status_title[0] = "【選択面を平行移動中】";
  597.     DrawStatus();
  598.     quit_flag = FALSE;
  599.  
  600.     prev_sel = Select();
  601.     SelectBox( org_pos );
  602.  
  603.     sel1 = Select();
  604.     edge1 = EdgeSelect();
  605.     sel2 = SelectAdjoint( sel1 );
  606.     sel2 = sel2 & ( !sel1 );
  607.     Select( sel2 );
  608.     edge2 = EdgeSelect();
  609.     edge2 = edge2 - edge1;
  610.     edge  = Edge();
  611.     for( i = 0; i< Edges(edge2 );i++ )
  612.     {
  613.         EdgeGetVertex( edge2, i, point );
  614.         Select( prev_sel );
  615.         SelectArea( TRUE, SELECT_AND | SELECT_SUB, point[0], point[0] );
  616.         if( SelectPolygons() != 0 )
  617.         {
  618.             edge_temp = Edge( point[0], point[1] );
  619.             EdgeGetVertex( edge_temp, 0, temp_point );
  620.             if( temp_point[0] == point[0] )
  621.                 edge = edge + edge_temp;
  622.             else
  623.             {
  624.                 edge = edge + edge_temp;
  625.                 edge = edge + edge_temp;
  626.             }
  627.         }
  628.         else
  629.         {
  630.             Select( prev_sel );
  631.             SelectArea( TRUE, SELECT_AND | SELECT_SUB, point[1], point[1] );
  632.             if( SelectPolygons() != 0 )
  633.             {
  634.                 edge_temp = Edge( point[0], point[1] );
  635.                 EdgeGetVertex( edge_temp, 0, temp_point );
  636.                 if( temp_point[0] == point[1] )
  637.                     edge = edge + edge_temp;
  638.                 else
  639.                 {
  640.                     edge = edge + edge_temp;
  641.                     edge = edge + edge_temp;
  642.                 }
  643.             }
  644.         }
  645.     }
  646.     j = Edges( edge );
  647.  
  648.     org = Cursor();
  649.     cur = org;
  650.     pick = cur;
  651.     fix_vertex = cur;
  652.     Select( prev_sel );
  653.     edge_temp = EdgeSelect();
  654.     k = Edges( edge_temp );
  655.     input_flag = OFF;
  656.     while( TRUE )
  657.     {
  658.         if( draw_flag == ON )
  659.         {
  660.             mat = move( UNIT_MATRIX, (Position( cur )- Position( org )));
  661.             DrawLine( org, cur );
  662.             if( mode == OFF )
  663.                 DrawBox( org_pos[0], org_pos[1], mat );
  664.             else
  665.             {
  666.                 for(i = 0; i< k; i++ )
  667.                 {
  668.                     EdgeGetVertex( edge_temp, i, temp_point );
  669.                     DrawLine( temp_point[0]*mat, temp_point[1]*mat );
  670.                 }
  671.                 for( i = 0; i< j; i++ )
  672.                 {
  673.                     EdgeGetVertex( edge, i, point );
  674.                     if( EdgeGetCount( edge, i ) == 1 )
  675.                         DrawLine( point[0]*mat, point[1] );
  676.                     else
  677.                         DrawLine( point[0], point[1]*mat );
  678.                 }
  679.             }
  680.         }
  681.         key = WaitEvent();
  682.         if( key )
  683.             input_flag = ON;
  684.         if( (( ShiftStat() & 1 ) == 1))
  685.         {
  686.             cur = Cursor();
  687.             TrimCursor(fix_vertex, MouseWindow());
  688.             Cursor( cur );
  689.         }
  690.         else
  691.             cur = Cursor();
  692.         key = KeyCode();
  693.         if( input_flag | key == INPUT_KEY )
  694.         {
  695.             if( cur == org )
  696.             {
  697.                 Warning();
  698.                 if( MESSAGE == ON )
  699.                     Message( error_msg5 );
  700.             }
  701.             else
  702.                 break;
  703.         }
  704.         else if(( key == ESC ) | ( key == BS ) | ( quit_flag == TRUE ))
  705.         {
  706.             PopandClear( OVERWRITE );
  707.             Select( prev_sel );
  708.             return;
  709.         }
  710.         else if( key =='c' )
  711.             change_flag = ON;
  712.         else
  713.             temp = KeyProcess( key );
  714.         if( ((key!=0 ) & (key != INPUT_KEY)) | ( pick != Cursor()) )
  715.         {
  716.             draw_flag = ON;
  717.             mat = move( UNIT_MATRIX, (Position( pick ) - Position( org )));
  718.             DrawLine( pick, org );
  719.             if( mode == OFF )
  720.                 DrawBox( org_pos[0], org_pos[1], mat );
  721.             else
  722.                 Clear( OVERWRITE );
  723.         }
  724.         else
  725.             draw_flag = OFF;
  726.         if( change_flag == ON )
  727.             mode = !mode;
  728.         change_flag = OFF;
  729.         pick = Cursor();
  730.         input_flag = OFF;
  731.     }
  732.     Clear( OVERWRITE );
  733.     mat = move( UNIT_MATRIX, (Position( cur ) - Position( org )));
  734.     Select(sel2 );
  735.     k = SelectPolygons();
  736.     for( i = 0; i< k; i++ )
  737.     {
  738.         PolyLoad( sel2, i );
  739.         vers = PolyVertexs();
  740.         change = 0;
  741.         for( j = 0; j< vers; j++ )
  742.         {
  743.             temp = PolyGetVertex( j );
  744.             Select( prev_sel );
  745.             SelectArea( TRUE, SELECT_AND | SELECT_SUB, temp, temp );
  746.             if( SelectPolygons() != 0 )
  747.             {
  748.                 change_ver[change] = j;
  749.                 change++;
  750.             }
  751.         }
  752.         PolyLoad( sel2, i );
  753.         for( j = 0; j< change; j++ )
  754.         {
  755.             temp = PolyGetVertex( change_ver[j] );
  756.             PolySetVertex( temp*mat, change_ver[j] );
  757.         }
  758.         PolySave();
  759.     }
  760.     Select( prev_sel );
  761.     PolyMove( mat );
  762.     Update( CLEAR );
  763.     UpdateObject();
  764.     pers_rotation_flag = FALSE;
  765.     PopMenu();
  766.     Status_title = Status_org;
  767.     DrawStatus();
  768. }
  769.  
  770. function _RotateSelect()
  771.     _Rotate( ON );
  772.  
  773. function _ScaleSelect()
  774.     _Scale( ON );
  775.  
  776. //
  777. //    点移動
  778. //
  779. function MoveVertex()
  780. {
  781.     ClearStatus();
  782.     Status_title[0] = "【モード:点移動】";
  783.     DrawStatus();
  784.     InputEvent( _MoveVertex );
  785.     KeyEvent( _MoveVertex, INPUT_KEY );
  786. }
  787.  
  788. //
  789. //    点追加
  790. //
  791. function AddVertex()
  792. {
  793.     ClearStatus();
  794.     Status_title[0] = "【モード:点追加】";
  795.     DrawStatus();
  796.     InputEvent( _AddVertex );
  797.     KeyEvent( _AddVertex, INPUT_KEY );
  798. }
  799.  
  800. //
  801. //    点削除
  802. //
  803. function DelVertex()
  804. {
  805.     ClearStatus();
  806.     Status_title[0] = "【モード:点削除】";
  807.     DrawStatus();
  808.     InputEvent( _DelVertex );
  809.     KeyEvent( _DelVertex, INPUT_KEY );
  810. }
  811.  
  812. function MoveEdge()
  813. {
  814.     ClearStatus();
  815.     Status_title[0] = "【モード:辺を平行移動】";
  816.     DrawStatus();
  817.     InputEvent( _MoveEdge );
  818.     KeyEvent( _MoveEdge, INPUT_KEY );
  819. }
  820.  
  821. function RotateEdge()
  822. {
  823.     ClearStatus();
  824.     Status_title[0]  = "【モード:辺を回転】";
  825.     DrawStatus();
  826.     InputEvent( _RotateEdge );
  827.     KeyEvent( _RotateEdge, INPUT_KEY );
  828. }
  829.  
  830. function ScaleEdge()
  831. {
  832.     ClearStatus();
  833.     Status_title[0] = "【モード:辺を拡大縮小】";
  834.     DrawStatus();
  835.     InputEvent( _ScaleEdge );
  836.     KeyEvent( _ScaleEdge, INPUT_KEY );
  837. }
  838.  
  839. function MoveSelect()
  840. {
  841.     ClearStatus();
  842.     Status_title[0] = "【モード:選択面を移動】";
  843.     DrawStatus();
  844.     InputEvent( _MoveSelect );
  845.     KeyEvent( _MoveSelect, INPUT_KEY );
  846. }
  847.  
  848. function RotateSelect()
  849. {
  850.     ClearStatus();
  851.     Status_title[0] = "【モード:選択面を回転】";
  852.     DrawStatus();
  853.     InputEvent( _RotateSelect );
  854.     KeyEvent( _RotateSelect, INPUT_KEY );
  855. }
  856.  
  857. function ScaleSelect()
  858. {
  859.     ClearStatus();
  860.     Status_title[0] = "【モード:選択面を拡大縮小】";
  861.     DrawStatus();
  862.     InputEvent( _ScaleSelect );
  863.     KeyEvent( _ScaleSelect, INPUT_KEY );
  864. }
  865.  
  866. MenuPosition(
  867.     Menu( " 変形(&T)",
  868.         "点移動(&M)    1",    MoveVertex,PolyCheck,
  869.         "点追加(&A)    2",    AddVertex,PolyFlagCheck,
  870.         "点削除(&D)    3",    DelVertex,PolyFlagCheck,
  871.         "----------------",        SEPARATE_MENU,
  872.         "辺を平行移動(&E)    4",    MoveEdge,PolyFlagCheck,
  873.         "辺を回転(&R)    5",    RotateEdge,PolyFlagCheck,
  874.         "辺を拡大縮小(&S)    6",    ScaleEdge,PolyFlagCheck,
  875.         "----------------",        SEPARATE_MENU,
  876.         "選択面を平行移動(&P)    7",    MoveSelect,SelectCheck,
  877.         "選択面を回転(&R)    8",    RotateSelect,SelectCheck,
  878.         "選択面を拡大縮小(&S)    9",    ScaleSelect,SelectCheck
  879.     ), Menu_trans
  880. );
  881.