/* SCMPEDIT (SCM) -- Schematic Editor Position Pick/Element Edit */ /* SCMPEDIT (SCM) -- Schaltplaneditor Positionspick/Elementdatenmanipulation */ /* -- INTENDED FOR KEY-CALL USE (:Position Pick/Element Edit) -- */ /* // Copyright (c) 1999-2012 Oliver Bartels F+E, Muenchen // Author: Roman Ludwig // Changes History: // rl (120427) RELEASED FOR BAE V7.8. // rl (101019) RELEASED FOR BAE V7.6. // rl (091027) RELEASED FOR BAE V7.4. // rl (081014) RELEASED FOR BAE V7.2. // rl (071029) RELEASED FOR BAE V7.0. // rl (061109) ENHANCEMENT: // Added polygon display bitmap to dialog box. // rl (060929) RELEASED FOR BAE V6.8. // rl (060809) ENHANCEMENT: // Added group name and plot color edit fields. // rl (060505) ENHANCEMENT: // Added plot disable flag manipulation option. // rl (060306) ENHANCEMENT: // Added element rule manipulation option. // rl (060209) ENHANCEMENT: // Added polygon corner browse option. // rl (060131) ENHANCEMENT: // Fixed problem with rename symbol name used on different plan. // rl (060119) ENHANCEMENT: // Added snap to origin option for mouse outside workspace. // rl (051205) ENHANCEMENT: // Added left/right rotate angle buttons. // rl (051026) ENHANCEMENT: // Added attribute set button to symbol data edit box. // rl (050915) RELEASED FOR BAE V6.6. // rl (050421) ORIGINAL CODING. // // DESCRIPTION // // The scmpedit User Language program provides functions to snap to // the coordinates of elements placed at the current mouse position. */ // Includes #include "baeparam.ulh" // User Language BAE param. access #include "pop.ulh" // User Language popup utilities #include "popdraw.ulh" // User Language popup draw. util. #include "scm.ulh" // User Language SCM utilities // Disable undo state request #pragma ULCALLERNOUNDO // INI file parameter name definitions #define PAR_POLYPMODE "POLYPMODE_SCM" // Polygon pick mode #define PAR_NOPLCVAL "NOPLCVAL_SCM" // $noplc value for unplaced parts #define PAR_NOPLCPVIS "NOPLCPVIS_SCM" // $noplc/plot visibilty relationship #define PAR_SINFOWIDTH "SINFOWIDTH_SCM"// Symbol info box width #define PAR_ATTRCOMMP "ATTR_%s_STD" // Attribute comment pattern #define PAR_ATTRORDP "ATTR_ORD_%s_STD" // Attribute order pattern #define PAR_MAXEDIT "MTMAXEDIT_SCM" // Max. multi line edit length #define PAR_MTEXTORIG "MTEXTORIG_STD" // Multi line text origin mode #define PAR_TXTLSPC "TXTLSPACE_SCM" // Text line relativ spacing // Messages string UPRCSYM = M("Symbol :","Symbol :"); string UPRCLAB = M("Netzname :","Net Name :"); string UPRCPORT = M("Portname :","Port Name :"); string UPRCPIN = M("Pin :","Pin :"); string UPRCMACRO = M("Makro : ","Macro : "); string UPRPINMOVE = M("Freigabe Pinbewegung","Permit Pin Movement"); string UPRPINMODE = M("Markermodus :","Marker Mode :"); string UPRPINNMIRR = M("Nicht spiegeln","No Mirroring"); string UPRPINNROT = M("Nicht drehen","No Rotation"); string UPRPINCON = M("Autoanschluss","Autoconnection"); string UPRCTEXT = M("Text :","Text :"); string UPRCMTEXT = M("Mehrzeilentext :","Multiline Text :"); string UPRCNET = M("Netzname :","Net Name :"); string UPRCCOORD = M("Daten setzen","Set Data"); string UPRNIL = "--------"; string UPRPATTERN = M("&Muster","&Pattern"); string UPRDONE = M("&Fertig","D&one"); string UPRTPOSRESET = M("Namen/Attribute bewegen ruecksetzen", "Reset Name/Attribute moves"); string UPRTOGGLE = M("&Setzen/Loeschen","Set/Reset"); string UPRRULEBUT = M("Regeln","Rules"); string UPRDRULEH = M("Regeln fuer %s setzen/loeschen", "%s rules set/reset"); string UPRDRSTEXT = M("Standardtext '%s'","Standard text '%s'"); string UPRDRCTEXT = M("Kommentartext '%s'","Commentary text '%s'"); string UPRDRCON = M("Verbindung","Connection"); string UPRDRBUS = M("Busverbindung","Bus connection"); string UPRDRLAB = M("Label '%s'/'%s'","Label '%s'/'%s'"); string UPRDRSYM = M("Symbol '%s'/'%s'","Symbol '%s'/'%s'"); string UPRDRPIN = M("Pin '%s'/'%s'","Pin '%s'/'%s'"); string UPRNETAREA = M("Bereichsnamen ? ","Area Name ? "); string UPRRULENAME = M("Regelname :","Rule Name :"); string UPRRULESET = M("Gesetzte Regeln :","Rules set :"); string UPRRULEPROJ = M("Regeln in Projektdatei :", "Rules in Project File :"); string UPRRULEDB = M("Regeln in Datenbank :","Database Rules :"); string UPRX = M("X :","X :"); string UPRY = M("Y :","Y :"); string UPRCCOPY = M("Koordinaten kopieren","Copy Coordinates"); string UPRRADIUS = M("Radius :","Radius :"); string UPRPINDEX = M("%d von %d","%d of %d"); string UPRARCLEFT = M("Bogen links %s\260","Arc left %s\260"); string UPRARCRIGHT = M("Bogen rechts %s\260","Arc right %s\260"); string UPRPPREV = M("&<","&<"); string UPRPNEXT = M("&>","&>"); string UPRANG = M("Winkel :","Angle :"); string UPRLEFT = M("&links (+90)","&left (+90)"); string UPRRIGHT = M("&rechts (-90)","&right (-90)"); string UPRHEIGHT = M("Hoehe :","Height :"); string UPRLINESPC = M("Zeilenabstand (rel.) :","Rel. Line Spacing :"); string UPRPWIDTH = M("Stiftbreite :","Pen Width :"); string UPRCOMMENT = M("Kommentartext","Commentary Text"); string UPRCENTER = M("Zentriert :","Centered :"); string UPRCENTN = M("nein","no"); string UPRCENTH = M("Breite","Width"); string UPRCENTV = M("Hoehe","Height"); string UPRCENTHV = M("Breite+Hoehe","Width+Height"); string UPRFRAME = M("Rahmen :","Frame :"); string UPRFRAME1 = M("1","1"); string UPRFRAME2 = M("2","2"); string UPRFRAMEO = M("links offen","left hand open"); string UPRMIRROR = M("Spiegelung :","Mirroring :"); string UPRPTYP = M("Polygontyp :","Polygon Type :"); string UPRPTYPGL = M("Grafik&linie","Graphic &Line"); string UPRPTYPDL = M("&Punktlinie","&Dot Line"); string UPRPTYPGA = M("&Grafikflaeche","&Graphic Area"); string UPRPTYPCA = M("&Kontaktbereich","&Contact Area"); string UPRPTYPNA = M("&Netz-/Bauteilbereich","&Net/Part Area"); string UPRPTSTD = M("&Standard Pin","&Standard Pin"); string UPRPTSYMTAG = M("S&ymbol Tag","S&ymbol Tag"); string UPRPTPINTAG = M("&Pin Tag","&Pin Tag"); string UPRPTNETTAG = M("&Netz Tag","&Net Tag"); string UPRPTNPNTAG = M("Netzp&in Tag","Net P&in Tag"); string UPRPTNARTAG = M("Net&zbereich Tag","N&et Area Tag"); string UPRPTPARTAG = M("&Bauteilbereich Tag","P&art Area Tag"); string UPRPTBUS = M("Busanschluss","Bus Connection"); string UPRGLUED = M("Verankerung :","Glue :"); string UPRPLOTVIS = M("Plotsichtbarkeit","Plot visibility"); string UPRDON = M("ein","on"); string UPRDOFF = M("aus","off"); string UPRCGRPNAME = M("Gruppenname :","Group Name :"); string UPRCELEMCOLOR = M("PDF-Farbe :","PDF Color :"); string UPRBRWCOLOR = M("BAE-Auswahl","BAE-Selection"); string UPRDUNITMM = M("&mm","&mm"); string UPRDUNITINCH = M("&Inch","&Inch"); string UPRBROWSE = M("&Browse","&Browse"); string UPRATTRASS = M("Wert(e) &zuweisen","Assign &Value(s)"); string UPRTEXTCLASS = M("Textklasse(n)","Text Class(es)"); string UPRDASHPBUT = M("Strichelung","Dash Settings"); string UPRDASHSET = M("Strichelungseinstellungen","Dash Settings"); string UPRDWIDTH = M("Linienbreite b [mm] :","Line Width w [mm] :"); string UPRDASHLEN = M("Basislaenge l [mm] :","Basislaenge l [mm] :"); string UPRDASHSPC = M("Strichfaktor f ]0.0,0.5[ :", "Dot Factor f ]0.0,0.5[:"); string UPRGLUECHG = M("Verankertes Element aendern?", "Change glued element?"); string REPSYMATTR = M("Attribute:\n\n","Attributes:\n\n"); string REPATTRIB = "%s %.*s: '%s'"; string REPATTRVAR = M(" Var. %d"," Var. %d"); string ERRDUPNAME = M("Name '%s' ist bereits verwendet!", "Name '%s' is already in use!"); string ERRSETATT = M("Fehler bei Attributzuweisung an Bauteil/Symbol '%s'!", "Error setting attribute on part/symbol '%s'!"); string ERRSETTAG = M("Fehler bei Tagumleitung auf Bauteil/Symbol '%s'!", "Error redirection tag to part/symbol '%s'!"); string ERROUTBOUND = M("Position ausserhalb der Elementgrenzen!", "Position outside element boundaries!"); string ERRNORULE = M("Regel '%s' nicht definiert!", "Rule '%s' not defined!"); string ERRVARFUNC = M("Diese Funktion ist fuer Varianten nicht erlaubt!", "Not allowed in variant edit mode!"); string ERRNOGRPNAMES = M("Keine Elemente mit Gruppennamen!", "No elements with group name attached found!"); string WRNVARPDIS = M("Variante aktiv: nur Plotsichtbarkeit geaendert!", "Variant activ: changed only plot visibility!"); #define ITMPINNAMHD "PIN" #define ITMSMRKHD "MARKER" #define ITMNETNAMHD "NET" #define ITMATRNAMHD "ATTRIBUTES" #define ITMBUSPREFIX "BUS : " #define ITMULINE "========================================" #define ITMUDOT "......................................." #define FMTPTABH1 "%-*s %-*s %-*s %s\n" #define FMTPTABH2 "%.*s %.*s %.*s %.*s\n" #define FMTPTABF "%-*s %-*s %-*s %s\n" int ATTFLEN = 22 /* Attribute field length */; // Globals #define SMALLVAL 0.00000001 // Small compare value #define GV_PROPCALL "propcall" // Property function call flag #define GV_PROPX "propx" // Property query x coordinate #define GV_PROPY "propy" // Property query y coordinate #define LAYERINV (-0x4000) // Invalid layer code #define PICLABHEIGHT 9.0 // Label button height #define PICLABWIDTH 100.0 // Label button width #define PICLABSCOL 15 // Label button length line color #define PICLABFCOL 8 // Label button factor line color #define PICLABDCOL 1 // Label button dash line color #define DEFDASHMODE 0 // Default dash mode #define DEFDASHLEN 0.002 // Default dash length #define DEFDASHSPC 0.4 // Default dash relative spacing #define DEFDASHWIDTH 0.0 // Default dash line width double DPI = cvtangle(360.0,1,2) /* Double PI value */; int POLYPMODE = bae_iniintval(PAR_POLYPMODE,0) /* Polygon pick mode */; string NOPLCVAL = bae_inistrval(PAR_NOPLCVAL,"NP") /* $noplc value for unplaced parts */; int NOPLCPVIS = bae_iniintval(PAR_NOPLCPVIS,3) /* $noplc/plot vis. relationship */; int SINFOW = bae_inidblval(PAR_SINFOWIDTH,40.0) /* Symbol info box width */; int MAXEDIT = bae_iniintval(PAR_MAXEDIT,60000); // Max. multi line edit length int MTEXTORIG = bae_iniintval(PAR_MTEXTORIG,0); // Multi line text origin mode double LINESPC = bae_inidblval(PAR_TXTLSPC,1.0); // Text rel. line spacing double px, py /* Pick coordinates */; double pinx, piny /* Pin coordinates */; int posfound = 0 /* Position found flag */; int attrfound = 0 /* Position found flag */; int symflag = 0 /* Symbol info flag */; string curname /* Current scan part name */; double mindist /* Minimum found distance */; int figdis /* Figure list disable bits */; string rulel[] /* Rule list */; int rulen /* Rule count */; int varl[] /* Variant list */; int varn = 0 /* Variant count */; int act_var = 0 /* Active variant */; int act_flag /* Active variant defined flag */; int MAXPINNAMLEN /* Maximum pin name length */; int MAXNETNAMLEN /* Maximum net name length */; int MAXATRNAMLEN /* Maximum attribute name length */; int MAXSMRKLEN /* Maximum pin marker name length */; struct { // Pin descriptor string pinname /* Pin name */; string netname /* Pin name */; double x,y /* Pin coordinates */; double rotang /* Pin rotation angle */; int mirror /* Pin mirror mode */; string attrlist /* Pin attribute list */; string marker /* Pin marker macro name */; } pinl[] /* Pin list */; int pinn = 0 /* Pin count */; // SQL command definitions #define V_SELECTA "select variant from varinfo;" // User Language program name definitions #define UL_ATTRSET "attrset" #define UL_SCMTEXT "scmtext" // Main program void main() { index C_FIGURE fig /* Figure list index */; index C_POLY poly /* Polygon index */; index C_BUSTAP tap /* Bustap index */; index C_CONSEG seg /* Connection segment index */; index C_POINT p /* Polygon point index */; double cosa,sina /* Trigonometric values */; double ox,oy /* Pin offset */; double ix1, iy1 /* 1st input coordinate */; double iw1 /* 1st input width */; int ilay1 /* 1st input layer */; int ilay2 /* 2nd input layer */; int inpmode /* Input mode */; int menucode /* Menu code */; int pickena /* Pick type enable bit field */; int pickityp /* Pick index type */; int donereq = 0 /* Connection done request */; // Get the figure list element type set if (varget(VAR_MSFIGDIS,figdis)) figdis=0; // Get the current mouse position bae_wsmouse(px,py,0); // Check if standalone call if ((ulproginfo("",0,0)<=1 && bae_getactmenu()<0) || varget(GV_PROPCALL,ilay1)==0) { if (varget(GV_PROPX,ix1)==0 && varget(GV_PROPY,iy1)==0) { px=ix1; py=iy1; vardelete(GV_PROPX); vardelete(GV_PROPY); } // Pick element pickena=(~(figdis|(1<bae_planwsux() || pybae_planwsuy()) { // Snap to origin bae_storemouseiact(3,bae_planwsnx(),bae_planwsny(),2,LMB); exit(0); } // Check the currently active menu if ((menucode=bae_getactmenu())>=10000) menucode=1003; switch (menucode) { // Polygon edit functions case 500 : case 501 : case 502 : case 503 : case 507 : case 508 : case MNU_SCMGRPPOLY : // Check if input data available ilay1=LAYERINV; if (scm_getinputdata(ix1,iy1,iw1,ilay1,0.0,0.0,0.0,ilay2, inpmode,0.0,0.0,0.0,0.0,0,0.0,0.0,0.0,0.0,0)==0 && ilay2!=LAYERINV) // Swap the edit direction scm_getinputdata(0.0,0.0,0.0,ilay2,ix1,iy1,iw1,ilay1, inpmode,0.0,0.0,0.0,0.0,0,0.0,0.0,0.0,0.0,0); // Pick polygon at mouse position if (!(figdis&(1<>1; // Test if pin found; update the search area if ((compres=numstrcmp(pinname,pinl[sidx].pinname))<=0) sub=sidx-1; else slb=sidx+1; } // Insert new pin to pin list for (sidx=pinn;sidx>slb;sidx--) pinl[sidx]=pinl[sidx-1]; pinl[slb].pinname=pinname; pinl[slb].x=x; pinl[slb].y=y; pinl[slb].rotang=rotang; pinl[slb].mirror=mirror; pinl[slb].netname=netname; pinl[slb].attrlist=attrlist; pinl[slb].marker=marker; pinn++; // Update the maximum pin name length MAXPINNAMLEN=maxint(MAXPINNAMLEN,strlen(pinname)); // Update the maximum net name length MAXNETNAMLEN=maxint(MAXNETNAMLEN,strlen(netname)); // Update the maximum marker macro name length MAXSMRKLEN=maxint(MAXSMRKLEN,strlen(marker)); // Update the maximum attribute name length MAXATRNAMLEN=maxint(MAXATRNAMLEN,strlen(attrlist)); } int polymidscanfunc(index C_POLY poly,int polyinws, index C_LEVEL level,int macclass,int bustapidx) /* // Polygon center scan function // Return value : // zero if done or (-1) on file error // Parameters : // index C_POLY poly : Polygon // int polyinws : Poly in workspace flag // index C_LEVEL level : Polygon level // int macclass : Polygon macro class // int bustapidx : Polygon bustap index */ { index C_POINT point /* Polygon point index */; double xsum = 0.0 /* X coordinate sum */; double ysum = 0.0 /* Y coordinate sum */; // Scan all polygon points if (POLYPMODE==0 || poly.TYP==C_POLYDOCLINE || poly.TYP==C_POLYDOTLINE) { // Scan all polygon points forall (point of poly) // Check if new best coordinate match if (!posfound || (fabs(point.X-px)+fabs(point.Y-py))0) { // Store the pin position pinx=xsum/poly.PN; piny=ysum/poly.PN; posfound=1; mindist=fabs(pinx-px)+fabs(piny-py); } } // Return without errors return(0); } void editcoord(index C_FIGURE fig,double x,double y) /* // Edit coordinate pair, prepair pick // Parameters : // index C_FIGURE fig : Figure list element // double x,y : Coordinate pair */ { index C_FIGURE nfig /* New figure list index */; index C_FIGURE tfig /* Tag figure list index */; index C_POLY poly /* Polygon index */; index C_POINT p /* Polygon point index */; index C_NREF nref /* Named reference index */; index C_MACRO macro /* Macro index */; index C_ATTRIBUTE att /* Attribute index */; index C_REFTEXT rmod /* Ref. text modifier index */; struct pointdes { // Polygon point descriptor double x /* Point X coordinate */; double y /* Point Y coordinate */; int t /* Point type */; } pl[] /* Polygon point list */; int pn = 0 /* Point count */; double prlx, prly /* Polygon range lower corner */; double prux, pruy /* Polygon range upper corner */; double pradj /* Polygon range ajust value */; string msg /* Message buffer */; string lab1 = "" /* 1st line 1st label */; string lab2 = "" /* 2nd line 1st label */; string lab2a = "" /* 2nd line 2nd label */; string lab3 = "" /* 3nd line 1st label */; string wprompt /* Width prompt string */; string oldmacro /* Old part macro name string */; string newmacro /* New part macro name string */; string oldtnstr /* Old text/name string */; string newtnstr /* New text/name string */; string oldnetarea = "" /* Old net area name string */; string newnetarea = "" /* New net area name string */; string oldgrpname = "" /* Old group name string */; string newgrpname /* New group name string */; string oldcolor = "" /* Old color RGB string */; string newcolor /* New color RGB string */; STRINGS stext[] /* Multiline scan text */; STRINGS lines /* Text lines */; string mrulel[] /* Multiline text rule list */; string nrulel[] /* Multiline text new rule list */; int mrulen /* Multiline text rule count */; string mtextid = "" /* Multiline text ID */; string textid /* Current text ID */; double linespc /* Multiline text line spacing */; double lsx, lsy /* Text line spacing vector */; double lcx, lcy /* Text line column vector */; int col /* Multiline text column */; int row /* Multiline text row */; int maxline = (-1) /* Max. text line */; int maxcol = (-1) /* Max. text column */; double pcol = 12.0 /* Parameter column */; double cy /* Dialog box current y coordinate */; double dialwidth /* Dialog box width */; double dialheight /* Dialog box height */; double minheight /* Dialog box min. height */; double minwidth /* Dialog box min. width */; double defwidth /* Dialog box min. width */; int resize = 0 /* Dialog box resizable flag */; double oldang /* Old angle */; double newang /* New angle */; double oldheight /* Old height */; double newheight /* New height */; double oldwidth /* Old width */; double newwidth /* New width */; int oldmirror /* Old mirror flag */; int newmirror /* New mirror flag */; int oldpintag = 0 /* Old pin tag mode */; int newpintag /* New pin tag mode */; int oldbuspin = 0 /* Old bus pin mode */; int newbuspin /* New bus pin mode */; int oldpinmove /* Old pin move mode */; int newpinmove1 /* New pin move 1st bit */; int newpinmove2 /* New pin move 2nd bit */; int newpinmove3 /* New pin move 3rd bit */; int newpinmove /* New pin move mode */; int oldpincon /* Old pin connection mode */; int newpincon /* New pin connection mode */; int oldpdis /* Old element plot disable flag */; int newpdis /* New element plot disable flag */; int oldglued /* Old element glued flag */; int newglued /* New element glued flag */; int oldcenter /* Old element center flag */; int newcenter /* New element center flag */; int oldframe1 /* Old element 1st frame flag */; int newframe1 /* New element 1st frame flag */; int oldframe2 /* Old element 2nd frame flag */; int newframe2 /* New element 2nd frame flag */; int oldframeo /* Old element frame open flag */; int newframeo /* New element frame open flag */; int oldpolytyp /* Old polygon type */; int newpolytyp /* New polygon type */; int oldlabtyp = 0 /* Old label type */; int newlabtyp /* New label type */; int labtypsel = 0 /* Label type selection flag */; int repflag /* Dialog box repeat flag */; int cunits /* Coordinate display units */; int xidx /* X coordinate parameter index */; int yidx /* Y coordinate parameter index */; int aidx /* Angle parameter index */; int angflag = 0 /* Angle parameter flag */; int hidx /* Height parameter index */; int hflag = 0 /* Height parameter flag */; int widx /* Width parameter index */; int wflag = 0 /* Width parameter flag */; int wedit = 0 /* Width edit flag */; int ptidx /* Polygon type param. index */; int ptflag = 0 /* Polygon type string flag */; int tnidx /* Text/name string param. index */; int tnflag = 0 /* Text/name string flag */; int naidx /* Net area string param. index */; int nbidx /* Net area browse param. index */; int rtridx /* Ref. text reset parameter index */; int rtrflag = 0 /* Ref. text reset flag */; int nflag = 0 /* Net name string flag */; int midx /* Macro string param. index */; int mflag = 0 /* Macro string flag */; int miidx /* Mirror parameter index */; int miflag = 0 /* Mirror parameter flag */; int ltidx = (-1) /* Label type parameter index */; int tmidx /* Tag pin mode parameter index */; int tmflag = 0 /* Tag pin mode parameter flag */; int bpidx /* Bus pin mode parameter index */; int mo1idx /* Pin move 1st parameter index */; int mo2idx /* Pin move 2nd parameter index */; int mo3idx /* Pin move 3rd parameter index */; int pcnidx /* Pin connection parameter index */; int moflag = 0 /* Pin move parameter flag */; int bclass /* Browse class */; int lsflag = 0 /* Line spacing flag */; int lsidx /* Line spacing param. index */; int fr1idx /* 1st frame param. index */; int fr2idx /* 2nd frame param. index */; int froidx /* Frame open param. index */; int cidx /* Commentary text param. index */; int zidx /* Center param. index */; int zflag = 0 /* Center flag */; int ecidx /* Element color string param. index */; int gnidx /* Group name string param. index */; int pdidx /* Plot disable parameter index */; int gidx /* Glued parameter index */; int corner = 0 /* Corner edit mode */; int curcorner /* Current corner index */; double bmwidth /* Picture label width */; double bmheight /* Picture label height */; double bmoheight /* Picture original label height */; int polylab = 0 /* Polygon label flag */; int cilidx /* Corner index label index */; int ctlidx /* Corner type label index */; int crlidx /* Corner radius label index */; int oldmode /* Old element mode */; int newmode /* New element mode */; int group /* Element group flag */; int nrefflag = 0 /* Named reference element flag */; STRINGS rl /* Rule list */; int rn /* Rule count */; int attrerr = 0 /* Part attribute error count */; int tagerr = 0 /* Tag redirect error count */; struct tagref { // Tag reference descriptor index C_FIGURE fig /* Tag figure list element */; string pinname /* Tag pin name */; string ref1 /* Tag 1st reference name */; string ref2 /* Tag 2nd reference name */; } tagrl[],tagdl[] /* Tag reference/destination list */; int tagrn = 0 /* Tag reference count */; int tagdn = 0 /* Tag destination count */; string tpinname /* Tag pin name */; string tref1 /* Tag 1st reference name */; string tref2 /* Tag 2nd reference name */; int tpmode /* Tag pin mode */; int tpidx /* Tag pin index */; double rightw /* Right box area width */; string infostr = "" /* Info string */; string attrcommn /* Attribute comment name */; string attrcommv /* Attribute comment value */; string attrname /* Attribute name */; string attrvar /* Attribute variant extension */; string attruname /* Attribute upper case name */; string attrdisp /* Attribute display string */; int varnum /* Attribute variant number */; int attrord /* Attribute sort order */; int len /* Attribute name length */; struct attrdata { // Attribute data descriptor string name /* Attribute name */; string disp /* Attribute display string */; int var /* Attribute variant number */; int order /* Attribute order */; } al[] /* Attribute list */; int an = 0 /* Attribute count */; struct reftext { // Reference text modifier descriptor string str /* Reference text string */; double x, y /* Reference text position */; double ang /* Reference text angle */; double size /* Reference text size */; int mirr /* Reference text mirror flag */; } rtl[] /* Reference text modifier list */; int rtn = 0 /* Reference text modifier count */; double tang /* Text angle */; double btx, bty /* Back transf. text coords. */; double ttx, tty /* Temporary text coords. */; double mnx, mny /* Macro origin coords. */; double asin, acos /* Angle sin, cos values */; double ang1, ang2 /* Arc angles */; int asidx /* Arc start index */; int aeidx /* Arc end index */; struct attrdes { // Attribute descriptor string name /* Attribute name */; string val /* Attribute value */; } attrl[] /* Attribute list */; int attrn /* Attribute count */; string planname /* Query plan name */; double dashlen = DEFDASHLEN /* Dash base length */; double dashspc = DEFDASHSPC /* Dash spacing */; double dashwidth = DEFDASHWIDTH /* Dash width */; int dashmode = DEFDASHMODE /* Dash mode */; int res /* Dialog box query result */; int boxid /* Dialog box ID */; int oldcol /* Old color index */; int newcol /* New color index */; string colstrings[] = { // Color index to red col. transform. "0 0 0", "0 0 0.6", "0 0.6 0", "0 0.6 0.6", "0.6 0 0", "0.6 0 0.6", "0.6 0.6 0", "0.8 0.8 0.8", "0.4 0.4 0.4", "0 0 1", "0 1 0", "0 1 1 ", "1 0 0", "1 0 1", "1 1 0", "1 1 1" }; int ddbclass = bae_planddbclass() /* Schematic plan DDB class */; int i /* Loop control variables */; // Query the current active variant if (ddbclass!=DDBCLSCM || cap_rulequery( RS_OCSCMDB,0,RS_SCMSUBJ,RS_VARIANT,"?d",act_var)<1) // Set default variant act_var=0; // Get element data oldmirror=fig.MIRROR; oldglued=(fig.FIXED&2) ? 1 : 0; if (cap_rulequery(RS_OCFIG,fig,RS_SCMSUBJ, RS_VARPLOTDIS+itoa(act_var),"?d",oldpdis)<1) oldpdis=0; if (fig.RULEOBJID>=0) { // Query group name predicate if (cap_rulequery(RS_OCFIG,fig,RS_SCMSUBJ,RS_GROUPNAME, "?s",oldgrpname)<1) oldgrpname=""; // Query plot color predicate if (cap_rulequery(RS_OCFIG,fig,RS_SCMSUBJ,RS_PLOTRGB, "?s",oldcolor)<1) oldcolor=""; } switch (fig.TYP) { case C_FIGNREF : // Get named reference nref=fig.NREF; nrefflag=1; macro=nref.MACRO; oldtnstr=fig.NAME; bclass=macro.CLASS; oldmacro=macro.NAME; if (bclass==DDBCLSLAB) { if (existddbelem(bae_planfname(),DDBCLSLAB,oldtnstr)==1) lab2a=newmacro=oldmacro; else mflag=1; oldlabtyp=newlabtyp= oldtnstr[0]=='?' ? 1 : 0 ; if (oldlabtyp) { oldtnstr= strextract(oldtnstr,1,strlen(oldtnstr)); lab1=UPRCPORT; } else { lab1=UPRCLAB; } labtypsel= cap_blocktopflag()==1 ? 0 : 1 ; nflag=1; boxid=3141; defwidth=50.8; } else { tnflag=1; mflag=1; if (ddbclass==DDBCLSSYM) { lab1=UPRCPIN; oldpintag=newpintag=fig.NREF.TAGPTYP; // Query the old bus status if (cap_rulequery(RS_OCFIG,fig,RS_SCMSUBJ, RS_AUTOBUS,"?d",oldbuspin)<1) oldbuspin=0; newbuspin=oldbuspin; tmflag=1; boxid=3142; defwidth=50.8; } else { lab1=UPRCSYM; symflag=1; // Init the maximum pin name length MAXPINNAMLEN=strlen(ITMPINNAMHD); // Init the maximum net name length MAXNETNAMLEN=strlen(ITMNETNAMHD); // Init the maximum marker name length MAXSMRKLEN=strlen(ITMSMRKHD); // Init the maximum attribute name length MAXATRNAMLEN=strlen(ITMATRNAMHD); // Scan the current element curname=fig.NAME; cap_scanfelem(fig,0.0,0.0,0.0,1, pinposscanfunc,NULL,NULL,NULL); boxid=3143; defwidth=50.8+SINFOW+2.0; minwidth=50.8+10.0; minheight=9.0*DIAL_CTRVSTEP+3.0*DIAL_SEPVSTEP+ 2.0*DIAL_BUTVSTEP; resize=1; } } if (symflag) { forall (att of nref) { // Get attribute base name attrname=att.NAME; if (strmatch(attrname,"*\003*\003")) { len=strlen(attrname); sprintf(attrvar,REPATTRVAR, atoi(strextract(attrname,len-3,len-1))); attrname[len-4]='\0'; } else { attrvar=""; } // Get upper case attribute name attruname=attrname; strupper(attruname); // Build comment variable name sprintf(attrcommn,PAR_ATTRCOMMP, strextract(attruname,1,strlen(attruname))); // Query comment variable if (varget(attrcommn,attrcommv)!=0 || attrcommv=="") // No comment available attrcommn=attrname; else // Attach comment to variable name sprintf(attrcommn,"%s %s",attrname,attrcommv); attrcommn+=attrvar; sprintf(attrdisp,REPATTRIB,attrcommn, ATTFLEN>strlen(attrcommn) ? ATTFLEN-strlen(attrcommn) : 0,ITMUDOT,att.VALUE); // Build order variable name sprintf(attrcommn,PAR_ATTRORDP, strextract(attruname,1,strlen(attruname))); // Query order variable if (varget(attrcommn,attrord)!=0) // No order id available attrord=9999; for (i=an;i>0;i--) if (al[i-1].order>attrord || (al[i-1].order==attrord && (numstrcmp(al[i-1].name,attrname)>0 || (al[i-1].name==attrname && al[i-1].var>varnum)))) al[i]=al[i-1]; else break; // Store new attribute al[i].name=attrname; al[i].disp=attrdisp; al[i].order=attrord; al[i].var=varnum; an++; } } if (an>0) { infostr=REPSYMATTR; for (i=0;i0) { // Set the constant header strings sprintf(msg,FMTPTABH1,MAXPINNAMLEN,ITMPINNAMHD, MAXSMRKLEN,ITMSMRKHD,MAXNETNAMLEN,ITMNETNAMHD, ITMATRNAMHD); if (infostr=="") infostr=msg; else infostr+="\n"+msg; sprintf(msg,FMTPTABH2, MAXPINNAMLEN,ITMULINE,MAXSMRKLEN,ITMULINE, MAXNETNAMLEN,ITMULINE,MAXATRNAMLEN,ITMULINE); infostr+=msg; // Store the pin list for (i=0;i=0 && nfig.TYP==C_FIGTEXT && cap_rulequery(RS_OCFIG, nfig,RS_SCMSUBJ,RS_MTEXTID,"?s",textid)>0 && textid==mtextid) { // Get text position if (cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_MTEXTCOL,"?d",col)<1) continue; if (cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_MTEXTROW,"?d",row)<1) continue; if (MTEXTORIG) { if (col==0 && row==0) { // Set text base point fig=nfig; x=fig.X- sin(oldang)*oldheight*linespc; y=cos(oldang)*oldheight*linespc; y=fig.Y+(oldmirror ? -y : y); } if (row>maxline) maxline=row; } else { // Check if new best base point found if (col==0 && row>maxline) { // Set text base point fig=nfig; x=fig.X; y=fig.Y; maxline=row; } } if (col>maxcol) maxcol=col; stext[col][row]=nfig.NAME; } // Build the text edit string oldtnstr=""; for (row=0;row<=maxline;row++) { for (col=0;col<=maxcol;col++) oldtnstr+=stext[col][row]; oldtnstr+="\n"; } boxid=3146; defwidth=50.8+SINFOW+2.0; minwidth=50.8+10.0; minheight=12.0*DIAL_CTRVSTEP+3.0*DIAL_SEPVSTEP+ 2.0*DIAL_BUTVSTEP; resize=1; } break; default : exit(0); } pinx=x; piny=y; if (bae_dialclr()) { if (askcoord(pinx,piny,1)) error_abort(); if (baepar_intval(SCMPAR_RANGEDIS)==0) if (pinxbae_planwsux() || pinybae_planwsuy()) error(ERROUTBOUND); } else { newtnstr=oldtnstr; newlabtyp=oldlabtyp; newnetarea=oldnetarea; newpintag=oldpintag; newbuspin=oldbuspin; newang=cvtangle(oldang,0,1); newheight=oldheight; newwidth=oldwidth; newmacro=oldmacro; newmirror=oldmirror; newpinmove=oldpinmove; newpincon=oldpincon; newgrpname=oldgrpname; newcolor=oldcolor; newframe1=oldframe1; newframe2=oldframe2; newframeo=oldframeo; newcenter=oldcenter; newmode=oldmode; newglued=oldglued; newpdis=oldpdis; // Perform the dialog input loop repflag=1; do { if (resize) { dial_getboxsizemin(boxid,dialwidth,dialheight, DIAL_LEFTMARG+defwidth+DIAL_RIGHTSMARG,minheight, DIAL_LEFTMARG+minwidth+DIAL_RIGHTSMARG,minheight); dialwidth-=DIAL_LEFTMARG+DIAL_RIGHTSMARG; } else { dialwidth=defwidth; } // Init. the y coordinate cy=DIAL_TOPMARG; rightw=(symflag || tnflag==2) ? (dialwidth-defwidth+SINFOW+1.0) : 0.0 ; // Store labels if (lab1!="") { if (labtypsel) { ltidx=bae_dialaddcontrol(PA_SB,0,0,newlabtyp, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG,cy,pcol-2.0,""); dial_sbentry(0,0,UPRCLAB); dial_sbentry(0,1,UPRCPORT); } else { dial_label(0.0,cy,lab1); } } if (nflag) { if (act_var) { tnidx=dial_label(pcol,cy,newtnstr); } else { tnidx=bae_dialaddcontrol(PA_STR|PA_CHKNAME, 0,0,0,0.0,0.0,0.0,newtnstr,MAXKEYLEN, DIAL_LEFTMARG+pcol,cy,30.0,""); bae_dialaddcontrol(PA_ACT,0,5,0,0.0,0.0, 0.0,"",0,DIAL_LEFTMARG+43.0,cy,0.0,UPRBROWSE); } cy+=DIAL_CTRVSTEP; } else if (tnflag==1) { if (symflag) { if (act_var) tnidx=bae_dialaddcontrol( PA_STR|PA_NOEDIT,0,0,0, 0.0,0.0,0.0,newtnstr,strlen(newtnstr), DIAL_LEFTMARG+pcol,cy, bae_dialgettextlen(0,newtnstr)+1.0,""); else tnidx=bae_dialaddcontrol( PA_STR|PA_CHKNAME|PA_HBRDREL,0,0,0, 0.0,0.0,0.0,newtnstr,MAXKEYLEN, DIAL_LEFTMARG+pcol,cy, DIAL_RIGHTSMARG+rightw,""); cy+=DIAL_CTRVSTEP; } else { tnidx= act_var ? dial_cliplabel(pcol,cy,newtnstr) : (fig.TYP==C_FIGNREF ? dial_namestring(newtnstr,MAXKEYLEN,pcol,cy) : dial_string(newtnstr,MAXTEXTLEN,pcol,cy)); if (act_var) cy+=DIAL_CTRVSTEP; } } else if (tnflag==2) { cy+=DIAL_CTRVSTEP; } if (rtn) rtridx=dial_toggle(rtrflag,pcol,cy,UPRTPOSRESET); if (tmflag) { tmidx=bae_dialaddcontrol(PA_SB,0,0,newpintag, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol,cy,15.0,""); dial_sbentry(0,SYPSTD,UPRPTSTD); dial_sbentry(0,SYPSYMTAG,UPRPTSYMTAG); dial_sbentry(0,SYPPINTAG,UPRPTPINTAG); dial_sbentry(0,SYPNETTAG,UPRPTNETTAG); dial_sbentry(0,SYPNPNTAG,UPRPTNPNTAG); dial_sbentry(0,SYPNARTAG,UPRPTNARTAG); dial_sbentry(0,SYPPARTAG,UPRPTPARTAG); bpidx=bae_dialaddcontrol(PA_TOGGLE,0,0, newbuspin,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol+18.0,cy,0.0,UPRPTBUS); cy+=DIAL_CTRVSTEP; } naidx=(-1); if (ptflag) { ptidx=bae_dialaddcontrol(PA_SB,0,0,newpolytyp, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol,cy,12.0,""); dial_sbentry(4,C_POLYDOCLINE,UPRPTYPGL); dial_sbentry(4,C_POLYDOTLINE,UPRPTYPDL); if (ptflag==1) { dial_sbentry(4,C_POLYDOCAREA,UPRPTYPGA); if (ddbclass==DDBCLSMRK) dial_sbentry( 4,C_POLYCONAREA,UPRPTYPCA); else if (ddbclass==DDBCLSCM) dial_sbentry(4,100,UPRPTYPNA); } if (newpolytyp==C_POLYDOCLINE) bae_dialaddcontrol(PA_ACT,0,7,0,0.0,0.0,0.0,"", 0,DIAL_LEFTMARG+pcol+13.0,cy,0.0,UPRDASHPBUT); if (newpolytyp==100) { naidx=bae_dialaddcontrol(PA_STR, 0,0,0,0.0,0.0,0.0,newnetarea,MAXKEYLEN, DIAL_LEFTMARG+pcol+13.0,cy,6.5,""); bae_dialaddcontrol(PA_ACT,0,14,0,0.0,0.0,0.0,"", 0,DIAL_LEFTMARG+pcol+20.5,cy,0.0,UPRBROWSE); } cy+=DIAL_CTRVSTEP; } if (lab2!="") dial_label(0.0,cy,lab2); if (lab2a!="") dial_cliplabel(pcol,cy,lab2a); if (mflag) { midx=act_var ? dial_cliplabel(pcol,cy,newmacro) : bae_dialaddcontrol(PA_STR|PA_CHKNAME,0,0,0,0.0,0.0,0.0, newmacro,MAXKEYLEN,DIAL_LEFTMARG+pcol,cy,30.0,""); if (!act_var) bae_dialaddcontrol(PA_ACT,0,3,0,0.0,0.0, 0.0,"",0,DIAL_LEFTMARG+43.0,cy,0.0,UPRBROWSE); } if (lab2!="" || lab2a!="" || mflag) cy+=DIAL_CTRVSTEP; if (lab3!="") { dial_label(0.0,cy,lab3); cy+=DIAL_CTRVSTEP; } // Store coordinate controls dial_label(0.0,cy,UPRX); xidx=bae_dialaddcontrol(PA_DBL|PA_DIST,0,4,0,0.0,0.0, pinx-bae_planwsnx(),"",0,DIAL_LEFTMARG+pcol,cy,12.0,""); if (corner) { cilidx=dial_label(pcol+13.0,cy,""); bae_dialaddcontrol(PA_ACT,0,10,0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol+21.0,cy,0.0,UPRPPREV); bae_dialaddcontrol(PA_ACT,0,11,0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol+21.0+ bae_dialgettextlen(0,UPRPPREV)+ (bae_swconfig(3)==2 ? 2.0 : 0.0),cy,0.0,UPRPNEXT); } cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRY); yidx=bae_dialaddcontrol(PA_DBL|PA_DIST,0,4,0,0.0,0.0, piny-bae_planwsny(),"",0,DIAL_LEFTMARG+pcol,cy,12.0,""); bae_dialaddcontrol(PA_ACT,0,17,0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol+13.0,cy,0.0,UPRCCOPY); if (corner) { cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRRADIUS); crlidx=dial_label(pcol,cy,""); ctlidx=dial_label(pcol+13.0,cy,""); } if (angflag) { cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRANG); aidx=bae_dialaddcontrol(PA_DBL,0,2,0,0.0,0.0, newang,"",0,DIAL_LEFTMARG+pcol,cy,12.0,""); if (!act_var) { bae_dialaddcontrol(PA_ACT,0,8,0,0.0,0.0,0.0,"", 0,DIAL_LEFTMARG+pcol+13.0,cy,0.0,UPRLEFT); bae_dialaddcontrol(PA_ACT,0,9,0,0.0,0.0,0.0,"", 0,DIAL_LEFTMARG+pcol+21.0,cy,0.0,UPRRIGHT); } } if (miflag) { cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRMIRROR); miidx=bae_dialaddcontrol(PA_RBF,0,0,newmirror, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol,cy,0.0,UPRDOFF); bae_dialaddcontrol(PA_RBN,1,0,0, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol+6.0,cy,0.0,UPRDON); } if (hflag) { cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRHEIGHT); hidx=bae_dialaddcontrol(PA_DBL|PA_DIST|PA_CHKLL,0,4,0, 0.0,0.0,newheight,"",0,DIAL_LEFTMARG+pcol,cy,12.0,""); } if (lsflag) { cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRLINESPC); lsidx=bae_dialaddcontrol(PA_DBL|PA_CHKLL,0,5,0, 0.0,0.0,linespc,"",0,DIAL_LEFTMARG+pcol,cy,12.0,""); } widx=(-1); if (wflag) { cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,wprompt); if (wedit) widx=bae_dialaddcontrol(PA_DBL|PA_DIST,0,4,0, 0.0,0.0,newwidth,"",0,DIAL_LEFTMARG+pcol,cy, 12.0,""); else bae_dialaddcontrol(PA_LAB,0,0,0,0.0,0.0,0.0,"", 0,DIAL_LEFTMARG+pcol,cy,0.0,UPRNIL); } if (zflag || tnflag==2) { cy+=DIAL_CTRVSTEP; cidx=bae_dialaddcontrol(PA_TOGGLE,0,0, newmode,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol,cy,0.0,UPRCOMMENT); } if (zflag) { bae_dialaddcontrol(PA_ACT,0,13,0,0.0,0.0,0.0,"", 0,DIAL_LEFTMARG+pcol+13.0,cy,0.0,UPRTEXTCLASS); cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRCENTER); zidx=bae_dialaddcontrol(PA_RBF,0,0,newcenter, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol,cy,0.0,UPRCENTN); bae_dialaddcontrol(PA_RBN,TEXTHCENT,0,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+pcol+7.0,cy,0.0,UPRCENTH); bae_dialaddcontrol(PA_RBN,TEXTVCENT,0,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+pcol+14.0,cy,0.0,UPRCENTV); bae_dialaddcontrol(PA_RBN,TEXTHCENT|TEXTVCENT,0,0,0.0, 0.0,0.0,"",0,DIAL_LEFTMARG+pcol+21.0,cy,0.0,UPRCENTHV); cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRFRAME); fr1idx=bae_dialaddcontrol(PA_TOGGLE,0,0, newframe1 ? 1 : 0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol,cy,0.0,UPRFRAME1); fr2idx=bae_dialaddcontrol(PA_TOGGLE,0,0, newframe2 ? 1 : 0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol+7.0,cy,0.0,UPRFRAME2); froidx=bae_dialaddcontrol(PA_TOGGLE,0,0, newframeo ? 1 : 0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol+14.0,cy,0.0,UPRFRAMEO); } cy+=DIAL_CTRVSTEP; if (moflag) { mo1idx=bae_dialaddcontrol(PA_TOGGLE,0,0, (newpinmove&0x01)!=0 ? 1 : 0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol,cy,0.0,UPRPINMOVE); cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRPINMODE); mo2idx=bae_dialaddcontrol(PA_TOGGLE,0,0, (newpinmove&0x02)!=0 ? 1 : 0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol,cy,0.0,UPRPINNMIRR); mo3idx=bae_dialaddcontrol(PA_TOGGLE,0,0, (newpinmove&0x04)!=0 ? 1 : 0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+25.0,cy,0.0,UPRPINNROT); cy+=DIAL_CTRVSTEP; pcnidx=bae_dialaddcontrol(PA_TOGGLE,0,0, newpincon,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+pcol,cy,0.0,UPRPINCON); cy+=DIAL_CTRVSTEP; } if (resize && polylab) cy+=dialheight-minheight; if (polylab) { bmheight=bmoheight=cy-DIAL_TOPMARG-DIAL_SEPVSTEP; bmwidth=dialwidth-41.5; bae_clearpoints(); for (i=0;ifabs(pruy-prly)) pradj=0.1*fabs(prux-prlx); else pradj=0.1*fabs(pruy-prly); prlx-=pradj; prly-=pradj; prux+=pradj; pruy+=pradj; pradj*=0.5; // Create the picture button bitmap if (bmp_setsize( prlx,pruy,prux,prly,bmwidth,bmheight,0.0,0.0) || bae_dialbmpalloc(bmwidth,bmheight,2,0,0)!=2) error_abort(); // Store the bitmap label bae_dialadvcontrol(PA_BMLAB,0,0,2,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+40.5,DIAL_TOPMARG+ 0.5*(bmoheight-bmheight),bmwidth,bmheight,""); } bae_dialaddcontrol(PA_HSEP|PA_HBRDREL,0,0,0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG,cy,DIAL_RIGHTSMARG+rightw,""); cy+=DIAL_SEPVSTEP; if (ddbclass==DDBCLSCM) { dial_label(0.0,cy,UPRPLOTVIS); pdidx=bae_dialaddcontrol(PA_RBF,1,0,newpdis, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol,cy,0.0,UPRDOFF); bae_dialaddcontrol(PA_RBN,0,0,0, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol+6.0,cy,0.0,UPRDON); cy+=DIAL_CTRVSTEP; } dial_label(0.0,cy,UPRGLUED); gidx=bae_dialaddcontrol(PA_RBF,0,0,newglued, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol,cy,0.0,UPRDOFF); bae_dialaddcontrol(PA_RBN,1,0,0, 0.0,0.0,0.0,"",0,DIAL_LEFTMARG+pcol+6.0,cy,0.0,UPRDON); cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRCGRPNAME); gnidx=bae_dialaddcontrol(PA_STR,0,0,0,0.0, 0.0,0.0,newgrpname,MAXKEYLEN,DIAL_LEFTMARG+pcol,cy,30.0,""); bae_dialaddcontrol(PA_ACT,0,15,0,0.0,0.0, 0.0,"",0,DIAL_LEFTMARG+43.0,cy,0.0,UPRBROWSE); cy+=DIAL_CTRVSTEP; dial_label(0.0,cy,UPRCELEMCOLOR); ecidx=bae_dialaddcontrol(PA_STR,0,0,0,0.0, 0.0,0.0,newcolor,MAXKEYLEN,DIAL_LEFTMARG+pcol,cy,12.0,""); bae_dialaddcontrol(PA_ACT,0,16,0,0.0,0.0, 0.0,"",0,DIAL_LEFTMARG+25.0,cy,0.0,UPRBRWCOLOR); if (resize && !polylab) cy+=dialheight-minheight; // Store the OK and abort button with seperator cy+=DIAL_BUTVSTEP; dial_hsep(cy); // Store the coordinate unit controls cunits= bae_getcoorddisp() ? 1 : 0; bae_dialaddcontrol(PA_RBF,0,1,cunits,0.0,0.0, 0.0,"",0,DIAL_LEFTMARG+pcol+6.0,cy,0.0,UPRDUNITMM); bae_dialaddcontrol(PA_RBN,2,2,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+pcol+12.0,cy,0.0,UPRDUNITINCH); if (bclass==DDBCLSSYM) { // Check if symbol with attributes if (cap_scanpool(fig.NREF.MACRO,0.0,0.0,0.0,0, amacfunc,NULL,NULL,atextfunc)) error_scan(); if (attrfound) bae_dialaddcontrol(PA_ACT,0,6,0,0.0,0.0,0.0,"", 0,DIAL_LEFTMARG+52.8,cy,0.0,UPRATTRASS); } bae_dialaddcontrol(PA_ACT,0,12,0,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+(bclass==DDBCLSSYM ? 43.0 : pcol+20.5),cy, 0.0,UPRRULEBUT); dial_okabort(cy); if (symflag) bae_dialadvcontrol( PA_STR|PA_NOEDIT|PA_FNTFIX|PA_HBRDREL|PA_VBRDREL, 0,0,0,0.0,0.0,0.0,infostr,2*strlen(infostr), DIAL_LEFTMARG+52.8,0.0,DIAL_RIGHTSMARG, 2*DIAL_SEPVSTEP+DIAL_BUTVSTEP+0.2,""); if (tnflag==2) tnidx=bae_dialadvcontrol( PA_STR|PA_FNTFIX|PA_HBRDREL|PA_VBRDREL, 0,0,0,0.0,0.0,0.0,newtnstr,MAXEDIT, DIAL_LEFTMARG+52.8,0.0,DIAL_RIGHTSMARG, 2*DIAL_SEPVSTEP+DIAL_BUTVSTEP+0.2,""); // Update corner data if (corner) { sprintf(msg,UPRPINDEX,curcorner+1,pn); bae_dialsetdata(cilidx,PA_LAB,0,0.0,msg); asidx= (curcorner==0 ? pn : curcorner)-1; aeidx= curcorner==(pn-1) ? 0 : (curcorner+1); if (pl[curcorner].t) { /* Get the arc angles */ if ((ang1=atan2( pl[asidx].y-pl[curcorner].y, pl[asidx].x-pl[curcorner].x))<0.0) ang1+=DPI; if ((ang2=atan2( pl[aeidx].y-pl[curcorner].y, pl[aeidx].x-pl[curcorner].x))<0.0) ang2+=DPI; ang1= pl[curcorner].t==2 ? (ang1-ang2) : (ang2-ang1) ; if (ang1<0.0) ang1+=DPI; } sprintf(msg,pl[curcorner].t==2 ? UPRARCRIGHT : pl[curcorner].t==1 ? UPRARCLEFT : "", bae_numstring(cvtangle(ang1,0,1),1)); bae_dialsetdata(ctlidx,PA_LAB,0,0.0,msg); if (pl[curcorner].t==0) msg=UPRNIL; else sprintf(msg,"%smm",bae_numstring(cvtlength( dist(pl[curcorner].x,pl[curcorner].y, pl[aeidx].x,pl[aeidx].y),0,2),3)); bae_dialsetdata(crlidx,PA_LAB,0,0.0,msg); } if (polylab) { // Draw the picture label bitmap bae_popsetarea(2); btp_drawrect(COLOR_BLACK,DM_REPLACE,1, prlx,prly,prux-prlx,pruy-prly); bae_clearpoints(); for (i=0;i=0) bae_dialgetdata(naidx,0,0.0,newnetarea); } if (tmflag) { bae_dialgetdata(tmidx,newpintag,0.0,""); bae_dialgetdata(bpidx,newbuspin,0.0,""); } bae_dialgetdata(xidx,0,pinx,""); bae_dialgetdata(yidx,0,piny,""); pinx+=bae_planwsnx(); piny+=bae_planwsny(); if (ptflag) { pl[curcorner].x=pinx; pl[curcorner].y=piny; } if (angflag) bae_dialgetdata(aidx,0,newang,""); if (hflag) bae_dialgetdata(hidx,0,newheight,""); if (lsflag) bae_dialgetdata(lsidx,0,linespc,""); if (widx>=0) bae_dialgetdata(widx,0,newwidth,""); if (mflag) bae_dialgetdata(midx,0,0.0,newmacro); if (miflag) bae_dialgetdata(miidx,newmirror,0.0,""); if (moflag) { bae_dialgetdata(mo1idx,newpinmove1,0.0,""); bae_dialgetdata(mo2idx,newpinmove2,0.0,""); bae_dialgetdata(mo3idx,newpinmove3,0.0,""); newpinmove=(newpinmove1 ? 1 : 0)| (newpinmove2 ? 2 : 0)|(newpinmove3 ? 4 : 0); bae_dialgetdata(pcnidx,newpincon,0.0,""); } bae_dialgetdata(gnidx,0,0.0,newgrpname); bae_dialgetdata(ecidx,0,0.0,newcolor); if (zflag) { bae_dialgetdata(fr1idx,newframe1,0.0,""); if (newframe1) newframe1=TEXTFRM1; bae_dialgetdata(fr2idx,newframe2,0.0,""); if (newframe2) newframe2=TEXTFRM2; bae_dialgetdata(froidx,newframeo,0.0,""); if (newframeo) newframeo=TEXTOFRM; bae_dialgetdata(zidx,newcenter,0.0,""); bae_dialgetdata(cidx,newmode,0.0,""); } else if (tnflag==2) { bae_dialgetdata(cidx,newmode,0.0,""); } bae_dialgetdata(gidx,newglued,0.0,""); if (ddbclass==DDBCLSCM) bae_dialgetdata(pdidx,newpdis,0.0,""); else newpdis=0; switch (res) { // Done case 6 : if (act_var) { scm_setpickelem(fig); bae_storemouseiact(3,px,py,0,LMB); ulsystem(UL_ATTRSET,0); exit(0); } case 0 : case 7 : case 8 : case 9 : case 12 : case 13 : case 14 : if (tnflag || nflag) { if (fig.TYP==C_FIGNREF && !nflag && oldtnstr!=newtnstr && (cap_nrefsearch(newtnstr,nfig)==0 || ((planname=cap_partplan( bae_planfname(),newtnstr))!="" && planname!=bae_planename()))) { sprintf(msg,ERRDUPNAME,newtnstr); bae_msgbox(2,msg,""); break; } } if (angflag) { if (res==8) newang=fmod(newang+90.0,360.0); else if (res==9) newang=fmod(newang-90.0,360.0); } if (ddbclass==DDBCLSCM) { if (act_var && res==0) { // Check if multiline text if (mtextid!="") { forall (nfig where nfig.TYP==C_FIGTEXT && nfig.RULEOBJID>=0 && cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_MTEXTID,"?s",textid)>0 && textid==mtextid) rsc_assfigintpred(nfig, RS_VARPLOTDIS+itoa(act_var), newpdis,0,""); } else { rsc_assfigintpred(fig,RS_VARPLOTDIS+ itoa(act_var),newpdis,0,""); if ((NOPLCPVIS&1)==1 && symflag) scm_setpartattrib( oldtnstr,"$noplc", newpdis ? NOPLCVAL : "",0); } bae_callmenu(MNU_BAEREDISPL); bae_prtdialog(WRNVARPDIS); exit(0); } } if (baepar_intval(SCMPAR_RANGEDIS)==0 && (pinxbae_planwsux() || pinybae_planwsuy())) { bae_msgbox(2,ERROUTBOUND,""); break; } repflag=0; break; // Switch to mm units case 1 : cunits=0; break; // Switch to Inch units case 2 : cunits=1; break; // Browse macro name case 3 : msg=newmacro; if (bae_asksymname(msg,bae_planfname(), bclass,strextractfilepath(scm_deflibname()), scm_libfname(),msg)==0) newmacro=msg; break; // Polygon type change case 4 : wedit= newpolytyp==C_POLYDOCLINE ? 1 : 0 ; break; // Browse net name case 5 : msg=newtnstr; if (scm_asktreename(msg)==0) newtnstr=msg; break; // Polygon previous point case 10 : // Polygon next point case 11 : pl[curcorner].x=pinx; pl[curcorner].y=piny; // Adjust arc center neighbours if (pl[curcorner].t) { if (curcorner==0) { pl[pn-1].x+=pinx-x; pl[pn-1].y+=piny-y; } else { pl[curcorner-1].x+=pinx-x; pl[curcorner-1].y+=piny-y; } if (curcorner==(pn-1)) { pl[0].x+=pinx-x; pl[0].y+=piny-y; } else { pl[curcorner+1].x+=pinx-x; pl[curcorner+1].y+=piny-y; } } if (res==10) { curcorner--; if (curcorner<0) curcorner=pn-1; } else { curcorner++; if (curcorner>=pn) curcorner=0; } pinx=x=pl[curcorner].x; piny=y=pl[curcorner].y; break; // Browse group name name case 15 : res=0; bae_nameclr(); forall (nfig where nfig.RULEOBJID>=0) { // Query group name predicate if (cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_GROUPNAME,"?s",msg)<1) continue; bae_nameadd(msg,"","","",2); res=1; } // Check if group names found if (!res) { bae_msgbox(2,ERRNOGRPNAMES,""); break; } msg=newgrpname; // Select group name bae_setintpar(16,3136); if (bae_askname(msg,UPRCGRPNAME,MAXKEYLEN)) // Aborted break; newgrpname=msg; break; // Browse color case 16 : // Process any redraw event bae_wsmouse(0.0,0.0,0); // Temporarily use tag links for color query oldcol=bae_getcolor(13); bae_setcolor(13,0); bae_clriactqueue(); bae_storemenuiact(1,11,LMB); bae_storemouseiact(0,0.0,0.0,0,LMB); bae_storemenuiact(1,14,LMB); bae_callmenu(107); if ((newcol=bae_getcolor(13))>=0 && newcol<=15) newcolor=colstrings[newcol]; // Restore tag links color bae_setcolor(13,oldcol); break; // Copy coordinates case 17 : if (corner) { msg=""; for (i=0;i=0) { // Query net area name predicate if (cap_rulequery(RS_OCFIG,nfig, RS_SCMSUBJ,RS_TNETAREA,"?s",msg)<1) continue; bae_nameadd(msg,"","","",2); } // Select net area name bae_setintpar(16,3137); if (bae_askname(newnetarea,UPRNETAREA,MAXKEYLEN)) // Aborted error_abort(); } // Check if glued element if (oldglued) { if (!bae_msgboxverify(UPRGLUECHG,"")) error_abort(); // Save current state for undo bae_callmenu(MNU_BAESAVESTATE); rsc_assfigintpred(fig,RS_GLUED,0,0,""); bae_postprocess(); } else { // Save current state for undo bae_callmenu(MNU_BAESAVESTATE); } // Check the corner process mode if (corner) { pl[curcorner].x=pinx; pl[curcorner].y=piny; if (pl[curcorner].t) { if (curcorner==0) { pl[pn-1].x+=pinx-x; pl[pn-1].y+=piny-y; } else { pl[curcorner-1].x+=pinx-x; pl[curcorner-1].y+=piny-y; } if (curcorner==(pn-1)) { pl[0].x+=pinx-x; pl[0].y+=piny-y; } else { pl[curcorner+1].x+=pinx-x; pl[curcorner+1].y+=piny-y; } } } // Get the element data rn= fig.RULEOBJID>=0 ? rsc_getfigrules(fig,rl) : 0; group=fig.GROUP; newang=cvtangle(newang,1,0); // Store changed element switch (fig.TYP) { case C_FIGNREF : if (bclass!=DDBCLSLAB && oldtnstr!=newtnstr && cap_nrefsearch(newtnstr,nfig)==0) { sprintf(msg,ERRDUPNAME,newtnstr); error(msg); } // Scan tag references to this part forall (tfig where tfig.TYP==C_FIGNREF && tfig.NREF.MACRO.TAGSYM!=0) { // Scan tag pins tpidx=0; while (cap_gettagdata( tfig,tpidx,tpmode,tpinname,tref1,tref2)==0) { // Check if reference to renamed symbol if (tref1==oldtnstr && (tpmode==1 || tpmode==2)) { // Store tag data tagrl[tagrn].fig=tfig; tagrl[tagrn].pinname=tpinname; tagrl[tagrn].ref2=tref2; tagrn++; } tpidx++; } } // Scan own tag pins while (cap_gettagdata( fig,tagdn,tpmode,tpinname,tref1,tref2)==0) { // Store tag data tagdl[tagdn].fig=tfig; tagdl[tagdn].pinname=tpinname; tagdl[tagdn].ref1=tref1; tagdl[tagdn].ref2=tref2; tagdn++; } // Store new part if (bclass==DDBCLSLAB) { // Request optional connection re-route scm_setintpar(11,1); // Delete the picked label scm_delelem(fig); oldmacro=baepar_strval( newlabtyp ? SCMPAR_PORTMACRO : SCMPAR_LABELMACRO); bae_storetextiact(3,newmacro); bae_callmenu(newlabtyp ? 811 : 809); scm_storelabel( newtnstr,newlabtyp,pinx,piny,newang,newmirror); bae_storetextiact(3,oldmacro); bae_callmenu(newlabtyp ? 811 : 809); } else { if (oldtnstr!=newtnstr || bclass==DDBCLSMRK) { // Get the part attributes attrn=0; forall (att of nref where scm_chkattrname(att.NAME)==0) { attrl[attrn].name=att.NAME; attrl[attrn].val=att.VALUE; attrn++; } // Delete the picked symbol scm_delelem(fig); scm_storepart(newtnstr,newmacro,pinx,piny, newang,newmirror|(newpintag<<1)); for (i=0;i=DPI) tang-=DPI; // Store the text position scm_attachtextpos(nfig,rtl[i].str,pinx+btx, piny+bty,tang,rtl[i].size,rtl[i].mirr); } break; case C_FIGPOLY : // Test if area to line transformation if ((oldpolytyp!=C_POLYDOCLINE && oldpolytyp!=C_POLYDOTLINE) && (newpolytyp==C_POLYDOCLINE || newpolytyp==C_POLYDOTLINE) && pn>0) { if (pl[0].t) { for (i=pn;i>0;i--) pl[i]=pl[i-1]; pl[0]=pl[pn]; pn++; } else { // Add first area point to line point list pl[pn++]=pl[0]; } } // Test if closed line to area transformation else if ( (oldpolytyp==C_POLYDOCLINE || oldpolytyp==C_POLYDOTLINE) && (newpolytyp!=C_POLYDOCLINE && newpolytyp!=C_POLYDOTLINE) && pn>2 && pl[0].x==pl[pn-1].x && pl[0].y==pl[pn-1].y && pl[0].t==pl[pn-1].t) // Delete last area point from point list pn--; scm_delelem(fig); bae_clearpoints(); for (i=0;i=0 && nfig.TYP==C_FIGTEXT && cap_rulequery(RS_OCFIG, nfig,RS_SCMSUBJ,RS_MTEXTID,"?s",textid)>0 && textid==mtextid) { fig=nfig; scm_delelem(fig); } // Split text into lines maxline=splitstring(newtnstr,lines); // Get the base rules mrulen=4; sprintf(mrulel[0],":%s:%s='%s';", RS_SCMSUBJ,RS_MTEXTID,mtextid); for (i=0;i=0;maxline--) { col=0; newtnstr= strextract(lines[maxline],0,MAXKEYLEN-1); while (strlen(newtnstr)>0) { // Store text with new string scm_storetext(newtnstr, pinx+col*lcx,piny+col*lcy,newang, newheight,newmirror,newmode); // Attach rules if (cap_lastfigelem(fig)==0) { sprintf(mrulel[1],":%s:%s=%d;", RS_SCMSUBJ,RS_MTEXTCOL,col); sprintf(mrulel[2],":%s:%s=%d;", RS_SCMSUBJ,RS_MTEXTROW, maxline); sprintf(mrulel[3], ":%s:%s=%.2f;",RS_SCMSUBJ, RS_MTEXTLS,linespc); if (cap_rulefigatt(fig,mrulel)) rsc_error(-1); } // Advance to next column col++; newtnstr=strextract(lines[maxline], col*MAXKEYLEN,(col+1)*MAXKEYLEN-1); } // Advance to next line pinx+=lsx; piny+=lsy; } } else { scm_delelem(fig); scm_storetext( newtnstr,pinx,piny,newang,newheight,newmirror, newframe1|newframe2|newframeo|newcenter|newmode); } break; } // Check if element should be group selected if (group && (nrefflag ? cap_nrefsearch("",nfig) : cap_lastfigelem(nfig))==0) scm_elemgrpchg(nfig,1); // Attach rules if (tnflag!=2 && rn>0 && (nrefflag ? cap_nrefsearch("",nfig) : cap_lastfigelem(nfig))==0 && cap_rulefigatt(nfig,rl)) rsc_error(-1); // Dismiss any polygon dash rule if (rn>0 && cap_lastfigelem(nfig)==0 && ptflag && newpolytyp!=C_POLYDOCLINE) { rsc_assfigintpred(nfig,RS_POLYDASH,0,0,""); cap_lastfigelem(nfig); rsc_assfigdblpred(nfig,RS_POLYDASHLEN,0.0,0.0,""); cap_lastfigelem(nfig); rsc_assfigdblpred(nfig,RS_POLYDASHSPC,0.0,0.0,""); } // Set net area text if (ptflag && cap_lastfigelem(nfig)==0) rsc_assfigstrpred( nfig,RS_TNETAREA,newpolytyp==100 ? newnetarea : "","",""); // Set bus pin mode if (tmflag && cap_lastfigelem(nfig)==0) rsc_assfigintpred(nfig,RS_AUTOBUS,newbuspin,0,""); // Set plot visibility if (ddbclass==DDBCLSCM && (nrefflag ? cap_nrefsearch("",nfig) : cap_lastfigelem(nfig))==0) { if (nrefflag && act_var==0 && nfig.NREF.MACRO.CLASS==DDBCLSSYM && (NOPLCPVIS&2)==2) newtnstr=nfig.NAME; else nrefflag=0; rsc_assfigintpred(nfig, RS_VARPLOTDIS+itoa(act_var),newpdis,0,""); if (nrefflag) { // Select all variant table entries varn=0; act_flag=0; sqlcmd(bae_planfname(),V_SELECTA,datafunc); // Check if active variant defined if (!act_flag) { for (i=varn;i>0;i--) if (varl[i-1]0;i--) varl[i]=varl[i-1]; // Insert variant data varl[0]=0; varn++; } for (i=1;i=0) { // Query the current active dash mode if (cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_POLYDASH,"?d",dashmode)<1) dashwidth=0.0; // Query the current active dash base length if (cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_POLYDASHLEN,"?f",dashlen)<1) dashlen=DEFDASHLEN; // Query the current active dash rel. spacing if (cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_POLYDASHSPC,"?f",dashspc)<1) dashspc=DEFDASHSPC; // Query the current active plot width if (cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_PLOTWIDTH,"?f",dashwidth)<1) dashwidth=0.0; } // Get the new dash values getdashdata(dashmode,dashlen,dashspc,dashwidth); // Set the new dash values setdashdata(nfig,dashmode,dashlen,dashspc,dashwidth); // Redraw the screen bae_callmenu(MNU_BAEREDISPL); } // Check if rule set request if (res==12 && (nrefflag ? cap_nrefsearch("",nfig) : cap_lastfigelem(nfig))==0 && bae_dialclr()==0) { // Get the rule count rulen=rsc_getfigrules(nfig,rulel); switch (nfig.TYP) { case C_FIGTEXT : sprintf(msg,(nfig.TEXT.MODE&1) ? UPRDRCTEXT : UPRDRSTEXT,nfig.NAME); break; case C_FIGPOLY : switch (nfig.POLY.TYP) { case C_POLYDOCLINE : msg=bae_plainmenutext(UPRPTYPGL); break; case C_POLYDOTLINE : msg=bae_plainmenutext(UPRPTYPDL); break; case C_POLYCONAREA : msg=bae_plainmenutext(UPRPTYPCA); break; case 100 : msg=bae_plainmenutext(UPRPTYPNA); break; case C_POLYDOCAREA : default : msg=bae_plainmenutext(UPRPTYPGA); } break; case C_FIGNREF : switch (nfig.NREF.MACRO.CLASS) { case DDBCLSMRK : sprintf(msg,UPRDRPIN,nfig.NAME, nfig.NREF.MACRO.NAME); break; case DDBCLSLAB : sprintf(msg,UPRDRLAB,nfig.NAME, nfig.NREF.MACRO.NAME); break; case DDBCLSSYM : default : sprintf(msg,UPRDRSYM,nfig.NAME, nfig.NREF.MACRO.NAME); } break; default : msg=""; } // Edit the rules editrules(msg); // Attach/detach the rule list if (rulen) { if (cap_rulefigatt(nfig,rulel)) rsc_error(-1); } else if (cap_getrulecnt(RS_OCFIG,nfig)>0) { if (cap_rulefigdet(nfig)) rsc_error(-1); } } // Check if multiline text rule transfer if (mtextid!="" && cap_lastfigelem(nfig)==0) { // Get the rule count rulen=rsc_getfigrules(nfig,rulel); // Get the base rules mrulen=4; sprintf(nrulel[0],":%s:%s='%s';",RS_SCMSUBJ,RS_MTEXTID,mtextid); for (i=0;i=0 && cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_MTEXTID,"?s",textid)>0 && textid==mtextid) { // Get multiline text data if (cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_MTEXTCOL,"?d",col)<1 || cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_MTEXTROW,"?d",row)<1 || cap_rulequery(RS_OCFIG,nfig,RS_SCMSUBJ, RS_MTEXTLS,"?f",linespc)<1) continue; sprintf(nrulel[1],":%s:%s=%d;", RS_SCMSUBJ,RS_MTEXTCOL,col); sprintf(nrulel[2],":%s:%s=%d;", RS_SCMSUBJ,RS_MTEXTROW,row); sprintf(nrulel[3],":%s:%s=%.2f;", RS_SCMSUBJ,RS_MTEXTLS,linespc); if (cap_rulefigatt(nfig,nrulel)) rsc_error(-1); } } // Evaluate any rules bae_postprocess(); // Redraw the screen bae_callmenu(MNU_BAEREDISPL); exit(0); } void setdashdata(index C_FIGURE fig, int dashmode,double dashlen,double dashspc,double dashwidth) /* // Get dash data // Parameters : // index C_FIGURE fig : Polygon figure list index // int dashmode : Polygon dash mode // double dashlen : Polygon dash length // double dashspc : Polygon dash spacing factor // double dashwidth : Polygon dash line width */ { string dmpprefix /* Dash mode predicate def. prefix */; int dmplen /* Dash mode predicate def. length */; string dlpprefix /* Dash len. predicate def. prefix */; int dlplen /* Dash len. predicate def. length */; string dspprefix /* Dash spc. predicate def. prefix */; int dsplen /* Dash spc. predicate def. length */; string dwpprefix /* Dash width pred. def. prefix */; int dwplen /* Dash width pred. def. length */; STRINGS rl /* Rule list */; int rn /* Rule count */; int nrn /* New rule count */; int i /* Loop control variable */; // Get dash mode predicate rule definition prefix sprintf(dmpprefix,":%s:%s=",RS_SCMSUBJ,RS_POLYDASH); dmplen=strlen(dmpprefix); // Get dash length predicate rule definition prefix sprintf(dlpprefix,":%s:%s=",RS_SCMSUBJ,RS_POLYDASHLEN); dlplen=strlen(dlpprefix); // Get dash spacing predicate rule definition prefix sprintf(dspprefix,":%s:%s=",RS_SCMSUBJ,RS_POLYDASHSPC); dsplen=strlen(dspprefix); // Get dash width predicate rule definition prefix sprintf(dwpprefix,":%s:%s=",RS_SCMSUBJ,RS_PLOTWIDTH); dwplen=strlen(dwpprefix); // Get the element rules nrn=rn=rsc_getfigrules(fig,rl); // Delete any old dash rules for (i=0;i0) { if (cap_rulefigdet(fig)) rsc_error(-1); } } void getdashdata(int dashmode,double dashlen,double dashspc,double dashwidth) /* // Get dash data // Parameters : // int dashmode : Polygon dash mode // double dashlen : Polygon dash length // double dashspc : Polygon dash spacing factor // double dashwidth : Polygon dash line width */ { double labwidth /* Picture label width */; double labheight /* Picture label height */; double cy /* Current y value */; int dmidx = (-1) /* Dash mode control index */; int dlidx = (-1) /* Dash length control index */; int dsidx = (-1) /* Dash spacing fac. control index */; int dwidx = (-1) /* Dash width control index */; // Check for dialog support if (bae_dialclr()) return; // Set the default picture button bitmap size labwidth=PICLABWIDTH; labheight=PICLABHEIGHT; // Create the picture button bitmap if (bmp_setsize(0.0,0.0,18.0,9.0,labwidth,labheight,0.0,0.0) || bae_dialbmpalloc(labwidth,labheight,2,0,0)!=2) error_abort(); // Draw the picture label bitmap bae_popsetarea(2); // Display spacing seperator lines btp_drawline(PICLABSCOL,DM_REPLACE,2.5,0.5,2.5,8.5); btp_drawline(PICLABSCOL,DM_REPLACE,6.5,0.5,6.5,8.5); btp_drawline(PICLABSCOL,DM_REPLACE,10.5,0.5,10.5,8.5); btp_drawline(PICLABSCOL,DM_REPLACE,14.5,0.5,14.5,8.5); btp_drawline(PICLABSCOL,DM_REPLACE,6.5,8.0,10.5,8.0); btp_drawtext(8.3,8.1,PICLABSCOL,0,"l"); // Display factor documenation btp_drawline(PICLABFCOL,DM_REPLACE,4.1,0.5,4.1,8.5); btp_drawline(PICLABFCOL,DM_REPLACE,2.5,8.0,4.1,8.0); btp_drawtext(3.0,8.1,PICLABFCOL,0,"f*l"); // Display width documentation btp_drawline(PICLABSCOL,DM_REPLACE,17.0,1.9,17.2,1.9); btp_drawtext(17.3,1.80,PICLABSCOL,0,M("b","w")); btp_drawline(PICLABSCOL,DM_REPLACE,17.1,1.9,17.1,2.1); btp_drawline(PICLABSCOL,DM_REPLACE,17.0,2.1,17.2,2.1); // Display mode 0 line btp_drawwideline(PICLABDCOL,DM_REPLACE,1,0.5,1.0,16.5,1.0,0.2); // Display mode 1+ lines btp_drawwideline(PICLABDCOL,DM_REPLACE,1,0.5,2.0,2.5,2.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,6.5,2.0,10.5,2.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,14.5,2.0,16.5,2.0,0.2); // Display mode 2+ lines btp_drawwideline(PICLABDCOL,DM_REPLACE,1,4.1,3.0,4.9,3.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,12.1,3.0,12.9,3.0,0.2); // Display mode 3+ lines btp_drawwideline(PICLABDCOL,DM_REPLACE,1,0.5,4.0,2.5,4.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,4.1,4.0,4.9,4.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,6.5,4.0,10.5,4.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,12.1,4.0,12.9,4.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,14.5,4.0,16.5,4.0,0.2); // Display mode 1- lines btp_drawwideline(PICLABDCOL,DM_REPLACE,1,0.5,5.0,4.1,5.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,4.9,5.0,12.1,5.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,12.9,5.0,16.5,5.0,0.2); // Display mode 2- lines btp_drawwideline(PICLABDCOL,DM_REPLACE,1,2.5,6.0,4.1,6.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,4.9,6.0,6.5,6.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,10.5,6.0,12.1,6.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,12.9,6.0,14.5,6.0,0.2); // Display mode 3- lines btp_drawwideline(PICLABDCOL,DM_REPLACE,1,0.5,7.0,1.3,7.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,2.5,7.0,4.1,7.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,4.9,7.0,6.5,7.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,8.1,7.0,9.9,7.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,10.5,7.0,12.1,7.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,12.9,7.0,14.5,7.0,0.2); btp_drawwideline(PICLABDCOL,DM_REPLACE,1,15.7,7.0,16.5,7.0,0.2); bae_popsetarea(0); // Store the hint label cy=DIAL_TOPMARG; // Store the bitmap label bae_dialadvcontrol(PA_BMLAB,0,0,2,0.0,0.0,0.0,"",0, DIAL_LEFTMARG+4.0,cy,labwidth,labheight,""); // Store dash mode controls dmidx=bae_dialaddcontrol(PA_RBF,0,0, dashspc<0.0 ? dashmode+3 : dashmode,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+1.0,cy+0.7,0.0,""); bae_dialaddcontrol(PA_RBN,1,0,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+1.0,cy+1.7,0.0,""); bae_dialaddcontrol(PA_RBN,2,0,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+1.0,cy+2.7,0.0,""); bae_dialaddcontrol(PA_RBN,3,0,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+1.0,cy+3.7,0.0,""); bae_dialaddcontrol(PA_RBN,4,0,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+1.0,cy+4.7,0.0,""); bae_dialaddcontrol(PA_RBN,5,0,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+1.0,cy+5.7,0.0,""); bae_dialaddcontrol(PA_RBN,6,0,0,0.0,0.0,0.0, "",0,DIAL_LEFTMARG+1.0,cy+6.7,0.0,""); cy+=PICLABHEIGHT+DIAL_SEPVSTEP; // Store the dash length controls dial_label(4.0,cy,UPRDASHLEN); dlidx=bae_dialaddcontrol(PA_DBL|PA_DIST|PA_CHKLL,0, 5,0,0.0,0.0,dashlen,"",0,DIAL_LEFTMARG+20.0,cy,10.0,""); cy+=DIAL_CTRVSTEP; // Store the dash spacing controls dial_label(4.0,cy,UPRDASHSPC); dsidx=bae_dialaddcontrol(PA_DBL|PA_CHKLL|PA_CHKUL,0,5,0,0.0, 0.499,fabs(dashspc),"",0,DIAL_LEFTMARG+20.0,cy,10.0,""); cy+=DIAL_CTRVSTEP; // Store the dash length controls dial_label(4.0,cy,UPRDWIDTH); dwidx=bae_dialaddcontrol(PA_DBL|PA_DIST,0, 5,0,0.0,0.0,dashwidth,"",0,DIAL_LEFTMARG+20.0,cy,10.0,""); cy+=DIAL_BUTVSTEP; // Store the separator bae_dialaddcontrol(PA_HSEP|PA_HBRDREL,0,0,0,0.0,0.0,0.0,"", 0,DIAL_LEFTMARG,cy,DIAL_RIGHTSMARG,""); cy+=DIAL_SEPVSTEP; // Store the OK and abort button bae_dialaddcontrol( PA_OK,0,0,0,0.0,0.0,0.0,"",0,DIAL_LEFTMARG,cy,0.0,""); bae_dialaddcontrol( PA_ABORT,0,0,0,0.0,0.0,0.0,"",0,DIAL_LEFTMARG+5.0,cy,0.0,""); // Call the dialog function bae_setintpar(16,3027); if (bae_dialaskparams(UPRDASHSET,0, DIAL_LEFTMARG+labwidth+4.3+DIAL_RIGHTSMARG, cy+DIAL_SEPVSTEP+DIAL_BUTVSTEP)!=0) error_abort(); bae_dialgetdata(dmidx,dashmode,0.0,""); bae_dialgetdata(dlidx,0,dashlen,""); bae_dialgetdata(dsidx,0,dashspc,""); bae_dialgetdata(dwidx,0,dashwidth,""); if (dashmode>3) { dashmode-=3; dashspc=(-dashspc); } } int amacfunc(index C_MACRO macro,index C_POOL pool,int macinws, string refname,index C_LEVEL level,index C_LEVEL buslevel) /* // Attribute scan macro function // Return value : // 0 if out of workspace, 1 if inside, 2 if unknown, or (-1) on error // Parameters : // index C_MACRO macro : Macro index // index C_POOL pool : Macro pool index // int macinws : Macro in workspace flag // string refname : Macro reference name // index C_LEVEL level : Macro level // index C_LEVEL buslevel : Macro bus level */ { return(macro.CLASS==DDBCLSSYM ? 1 : 0); } int atextfunc(index C_TEXT textp,double tx,double ty,double tangle, int mirrflag,double tsize,string tstr,int textinws,int macclass,int varattr) /* // Scan a text data block for attribute definitions // Return value : // zero if done or (-1) on error // index C_TEXT textp : Text index // double tx : Text X coordinate // double ty : Text Y coordinate // double tangle : Text rotation angle // int mirrflag : Text mirror flag // double tsize : Text size // string tstr : Text string // int textinws : Text in workspace flag // int macclass : Text macro class // int varattr : Text variant attribute flag */ { if (scm_chkattrname(tstr)==0) attrfound=1; // Return without errors return(0); } string getvarvalue(string symname,string attrname,int varnum) /* // Get variant attribute value // Return value : // Attribute value // Parameters : // string symname : Symbol name // string attrname : Attribute name // int varnum : Variant number */ { index C_FIGURE fig /* Figure list element */; index C_NREF nref /* Named reference */; index C_ATTRIBUTE attr /* Attribute index */; string vattrname /* Variant attribute name */; if (cap_nrefsearch(symname,fig)) return(PA_NILVAL); vattrname=varattrname(attrname,varnum); nref=fig.NREF; // Scan attribute values forall (attr of nref where attr.NAME==vattrname) return(attr.VALUE); return(PA_NILVAL); } void setpvis(string symname,int plotdis,int varnum) /* // Set symbol plot visibility // Parameters : // string symname : Symbol name // string attrval : $noplc attribute value // int plotdis : Plot disable flag // int varnum : Variant number */ { index C_FIGURE fig /* Figure list element */; string rulel[] /* Rule list */; int rulen /* Rule count */; string rulename /* Rule name */; int i, j /* Loop control variables */; if (cap_nrefsearch(symname,fig)) return; // Build the plot disable rule name sprintf(rulename,":%s:%s%d=1;",RS_SCMSUBJ,RS_VARPLOTDIS,varnum); // Get the rule count rulen=rsc_getfigrules(fig,rulel); // Clear any previous rule definition for (i=rulen-1;i>=0;i--) if (rulel[i]==rulename) { // Delete the old rule for (j=i;j0) { if (cap_rulefigdet(fig)) rsc_error(-1); } } int datafunc(string dstr,int dint,double ddbl, int dval,int dtype,string dtable,string dfield,int didx) /* // Data query callback function // Return value : // zero if done or (-1) on data error // Parameters : // string dstr : String/Date data // int dint : Integer/Boolean data // double ddbl : Float data // int dval : Data valid flag // int dtype : Data type // string dtable : Data table name // string dfield : Data field name // int didx : Data output field index */ { int i /* Loop control variable */; // Search the insert position for (i=varn;i>0;i--) if (varl[i-1]=rulen) { // Check if rule exists if (!rsc_isrule(nrn)) { // Issue rule not defined message sprintf(msg,ERRNORULE,nrn); bae_msgbox(2,msg,""); continue; } // Insert new rule sorted into list for (i=rulen;i>0;i--) if (rulel[i-1]>nrn) rulel[i]=rulel[i-1]; else break; rulel[i]=nrn; rulen++; } else { // Delete the old rule for (;ipos1 ? strextract(s,pos1-1,pos2-2) : ""; // Update the scan start position pos1=pos2+1; } // Extract last substring if last char not delimiter if (pos1