home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / POLYEDIT.LZH / MACRO / ATROBJ.M next >
Text File  |  1996-07-22  |  17KB  |  752 lines

  1. //
  2. //    アトリビュート名入力
  3. //
  4. function    DlogAttr( title, attr )
  5. {
  6.     var    name,filename, atrno,i, j, k;
  7.     var    org_code, code = 7;
  8.     var    msg[8], uv[2][2], objlist[MAXOBJECT];
  9.     var    r,g,b;
  10.  
  11.     msg = {"黒", "青","赤","紫","緑","水","黄","白" };
  12.  
  13.     if ( attr < 0 )
  14.     {
  15.         if( (EXPERT == TRUE ) | ( MACHINE != "WINDOWS" ))
  16.         {
  17.             DlogOpen( title, 5, "キャンセル","決定後終了", "決定後さらに入力" );
  18.             DlogString( 0, "アトリビュート名", "", 23 );
  19.             DlogString( 2, "ファイル名      ", AttrFile( AttrCurrent()), 23 );
  20.             DlogSelect( 4, "線の色          ", msg, code );
  21.         }
  22.         else
  23.         {
  24.             DlogOpen( title, 3, "キャンセル","決定後終了", "決定後さらに入力" );
  25.             DlogString( 0, "アトリビュート名", "", 23 );
  26.             DlogSelect( 2, "線の色          ", msg, code );
  27.         }
  28.     }
  29.     else
  30.     {
  31.         org_code = AttrCode( attr );
  32.         if( (EXPERT == TRUE ) | ( MACHINE != "WINDOWS" ))
  33.         {
  34.             DlogOpen( title, 5, "キャンセル ", " 決定 " );
  35.             DlogString( 0, "アトリビュート名", AttrName( attr ), 23 );
  36.             DlogString( 2, "ファイル名      ", AttrFile( attr ), 23 );
  37.             DlogSelect( 4, "線の色          ", msg, org_code );
  38.         }
  39.         else
  40.         {
  41.             DlogOpen( title, 3, "キャンセル ", " 決定 " );
  42.             DlogString( 0, "アトリビュート名", AttrName( attr ), 23 );
  43.             DlogSelect( 2, "線の色          ", msg, org_code );
  44.         }
  45.     }
  46.     i = DlogWait();
  47.     if( i == 0 )
  48.         return FALSE;
  49.     else
  50.     {
  51.         if( (EXPERT == TRUE ) | ( MACHINE != "WINDOWS" ))
  52.         {
  53.             name = DlogAnswer( 0 );
  54.             filename = DlogAnswer( 2 );
  55.             code = DlogAnswer( 4 );
  56.             if( filename == "" )
  57.                 filename = MakeFile( name, ".atr" );
  58.             else
  59.                 filename = MakeFile( filename, ".atr" );
  60.         }
  61.         else
  62.         {
  63.             name = DlogAnswer( 0 );
  64.             code = DlogAnswer( 2 );
  65.         }
  66.         if(( attr < 0 ) & ( name == "" ))
  67.             return FALSE;
  68.         if( NameCheck( name ) == FALSE )
  69.         {
  70.             Warning();
  71.             Message( error_msg7 );
  72.             return TRUE;
  73.         }
  74.         atrno = AttrSearch( name );
  75.         if( attr < 0 )
  76.         {
  77.             if( atrno < 0 )
  78.             {
  79.                 atrno = AttrAppend( name, code );
  80.                 if( (EXPERT == TRUE ) | ( MACHINE != "WINDOWS" ))
  81.                     AttrFile( atrno, filename );
  82.                 else
  83.                 {
  84.                     AttrMap( atrno, TRUE );
  85.                     AttrMapFile( atrno, MAPPINGFILE );
  86.                     uv[0] = {0,0};
  87.                     uv[1] = {MAPWIND-1, MAPWIND-1};
  88.                     SetAttrMapWind( atrno, uv[0], uv[1] );
  89.                     uv[0] = {0,0};
  90.                     uv[1] = {UVmax, UVmax};
  91.                     SetAttrMapSize( atrno, uv[0], uv[1] );
  92.                 }
  93.             }
  94.             else
  95.             {
  96.                 Warning();
  97.                 if( MESSAGE == ON )
  98.                     Message( "同名のアトリビュートが存在します" );
  99.             }
  100.         }
  101.         else
  102.         {
  103.             if( name == "" )
  104.             {
  105.                 Warning();
  106.                 if( MESSAGE == ON )
  107.                     Message( "アトリビュート名が指定されていません" );
  108.                 return FALSE;
  109.             }
  110.             if( atrno < 0 )
  111.             {
  112.                 AttrName( attr, name );
  113.                 AttrCode( attr, code );
  114.                 r = 0.0;
  115.                 g = 0.0;
  116.                 b = 0.0;
  117.                 if (code & 2) r = 1.0;
  118.                 if (code & 4) g = 1.0;
  119.                 if (code & 1) b = 1.0;
  120.                 if( (EXPERT == TRUE ) | ( MACHINE != "WINDOWS" ))
  121.                     AttrFile( attr, filename );
  122.                 else
  123.                     AttrCol( attr, vector(r,g,b));
  124.                 if( org_code != code )
  125.                     Update( OVERWRITE );
  126.                 j = AtrtoObj( attr, objlist );
  127.                 for( k = 0; k< j;k++ )
  128.                     ObjEdit( objlist[k], TRUE );
  129.                 if( j != 0 )
  130.                     UpdateObject();
  131.             }
  132.             else if( atrno == attr )
  133.             {
  134.                 if( org_code != code )
  135.                 {
  136.                     AttrCode( attr, code );
  137.                     r = 0.0;
  138.                     g = 0.0;
  139.                     b = 0.0;
  140.                     if (code & 2) r = 1.0;
  141.                     if (code & 4) g = 1.0;
  142.                     if (code & 1) b = 1.0;
  143.                     if( (EXPERT == TRUE ) | ( MACHINE != "WINDOWS" ))
  144.                         AttrFile( attr, filename );
  145.                     else
  146.                         AttrCol(atrno, vector(r,g,b));
  147.                     Update( OVERWRITE );
  148.                     j = AtrtoObj( attr, objlist );
  149.                     for( k = 0; k< j;k++ )
  150.                         ObjEdit( objlist[k], TRUE );
  151.                     if( j != 0 )
  152.                         UpdateObject();
  153.                 }
  154.             }
  155.             else
  156.             {
  157.                 Warning();
  158.                 if( MESSAGE == ON )
  159.                     Message( "同名のアトリビュートが存在します" );
  160.                 return FALSE;
  161.             }
  162.         }
  163.         UpdateAttribute();
  164.         if(( attr < 0 ) & ( i == 1 ))
  165.             return FALSE;
  166.         else
  167.             return TRUE;
  168.     }
  169.     return FALSE;
  170. }
  171.  
  172. //
  173. //    オブジェクト名入力
  174. //
  175. function    DlogObj( title, obj )
  176. {
  177.     var    flag, ele[3], temp;
  178.     var    name, file,objno, i;
  179.  
  180.     if( (EXPERT == TRUE ) | ( MACHINE != "WINDOWS" ))
  181.     {
  182.         DlogOpen( title, 3 );
  183.         if ( obj < 0 )
  184.         {
  185.             DlogString( 0, "オブジェクト名", "", 40 );
  186.             DlogString( 2, "ファイル名    ", ObjFile(ObjCurrent()), 40, "形状ファイル(*.SUF)");
  187.             flag = TRUE ;
  188.         }
  189.         else
  190.         {
  191.             DlogString( 0, "オブジェクト名", ObjName( obj ), 40 );
  192.             DlogString( 2, "ファイル名    ", ObjFile( obj ), 40, "形状ファイル(*.SUF)");
  193.             flag = FALSE ;
  194.         }
  195.     }
  196.     else
  197.     {
  198.         DlogOpen( title, 1 );
  199.         if ( obj < 0 )
  200.         {
  201.             DlogString( 0, "オブジェクト名", "", 40 );
  202.             flag = TRUE ;
  203.         }
  204.         else
  205.         {
  206.             DlogString( 0, "オブジェクト名", ObjName( obj ), 40 );
  207.             flag = FALSE ;
  208.         }
  209.     }
  210.     if ( DlogWait() )
  211.     {
  212.         name = DlogAnswer( 0 );
  213.         if ( name == "" )
  214.             return -1;
  215.         if( NameCheck( name ) == FALSE )
  216.         {
  217.             Warning();
  218.             Message( error_msg6 );
  219.             return -1;
  220.         }
  221.         if( (EXPERT == TRUE ) | ( MACHINE != "WINDOWS" ))
  222.         {
  223.             file = DlogAnswer( 2 );
  224.             if ( file == "" )
  225.                 file = MakeFile( name, "suf" );
  226.             else
  227.                 file = MakeFile( file, "suf" );
  228.         }
  229.         else
  230.         {
  231.             file = MakeFile( name, "suf" );
  232.         }
  233.         objno = ObjSearch( name );
  234.         if( objno < 0 )
  235.         {
  236.             if( flag )
  237.             {
  238.                 objno = ObjAppend( name, file );
  239.                 return objno;
  240.             }
  241.             else
  242.             {
  243.                 if( ObjName( obj ) != name )
  244.                 {
  245.                     ObjName( obj, name );
  246.                     ObjEdit( obj, TRUE );
  247.                 }
  248.                 Bunkai( file, ele );
  249.                 if( ele[0] == "" )
  250.                 {
  251.                     temp = ObjFile( obj );
  252.                     Bunkai( temp, ele );
  253.                     file = ele[0] + file;
  254.                 }
  255.                 ObjFile( obj, file );
  256.                 return obj;
  257.             }
  258.         }
  259.         else if( objno == obj & flag == FALSE )
  260.         {
  261.             ObjName( obj, name );
  262.             Bunkai( file, ele );
  263.             if( ele[0] == "" )
  264.             {
  265.                 temp = ObjFile( obj );
  266.                 Bunkai( temp, ele );
  267.                 file = ele[0] + file;
  268.             }
  269.             if( ObjFile( obj ) != file )
  270.             {
  271.                 ObjFile( obj, file );
  272.                 ObjEdit( obj, TRUE );
  273.             }
  274.             return obj;
  275.         }
  276.         else
  277.         {
  278.             Warning();
  279.             if( MESSAGE == ON )
  280.                 Message( "同名のオブジェクトが存在します" );
  281.             return -1;
  282.         }
  283.     }
  284.     return -1;
  285. }
  286.  
  287. //
  288. //    アトリビュート追加
  289. //
  290. function NewAtr()
  291. {
  292.     var    temp;
  293.     while( TRUE )
  294.     {
  295.         if( Attrs() < MAXATTR )
  296.         {
  297.             temp = DlogAttr( "アトリビュート追加", -1 );
  298.             if( temp == FALSE )
  299.                 break;
  300.         }
  301.         else
  302.             break;
  303.     }
  304.     UpdateAttribute();
  305. }
  306.  
  307. //
  308. //    面のアトリビュート変更
  309. //
  310. function ChangeAtr()
  311. {
  312.     var    i = TRUE;
  313.     if( SelectPolygons() == 0 )
  314.         return;
  315.     if( MESSAGE == ON )
  316.     {
  317.         DlogOpen( "面のアトリビュート変更", 4 );
  318.         DlogMessage( 0, "選択されている面のアトリビュートを" );
  319.         DlogMessage( 1, AttrName(AttrCurrent())+" に変更します。");
  320.         DlogMessage( 2, "よろしいですか?" );
  321.         i = DlogWait();
  322.     }
  323.     if( i )
  324.     {
  325.         AttrChange( AttrCurrent() );
  326.         UpdateObject();
  327.     }
  328. }
  329.  
  330. //
  331. //    アトリビュート名変更
  332. //
  333. function EditAtr()
  334. {
  335.     DlogAttr( "アトリビュート名変更", AttrCurrent() );
  336.     UpdateAttribute();
  337. }
  338.  
  339. //
  340. //    アトリビュート削除
  341. //
  342. function DeleteAtr()
  343. {
  344.     var    sel1, sel2, temp_sel;
  345.     var    atrno, i;
  346.  
  347.     sel1 = Select();
  348.     SelectAll( TRUE, SELECT_UPDATE );
  349.     sel2 = Select();
  350.     PolyInvisible( FALSE );
  351.     atrno = AttrCurrent();
  352.     SelectAttr( atrno, TRUE, SELECT_UPDATE );
  353.     if( SelectPolygons() != 0 )
  354.     {
  355.         DlogOpen( "", 2, "いいえ", " はい " );
  356.         DlogMessage( 0, "アトリビュート名が " + AttrName( atrno ) + " の面があります。" );
  357.         DlogMessage( 1, "これらの面も削除されますがよろしいですか?" );
  358.         i = DlogWait();
  359.         if( i == 0 )
  360.         {
  361.             Select( sel2 );
  362.             PolyInvisible( invisible_flag );
  363.             Select( sel1 );
  364.             return;
  365.         }
  366.         else
  367.         {
  368.             temp_sel = Select();
  369.             sel1 = sel1 & ( !temp_sel );
  370.             sel2 = sel2 & ( !temp_sel );
  371.             PolyDelete( temp_sel );
  372.             Select( sel2 );
  373.             PolyInvisible( invisible_flag );
  374.             Select( sel1 );
  375.             Update( CLEAR );
  376.         }
  377.     }
  378.     else
  379.     {
  380.         Select( sel2 );
  381.         PolyInvisible( invisible_flag );
  382.         Select( sel1 );
  383.     }
  384.     if( atrno == ( Attrs() - 1 ))
  385.     {
  386.         AttrDelete( atrno );
  387.         AttrCurrent( Attrs()-1);
  388.     }
  389.     else
  390.         AttrDelete( atrno );
  391.     UpdateAttribute();
  392. }
  393.  
  394. function private ColorToString(v)
  395. {
  396.     if (vx(v) == vy(v) && vx(v) == vz(v)) {
  397.         return substr(tostring(0.005+vx(v)) + "      ", 4);
  398.     } else {
  399.         return "rgb ( "
  400.              + substr(tostring(0.005+vx(v)) + "      ", 4) + " "
  401.              + substr(tostring(0.005+vy(v)) + "      ", 4) + " "
  402.              + substr(tostring(0.005+vz(v)) + "      ", 4) + ")";
  403.     }
  404. }
  405.  
  406. var const COLOR_NUM = 21;
  407.  
  408. function colconv( n )
  409. {
  410. //    return substr(tostring(0.005 + (0.0+n) / 20.0) + "    ", 4);
  411.     return n*5;
  412. }
  413.  
  414. //
  415. //    アトリビュート詳細表示
  416. //
  417. function private EditAtrParameter()
  418. {
  419.     var type, mapname, name, temp, i, j, objlist[MAXOBJECT];
  420.     var c[9];
  421.     var size1[2], size2[2];
  422.     var wind1[2], wind2[2];
  423.     var atrno, atrcode;
  424.     var    msg[8];
  425.  
  426.     msg = {"黒", "青","赤","紫","緑","水","黄","白" };
  427.  
  428.     atrno = AttrCurrent();
  429.     atrcode = AttrCode( atrno );
  430.     c[0] = AttrCol(atrno);
  431.     c[1] = AttrDif(atrno);
  432.     c[2] = AttrAmb(atrno);
  433.     c[3] = AttrTra(atrno);
  434.     c[4] = AttrSpc(atrno);
  435.     c[5] = AttrSize(atrno);
  436.     c[6] = AttrRef(atrno);
  437.  
  438.     type = AttrMap(atrno);
  439.     if (type) {
  440.         name = AttrMapFile(atrno);
  441.         GetAttrMapSize(atrno, size1, size2);
  442.         GetAttrMapWind(atrno, wind1, wind2);
  443.         DlogOpen("アトリビュート詳細設定", 20);
  444.     } else {
  445.         name = "";
  446.         DlogOpen("アトリビュート詳細設定", 17);
  447.     }
  448.     DlogString( 0, "アトリビュート名", AttrName(atrno), 23 );
  449.     DlogString( 2, "   ファイル名", AttrFile(atrno), 23 , "色ファイル(*.ATR)");
  450.     DlogSelect( 4, "     線の色", msg, atrcode );
  451.     DlogSlider( 6, "    赤色成分", SLIDER_HABA, COLOR_NUM, 0+(0.005+vx(c[0]))*20, colconv);
  452.     DlogSlider( 7, "    緑色成分", SLIDER_HABA, COLOR_NUM, 0+(0.005+vy(c[0]))*20, colconv);
  453.     DlogSlider( 8, "    青色成分", SLIDER_HABA, COLOR_NUM, 0+(0.005+vz(c[0]))*20, colconv);
  454.     DlogSlider( 9, "     直接光", SLIDER_HABA, COLOR_NUM, 0+(0.005+vx(c[1]))*20, colconv);
  455.     DlogSlider(10, "     環境光", SLIDER_HABA, COLOR_NUM, 0+(0.005+vx(c[2]))*20, colconv);
  456.     DlogSlider(11, "     透明度", SLIDER_HABA, COLOR_NUM, 0+(0.005+vx(c[3]))*20, colconv);
  457.     DlogSlider(12, "  散乱光の強さ", SLIDER_HABA, COLOR_NUM, 0+(0.005+vx(c[4]))*20, colconv);
  458.     DlogSlider(13, "    散乱係数", SLIDER_HABA, COLOR_NUM, 0+(0.005+vx(c[5]))*20, colconv);
  459.     DlogSlider(14, "     反射率", SLIDER_HABA, COLOR_NUM, 0+(0.005+vx(c[6]))*20, colconv);
  460.     DlogString(16, " マッピング画像", name, 23, "DoGA形式画像ファイル(*.PIC)");
  461.     if (type) {
  462.         DlogMessage(18, "   ウィンドウ: " + tostring(0+wind1[0])
  463.                                    + " " + tostring(0+wind1[1])
  464.                                    + " " + tostring(0+wind2[0])
  465.                                    + " " + tostring(0+wind2[1]));
  466.         DlogMessage(19, "     サイズ: " + tostring(0+size1[0])
  467.                                    + " " + tostring(0+size1[1])
  468.                                    + " " + tostring(0+size2[0])
  469.                                    + " " + tostring(0+size2[1]));
  470.     }
  471.     if (DlogWait()) {
  472.         var l;
  473.         name = DlogAnswer(0);
  474.         if( NameCheck( name ) == FALSE )
  475.         {
  476.             Warning();
  477.             Message( error_msg7 );
  478.             return FALSE;
  479.         }
  480.         if( name == "" )
  481.         {
  482.             Warning();
  483.             return FALSE;
  484.         }
  485.         temp = AttrSearch( name );
  486.         if((temp < 0 ) | ( temp == atrno ))
  487.         {
  488.             AttrName(atrno, DlogAnswer( 0 ));
  489.             if( DlogAnswer( 2 ) != "" )
  490.                 AttrFile(atrno, MakeFile(DlogAnswer( 2 ),".atr"));
  491.             AttrCode(atrno, DlogAnswer( 4 ));
  492.             c[0] = vector(0.05*DlogAnswer(6), 0.05*DlogAnswer(7), 0.05*DlogAnswer(8));
  493.             l = 0.05*DlogAnswer(9); if (vx(c[1]) != l) c[1] = vector(l,l,l);
  494.             l = 0.05*DlogAnswer(10); if (vx(c[1]) != l) c[2] = vector(l,l,l);
  495.             l = 0.05*DlogAnswer(11); if (vx(c[1]) != l) c[3] = vector(l,l,l);
  496.             l = 0.05*DlogAnswer(12); if (vx(c[1]) != l) c[4] = vector(l,l,l);
  497.             l = 0.05*DlogAnswer(13); if (vx(c[1]) != l) c[5] = vector(l,l,l);
  498.             l = 0.05*DlogAnswer(14); if (vx(c[1]) != l) c[6] = vector(l,l,l);
  499.  
  500.             AttrCol(atrno, c[0]);
  501.             AttrDif(atrno, c[1]);
  502.             AttrAmb(atrno, c[2]);
  503.             AttrTra(atrno, c[3]);
  504.             AttrSpc(atrno, c[4]);
  505.             AttrSize(atrno, c[5]);
  506.             AttrRef(atrno, c[6]);
  507.  
  508.             mapname = DlogAnswer(16);
  509.             if (!mapname > 0) {
  510.                 if (!type) {
  511.                     AttrMap(atrno, TRUE);
  512.                     wind1[0] = 0;
  513.                     wind1[1] = 0;
  514.                     wind2[0] = 255;
  515.                     wind2[1] = 255;
  516.                     SetAttrMapWind(atrno, wind1, wind2);
  517.                     size1[0] = 0;
  518.                     size1[1] = 0;
  519.                     size2[0] = 999;
  520.                     size2[1] = 999;
  521.                     SetAttrMapSize(atrno, size1, size2);
  522.                     AttrMap(atrno, TRUE);
  523.                 }
  524.                 AttrMapFile(atrno, mapname);
  525.             } else {
  526.                 AttrMap(atrno, FALSE);
  527.             }
  528.             j = AtrtoObj( atrno, objlist );
  529.             for( i = 0; i< j;i++ )
  530.                 ObjEdit( objlist[i], TRUE );
  531.             if( j > 0 )
  532.                 UpdateObject();
  533.         }
  534.         else
  535.         {
  536.             Warning();
  537.             if( MESSAGE == ON )
  538.                 Message( "同名のアトリビュートが存在します" );
  539.             return FALSE;
  540.         }
  541.     }
  542.     if( atrcode != AttrCode( atrno ))
  543.         Update( OVERWRITE );
  544. }
  545.  
  546. //
  547. //    オブジェクト追加
  548. //
  549. function private NewObject()
  550. {
  551.     if( Objects() < MAXOBJECT )
  552.     {
  553.         DlogObj( "オブジェクト作成", -1 );
  554.         UpdateObject();
  555.     }
  556.     else
  557.     {
  558.         Warning();
  559.         if( MESSAGE == ON )
  560.             Message( "オブジェクト数が最大です" );
  561.     }
  562. }
  563.  
  564. //
  565. //    面のオブジェクト変更
  566. //
  567. function ChangeObj()
  568. {
  569.     var    i = TRUE;
  570.     if( SelectPolygons() == 0 )
  571.         return;
  572.     if( MESSAGE == ON )
  573.     {
  574.         DlogOpen( "面のオブジェクト変更", 4 );
  575.         DlogMessage( 0, "選択されている面のオブジェクトを" );
  576.         DlogMessage( 1, ObjName(ObjCurrent())+" に変更します。");
  577.         DlogMessage( 2, "よろしいですか?" );
  578.         i = DlogWait();
  579.     }
  580.     if( i )
  581.     {
  582.         ObjChange( ObjCurrent() );
  583.         UpdateObject();
  584.     }
  585. }
  586.  
  587. //
  588. //    オブジェクト名(+ファイル名)変更
  589. //
  590. function private EditObj()
  591. {
  592.     DlogObj( "オブジェクト変更", ObjCurrent() );
  593.     UpdateObject();
  594. }
  595.  
  596. //
  597. //    オブジェクト削除
  598. //
  599. function DeleteObj()
  600. {
  601.     var    sel1, sel2, temp_sel;
  602.     var    objno, i;
  603.  
  604.     sel1 = Select();
  605.     SelectAll( TRUE, SELECT_UPDATE );
  606.     sel2 = Select();
  607.     PolyInvisible( FALSE );
  608.     objno = ObjCurrent();
  609.     SelectObj( objno, TRUE, SELECT_UPDATE );
  610.     if( SelectPolygons() != 0 )
  611.     {
  612.         DlogOpen( "", 2, "いいえ", " はい " );
  613.         DlogMessage( 0, "オブジェクト名が " + ObjName( objno ) + " の面があります。" );
  614.         DlogMessage( 1, "これらの面も削除されますがよろしいですか?" );
  615.         i = DlogWait();
  616.         if( i == 0 )
  617.         {
  618.             Select( sel2 );
  619.             PolyInvisible( invisible_flag );
  620.             Select( sel1 );
  621.             return;
  622.         }
  623.         else
  624.         {
  625.             temp_sel = Select();
  626.             sel1 = sel1 & (!temp_sel);
  627.             sel2 = sel2 & (!temp_sel);
  628.             PolyDelete( temp_sel );
  629.             Select( sel2 );
  630.             PolyInvisible( invisible_flag );
  631.             Select( sel1 );
  632.             Update( CLEAR );
  633.         }
  634.     }
  635.     else
  636.     {
  637.         Select( sel2 );
  638.         PolyInvisible( invisible_flag );
  639.         Select( sel1 );
  640.     }
  641.     if( objno == (Objects()-1) )
  642.     {
  643.         ObjDelete( objno );
  644.         ObjCurrent( Objects()-1);
  645.     }
  646.     else
  647.     {
  648.         ObjDelete( objno );
  649.     }
  650.     UpdateObject();
  651. }
  652.  
  653. function private ObjectList()
  654. {
  655.     var    i, msg;
  656.     var    obj_number;
  657.     var    str;
  658.  
  659.     obj_number = Objects();
  660.     DlogOpen( "オブジェクト一覧", obj_number, FALSE );
  661.     for( i = 0 ; i < obj_number; i++ )
  662.     {
  663.         if ( ObjEdit( i ) )
  664.             msg = "*" ;
  665.         else
  666.             msg = " " ;
  667.         msg += substr(tostring(ObjName(i))+"                       ", 15 )
  668.                     +  tostring(ObjPolygons(i),5)+" 面";
  669.         msg = substr(msg+"                                       ", 30 );
  670.         msg += tostring( ObjFile( i ));
  671.         DlogMessage( i, msg );
  672.     }
  673.     DlogWait();
  674. }
  675.  
  676. function private AtrCheck()
  677. {
  678.     var    temp;
  679.     temp = MenuFunction();
  680.     if( temp == DeleteAtr )
  681.     {
  682.         if( Attrs() < 2 )
  683.             MenuEnable( MENU_DISABLE );
  684.         else
  685.             MenuEnable( MENU_ENABLE );
  686.     }
  687.     else if( temp == NewAtr )
  688.     {
  689.         if( Attrs() < MAXATTR )
  690.             MenuEnable( MENU_ENABLE );
  691.         else
  692.             MenuEnable( MENU_DISABLE );
  693.     }
  694. }
  695.  
  696. function private ObjCheck()
  697. {
  698.     var    temp;
  699.     temp = MenuFunction();
  700.     if( temp == DeleteObj )
  701.     {
  702.         if( Objects() < 2 )
  703.             MenuEnable( MENU_DISABLE );
  704.         else
  705.             MenuEnable( MENU_ENABLE );
  706.     }
  707.     else if( temp == NewObject )
  708.     {
  709.         if( Objects() < MAXOBJECT )
  710.             MenuEnable( MENU_ENABLE );
  711.         else
  712.             MenuEnable( MENU_DISABLE );
  713.     }
  714. }
  715.  
  716. if( (EXPERT != TRUE ) & ( MACHINE == "WINDOWS" ))
  717. {
  718.     MenuPosition(
  719.         Menu( " アトリ・オブジェ(&A)",
  720.             "面のアトリビュート変更     CTRL+A",    ChangeAtr,SelectCheck,
  721.             "アトリビュート追加...  ",            NewAtr,AtrCheck,
  722.             "アトリビュート名変更...",            EditAtr,
  723.             "アトリビュート削除     ",            DeleteAtr,AtrCheck,
  724.             "-----------------",            SEPARATE_MENU,
  725.             "面のオブジェクト変更     CTRL+O",    ChangeObj,SelectCheck,
  726.             "オブジェクト追加...  ",            NewObject,ObjCheck,
  727.             "オブジェクト名変更...",            EditObj,
  728.             "オブジェクト削除     ",            DeleteObj,ObjCheck,
  729.             "-----------------",            SEPARATE_MENU,
  730.             "オブジェクト一覧...(&L)",            ObjectList
  731.         ), Menu_atrobj
  732.     );
  733. }
  734. else
  735. {
  736.     MenuPosition(
  737.         Menu( " アトリ・オブジェ(&A)",
  738.             "面のアトリビュート変更     CTRL+A",    ChangeAtr,SelectCheck,
  739.             "アトリビュート追加...  ",            NewAtr,AtrCheck,
  740.             "アトリビュート名変更...",            EditAtrParameter,
  741.             "アトリビュート削除     ",            DeleteAtr,AtrCheck,
  742.             "-----------------",            SEPARATE_MENU,
  743.             "面のオブジェクト変更     CTRL+O",    ChangeObj,SelectCheck,
  744.             "オブジェクト追加...  ",            NewObject,ObjCheck,
  745.             "オブジェクト名変更...",            EditObj,
  746.             "オブジェクト削除     ",            DeleteObj,ObjCheck,
  747.             "-----------------",            SEPARATE_MENU,
  748.             "オブジェクト一覧...(&L)",            ObjectList
  749.         ), Menu_atrobj
  750.     );
  751. }
  752.