home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
GRIDNTRY.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
6KB
|
203 lines
PROCEDURE EnterPoints;
LABEL 1,2;
CONST
kPromptString = ' Click at upper left corner start point╔ ';
kBaseElev = 0.0;
kLocus3DType = 9;
kMaxCoord = 536870912.0; { MaxLongInt = (2**31) / 4 }
VAR
frac,dispAcc,red,green,blue : LONGINT;
unitMrk,sqrUnitMrk : STRING;
str1, str2, rowStr, colStr, location : STRING;
index, count, r, c, format, counter, badFld, ck : INTEGER;
x, y, curX, curY, curZ, colNum, rowNum : REAL;
numRows, numCols, gridFreq, total : REAL;
locusX,locusY,locusZ,upi : REAL;
item, Dlogx1, DLogy1, Dlogx2, DLogy2 : INTEGER;
cancel,finished,gridDone,outOfBounds : BOOLEAN;
locHandle : HANDLE;
{***************************************************}
{* Proc EnterPoints by Frank Brault *}
{***************************************************}
PROCEDURE CenterDialog(dX1,dX2 : INTEGER; VAR x1,x2 : INTEGER);
VAR
scrX1,scrY1,scrX2,scrY2,w : INTEGER;
BEGIN
GetScreen(scrX1,scrY1,scrX2,scrY2);
w := dX2 - dX1;
x1 := ((scrX1 + scrX2) DIV 2) - (w DIV 2);
x2 := x1 + w;
END;
PROCEDURE LowDialog(width,height : INTEGER; VAR x1,y1,x2,y2 : INTEGER);
CONST
kScreenSpace = 16;
VAR
scrX1,scrY1,scrX2,scrY2 : INTEGER;
BEGIN
GetScreen(scrX1,scrY1,scrX2,scrY2);
x1 := ((scrX1 + scrX2) DIV 2) - (width DIV 2);
x2 := x1 + width;
y2 := scrY2 - kScreenSpace;
y1 := y2 - height;
END;
PROCEDURE alertUser(fldNum : INTEGER);
BEGIN
SysBeep;
finished := FALSE;
selField(fldNum);
END;
BEGIN
Absolute;
PushAttrs;
gridDone := FALSE;
locHandle := FSACTLAYER;
IF locHandle <> NIL THEN BEGIN
IF (GetType(locHandle) = kLocus3DType) THEN gridDone :=
YNDialog('Shall I start accepting heights at the selected 3D Locus?');
IF gridDone THEN GOTO 1;
END;
DSelectAll;
FOR index := Len(kPromptString) DOWNTO 1 DO BEGIN
count := Len(kPromptString) - index;
str1 := Copy(kPromptString, index, count);
Message(str1);
END;
SetCursor(lgCrossC);
GetPt(x, y);
SetCursor(arrowC);
ClrMessage;
CenterDialog(0,320,Dlogx1,Dlogx2);
BeginDialog(1,1,Dlogx1,167,Dlogx2,373);
AddButton('OK',1,1,239,167,303,190);
AddButton('Cancel',2,1,158,168,222,191);
AddField('__________________________________',3,1,14,22,306,40);
AddField('Point Entry Grid Setup Dialog',4,1,14,14,217,32);
AddField('Number Of Grid Rows :',5,1,35,54,193,72);
AddField('Number Of Grid Columns :',6,1,14,87,193,105);
AddField('Grid Spacing :',7,1,93,119,189,137);
AddField('',8,2,210,57,285,72);
AddField('',9,2,210,88,285,103);
AddField('',10,2,210,120,285,135);
EndDialog;
GetDialog(1);
finished := FALSE;
cancel:= FALSE;
REPEAT DialogEvent(item);
IF item = 2 THEN
BEGIN
finished := TRUE;
cancel := TRUE;
END;
IF item = 1 THEN BEGIN
finished := TRUE;
{** Check for unusable field entries }
badFld := 0;
FOR ck := 8 TO 10 DO BEGIN
IF (str2Num(GetField(ck)) <= 0) THEN badFld := ck;
IF NOT(ValidNumStr(GetField(ck), numRows)) THEN badFld := ck;
END;
IF (badFld <> 0) THEN alertUser(badFld);
END;
UNTIL finished;
IF cancel THEN GOTO 2;
numRows := Str2Num(GetField(8));
numCols := Str2Num(GetField(9));
gridFreq := Str2Num(GetField(10));
total := numRows * numCols;
CLRDIALOG;
{** Check the grid position against the drawing space limits. }
GetUnits(frac,dispAcc,format,upi,unitMrk,sqrUnitMrk);
IF ABS((y - gridFreq)*frac) > kMaxCoord THEN outOfBounds := TRUE;
IF ABS((y - (numRows * gridFreq)) * frac) > kMaxCoord THEN outOfBounds := TRUE;
IF ABS((x + gridFreq) * frac) > kMaxCoord THEN outOfBounds := TRUE;
IF ABS((x + (numCols * gridFreq)) * frac) > kMaxCoord THEN outOfBounds := TRUE;
IF outOfBounds THEN BEGIN
SYSBEEP;
ALRTDIALOG('Change the scale to a higher ratio to enter these points within the drawing bounds.');
GOTO 2;
END;
MESSAGE('One moment please╔');
SetCursor(WATCHC);
fPenFore(red,green,blue);
PenFore(65535,0,0);
{** Enter the Grid }
curZ := kBaseElev;
FOR r := 0 TO (numRows - 1) DO BEGIN
curY := y - (r * gridFreq);
FOR c := 0 TO (numCols - 1) DO BEGIN
curX := x + (c * gridFreq);
Locus3D(curX,curY,curZ);
END;
END;
PenFore(red,green,blue);
DoMenuText('Fit To Objects');
1:locHandle := FSActLayer;
ClrMessage;
SetCursor(ARROWC);
DSelectAll;
SetSelect(locHandle);
ReDrawAll;
LowDialog(560,42,Dlogx1,DLogy1,Dlogx2,DLogy2);
BeginDialog(2,1,Dlogx1,DLogy1,Dlogx2,DLogy2);
AddButton('Next',1,1,486,10,550,33);
AddButton('Done',2,1,405,10,469,33);
AddField('Current Location:',3,1,9,11,133,29);
AddField('Unknown',4,1,135,11,254,29);
AddField('╞ Height:',5,1,258,11,323,29);
AddField('',6,2,331,11,381,26);
EndDialog;
GetDialog(2);
finished := FALSE;
cancel:= FALSE;
counter := 1;
GetLocus3D(locHandle,locusX,locusY,locusZ);
IF Not(gridDone) THEN SetField(4,'Row 1, Col 1');
SetField(6,Num2StrF(locusZ));
SelField(6);
REPEAT DialogEvent(item);
IF item = 2 THEN
BEGIN
finished := TRUE;
cancel := TRUE;
END;
IF item = 1 THEN BEGIN
IF ValidNumStr(GetField(6),curZ) THEN BEGIN
Move3DObj(locHandle,0,0,-(locusZ) + curZ);
SetPenFore(locHandle,0,0,0);
SetDSelect(locHandle);
locHandle := NextObj(locHandle);
IF locHandle = NIL THEN BEGIN
finished := TRUE;
cancel := TRUE;
END;
END;
SetSelect(locHandle);
IF Not(gridDone) Then Begin
counter:= counter + 1;
If ((counter Mod numCols) <> 0) then colNum := counter Mod numCols Else colNum := numCols;
If colNum = numCols Then rowNum := (counter Div numCols) Else rowNum := (counter Div numCols)+1);
rowStr := Num2Str(0,rowNum);
colStr := Num2Str(0,colNum);
location := Concat('Row ', rowStr, ', Col ',colStr);
SetField(4,location);
END;
GetLocus3D(locHandle,locusX,locusY,locusZ);
SetField(6,Num2StrF(locusZ));
SelField(6);
RedrawAll;
END;
UNTIL finished;
ClrDialog;
IF cancel THEN GOTO 2;
2:PopAttrs;
END;
RUN(EnterPoints);