home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
CREATEDL.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
5KB
|
205 lines
PROCEDURE MakeLinks;
CONST
{DATA LABEL LAYER, CLASS, RECORD & FIELD NAMES}
kLegendLayerName = 'Legend';
kLegendSymName ='Key Symbol';
kLabelKeyClassName ='Key Labels';
kIDStart = 1000;
kIDRec = 'Key Symbol Data';
kIDFld = 'Next ID';
kDLinkRec ='Links';
kDLinkID ='Linked to';
kDLinkFldName ='Item';
kRec ='Instruments';
kFldItems = 'Focus,Color,Dimmer,Unit Number,Circuit,Channel,Lamp,Type,Position,Template,Ganged with,Remarks,Frame Size';
{***** DATA LABEL OPTIONS *****}
kUnlinkCreate = TRUE;
kUnlinkUpdate = TRUE;
kLinkUpdateFound = TRUE;
kLinkUpdateNew = TRUE;
kLinkDeleteBefore = TRUE;
kLinkCreateNew = TRUE;
kLinkCreateMissing = TRUE;
kLabelUpdate = TRUE;
kLabelDeleteOrphan = TRUE;
{***** OTHER LOCAL CONSTANTS *****}
kEmptyValue = '0';
VAR
userLayerHan,tHan,locHan,symHan,keyHan:HANDLE;
selGroupHan,labelGroupHan:HANDLE;
n,x1,x2,y1,y2,symRot:REAL;
i:INTEGER;
userLayerName,strItem,strID,nextID,DBRef : STRING;
PROCEDURE ParseStr(write : BOOLEAN);
VAR
fldCount, item : INTEGER;
fldItemStr, fieldName : STRING;
BEGIN
fldCount:=0;
fldItemStr:= kFldItems;
WHILE(POS(',',fldItemStr) <> 0) DO
BEGIN
item:= POS(',',fldItemStr);
fieldName:= COPY(fldItemStr,1,item-1);
IF write THEN NEWFIELD(kRec, fieldName, '0', 4, 0)
ELSE fldCount:= fldCount +1;
DELETE(fldItemStr,1,item);
END;
IF write THEN NEWFIELD(kRec, fldItemStr, '0', 4, 0)
ELSE fldCount:= fldCount +1;
END;
FUNCTION needSetUp : BOOLEAN;
VAR
flag : ARRAY[1..8] OF BOOLEAN; {result flags}
recHan, layerHan : HANDLE;
i, classIndex, counter, recCount : INTEGER;
nameStr : STRING;
BEGIN
{*** Initialize result flags ***}
FOR i:=1 TO 7 DO flag[i]:= TRUE;
flag[8]:= FALSE;
{*** CHECK FOR EXISTING DATALABEL ELEMENTS ***}
{*** Check for Layer ***}
layerHan:= FLayer;
WHILE layerHan<>NIL DO
BEGIN
IF GetLName(layerHan) = kLegendLayerName THEN flag[1]:= FALSE;
{*** The layer already exists ***}
layerHan:= NextLayer(layerHan);
END;
{*** Check for Class ***}
classIndex:= ClassNum;
counter:=0;
FOR counter:=1 TO classIndex DO IF ClassList(counter) = kLabelKeyClassName THEN flag[2]:= FALSE;
{*** The class already exists ***}
{*** Check for Record Instances ***}
recCount:= NUMRECORDS(NIL);
FOR i:= 1 TO recCount DO
BEGIN
recHan:= GETRECORD(NIL,i);
nameStr:= GetName(recHan);
IF nameStr = kRec THEN flag[3]:= FALSE;
IF nameStr = kIDRec THEN flag[4]:= FALSE;
IF nameStr = kDLinkRec THEN flag[5]:= FALSE;
END;
{*** Check for Key Symbol ***}
IF (COUNT(N=kLegendSymName)<>0) THEN flag[6]:= FALSE;
{*** Check for Key Labels ***}
IF (COUNT((L=kLegendLayerName) & (C=kLabelKeyClassName))<>0) THEN flag[7]:= FALSE;
{*** Check if set up is needed ***}
FOR i:=1 TO 7 DO IF flag[i] THEN flag[8]:= TRUE;
needSetUp:= flag[8];
END;
BEGIN
PushAttrs;
IF NOT(needSetUp) THEN
BEGIN
ANGLEVAR;
userLayerHan:= ActLayer;
userLayerName:= GetLName(userLayerHan);
GROUP;
selGroupHan:= FSActLayer;
SetDSelect(selGroupHan);
LAYER(kLegendLayerName);
keyHan:= GETOBJECT(kLegendSymName);
DBRef:=CONCAT('(''',kIDRec,'''.''',kIDFld,''')');
nextID:=EVALSTR(keyHan,DBRef);
GETSYMLOC(keyHan,x1,y1);
DSelectObj(L=kLegendLayerName);
SelectObj(C=kLabelKeyClassName);
DOMENUTEXT('Show/Snap Others');
DOMENUTEXT('Copy');
DSELECTALL;
LAYER(userLayerName);
SetSelect(selGroupHan);
symHan:= FInGroup(selGroupHan);
WHILE symHan <> NIL DO {***SYMBOL LOOP***}
BEGIN
strID:= GetName(symHan);
IF (strID='') | (strID='none') THEN
BEGIN
SETNAME(symHan,nextID);
n:= STR2NUM(nextID)+1;
nextID:= NUM2STR(0,n);
SETRFIELD(keyHan,kIDRec,kIDFld,nextID);
END;
symRot:=GETSYMROT(symHan);
SETRECORD(symHan,kRec);
GETSYMLOC(symHan,x2,y2);
NAMECLASS('tmp');
DOMENUTEXT('Paste In Place');
MoveObjs(x2-x1,y2-y1,FALSE,FALSE);
NAMEOBJECT('tempLocus');
LOCUS(x2,y2);
locHan:= GetObject('tempLocus');
Rotate(#symRot);
DELOBJECT(locHan);
tHan:=FSACTLAYER;
WHILE tHan <> NIL DO {***TEXT LABEL LOOP***}
BEGIN
strItem:=GETTEXT(tHan);
strID:= GetName(symHan);
SETRECORD(tHan,kDLinkRec);
SETRFIELD(tHan,kDLinkRec,kDLinkID,strID);
SETRFIELD(tHan,kDLinkRec,kDLinkFldName,strItem);
SETCLASS(tHan,'tmp');
tHan:= NEXTSOBJ(tHan);
END;
tHan:=FSACTLAYER;
WHILE tHan <> NIL DO
BEGIN
DSelectObj(C='tmp');
SetSelect(tHan);
Rotate(#-symRot);
{** MAYBE THIS WILL GET FIXED BEFORE RELEASE !!!!}
IF symRot = 90 THEN Rotate(#180);
IF kLabelUpdate THEN
BEGIN
strItem:=GETTEXT(tHan);
DBRef := CONCAT('(''',kRec,'''.''',strItem,''')');
strItem := EvalStr(symHan, DBRef);
IF (strItem <> kEmptyValue) THEN setText(tHan,strItem);
END;
SelectObj(C='tmp');
tHan:= NEXTSOBJ(tHan);
END; {***OF TEXT LABEL LOOP***}
NAMECLASS('None');
DSelectObj(C='tmp');
DelClass('tmp');
symHan:= NEXTSOBJ(symHan);
END; {***OF SYMBOL LOOP***}
SetSelect(selGroupHan);
UNGROUP;
END
ELSE
BEGIN
SYSBEEP;
ALRTDIALOG('This command needs certain elements. Please run the command
Set up Data Labels╔');
END;
PopAttrs;
END;
RUN(MakeLinks);