PROCEDURE Move_3D; LABEL 999; CONST vLayerType=154; {レイヤの種類} ltDesign=1; ltSheet=2; s3DSelect=-349; {ツール 3Dセレクションポインタ} SV_Chunk=2; {メニュー 上} objOptions=2; {Selected} travOptions=0; {Shallow} layerOptions=0; {Current} vObjectIs3D=650; {ステータス 3Dオブジェクト} VAR TO_hd :HANDLE; PROCEDURE Dialog3D_Move(TO_hd:HANDLE); CONST OK_Button = 1; Cancel_Button = 2; iS_Gb=3; iM_Gb=4; iWHD_Gb=5; iX_Gb=6; iY_Gb=7; iZ_Gb=8; iW_St=11; iW_Er=12; iH_St=13; iH_Er=14; iD_St=15; iD_Er=16; iX_Rb=20; {+3} iY_Rb=30; {+3} iZ_Rb=40; {+3} iX_St=51; iX_Er=52; iY_St=53; iY_Er=54; iZ_St=55; iZ_Er=56; iXM_St=61; iXM_Er=62; iYM_St=63; iYM_Er=64; iZM_St=65; iZM_Er=66; iMv_Pb=71; iUd_Pb=72; St_width=-1; {auto} Er_width=15; editRealType=1; {1:REAL 3:Dimension} AE_Right=1; {Alignment Options} AM_Resize=0; AM_Shift=1; VAR D_ID,D_Res :LONGINT; Pcp,cp,size,Distance :POINT3D; PROCEDURE HandleEvents( VAR item : LONGINT; data : LONGINT); PROCEDURE Set3D_Position; FUNCTION Get3D_Position(Rb:INTEGER; p,s:REAL):REAL; VAR i :INTEGER; BEGIN FOR i:=1 TO 3 DO IF ItemSel(Rb+i) THEN CASE i OF 1:Get3D_Position:=p-s/2; 2:Get3D_Position:=p; 3:Get3D_Position:=p+s/2; END; END; BEGIN Get3DCntr(TO_hd,cp.x,cp.y,cp.z); SetEditReal(D_ID,iX_Er,editRealType,Get3D_Position(iX_Rb,cp.x,size.x)); SetEditReal(D_ID,iY_Er,editRealType,Get3D_Position(iY_Rb,cp.y,size.y)); SetEditReal(D_ID,iZ_Er,editRealType,Get3D_Position(iZ_Rb,cp.z,size.z)); END; BEGIN CASE item OF SetupDialogC: BEGIN SetTextEditable(iX_Er,FALSE); SetTextEditable(iY_Er,FALSE); SetTextEditable(iZ_Er,FALSE); SetTextEditable(iW_Er,FALSE); SetTextEditable(iH_Er,FALSE); SetTextEditable(iD_Er,FALSE); SetItem(iX_Rb+2,TRUE); SetItem(iY_Rb+2,TRUE); SetItem(iZ_Rb+2,TRUE); END; iX_Rb+1..iZ_Rb+3: Set3D_Position; iMv_Pb: BEGIN IF GetEditReal(D_ID,iXM_Er,editRealType,Distance.x) & GetEditReal(D_ID,iYM_Er,editRealType,Distance.y) & GetEditReal(D_ID,iZM_Er,editRealType,Distance.z) THEN BEGIN Move3DObj(TO_hd,Distance.x,Distance.y,Distance.z); ReDraw; SetEditReal(D_ID,iXM_Er,editRealType,0); SetEditReal(D_ID,iYM_Er,editRealType,0); SetEditReal(D_ID,iZM_Er,editRealType,0); Set3D_Position; END; END; iUd_Pb: BEGIN Move3DObj(TO_hd,-Distance.x,-Distance.y,-Distance.z); ReDraw; SetEditReal(D_ID,iXM_Er,editRealType,Distance.x); SetEditReal(D_ID,iYM_Er,editRealType,Distance.y); SetEditReal(D_ID,iZM_Er,editRealType,Distance.z); Distance.x:=0; Distance.y:=0; Distance.z:=0; Set3D_Position; END; Cancel_Button: BEGIN Get3DCntr(TO_hd,cp.x,cp.y,cp.z); Move3DObj(TO_hd,Pcp.x-cp.x,Pcp.y-cp.y,Pcp.z-cp.z); END; END; END; BEGIN Get3DCntr(TO_hd,Pcp.x,Pcp.y,Pcp.z); Get3DInfo(TO_hd,size.y,size.x,size.z); D_ID := CreateLayout('3D−Move', FALSE, 'OK', 'キャンセル'); CreateGroupBox (D_ID,iS_Gb,'位置',TRUE); CreateGroupBox (D_ID,iWHD_Gb,'',FALSE); CreateGroupBox (D_ID,iX_Gb,'',FALSE); CreateGroupBox (D_ID,iY_Gb,'',FALSE); CreateGroupBox (D_ID,iZ_Gb,'',FALSE); CreateGroupBox (D_ID,iM_Gb,'移動',TRUE); CreateStaticText (D_ID,iW_St,'ΔX:',St_width); CreateEditReal (D_ID,iW_Er,editRealType,size.x,Er_width); CreateStaticText (D_ID,iH_St,'ΔY:',St_width); CreateEditReal (D_ID,iH_Er,editRealType,size.y,Er_width); CreateStaticText (D_ID,iD_St,'ΔZ:',St_width); CreateEditReal (D_ID,iD_Er,editRealType,size.z,Er_width); CreateRadioButton (D_ID,iX_Rb+1,'−端'); CreateRadioButton (D_ID,iX_Rb+2,'中央'); CreateRadioButton (D_ID,iX_Rb+3,'+端'); CreateStaticText (D_ID,iX_St,'X:',St_width); CreateEditReal (D_ID,iX_Er,editRealType,Pcp.x,Er_width); CreateRadioButton (D_ID,iY_Rb+1,'−端'); CreateRadioButton (D_ID,iY_Rb+2,'中央'); CreateRadioButton (D_ID,iY_Rb+3,'+端'); CreateStaticText (D_ID,iY_St,'Y:',St_width); CreateEditReal (D_ID,iY_Er,editRealType,Pcp.y,Er_width); CreateRadioButton (D_ID,iZ_Rb+1,'−端'); CreateRadioButton (D_ID,iZ_Rb+2,'中央'); CreateRadioButton (D_ID,iZ_Rb+3,'+端'); CreateStaticText (D_ID,iZ_St,'Z:',St_width); CreateEditReal (D_ID,iZ_Er,editRealType,Pcp.z,Er_width); CreateStaticText (D_ID,iXM_St,'X方向',St_width); CreateEditReal (D_ID,iXM_Er,editRealType,0,Er_width); CreateStaticText (D_ID,iYM_St,'Y方向',St_width); CreateEditReal (D_ID,iYM_Er,editRealType,0,Er_width); CreateStaticText (D_ID,iZM_St,'Z方向',St_width); CreateEditReal (D_ID,iZM_Er,editRealType,0,Er_width); CreatePushButton (D_ID,iMv_Pb,'移動'); CreatePushButton (D_ID,iUd_Pb,'戻す'); SetFirstLayoutItem (D_ID,iS_Gb); AlignItemEdge (D_ID,iS_Gb,AE_Right,D_ID,AM_Resize); SetBelowItem (D_ID,iS_Gb,iM_Gb,0,0); AlignItemEdge (D_ID,iM_Gb,AE_Right,D_ID,AM_Resize); SetFirstGroupItem (D_ID,iS_Gb,iWHD_Gb); AlignItemEdge (D_ID,iWHD_Gb,AE_Right,iWHD_Gb,AM_Shift); SetBelowItem (D_ID,iWHD_Gb,iX_Gb,0,0); AlignItemEdge (D_ID,iX_Gb,AE_Right,iWHD_Gb,AM_Shift); SetBelowItem (D_ID,iX_Gb,iY_Gb,0,0); SetBelowItem (D_ID,iY_Gb,iZ_Gb,0,0); SetFirstGroupItem (D_ID,iWHD_Gb,iW_St); SetRightItem (D_ID,iW_St,iW_Er,0,0); SetBelowItem (D_ID,iW_St,iH_St,0,0); SetRightItem (D_ID,iH_St,iH_Er,0,0); SetBelowItem (D_ID,iH_St,iD_St,0,0); SetRightItem (D_ID,iD_St,iD_Er,0,0); SetFirstGroupItem (D_ID,iX_Gb,iX_Rb+1); SetRightItem (D_ID,iX_Rb+1,iX_Rb+2,0,0); SetRightItem (D_ID,iX_Rb+2,iX_Rb+3,0,0); SetRightItem (D_ID,iX_Rb+3,iX_St,0,0); SetRightItem (D_ID,iX_St,iX_Er,0,0); SetFirstGroupItem (D_ID,iY_Gb,iY_Rb+1); SetRightItem (D_ID,iY_Rb+1,iY_Rb+2,0,0); SetRightItem (D_ID,iY_Rb+2,iY_Rb+3,0,0); SetRightItem (D_ID,iY_Rb+3,iY_St,0,0); SetRightItem (D_ID,iY_St,iY_Er,0,0); SetFirstGroupItem (D_ID,iZ_Gb,iZ_Rb+1); SetRightItem (D_ID,iZ_Rb+1,iZ_Rb+2,0,0); SetRightItem (D_ID,iZ_Rb+2,iZ_Rb+3,0,0); SetRightItem (D_ID,iZ_Rb+3,iZ_St,0,0); SetRightItem (D_ID,iZ_St,iZ_Er,0,0); SetFirstGroupItem (D_ID,iM_Gb,iXM_St); SetRightItem (D_ID,iXM_St,iXM_Er,0,0); SetBelowItem (D_ID,iXM_St,iYM_St,0,0); SetRightItem (D_ID,iYM_St,iYM_Er,0,0); SetBelowItem (D_ID,iYM_St,iZM_St,0,0); SetRightItem (D_ID,iZM_St,iZM_Er,0,0); SetRightItem (D_ID,iYM_Er,iMv_Pb,0,0); AlignItemEdge (D_ID,iMv_Pb,AE_Right,iWHD_Gb,AM_Shift); SetBelowItem (D_ID,iMv_Pb,iUd_Pb,0,0); AlignItemEdge (D_ID,iUd_Pb,AE_Right,iWHD_Gb,AM_Shift); IF VerifyLayout(d_ID) THEN D_Res := RunLayoutDialog(D_ID,HandleEvents); 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; SetTool(s3DSelect); { DoMenuTextByName('Standard Views',SV_Chunk);} ForEachObjectInLayer(Get_SelectHandle,objOptions,travOptions,layerOptions); IF TO_hd<>NIL THEN BEGIN IF NextSObj(TO_hd)<>NIL THEN BEGIN AlertCritical('複数選択されています','選択し直して下さい'); {プロパティで対応可} GOTO 999; END; {!「GetObjectVariableBoolean」は図形が選択されていないと、無限ループする ハイブリッドオブジェクトは、表示(2D、3D)で判定が違う} IF GetObjectVariableBoolean(TO_hd,vObjectIs3D) THEN Dialog3D_Move(TO_hd) ELSE AlertCritical('3Dオブジェクトではありません','選択し直して下さい'); {プロパティで対応可} END ELSE AlertCritical('図形が選択されていません','選択し直して下さい'); {プロパティで対応可} 999:END; Run(Move_3D);