MCVSISet stake datum Miscellaneous Set stake datum?!Sets stake objects to datum value{ Normalise stake object Z values to datum { Datum stake object should be selected on entry { Scans through stake objects of same class, layer and style and adjusts Z to suit new datum { {(C) Ian Hutt 2008 {} PROCEDURE setDatum; LABEL 666; CONST kStartStringAt = 3000; kOK = 1; kCancel = 2; kEditReal4 = 4; kStaticText5 = 5; kRight = 1; kBottom = 2; kLeft = 3; kResize = 0; kShift = 1; VAR dialog1 :INTEGER; gEditReal4 :REAL; xmlID :LONGINT; cnt :INTEGER; int :INTEGER; boo :BOOLEAN; str :STRING; ndx :INTEGER; datumObj : HANDLE; datumLayer : HANDLE; datumClass : STRING; dx, dy, dz : REAL; deltaZ : REAL; datumStyle : STRING; recH, wallH : HANDLE; FUNCTION ResourceIsOK :BOOLEAN; BEGIN IF SetVSResourceFile('IP Resources') THEN ResourceIsOK := TRUE ELSE Message('The "IP Resources" file was not found.'); END; PROCEDURE InvalidValue(controlID :INTEGER; var item :LONGINT; msg :STRING); BEGIN item := -1; SelField(controlID); SysBeep; IF msg <> '' THEN AlrtDialog(msg); END; FUNCTION GetStr(ndx :INTEGER) :STRING; BEGIN GetStr := GetPlugInString(ndx + kStartStringAt); END; PROCEDURE dialog1_Setup; BEGIN dialog1 := CreateLayout(GetStr( 3), True, GetStr(kOK), GetStr(kCancel)); CreateEditReal (dialog1, kEditReal4, 1, 0.0, 10); CreateStaticText (dialog1, kStaticText5, GetStr(kStaticText5), 9); SetFirstLayoutItem(dialog1, kStaticText5); SetRightItem (dialog1, kStaticText5, kEditReal4, 0, 0); AlignItemEdge(dialog1, kEditReal4, kLeft, 111, kResize); FOR cnt := 1 TO 5 DO SetHelpString(cnt, GetStr(cnt + 1000)); END; PROCEDURE dialog1_Handler(VAR item :LONGINT; data :LONGINT); BEGIN CASE item OF SetupDialogC: BEGIN SetEditReal(dialog1, kEditReal4, 1, gEditReal4); END; kOK: BEGIN IF NOT GetEditReal(dialog1, kEditReal4, 1, gEditReal4) THEN InvalidValue(kEditReal4, item, ''); END; END; END; PROCEDURE selectStake( h : HANDLE ); BEGIN IF ( GetClass( h ) = datumClass ) & ( GetLayer( h ) = datumLayer ) & ( datumStyle = GetRField( h, 'Stake Object', 'Style' )) THEN setselect( h ) ELSE setDselect( h ); END; PROCEDURE normalise( h : HANDLE ); BEGIN Move3dObj( h, 0, 0, deltaZ ); END; BEGIN DSelectObj(INSYMBOL & INVIEWPORT & (PON<>'Stake Object')); SelectObj((INSYMBOL & INVIEWPORT & (PON='Stake Object') & (SEL=TRUE))); datumObj := FSActLayer; IF ( datumObj = NIL ) THEN BEGIN AlrtDialog( 'No datum stake object selected on active layer' ); DSelectAll; GOTO 666; END; IF ( datumObj <> LSActLayer ) THEN BEGIN AlrtDialog( 'Too many datum points selected' ); DSelectAll; GOTO 666; END; datumLayer := GetLayer( datumObj ); datumClass := GetClass( datumObj ); Get3dCntr( datumObj, dx, dy, dz ); datumStyle := GetRField( datumObj, 'Stake Object', 'Style' ); DSelectAll; ForEachObject( selectStake, (INSYMBOL & INVIEWPORT & (PON='Stake Object'))); gEditReal4 := dz; IF ResourceIsOK THEN dialog1_Setup; ReDraw; IF RunLayoutDialog(dialog1, dialog1_Handler) = 1 THEN BEGIN deltaZ := gEditReal4 - dz; ForEachObject( normalise, (INSYMBOL & INVIEWPORT & (PON='Stake Object') & (SEL = TRUE))); ReDraw; END; 666: END; RUN( setDatum ); Static Text Help Text www.ianhutt.com OK Cancel Set datum value Set datumAccepts new datum valueKeep original datum valueEnter new datum valueSet datum valuePNG  IHDR@-sRGBIDATHK퓹 @D(-;-(\%P–@o-yFZ`]׽-",Y[NtEhǻ n 8#4 7ܩ뇸J)꺎ڶ(qސ[4Vy׳*eiWƂ((sβlKt(>) 1P$q; y $L83Om|߿PAyvw8q]YY dwKIENDB`