home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
OBJSUBS.TXT
< prev
next >
Wrap
Text File
|
1997-04-22
|
7KB
|
299 lines
<!---------------------------------------------------------->
Procedure DeriveArcBBox(CenterX,CenterY,Rad:REAL; VAR X1,Y1,X2,Y2:REAL);
BEGIN
X1:=CenterX-Rad;
Y1:=CenterY+Rad;
X2:=CenterX+Rad;
Y2:=CenterY-Rad;
END;
<!---------------------------------------------------------->
Procedure DeriveOvalBBox(CenX,CenY,HorAx,VerAx:REAL; VAR X1,Y1,X2,Y2:REAL);
BEGIN
X1:=CenX-HorAx;
Y1:=CenY+VerAx;
X2:=CenX+HorAx;
Y2:=CenY-VerAx;
END;
<!---------------------------------------------------------->
Procedure CircleByCtrRad(CenX,CenY,Rad:REAL);
VAR
X1,Y1,X2,Y2:REAL;
BEGIN
X1:=CenX-Rad;
Y1:=CenY+Rad;
X2:=CenX+Rad;
Y2:=CenY-Rad;
Oval(X1,Y1,X2,Y2);
END;
<!---------------------------------------------------------->
Procedure ArcByCtrRad(CenX,CenY,Rad,StartAngle,SweepAngle:REAL);
VAR
X1,Y1,X2,Y2:REAL;
BEGIN
X1:=CenX-Rad;
Y1:=CenY+Rad;
X2:=CenX+Rad;
Y2:=CenY-Rad;
Arc(X1,Y1,X2,Y2,StartAngle,SweepAngle);
END;
<!---------------------------------------------------------->
Procedure ArcPoints(ArcHd:HANDLE;VAR StartX,StartY,EndX,EndY:REAL);
VAR
StartAngle,ArcAngle,SweepAngle,R,CenX,CenY:REAL;
BEGIN
GetArc(ArcHd,StartAngle,ArcAngle);
R:=(HPerim(ArcHd)/(Deg2Rad(ArcAngle)))*12;
HCenter(ArcHd,CenX,CenY);
StartX:=CenX+(R*(cos(Deg2Rad(StartAngle))));
StartY:=CenY+(R*(sin(Deg2Rad(StartAngle))));
SweepAngle:=ArcAngle+StartAngle;
EndX:=CenX+(R*(cos(Deg2Rad(SweepAngle))));
EndY:=CenY+(R*(sin(Deg2Rad(SweepAngle))));
END;
<!---------------------------------------------------------->
Function ArcRadius(ArcHd:HANDLE):REAL;
VAR
AAng,Rad:REAL;
BEGIN
AAng:=HAngle(ArcHd);
Rad:=(HPerim(ArcHd)*12/Deg2Rad(AAng));
ArcRadius:=Rad;
END;
<!---------------------------------------------------------->
Procedure ObjectInfo(ObjectHd:HANDLE;VAR LayerN,ClassN,NameN:STRING;VAR Type,FillPatNum,LStyleNum,LWt :INTEGER);
VAR
LayerHd:HANDLE;
BEGIN
LayerHd:=GetLayer(ObjectHd);
LayerN:=GetLName(LayerHd);
ClassN:=GetClass(ObjectHd);
NameN:=GetName(ObjectHd);
Type:=GetType(ObjectHd);
FillPatNum:=GetFPat(ObjectHd);
LStyleNum:=GetLS(ObjectHd);
LWt:=GetLW(ObjectHd);
END;
<!---------------------------------------------------------->
Procedure ObjectGeom2D(ObjectHd: HANDLE;VAR BBoxX1,BBoxY1,BBoxX2,BBoxY2,Ht,Width,Area,Perim:REAL);
BEGIN
GetBBox(ObjectHd,BBoxX1,BBoxY1,BBoxX2,BBoxY2);
Ht:=HHeight(ObjectHd);
Width:=HWidth(ObjectHd);
Area:=HArea(ObjectHd);
Perim:=HPerim(ObjectHd);
END;
<!---------------------------------------------------------->
Procedure ObjectGeom3D(ObjectHd: HANDLE;VAR Ht,Width,Depth,CenX,CenY,CenZ:REAL);
BEGIN
Get3DInfo(ObjectHd,Ht,Width,Depth);
Get3DCnter(ObjectHd,CenX,CenY,CenZ);
END;
<!---------------------------------------------------------->
Procedure TextInfo(ObjectHd:HANDLE;VAR ContentStr:STRING;FontID,Size,StyleSum:INTEGER);
BEGIN
ContentStr:=GetText(ObjectHd);
FontID:=GetFont(ObjectHd);
Size:=GetSize(ObjectHd);
StyleSum:=GetStyle(ObjectHd);
END;
<!---------------------------------------------------------->
Procedure StyleReader(StyleIndex:INTEGER;VAR IsPlain,IsBold,IsItal,IsUnd,IsOutL,IsShad:BOOLEAN);
VAR
StyleArray:ARRAY [1..6] OF BOOLEAN;
i,FlagCompare:INTEGER;
BEGIN
i:=1;
FlagCompare:=16;
StyleArray[1]:=FALSE;
StyleArray[2]:=FALSE;
StyleArray[3]:=FALSE;
StyleArray[4]:=FALSE;
StyleArray[5]:=FALSE;
IsPlain:=FALSE;
WHILE StyleIndex > 0 DO BEGIN
IF StyleIndex >= FlagCompare THEN BEGIN
StyleIndex:=StyleIndex-FlagCompare;
StyleArray[i]:=TRUE;
END;
i:=i+1;
FlagCompare:=FlagCompare DIV 2;
IF (FlagCompare = 0) THEN FlagCompare:=1;
END;
IsShad:=StyleArray[1];
IsOutL:=StyleArray[2];
IsUnd:=StyleArray[3];
IsItal:=StyleArray[4];
IsBold:=StyleArray[5];
IF NOT (IsShad)&(NOT IsOutL)&(NOT IsUnd)&(NOT IsItal)&(NOT IsBold) THEN
IsPlain:=TRUE;
END;
<!---------------------------------------------------------->
Function TraverseWall(WallHd:HANDLE;SymbolName:STRING;SelectStat:BOOLEAN):HANDLE;
VAR
Hd:HANDLE;
Type:INTEGER;
Nm:STRING;
Sel,Hit:BOOLEAN;
BEGIN
Hd:=FIn3D(WallHd);
WHILE (Hd<>NIL) AND (NOT Hit) DO BEGIN
Type:=GetType(Hd);
IF Type=15 THEN BEGIN
SelectStat:=Selected(Hd);
Nm:=GetSymName(Hd);
IF ((Nm=SymbolName)AND(SelectStat=Sel)) THEN Hit:=TRUE;
END
ELSE BEGIN
Hd:=NextObj(Hd);
END;
END;
TraverseWall:=Hd;
END;
<!---------------------------------------------------------->
Function TraverseWallName(WallHd:HANDLE):STRING;
VAR
Hd:HANDLE;
Type:INTEGER;
Nm:STRING;
Sel,Hit:BOOLEAN;
BEGIN
Hit:=FALSE;
Hd:=FIn3D(WallHd);
WHILE (Hd<>NIL) AND (NOT Hit) DO BEGIN
Type:=GetType(Hd);
IF Type=15 THEN BEGIN
IF (Selected(Hd)) THEN Hit:=TRUE;
END
ELSE BEGIN
Hd:=NextObj(Hd);
END;
END;
TraverseWallName:=GetSymName(Hd);
END;
<!---------------------------------------------------------->
Procedure MakeModelLink(LayerName,LinkName:STRING);
BEGIN
IF LinkName='NIL' THEN BEGIN
LinkName:=Concat(LayerName,' Link');
END;
LayerRef(LayerName);
ResetOrientation3D;
UnLckObjs;
SetName(LNewObj,LinkName);
LckObjs;
END;
<!---------------------------------------------------------->
Procedure SwapLink(LinkName:STRING;NewLayer:STRING);
VAR
oldLinkHd,newLinkHd,LHd:HANDLE;
name:STRING;
Found:BOOLEAN;
BEGIN
oldLinkHd:=GetObject(LinkName);
Found:=False;
LHd:=FLayer;
newLinkHd:=NIL;
WHILE (LHd<> NIL) & (NOT Found) DO BEGIN
name:=GetLName(LHd);
IF name=NewLayer THEN BEGIN
Found:=True;
newLinkHd:=LHd;
END;
LHd:=NextLayer(LHd);
END;
IF newLinkHd <> NIL THEN BEGIN
SetHDef(oldLinkHd,newLinkHd);
ResetOrientation3D;
Redraw;
END
ELSE BEGIN
AlrtDialog('Warning: new link was not found');
END;
END;
<!---------------------------------------------------------->
Procedure MoveSymInWall(h:HANDLE;dist:REAL);
VAR
sh:HANDLE;
x1,y1,x2,y2,d:REAL;
symName:STRING;
Function TraverseWallSel(WallHd:HANDLE):HANDLE;
VAR
Hd:HANDLE;
Type:INTEGER;
Sel,Hit:BOOLEAN;
BEGIN
Hit:=FALSE;
Hd:=FIn3D(WallHd);
WHILE (Hd<>NIL) AND (NOT Hit) DO BEGIN
Type:=GetType(Hd);
IF Type=15 THEN BEGIN
IF (Selected(Hd)) THEN Hit:=TRUE
ELSE
Hd:=NextObj(Hd);
END
ELSE BEGIN
Hd:=NextObj(Hd);
END;
END;
TraverseWallSel:=Hd;
END;
BEGIN
IF(GetType(h) = 68) THEN BEGIN
GetSegPt1(h,x1,y1);
sh:=TraverseWallSel(h);
IF sh <> NIL THEN BEGIN
GetSymLoc(sh,x2,y2);
symName:=GetSymName(sh);
d:=Distance(x1,y1,x2,y2);
d:=d+dist;
IF DeleteWallSym(sh) THEN
AddSymToWall(h,d,0,FALSE,FALSE,symName);
END;
END;
END;
<!---------------------------------------------------------->
Procedure SetCustomLightColor(hd:HANDLE;rpercent,gpercent,bpercent:INTEGER);
VAR
red,grn,blu:LONGINT;
FUNCTION PercentToRGB(percentage:INTEGER):LONGINT;
CONST
MAX_RGB = 65535;
VAR
calcRGB:LONGINT;
BEGIN
calcRGB:= Trunc((MAX_RGB * (percentage/100)));
Percent2RGB := calcRGB;
END;
BEGIN
red:=PercentToRGB(rpercent);
grn:=PercentToRGB(gpercent);
blu:=PercentToRGB(gpercent);
SetPenFore(hd,red,grn,blu);
END;