PROCEDURE Get3D_Size; LABEL 99,999; CONST vLayerType=154; {レイヤの種類} ltDesign=1; ltSheet=2; pPrimShowUnitMark=163; {単位記号の表示(主単位)} s3DSelect=-349; {ツール 3Dセレクションポインタ} vObjectIs3D=650; {ステータス 3Dオブジェクト} objOptions=2; {Selected} travOptions=0; {Shallow} layerOptions=0; {Current} VAR Show_UM :BOOLEAN; WS_hd,TO_hd :HANDLE; i :INTEGER; PROCEDURE Load3D_Size(WS_hd,TO_hd:HANDLE; i:INTEGER); CONST tSYMBOL=15; {シンボル} VAR name :STRING; width,height,depth :REAL; c_CR,c_CC,t_RR,l_RC,t_RS,b_RR,r_RC,b_RS, fontIndex,size,style :INTEGER; BEGIN IF GetType(TO_hd)=tSYMBOL THEN name:=GetSymName(TO_hd) ELSE BEGIN name:=GetName(TO_hd); IF ( name='' ) | ( name='none' ) THEN name:=Concat('Type=',GetType(TO_hd)); END; Get3DInfo(TO_hd,height,width,depth); AlertInform('サイズを取得しました。',concat('名前=',name,' 幅=',width,',高さ=',height,',奥行き=',depth),TRUE); GetWSSelection(WS_hd,c_CR,c_CC,t_RR,l_RC,t_RS,b_RR,r_RC,b_RS); { message(c_CR,' ',c_CC,' ',t_RR,' ',l_RC,' ',t_RS,' ',b_RR,' ',r_RC,' ',b_RS);} { GetWSCellTextFormat(WS_hd,c_CR+i,c_CC,fontIndex,size,style); LoadCell(c_CR+i,c_CC,name); LoadCell(c_CR+i,c_CC+1,Num2StrF(width)); LoadCell(c_CR+i,c_CC+2,Num2StrF(height)); LoadCell(c_CR+i,c_CC+3,Num2StrF(depth)); SetWSCellTextFormat(WS_hd,c_CR+i,c_CC,c_CR+i,c_CC+3,fontIndex,size,style); RecalculateWS(WS_hd); ResetObject(WS_hd); } SetWSCellFormula(WS_hd,c_CR+i,c_CC,c_CR+i,c_CC,name); SetWSCellFormula(WS_hd,c_CR+i,c_CC+1,c_CR+i,c_CC+1,Num2StrF(width)); SetWSCellFormula(WS_hd,c_CR+i,c_CC+2,c_CR+i,c_CC+2,Num2StrF(height)); SetWSCellFormula(WS_hd,c_CR+i,c_CC+3,c_CR+i,c_CC+3,Num2StrF(depth)); END; FUNCTION Get_SelectHandle(O_hd:HANDLE):BOOLEAN; {O_hd=NILでは実行されない} BEGIN TO_hd:=O_hd; Get_SelectHandle:=TRUE; END; BEGIN IF GetObjectVariableInt(ActLayer,vLayerType)=ltSheet THEN BEGIN AlrtDialog('このツールはシートレイヤでは使用できません'); GOTO 999; END; IF GetTopVisibleWS=NIL THEN {ActSSheet} AlrtDialog('ワークシートがアクティブではありません') ELSE BEGIN WS_hd:=GetTopVisibleWS; {ActSSheet} Show_UM:=GetPref(pPrimShowUnitMark); IF Show_UM THEN SetPref(pPrimShowUnitMark,FALSE); i:=0; AlrtDialog('3Dオブジェクトを選択して下さい'); 99: DSelectAll; ReDrawAll; CallTool(s3DSelect); ForEachObjectInLayer(Get_SelectHandle,objOptions,travOptions,layerOptions); IF TO_hd<>NIL THEN BEGIN IF NextSObj(TO_hd)<>NIL THEN IF YNDialog('複数選択されています、選択し直して下さい') THEN GOTO 99 ELSE GOTO 999; {!「GetObjectVariableBoolean」は図形が選択されていないと、無限ループする ハイブリッドオブジェクトは、表示(2D、3D)で判定が違う} IF GetObjectVariableBoolean(TO_hd,vObjectIs3D) THEN BEGIN Load3D_Size(WS_hd,TO_hd,i); IF YNDialog('続けて選択しますか?') THEN BEGIN i:=i+1; GOTO 99; END; END ELSE IF YNDialog('3Dオブジェクトではありません、選択し直して下さい') THEN GOTO 99; END ELSE IF YNDialog('図形が選択されていません、選択し直して下さい') THEN GOTO 99; END; 999:SetPref(pPrimShowUnitMark,Show_UM); END; Run(Get3D_Size);