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

  1. //
  2. //    3面図の移動
  3. //
  4. function NormalMove( key )
  5. {
  6.     var const    MOVE_LENGTH = 100;
  7.     var    win_type;
  8.     var    vec_x, vec_y, vec_z, vec_ue, vec_yoko;
  9.     var    temp;
  10.     var    chuou;
  11.     var    pos[3];
  12.     var draw, draw_ue, draw_yoko;
  13.  
  14.     draw_ue = 0;
  15.     draw_yoko = 0;
  16.  
  17.     vec_x = vector( 1, 0, 0 );
  18.     vec_y = vector( 0, 1, 0 );
  19.     vec_z = vector( 0, 0, 1 );
  20.  
  21.     win_type = MouseWindow();
  22.     if( win_type == WIN_XY )
  23.     {
  24.         vec_ue = vec_y;
  25.         vec_yoko = vec_x;
  26.         draw_ue = WIN_XY | WIN_YZ;
  27.         draw_yoko   = WIN_XY | WIN_ZX;
  28.     }
  29.     else if( win_type == WIN_YZ )
  30.     {
  31.         vec_ue = vec_z;
  32.         vec_yoko = vec_y;
  33.         draw_ue = WIN_YZ | WIN_ZX;
  34.         draw_yoko   = WIN_YZ | WIN_XY;
  35.     }
  36.     else if( win_type == WIN_ZX )
  37.     {
  38.         vec_ue = vec_z;
  39.         vec_yoko = vec_x;
  40.         draw_ue = WIN_ZX | WIN_YZ;
  41.         draw_yoko   = WIN_ZX | WIN_XY;
  42.     }
  43.     else
  44.     {
  45.         vec_ue = vector( 0, 0, 0);
  46.         vec_yoko = vec_ue;
  47.     }
  48.  
  49.     if( zoomsize < 0 )
  50.         temp = 1.0 / abs(zoomsize) *MOVE_LENGTH;
  51.     else
  52.         temp = zoomsize *MOVE_LENGTH;
  53.  
  54.     if( key == KEY_UP )
  55.     {
  56.         chuou = Center() + vec_ue*temp;
  57.         draw = draw_ue;
  58.     }
  59.     else if( key == KEY_DOWN )
  60.     {
  61.         chuou = Center() - vec_ue*temp;
  62.         draw = draw_ue;
  63.     }
  64.     else if( key == KEY_RIGHT )
  65.     {
  66.         chuou = Center() + vec_yoko*temp;
  67.         draw = draw_yoko;
  68.     }
  69.     else if( key == KEY_LEFT )
  70.     {
  71.         chuou = Center() - vec_yoko*temp;
  72.         draw = draw_yoko;
  73.     }
  74.  
  75.     if (draw_ue != 0) {
  76.         Center( chuou );
  77.         Update( CLEAR, draw );
  78.     }
  79.  
  80. }
  81.  
  82. function private    DefaultPosition()
  83. {
  84.     var    mat_vec[4];
  85.  
  86.     getvector( pers_mat, mat_vec );
  87.     pers_mat = Matrix( mat_vec[0], mat_vec[1], mat_vec[2], vector(2000,0,0));
  88.     SetPers( pers_mat );
  89. }
  90.  
  91. function DefaultPers()
  92. {
  93.     pers_mat = rot( UNIT_MATRIX, AXISY, 20 )*rot( UNIT_MATRIX, AXISZ, 150 )
  94.             *move(UNIT_MATRIX, 2000,0,0 );
  95.     SetPers( pers_mat );
  96. }
  97.  
  98. function    PersRot( dx, dy, dz )
  99. {
  100.     var temp[2], temp_vec, temp_mat, temp2_mat;
  101.     var temp_sel;
  102.  
  103.     if( pers_rotation_flag == FALSE )
  104.     {
  105.         temp_sel = Select();
  106.         SelectAll( TRUE );
  107.         SelectBox( temp );
  108.         Select( temp_sel );
  109.         pers_rotation_vec = (Position(temp[0])+Position(temp[1]))*scale(UNIT_MATRIX, 0.5,0.5,0.5 ));
  110.         pers_rotation_flag = TRUE;
  111.     }
  112.     temp_vec = pers_rotation_vec*pers_mat;
  113.     temp_mat = move( UNIT_MATRIX, -temp_vec );
  114.     temp2_mat = move( UNIT_MATRIX, temp_vec );
  115.     if( dx != 0 )
  116.         pers_mat = pers_mat*temp_mat*rot(UNIT_MATRIX, AXISX, dx )*temp2_mat;
  117.     if( dy != 0 )
  118.         pers_mat = pers_mat*temp_mat*rot(UNIT_MATRIX, AXISY, dy )*temp2_mat;
  119.     if( dz != 0 )
  120.         pers_mat = pers_mat*temp_mat*rot(UNIT_MATRIX, AXISZ, dz )*temp2_mat;
  121.     SetPers( pers_mat );
  122. }
  123.  
  124. function    PersMove( dx, dy, dz )
  125. {
  126.     pers_mat = pers_mat*move( UNIT_MATRIX, dx, dy, dz );
  127.     SetPers( pers_mat );
  128. }
  129.  
  130.  
  131. var private rend_back_color, rend_options, rend_star;
  132. rend_back_color = 0;
  133. rend_options = "";
  134. rend_star = 1;
  135. //
  136. //    レンダリング
  137. //
  138. function Rend()
  139. {
  140.     var i;
  141.     var    obj, sel ;
  142.     var    rend ;
  143.     var r, g, b;
  144.  
  145.     r = 0.0;
  146.     g = 0.0;
  147.     b = 0.0;
  148.     if (rend_back_color & 2) r = 1.0;
  149.     if (rend_back_color & 4) g = 1.0;
  150.     if (rend_back_color & 1) b = 1.0;
  151.  
  152.     if ( MACHINE == "PC98" )
  153.         rend = "rend386 /c512" ;
  154.     else if ( MACHINE == "WINDOWS" )
  155.         rend = "rendwin /c320x240";
  156.     else
  157.         rend = "rend /c512" ;
  158.  
  159.     if (rend_star) {
  160.         rend = rend + " -i2000";
  161.     }
  162.  
  163.     WriteFrame( pers_mat, model_dir+"_temp.frm", "_temp", vector(r,g,b) );
  164.  
  165.     var flag = FILE_OVERWRITE;
  166.     for (i = 0; i < Attrs(); i++) {
  167.         if (AttrPolygons(i) > 0) {
  168.             AttrWriteFile(model_dir+"_temp.atr", i, flag);
  169.             flag = FILE_APPEND;
  170.         }
  171.     }
  172.  
  173.     sel = Select();
  174.     SelectAll( TRUE );
  175.     obj = ObjAppend( "_temp", model_dir+"_temp.suf" );
  176.     WriteFile( obj );
  177.     ObjDelete( obj );
  178.     Select( sel );
  179.     delete( model_dir+"_temp.ind" );
  180.     fprint( model_dir+"_temp.ind", "-n -g "+model_dir+"_temp.frm "
  181.         +model_dir+"_temp.atr "+model_dir+"_temp.suf "+ rend_options );
  182.     Child( rend + " @"+model_dir+"_temp.ind" );
  183. }
  184.  
  185. function Fxga()
  186. {
  187.     var i;
  188.     var    obj, sel ;
  189.  
  190.     var flag = FILE_OVERWRITE;
  191.     for (i = 0; i < Attrs(); i++) {
  192.         if (AttrPolygons(i) > 0) {
  193.             AttrWriteFile( model_dir+"_temp.atr", i, flag);
  194.             flag = FILE_APPEND;
  195.         }
  196.     }
  197.     sel = Select();
  198.     SelectAll( TRUE );
  199.     obj = ObjAppend( "_temp", model_dir+"_temp.suf" );
  200.     WriteFile( obj );
  201.     ObjDelete( obj );
  202.     Select( sel );
  203.     delete( model_dir+"_temp.ind" );
  204.     fprint( model_dir+"_temp.ind", "-fxga "+model_dir+"_temp.atr "+model_dir+"_temp.suf" );
  205.     Child( model_dir+"suf2agc @"+model_dir+"_temp.ind" );
  206. }
  207.  
  208. function RendSetup()
  209. {
  210.     var msg[8], smsg[2];
  211.     msg = {"黒", "青","赤","紫","緑","水","黄","白" };
  212.     smsg = {"なし", "あり"};
  213.  
  214.     DlogOpen("作画設定", 5);
  215.     DlogSelect( 0, "背景色          ", msg, rend_back_color );
  216.     DlogSelect( 2, "背景星          ", smsg, rend_star );
  217.     DlogString( 4, "特殊オプション  ", rend_options, 20 );
  218.     if (DlogWait()) {
  219.         rend_back_color = DlogAnswer(0);
  220.         rend_star = DlogAnswer(2);
  221.         rend_options = DlogAnswer(4);
  222.     }
  223. }
  224.  
  225.  
  226. //
  227. //    キーが押された時の処理
  228. //
  229. function KeyProcess( key )
  230. {
  231.     var    temp;
  232.  
  233.     if ( key == 'v' )
  234.         _Vertex();
  235.     else if( key == 'V' )
  236.         BoxNearVertex();
  237.     else if( key == 'V'-'A'+1 ) /* CTRL+V */
  238.         _Vertex2();
  239.     else if( key == KEY_CLR )
  240.     {
  241.         temp = InputVertex( cur );
  242.         if( temp == TRUE )
  243.             Cursor( cur );
  244.     }
  245.     else if( key == 'f' )
  246.         FixVertex();
  247.     else if ( key == KEY_HOME )
  248.         DefaultPers();
  249.     else if ( key == KEY_NUMPAD_PLUS )
  250.         DefaultPosition();
  251.     else if ( key == KEY_NUMPAD_7 )
  252.         PersMove( -50, 0, 0 );
  253.     else if ( key == KEY_NUMPAD_9 )
  254.         PersMove( 50, 0, 0 );
  255.     else if ( key == KEY_UP )
  256.     {
  257.         if( ShiftStat() & 2 )
  258.             NormalMove( key );
  259.         else
  260.             PersMove( 0, 0, -50 );
  261.     }
  262.     else if ( key == KEY_DOWN )
  263.     {
  264.         if( ShiftStat() & 2 )
  265.             NormalMove( key );
  266.         else
  267.             PersMove( 0, 0, 50 );
  268.     }
  269.     else if ( key == KEY_RIGHT )
  270.     {
  271.         if( ShiftStat() & 2 )
  272.             NormalMove( key );
  273.         else
  274.             PersMove( 0, 50, 0 );
  275.     }
  276.     else if ( key == KEY_LEFT )
  277.     {
  278.         if( ShiftStat() & 2 )
  279.             NormalMove( key );
  280.         else
  281.             PersMove( 0, -50, 0 );
  282.     }
  283.     else if ( key == KEY_NUMPAD_2 )
  284.         PersRot( 0, 10, 0 );
  285.     else if ( key == KEY_NUMPAD_8 )
  286.         PersRot( 0, -10, 0 );
  287.     else if ( key == KEY_NUMPAD_6 )
  288.         PersRot( 0, 0, -10 );
  289.     else if ( key == KEY_NUMPAD_4 )
  290.         PersRot( 0, 0, 10 );
  291.     else if ( key == KEY_NUMPAD_3 )
  292.         PersRot( 10, 0, 0 );
  293.     else if ( key == KEY_NUMPAD_1 )
  294.         PersRot( -10, 0, 0 );
  295.     FlushKey();
  296. }
  297.