home *** CD-ROM | disk | FTP | other *** search
- Procedure SetScr;
- {
- (c)1997, Diehl Graphsoft, Inc.
- Developed by Tom Urie.
-
- This procedure draws various types of set screws.
- }
- LABEL 10,99;
-
- CONST
- Mac = FALSE;
- Filename1 = 'SetScrE.txt';
- Filename2 = 'SetScrM.txt';
- PathLength = 14;
- k1=0.6935; {Used to draw slotted head set screw with non-detailed threads.}
- kps1 = 0.75; {Determines the pen size for dashed lines}
- kps2 = 1.25; {Determines the pen size for solid lines}
-
- VAR
- a,a1,b,c,c1,c2,c3,c4,ch,d,h,L,TL,r1,rh,sw,sd,sl : REAL;
- di,f,j,p,td,tpi,x0,y0 : REAL;
- tpic,tpif : ARRAY[1..3] OF REAL;
- i,nthds,Type,Point,ThdType,View,SizeLgth : INTEGER;
- Size,Sz,Size1,Pathname : STRING;
- Ans,Abort,Inch,OK,SizeNotFound,UNC : BOOLEAN;
-
- SF,UPI : REAL;
- Fmt : INTEGER;
- UM,UM2 : STRING;
- UName,DA : LONGINT;
-
- Procedure SetScrDialog;
- VAR
- Width,x1,y1,x2,y2,px1,px2,px3,px4,py1,py2,py3,py4 : INTEGER;
-
- Procedure AlignScr(Width:INTEGER; VAR x1,x2:INTEGER);
- VAR
- scrx1,scry1,scrx2,scry2:INTEGER;
- BEGIN
- GetScreen(scrx1,scry1,scrx2,scry2);
- x1:=((scrx1+scrx2) div 2)-(Width div 2);
- x2:=x1+Width;
- END;
-
- Procedure LocateButtons(DialogType,scnh,scnw : INTEGER);
- {
- This procedure locates the 'OK' and 'Cancel' buttons.
- }
- VAR
- v1,v2,v3,v4 : INTEGER;
- Mac : BOOLEAN;
-
- Procedure Swap(VAR m1,m2,m3,m4 : INTEGER);
- VAR
- Temp : INTEGER;
- BEGIN
- Temp:=m1;
- m1:=m3;
- m3:=Temp;
- Temp:=m2;
- m2:=m4;
- m4:=Temp;
- END; {of Swap}
-
- BEGIN
- Mac:=FALSE;
- PathName:='External\Data\';
- GetVersion(v1,v2,v3,v4);
- IF v4 = 1 THEN
- BEGIN
- Mac:=TRUE;
- PathName:=':Externals:External Data:';
- END;
-
- IF DialogType = 1 THEN
- BEGIN
- px1:=(scnw DIV 2) - 80;
- px2:=(scnw DIV 2) - 10;
- px3:=(scnw DIV 2) + 10;
- px4:=(scnw DIV 2) + 80;
- IF Mac THEN SWAP(px1,px2,px3,px4);
-
- py1:=scnh-40;
- py2:=scnh-20;
- py3:=py1;
- py4:=py2;
- END ELSE IF DialogType = 2 THEN
- BEGIN
- px1:=scnw - 180;
- px2:=scnw - 110;
- px3:=scnw - 90;
- px4:=scnw - 20;
- IF Mac THEN SWAP(px1,px2,px3,px4);
-
- py1:=scnh-40;
- py2:=scnh-20;
- py3:=py1;
- py4:=py2;
- END ELSE
- BEGIN
- px1:=scnw - 90;
- px2:=scnw - 20;
- px3:=px1;
- px4:=px2;
-
- py1:=scnh -70;
- py2:=scnh - 50;
- py3:=scnh - 40;
- py4:=scnh - 20;
- IF Mac THEN SWAP(py1,py2,py3,py4);
- END;
- END; {of Locate Buttons}
-
- Procedure MakeDialog1;
- {
- This procedure creates the main dialog box.
- }
- CONST
- y1=100;
- scnh=250;
- scnw=420;
- DialogType =2;
-
- VAR
- g,h : INTEGER;
-
- BEGIN
- AlignScr(scnw,x1,x2);
- y2:=y1+scnh;
-
- LocateButtons(DialogType,scnh,scnw);
-
- BeginDialog(1,1,x1,y1,x2,y2);
- AddButton('OK',1,1,px1,py1,px2,py2);
- AddButton('Cancel',2,1,px3,py3,px4,py4);
-
- h:=5;
- AddField('Type of Head:',4,1,20,h-1,145,15+h);
- AddButton('Square',5,3,20,65+h,85,80+h);
- AddField('',29,1,90,65+h,125,80+h);
- AddButton('Slotted',6,3,20,45+h,85,60+h);
- AddField('',30,1,90,45+h,125,60+h);
- AddButton('Hex Socket',7,3,20,25+h,125,40+h);
-
- AddField('Type of Point:',8,1,150,h-1,275,15+h);
- AddButton('Cup/Flat',9,3,150,25+h,230,40+h);
- AddButton('Full Dog',10,3,150,45+h,230,60+h);
- AddButton('Half Dog',11,3,150,65+h,230,80+h);
- AddButton('Oval',12,3,240,25+h,290,40+h);
- AddButton('Cone',13,3,240,45+h,290,60+h);
-
- AddField('View:',14,1,330,h-1,405,15+h);
- AddButton('Top',15,3,330,45+h,375,60+h);
- AddButton('Side',16,3,330,25+h,375,40+h);
-
- h:=100;
- AddField('Series:',24,1,20,4+h,65,20+h);
- AddButton('Inch',25,3,70,5+h,120,20+h);
- AddButton('Metric',26,3,130,5+h,200,20+h);
-
- h:=130;
- AddField('Size:',20,1,20,4+h,65,20+h);
- AddField('',21,2,70,5+h,135,20+h);
- AddField('in',27,1,143,4+h,165,20+h);
-
- AddField('Length:',22,1,20,29+h,65,45+h);
- AddField('',23,2,70,30+h,135,45+h);
- AddField('in',28,1,143,29+h,165,45+h);
-
- h:=105;
- g:=200;
- AddField('Threads:',34,1,20+g,h-1,75+g,h+15);
- AddButton('UNC',35,3,80+g,h,140+g,h+15);
- AddButton('UNF',36,3,145+g,h,205+g,h+15);
-
- h:=100;
- AddButton('Type 1 (dashed lines)',37,3,20+g,h+25,200+g,h+40);
- AddButton('Type 2 (solid lines)',38,3,20+g,h+45,200+g,h+60);
- AddButton('Type 3 (detailed threads)',39,3,20+g,h+65,190+g,h+80);
-
- EndDialog;
- END;
-
- BEGIN
- MakeDialog1;
- END;
-
- Procedure GetData(Type:INTEGER);
- {
- This procedure opens the data file and retreives the data for the selected screw.
- }
- LABEL 5,10,99;
-
- VAR
- File,Filename,WarningStr : STRING;
-
- BEGIN
- SizeNotFound:=FALSE;
- IF Inch=True THEN
- File:=Filename1
- ELSE
- File:=Filename2;
- Filename:=Concat(Pathname,File);
- Open(Filename);
-
- IF FndError THEN BEGIN
- ClrDialog;
- Sysbeep;
- WarningStr:=Concat('The data file <',File,'> cannot be found. Check your Toolkit Manual for further explanation.');
- AlrtDialog(WarningStr);
- Abort:=TRUE;
- GoTo 99;
- END;
-
- WHILE NOT Eoln(Filename) DO BEGIN
- ReadLn(Sz,d,tpic[1],tpif[1],tpic[2],tpif[2],tpic[3],tpif[3],j);
- IF Sz=Size THEN BEGIN
- IF tpic[Type] = 0 THEN
- GOTO 5
- ELSE
- GOTO 10;
- END;
- END;
-
- 5:Close(Filename);
- SysBeep;
- AlrtDialog('That size is not available!');
- SizeNotFound:=TRUE;
- GoTo 99;
-
- 10:Close(Filename);
-
- 99:END;
-
- Procedure GetInfo;
- {
- This procedure displays the main dialog box and retreives the information input by the user.
- }
- LABEL 10,15,20,99;
-
- VAR
- Done : BOOLEAN;
- Item : INTEGER;
- RFlag : ARRAY [1..6] OF INTEGER;
-
- Procedure SetRButton(i,Item : INTEGER);
- BEGIN
- IF RFlag[i] <> Item THEN BEGIN
- SetItem(RFlag[i],FALSE);
- SetItem(Item,TRUE);
- RFlag[i]:=Item;
- END;
- END;
-
- BEGIN
- Done:=FALSE;
- Abort:=FALSE;
- Type:=3;
- Point:=1;
- View:=2;
- ThdType:=1;
- Inch:=TRUE;
- UNC:=TRUE;
-
- Size:='1/2';
- L:=1.000;
-
- RFlag[1]:=7;
- RFlag[2]:=9;
- RFlag[3]:=16;
- RFlag[4]:=25;
- RFlag[5]:=35;
- RFlag[6]:=37;
-
- GetDialog(1);
- SetTitle('Set Screws');
- SetItem(RFlag[1],TRUE);
- SetItem(RFlag[2],TRUE);
- SetItem(RFlag[3],TRUE);
- SetItem(RFlag[4],TRUE);
- SetItem(RFlag[5],TRUE);
- SetItem(RFlag[6],TRUE);
- SetField(21,Size);
- SetField(23,Num2Str(3,L));
- SelField(21);
-
- 15:REPEAT
- DialogEvent(Item);
- IF Item=1 then
- Done:=True;
-
- IF Item=2 THEN
- BEGIN
- Done:=TRUE;
- Abort:=TRUE;
- END;
-
- IF (Item = 5) OR (Item = 6) THEN
- BEGIN
- IF Inch THEN
- BEGIN
- SetRButton(1,Item);
- Type:=Item-4;
- END
- ELSE BEGIN
- SysBeep;
- SetRButton(1,7);
- Type:=3;
- END;
- END;
-
- IF Item = 7 THEN
- BEGIN
- SetRButton(1,Item);
- Type:=Item-4;
- END;
-
- IF (Item > 8) AND (Item < 14) THEN
- BEGIN
- SetRButton(2,Item);
- Point:=Item-8;
- END;
-
- IF Item = 15 THEN
- BEGIN
- SetRButton(3,15);
- View:=1;
- SetField(23,'n/a');
- END;
-
- IF Item = 16 THEN
- BEGIN
- SetRButton(3,16);
- View:=2;
- SetField(23,Num2StrF(L));
- END;
-
- IF Item = 25 THEN
- BEGIN
- SetRButton(4,Item);
- Inch:=TRUE;
- SetField(27,'in');
- SetField(28,'in');
- SetField(29,'');
- SetField(30,'');
- SelField(21);
- END;
-
- IF Item = 26 THEN
- BEGIN
- SetRButton(4,Item);
- Inch:=FALSE;
- SetField(27,'mm');
- SetField(28,'mm');
- SetField(29,'<n/a>');
- SetField(30,'<n/a>');
- SetRButton(1,7);
- Type:=3;
- SelField(21);
- END;
-
- IF (Item = 35) OR (Item = 36) THEN
- BEGIN
- SetRButton(5,Item);
- IF Item = 35 THEN UNC:=TRUE
- ELSE UNC:=FALSE;
- END;
-
- IF (Item > 36) AND (Item < 40) THEN
- BEGIN
- SetRButton(6,Item);
- ThdType:=Item-36;
- END;
-
- UNTIL Done;
-
- IF Abort THEN GOTO 99;
- Size1:=GetField(21);
- Size:=Concat('''',Size1,'''');
- UprString(Size);
-
- OK:=ValidNumStr(GetField(23),L);
- IF (View = 2) AND (L <= 0) THEN BEGIN
- Sysbeep;
- Done:=FALSE;
- SelField(23);
- GOTO 15;
- END;
-
- GetData(Type);
- IF Abort THEN GOTO 99;
- IF SizeNotFound THEN
- BEGIN
- Done:=FALSE;
- SelField(21);
- GOTO 15;
- END;
-
- 99:ClrDialog;
- END;
-
- Procedure DrawTop(Type:INTEGER);
- {
- This procedure draws the top view.
- }
- BEGIN
- Absolute;
- MoveTo(x0,y0);
- Relative;
- IF Type=1 THEN BEGIN
- a:=d;
- Move(0,0.70711*a);
- Closepoly;
- Poly(a,#-45,a,#-135,a,#135);
- END
- ELSE IF Type=2 THEN BEGIN
- sw:=d/6;
- sd:=d/4;
- sl:=2*sqrt((d/2)^2-(sw/2)^2);
- Arc(-d/2,d/2,d/2,-d/2,#0,#360);
- Move(-sw/2,sl/2);
- Line(0,-sl);
- Move(sw,0);
- Line(0,sl);
- END
- ELSE BEGIN
- f:=0.5774*j;
- Arc(-d/2,d/2,d/2,-d/2,#0,#360);
- Arc(-di/2,di/2,di/2,-di/2,#0,#360);
- Move(0,f);
- Closepoly;
- Poly(f,#-30,f,#-90,f,#-150,f,#150,f,#90);
- END;
- Group;
- END;
-
- Function ThdLgth(Type,Point:integer):REAL;
- {
- This procedure determines the length of the threads on the screw. It also calculates various parameters used to draw the
- screw.
- }
- BEGIN
- IF Type=1 THEN BEGIN
- rh:=2.5*d;
- h:=3*d/4;
- a:=d;
- a1:=a/0.70711;
- c2:=0;
- c3:=rh-sqrt(rh^2-(a1/2)^2);
- c4:=0.76733*(a1/2-d/2);
- END
- ELSE IF Type=2 THEN BEGIN
- rh:=d;
- sw:=d/6;
- sd:=d/4;
- c2:=rh-sqrt(rh^2-(d/2)^2);
- END
- ELSE
- c2:=(d-di)/2;
- IF Point = 1 THEN BEGIN
- b:=3*d/5;
- ch:={(d-b)/2}p;
- c1:=ch;
- END
- ELSE IF (Point=2) OR (Point=3) THEN BEGIN
- b:=di;
- c:=d/(2*Point-2);
- ch:=0.35010*(d-b);
- c1:=c+ch;
- END
- ELSE IF Point=4 THEN BEGIN
- r1:=3*d/4;
- c1:=r1-sqrt(r1^2-(d/2)^2);
- END
- ELSE BEGIN
- c1:=d/2;
- END;
- ThdLgth:=L-(c1+c2);
- END;
-
- Procedure DrawPoint1(Point : INTEGER);
- {
- This procedure draws the point of a set screw with non-detailed threads.
- }
- BEGIN
- Relative;
- Move(-d/2,c1);
- OpenPoly;
- IF (Point = 1) OR (Point = 2) OR (Point = 3) THEN
- Poly(0,0,(d-b)/2,-ch,b,0,(d-b)/2,ch);
- IF (Point = 2) OR (Point = 3) THEN BEGIN
- ClosePoly;
- Move(-(d-b)/2,-ch);
- Poly(0,0,0,-c,-b,0,0,c);
- END;
- IF Point = 4 THEN BEGIN
- BeginPoly;
- LineTo(0,0);
- CurveThrough(d/2,-c1);
- Lineto(d/2,c1);
- EndPoly;
- END;
- IF Point = 5 THEN
- Poly(0,0,d/2,-c1,d/2,c1);
- END;
-
- Procedure DrawPoint2(Point : INTEGER);
- {
- This procedure draws the point of a set screw with detailed threads.
- }
- BEGIN
- Relative;
- Move(-d/2,c1);
- OpenPoly;
- IF (Point = 1) OR (Point = 2) OR (Point = 3) THEN
- Poly(0,0, (d-b)/2,-ch, b,0, (d-b)/2-td/2,ch-p/4, -td/2,p/4);
- IF (Point = 2) OR (Point = 3) THEN BEGIN
- ClosePoly;
- Move(0,-ch);
- Poly(0,0,0,-c,-b,0,0,c);
- END;
- IF Point = 4 THEN BEGIN
- BeginPoly;
- LineTo(0,0);
- CurveThrough(d/2,-c1);
- Lineto(d/2-td/2,c1-p/4);
- Lineto(-td/2,p/4);
- EndPoly;
- END;
- IF Point = 5 THEN
- Poly(0,0, d/2,-c1, d/2-td/2,c1-p/4, -td/2,p/4);
- END;
-
-
- Procedure Curve(x,y : REAL);
- {
- This procedure draws a curve through three points.
- }
- BEGIN
- LineTo(0,0);
- CurveThrough(x/2,y);
- Lineto(x/2,-y);
- END;
-
- Procedure DrawHead1(Type : INTEGER);
- {
- This procedure draws the heads on set screws with non-detailed threads.
- }
- BEGIN
- Relative;
- IF Type = 1 THEN
- BEGIN
- Move(-a1/2,h-c3);
- OpenPoly;
- BeginPoly;
- Curve(a1,c3);
- EndPoly;
- Move(0,-(h-(c3+c4)));
- Poly(0,0,-(a1-d)/2,-c4,-d,0,-(a1-d)/2,c4);
- ClosePoly;
- BeginPoly;
- LineTo(0,0);
- LineTo(0,(h-(c3+c4)));
- Curve(a1/2,c3/2);
- LineTo(0,-(h-(c3+c4)));
- Curve(-a1/2,-c3/2);
- EndPoly;
- Move(a1/2,0);
- BeginPoly;
- LineTo(0,0);
- LineTo(0,(h-(c3+c4)));
- Curve(a1/2,c3/2);
- LineTo(0,-(h-(c3+c4)));
- Curve(-a1/2,-c3/2);
- EndPoly;
- END
- ELSE IF Type = 2 THEN
- BEGIN
- {
- Move(-sw/2,-c2);
- BeginPoly;
- LineTo(0,0);
- LineTo(0,c2);
- CurveThrough(-(d-sw)/4,-(1-k1)*c2);
- LineTo(-(d-sw)/4,-k1*c2);
- EndPoly;
- Move(d,0);
- BeginPoly;
- LineTo(0,0);
- CurveThrough(-(d-sw)/4,k1*c2);
- LineTo(-(d-sw)/4,(1-k1)*c2);
- LineTo(0,-c2);
- EndPoly;
- }
-
- Move(-d/2,-c2);
- BeginPoly;
- LineTo(0,0);
- CurveThrough(d/2, c2);
- LineTo(d/2, -c2);
- EndPoly;
- END
- ELSE BEGIN
- Move(-d/2,-c2);
- Poly(0,0,c2,c2,(d-2*c2),0,c2,-c2);
- END;
- END;
-
- Procedure DrawHead2(Type : INTEGER);
- VAR
- x3,y3 : REAL;
- BEGIN
- x3:=(d-c2)/2;
- y3:=L-(Nthds*p+c1+p/2);
- Relative;
- OpenPoly;
- IF Type = 1 THEN BEGIN
- Move(-a1/2,h-c3);
- BeginPoly;
- Curve(a1,c3);
- EndPoly;
- Move(0,-(h-(c3+c4)));
- Poly(0,0, -(a1-d)/2,-c4, 0,-y3, -(d-td),0, -td/2,p/4, -td/2,y3-p/4, -(a1-d)/2,c4);
- ClosePoly;
- BeginPoly;
- LineTo(0,0);
- LineTo(0,(h-(c3+c4)));
- Curve(a1/2,c3/2);
- LineTo(0,-(h-(c3+c4)));
- Curve(-a1/2,-c3/2);
- EndPoly;
- Move(a1/2,0);
- BeginPoly;
- LineTo(0,0);
- LineTo(0,(h-(c3+c4)));
- Curve(a1/2,c3/2);
- LineTo(0,-(h-(c3+c4)));
- Curve(-a1/2,-c3/2);
- EndPoly;
- END
- ELSE IF Type = 2 THEN BEGIN
- Move(d/2,-y3);
- BeginPoly;
- LineTo(0,0);
- CurveThrough(-d/2,y3);
- LineTo(-(d-td)/2,-(y3-p/4));
- Lineto(td/2,-p/4);
- EndPoly;
- END
- ELSE BEGIN
- Move(d/2,-y3);
- Poly(0,0, -c2,y3, -(d-2*c2),0, -(c2-td/2),-(y3-p/4), td/2,-p/4);
- END;
- END;
-
- Procedure DrawThreads1(Type : INTEGER);
- {
- This procedure draws Thread Type 1 (non-detailed threads - dashed lines)
- }
- BEGIN
- Relative;
- {
- IF Type = 2 THEN
- Poly((d-sw)/2,0, 0,-(sd-c2), sw,0, 0,(sd-c2), (d-sw)/2,0, 0,-tl, -d,0, 0,tl)
- ELSE
- }
- Rect(0,0,d,-tl);
- PenPat(-2);
- PenSize(kps1*FPenSize);
- Move((d-di)/2,0);
- Line(0,-tl);
- Move(di,tl);
- Line(0,-tl);
- END;
-
- Procedure DrawThreads2(Type : INTEGER);
- {
- This procedure draws Thread Type 2 (non-detailed threads - solid lines)
- }
- BEGIN
- nThds:=tl/p;
- p:=tl/nThds;
- Relative;
- Rect(0,0,d,-tl);
- FOR i:=1 TO nThds-1 DO
- BEGIN
- Move(d, -p);
- LineTo(-d, 0);
- END;
- PenSize(kps2*FPenSize);
- Move(td, -p/2);
- FOR i:=1 TO nThds DO
- BEGIN
- LineTo(di, 0);
- Move(-di, p);
- END;
- END;
-
- Procedure DrawThreads3(d,di,p,td,Nthds : REAL);
- {
- This procedure draws Thread Type 3 (detailed threads)
- }
- BEGIN
- Relative;
- Move((d-td)/2,c1-p/4);
- ClosePoly;
- Poly(0,0, -(d-td)/2,0, di/2,p/4, td/2,-p/4);
- Move(-td/2,p/4);
- OpenPoly;
- Poly(0,0, td,p/2, -d,-p/2);
- ClosePoly;
- FOR i:= 1 TO NThds DO BEGIN
- Poly(0,0, td,p/2, di,p/2, td,-p/2);
- Move(-td,p/2);
- Poly(0,0, td,p/2, -d,-p/2, td,-p/2);
- Move(-td,p/2);
- END;
- Move(d,p/2);
- OpenPoly;
- Poly(0,0, -d,-p/2, td,p/2);
- ClosePoly;
- Poly(0,0, -td/2,p/4, (d-td)/2,0, -di/2,-p/4);
- END;
-
- BEGIN
- {
- Main Program.
- }
-
- DselectAll;
- PushAttrs;
- FillPat(1);
-
- {
- Display the main dialog box and get the information.
- }
-
- SetScrDialog;
- Ans:=FALSE;
- SetCursor(ArrowC);
- GetInfo;
- IF Abort THEN GOTO 99;
- IF UNC THEN
- tpi:=tpic[Type]
- ELSE
- tpi:=tpif[Type];
-
- {
- Get drawing units and adjust parameters accordingly.
- }
-
- GetUnits(UName,DA,Fmt,UPI,UM,UM2);
- IF Inch=TRUE THEN
- SF:=UPI
- ELSE BEGIN
- SF:=UPI/25.4;
- END;
- d:=SF*d;
- j:=SF*j;
- L:=SF*L;
- tpi:=tpi/SF;
- td:=0.86603/tpi;
- p:=2*td*Tan(PI/6);
- di:=d-2*td;
-
- {
- Get the location of the screw.
- }
-
- PushAttrs;
- GetPt(x0,y0);
-
- {
- Get thread length and parameters needed to draw screw; determine the number of threads;
- }
-
- TL:=ThdLgth(Type,Point);
- p:=1/tpi;
- Nthds:=TL*tpi-1;
- IF (L-c1-c2-NThds*p) > p THEN
- NThds:=NThds+1;
- IF Type = 1 THEN
- NThds:=NThds-1;
-
- {
- Draw top view
- }
-
- IF View=1 THEN BEGIN
- Absolute;
- MoveTo(x0,y0);
- DrawTop(Type);
- GOTO 99;
- END;
-
- {
- Draw side view.
- }
- {
- Draw Thread TYpes 1 & 2.
- }
-
- IF (ThdType = 1) OR (ThdType = 2) THEN BEGIN
- Absolute;
- MoveTo(x0,y0);
- DrawPoint1(Point);
- Absolute;
- MoveTo(x0,y0+L);
- DrawHead1(Type);
- Absolute;
- MoveTo(x0-d/2,y0+L-c2);
- IF ThdType = 1 THEN
- DrawThreads1(Type)
- ELSE
- DrawThreads2(Type);
- END
-
- {
- Draw Thread Type 3 (Detailed threads).
- }
-
- ELSE BEGIN
- {p:=1/tpic;
- Nthds:=TL*tpic-1;
- IF (L-c1-c2-NThds*p) > p THEN
- NThds:=NThds+1;
- IF Type = 1 THEN
- NThds:=NThds-1;}
-
- Absolute;
- MoveTo(x0,y0);
- DrawPoint2(Point);
- Absolute;
- MoveTo(x0,y0+L);
- DrawHead2(Type);
- Absolute;
- MoveTo(x0,y0);
- DrawThreads3(d,di,p,td,Nthds);
- END;
- Group;
- PopAttrs;
- 99:END;
-
- RUN(SetScr);
-