/* GEDBOUND (GED) -- Set Layout Workspace/Element Boundary/Origin */ /* GEDBOUND (GED) -- Layout-Arbeitsbereich/Elementgrenzen/Nullpunkt setzen */ /* -- INTENDED FOR KEY-CALL USE -- */ /* // Copyright (c) 1993-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 (091021) RELEASED FOR BAE V7.4. // rl (081014) RELEASED FOR BAE V7.2. // rl (080620) ENHANCEMENT: // Added new workspace rectangle function. // rl (071029) RELEASED FOR BAE V7.0. // rl (060829) RELEASED FOR BAE V6.8. // rl (050906) RELEASED FOR BAE V6.6. // rl (040811) RELEASED FOR BAE V6.4. // mb (040403) CHANGE: // Origin Snap to Input Grid function modified to avoid special // case mouse pick problems. // rl (040329) ENHANCEMENT: // Added snap origin to input grid function. // 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 (010320) ENHANCEMENT: // Added optional parameter settings from bae.ini file. // rl (000508) RELEASED FOR BAE V4.6. // rl (990625) RELEASED FOR BAE V4.4. // rl (980910) RELEASED FOR BAE V4.2. // mb (980710) ENHANCEMENT: // Dynamic multi-language support introduced. // rl (970929) RELEASED FOR BAE V4.0. // mb (960919) RELEASED FOR BAE V3.4. // mb (95) RELEASED FOR BAE V3.2. // mb (94) RELEASED FOR BAE V3.0. // mb (93) RELEASED FOR BAE V2.6. // mb (93) ORIGINAL CODING. // // DESCRIPTION // // The gedbound User Language program provides functions // for automatically enlarging and/or shrinking the element // boundaries of the currently loaded layout element and // matching the layout origin with the input grid origin. */ // Includes #include "std.ulh" // User Language standard include // Enforce GED caller type #pragma ULCALLERGED // Disable undo state request #pragma ULCALLERNOUNDO // INI file parameter name definitions #define PAR_BOUNDEL "BOUNDEL_GED" // Boundary enlarge length [m] // Messages string UPRABORT = M_UPRABORT(); string UPRBOUNDFCT = M("Workspace-Aenderungsfunktion selektieren!", "Select Workspace Change Function!"); string UPRBOUNDSHR = M("Workspace &kleiner","&Shrink Workspace"); string UPRBOUNDENL = M("Workspace &groesser","&Enlarge Workspace"); string UPRBOUNDRCT = M("Neues Workspace &Rechteck", "New Workspace &Rectangle"); string UPRORGSNAP = M("%&Nullpunkt ins Eingaberaster", "%&Origin Snap to Input Grid"); string UPRORGLROT = M("Arbeitsbereich &links drehen", "Rotate Workspace &Left"); string UPRORGRROT = M("Arbeitsbereich r&echts drehen", "Rotate Workspace R&ight"); string UPRSELWINS = M("Erste Ecke Workspace-Rechteck waehlen!", "Select 1st Workspace Rectangle Point!"); string UPRSELWINE = M("Zweite Ecke Workspace-Rechteck waehlen!", "Select 2nd Workspace Rectangle Point!"); string ERRINVWIN = M("Ungueltiges Workspace-Rechteck selektiert!", "Invalid Workspace Rectangle Selected!"); // Globals double BEL = bae_inidblval(PAR_BOUNDEL,0.00635) /* Boundary enlarge length 1/4" */; // Main program void main() { int rangedis /* Range check disabled flag */; double x1,y1 /* Rectangle first corner */; double x2,y2 /* Rectangle second corner */; // Abort if not in Layout Editor if (!(uliptype() & ULIPGED)) error_class(); // Abort if invalid plan class if (bae_planddbclass()==DDBCLUNDEF) error_class(); // Ask user for boundary set function bae_defmenusel(-1); bae_promptdialog(UPRBOUNDFCT); switch (bae_askmenu(7,UPRBOUNDSHR,UPRBOUNDENL,UPRBOUNDRCT,UPRORGSNAP, UPRORGLROT,UPRORGRROT,UPRABORT)) { // Workspace shrink case 0 : baewsshrink(1); break; // Workspace enlarge case 1 : baewsresize(BEL,1); break; // Rectangle workspace case 2 : // Disable range check bae_getintpar(0,rangedis); bae_setintpar(0,1); // Get first rectangle corner bae_promptdialog(UPRSELWINS); if (bae_inpoint(bae_planwsnx(),bae_planwsny(),x1,y1,0)) { // Restore old range check state bae_setintpar(0,rangedis); error_abort(); } // Get second rectangle corner bae_promptdialog(UPRSELWINE); if (bae_inpoint(x1,y1,x2,y2,1)) { // Restore old range check state bae_setintpar(0,rangedis); error_abort(); } // Check rectangle dimensions if (x1==x2 || y1==y2) error(ERRINVWIN); bae_clriactqueue(); bae_storemouseiact(1,x1x2 ? x1 : x2,y1>y2 ? y1 : y2,0,LMB); call(MNU_GEDPARUBND); bae_setintpar(0,rangedis); break; // Snap origin to input grid case 3 : moverotelem(0); break; // Left rotate element case 4 : moverotelem(1); break; // Right rotate element case 5 : moverotelem(2); break; } // Clear the dialog line bae_prtdialog(""); } void moverotelem(int mode) /* // Move/rotate current element // Parameter: // int mode : Move/rotate mode */ { double lx, ly /* Old lower boundary */; double ux, uy /* New lower boundary */; double nx, ny /* Origin shift */; int anglock /* Angle lock flag */; int gridlock /* Grid lock flag */; int expertmode /* Expert mode */; // Group select all elements ged_groupselect(0,0,1); // Get old angle lock if (anglock=bae_getanglelock()) bae_setanglelock(0); // Get old grid lock if (gridlock=bae_getgridlock()) bae_setgridlock(0); // Get current origin nx=bae_planwsnx(); ny=bae_planwsny(); // Get current boundaries lx=bae_planwslx(); ly=bae_planwsly(); ux=bae_planwsux(); uy=bae_planwsuy(); if (mode==0) { // Parameter - Set Upper Boundary bae_clriactqueue(); bae_storemouseiact( 1,(nx<0.0 ? ux-nx : ux)+BEL,(ny<0.0 ? uy-ny : uy)+BEL,0,LMB); call(MNU_GEDPARUBND); // Parameter - Set Lower Boundary bae_clriactqueue(); bae_storemouseiact( 1,(nx>0.0 ? lx-nx : lx)-BEL,(ny>0.0 ? ly-ny : ly)-BEL,0,LMB); call(MNU_GEDPARLBND); } // Set the expert mode expertmode=101; bae_storepoint(0.0,0.0,expertmode); // Move group bae_clriactqueue(); bae_storemouseiact(1,nx,ny,0,LMB); switch (mode) { // Rotate left case 1 : bae_storemouseiact(1,0.0,0.0,0,RMB); bae_storemenuiact(1,4,LMB); bae_storemouseiact(1,nx,ny,0,LMB); break; // Rotate right case 2 : bae_storemouseiact(1,0.0,0.0,0,RMB); bae_storemenuiact(1,5,LMB); bae_storemouseiact(1,nx,ny,0,LMB); break; case 0 : default : bae_storemouseiact(1,0.0,0.0,0,LMB); } call(MNU_GEDMOVEGRP); // Reset the expert mode expertmode++; bae_storepoint(0.0,0.0,expertmode); switch (mode) { // Rotate left case 1 : // Parameter - Set Upper Boundary bae_clriactqueue(); bae_storemouseiact(1,nx-(ly-ny),ny+(ux-nx),0,LMB); call(MNU_GEDPARUBND); // Parameter - Set Lower Boundary bae_clriactqueue(); bae_storemouseiact(1,nx-(uy-ny),ny+(lx-nx),0,LMB); call(MNU_GEDPARLBND); break; // Rotate right case 2 : // Parameter - Set Upper Boundary bae_clriactqueue(); bae_storemouseiact(1,nx+(uy-ny),ny-(lx-nx),0,LMB); call(MNU_GEDPARUBND); // Parameter - Set Lower Boundary bae_clriactqueue(); bae_storemouseiact(1,nx+(ly-ny),ny-(ux-nx),0,LMB); call(MNU_GEDPARLBND); break; case 0 : default : // Set origin to grid origin bae_clriactqueue(); bae_storemouseiact(1,0.0,0.0,0,LMB); call(MNU_GEDPARORIG); // Parameter - Set Upper Boundary bae_clriactqueue(); bae_storemouseiact(1,ux-nx,uy-ny,0,LMB); call(MNU_GEDPARUBND); // Parameter - Set Lower Boundary bae_clriactqueue(); bae_storemouseiact(1,lx-nx,ly-ny,0,LMB); call(MNU_GEDPARLBND); nx=ny=0.0; } // Set origin bae_clriactqueue(); bae_storemouseiact(1,nx,ny,0,LMB); call(MNU_GEDPARORIG); // Restore old angle lock bae_setanglelock(anglock); // Restore old grid lock bae_setgridlock(gridlock); // Group deselect all elements ged_groupselect(0,0,0); // Zoom all bae_clriactqueue(); call(MNU_BAEZOOMALL); } // User Language program end