/* RROTATE (STD) -- Right Rotate Pick Element, Draw Rectangle */ /* RROTATE (STD) -- Pickelement Rechtsdrehung, Rechteck Zeichnen */ /* -- INTENDED FOR KEY-CALL USE (:Right Rotate) -- */ /* // Copyright (c) 1995-2012 Oliver Bartels F+E, Muenchen // Author: Manfred Baumeister // Changes History: // rl (120427) RELEASED FOR BAE V7.8. // rl (101019) RELEASED FOR BAE V7.6. // rl (100427) ENHANCEMENT: // Added angle direction vector rotation. // rl (091021) RELEASED FOR BAE V7.4. // rl (091009) ENHANCEMENT: // Added trace pair side toggle option. // rl (081014) RELEASED FOR BAE V7.2. // rl (080915) ENHANCEMENT: // Added any element rotate option. // rl (071029) RELEASED FOR BAE V7.0. // rl (060829) RELEASED FOR BAE V6.8. // rl (050906) RELEASED FOR BAE V6.6. // rl (050303) ENHANCEMENT: // Activating step angle configuration for menu idle call. // rl (040811) RELEASED FOR BAE V6.4. // rl (030904) RELEASED FOR BAE V6.2. // rl (021209) RELEASED FOR BAE V6.0. // rl (020618) RELEASED FOR BAE V5.4. // rl (010625) RELEASED FOR BAE V5.0. // rl (001109) ENHANCEMENT: // Arbitrary Layout Editor rotation angle support added. // rl (000509) RELEASED FOR BAE V4.6. // rl (991013) RELEASED FOR BAE V4.4. // rl (980910) RELEASED FOR BAE V4.2. // rl (970929) RELEASED FOR BAE V4.0. // mb (960919) RELEASED FOR BAE V3.4. // mb (95) RELEASED FOR BAE V3.2. // mb (950103) ORIGINAL CODING. // // DESCRIPTION // // The rrotate User Language program designates the currently // active BAE menu function and performs a submenu interaction // for 90 degree right-rotate on the currently processed object // (if an object is picked and if rotation is permitted). This // program must be configured for implicit hotkey program call // (e.g. or ). */ // Includes #include "pop.ulh" // User Language popup utilities // Enforce standard caller type #pragma ULCALLERSTD // Disable undo state request #pragma ULCALLERNOUNDO // Messages string UPRABORT = M_UPRABORT(); string UPRFCT = M("Funktion selektieren!","Select Function!"); string UPRGFCT1 = M("&Bauteile rechts drehen","Right Rotate &Parts"); string UPRGFCT2 = M("&Texte rechts drehen","Right Rotate &Texts"); string UPRGFCT3 = M("&Elemente rechts drehen","Right Rotate &Elements"); string UPRGFCT4 = M("&Gruppenbauteile rechts drehen", "Right Rotate &Group Parts"); string UPRGFCT5 = M("Gruppenbauteile &Winkel setzen", "Set Group Parts Ang&le"); string UPRGFCT6 = M("Gruppente&xte rechts drehen", "Right Rotate Group Te&xts"); string UPRGFCT7 = M("Gruppentexte W&inkel setzen", "&Set Group Texts Angle"); string UPRGFCT8 = M("%L/R &Drehwinkel","%L/R Rotation A&ngle"); string UPRSFCT1 = M("&Symbole/Labels rechts drehen", "Right Rotate &Symbols/Labels"); string UPRSFCT2 = M("&Texte rechts drehen","Right Rotate &Texts"); string UPRSFCT3 = M("&Elemente rechts drehen","Right Rotate &Elements"); string UPRSFCT4 = M("&Gruppensymbole/-labels rechts drehen", "Right Rotate &Group Symbols/Labels"); string UPRSFCT5 = M("Gruppensymbole/-labels &Winkel setzen", "Set Group Symbols/Labels Ang&le"); string UPRSFCT6 = M("Gruppente&xte rechts drehen", "Right Rotate Group Te&xts"); string UPRSFCT7 = M("Gruppentexte W&inkel setzen", "Set G&roup Texts Angle"); string UPRROTMODE = M("Hotkey-Rotationschrittweite auswaehlen!", "Select Hotkey Rotation Step Angle!"); string UPRROT1 = M(" &0 Grad"," &0 Degrees"); string UPRROT2 = M(" &90 Grad"," &90 Degrees"); string UPRROT3 = M("&180 Grad","&180 Degrees"); string UPRROT4 = M("&270 Grad","&270 Degrees"); string UPRROT5 = M("Anderer &Winkel","&Other Angle"); string UPRANG = M("Winkel ? ","Angle ? "); string UPRSELELEM = M("Element fuer Rechtsdrehung selektieren!", "Pick element to rotate right!"); string UPRSELTEXT = M("Text fuer Rechtsdrehung selektieren!", "Pick text to rotate right!"); string UPRSELPART = M("Bauteil fuer Rechtsdrehung selektieren!", "Pick part to rotate right!"); string UPRSELSYMBOL = M("Symbol fuer Rechtsdrehung selektieren!", "Pick symbol to rotate right!"); string REPSYMROT = M("%d Gruppensymbole/labels gedreht.", "Rotated %d group symbols/labels."); string REPPARTROT = M("%d Gruppenbauteile gedreht.", "Rotated %d group parts."); string REPTEXTROT = M("%d Gruppentexte gedreht.", "Rotated %d group texts."); string ERRELEMGLUED = M("Element '%s' ist verankert!", "Element '%s' is glued!"); string ERRROTATE = M("Element '%s' konnte nicht gedreht werden!", "Error rotating element '%s'!"); string ERRNOPICK = M_ERRNOPICK(); // Globals #define UL_GEDPART "gedpart" // GED part utilities program #define LAYERINV (-0x4000) // Invalid layer code double PI = cvtangle(180.0,1,2) /* PI-value */; int ddbclass = bae_planddbclass() /* Plan DDB class */; // Main program void main() { // Test the interpreter type switch (uliptype()) { /* SCM */ case ULIPSCM : rotate_scm(); break; /* GED */ case ULIPGED : rotate_ged(); break; /* AR */ case ULIPAR : break; /* CAM */ case ULIPCAM : break; /* CED */ case ULIPCED : rotate_ced(); break; /* CV */ case ULIPCV : break; // Ignore on default default : ; } // Done } void rotate_scm() /* // Right rotate picked SCM object */ { index C_FIGURE fig /* Figure index */; index C_NREF nref /* Named reference index */; index C_TEXT text /* Text index */; index C_CONSEG conseg /* Connection segment index */; index C_BUSTAP bustap /* Bus tap index */; string s_dis = "," /* Symbol function disable */; string t_dis = "," /* Text function disable */; string gs_dis = "," /* Group symbol function disable */; string gt_dis = "," /* Group text function disable */; string e_dis = "," /* Element function disable */; double rotang = cvtangle(90.0,1,0) /* Rotation angle */; double eang /* Element angle */; string elemmsg /* Element pick message */; int elemtyp /* Element type */; int cnt = 0 /* Element count */; double px, py /* Pick coordinate */; double gridx, gridy /* Input grid */; double rx, ry /* Rectangle coordinate */; int ilay1 /* 1st input layer */; int closeline = 0 /* Close line polygon flag */; // Check if standalone call if (ulproginfo("",0,0)<=1 && bae_getactmenu()<0) { // Check if element type scan if (bae_iniintval(PAR_METYPSCAN,1)==1 && !bae_peekiact()) { forall (text) { t_dis=e_dis=""; break; } forall (nref) { s_dis=e_dis=""; break; } forall (fig where fig.GROUP && fig.TYP==C_FIGNREF) { gs_dis=""; break; } forall (fig where fig.GROUP && fig.TYP==C_FIGTEXT) { gt_dis=""; break; } } else { // Enable all menu items t_dis=s_dis=e_dis=gt_dis=gs_dis=""; } bae_promptdialog(UPRFCT); switch (bae_askmenu(8,s_dis+UPRSFCT1,t_dis+UPRSFCT2, e_dis+UPRSFCT3,gs_dis+UPRSFCT4,gs_dis+UPRSFCT5, gt_dis+UPRSFCT6,gt_dis+UPRSFCT7,UPRABORT)) { // Rotate symbols case 0 : // Abort if invalid plan class if (ddbclass==DDBCLUNDEF || ddbclass==DDBCLSMRK) error_class(); elemmsg=UPRSELSYMBOL; elemtyp=1<=360.0) error_abort(); break; default : } return(cvtangle(ang,1,0)); } // User Language program end