/* LARGER (STD) -- Enlarge Current Element Size/Width */ /* LARGER (STD) -- Pickelement vergroessern/verbreitern */ /* -- INTENDED FOR KEY-CALL USE (:Enlarge) -- */ /* // Copyright (c) 2003-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 (091021) RELEASED FOR BAE V7.4. // rl (081014) RELEASED FOR BAE V7.2. // rl (071029) RELEASED FOR BAE V7.0. // rl (060829) RELEASED FOR BAE V6.8. // rl (051212) ENHANCEMENT: // Added fixed width/height lists support. // rl (050906) RELEASED FOR BAE V6.6. // rl (040811) RELEASED FOR BAE V6.4. // rl (031127) ORIGINAL CODING. // // DESCRIPTION // // The larger User Language program designates the currently // active BAE menu function and performs a submenu interaction // for enlarging the currently processed object (if an object is picked // and if enlarging is permitted). This program must be configured for // implicit hotkey program call // (e.g. ). */ // Includes #include "std.ulh" // User Language standard include // Enforce editor caller type #pragma ULCALLEREDT // Disable undo state request #pragma ULCALLERNOUNDO // INI file parameter name definitions #define PAR_GEDTRCL "PATHENLARGE_GED" // Layout path enlarge value #define PAR_GEDTRCWL "PATHWIDTHL_GED" // Layout path width list #define PAR_GEDTXTL "TEXTENLARGE_GED" // Layout text enlarge value #define PAR_GEDTXTHL "TEXTHEIGHTL_GED" // Layout text height list #define PAR_GEDGRPL "GRPENLARGE_GED" // Layout group enlarge value #define PAR_CEDTRCL "PATHENLARGE_CED" // IC path enlarge value #define PAR_CEDTRCWL "PATHWIDTHL_CED" // IC path width list #define PAR_CEDTXTL "TEXTENLARGE_CED" // IC text enlarge value #define PAR_CEDTXTHL "TEXTHEIGHTL_CED" // IC text height list #define PAR_CEDGRPL "GRPENLARGE_CED" // IC group enlarge value #define PAR_CEDMACL "MACENLARGE_CED" // IC macro enlarge value // Globals #define GV_STARTW "enlarge_swidth" // Enlarge start width variable #define GV_STARTX "enlarge_sx" // Enlarge start x variable #define GV_STARTY "enlarge_sy" // Enlarge start y variable #define GV_CURW "enlarge_cwidth" // Enlarge current width var. #define SMALLVAL 0.000000001 // Small compare value // Main program void main() { // Test the interpreter type switch (uliptype()) { /* SCM */ case ULIPSCM : break; /* GED */ case ULIPGED : enlarge_ged(); break; /* CED */ case ULIPCED : enlarge_ced(); break; // Ignore on default default : break; } // Done } void enlarge_ged() /* // Enlarge picked GED objects size */ { double lastsize /* Last size */; double lastx, lasty /* Last coordinates */; double newsize /* New element size */; double oldsize /* Old element size */; double oldx, oldy /* Old element coordinates */; double cursize /* Current set element size */; double enlarge /* Enlarge value */; double sizel[] /* Size list */; int sizen /* Size count */; int sidx /* Size scan index */; index L_TEXT text /* Text index */; // Get the currently active menu switch (bae_getactmenu()) { // Text movement functions case MNU_GEDADDTEXT : case MNU_GEDMOVETEXT : case MNU_GEDCOPYTEXT : case MNU_GEDMOVENAME : case MNU_GEDMOVEATTR : if (ged_getinputdata(0.0,0.0,0.0,0,0.0,0.0,0.0,0,text,0, 0.0,0.0,0.0,0.0,0,0.0,0.0,0.0,0.0,0)==0) { oldsize=text.SIZE; for (sizen=0;sizen<1000;sizen++) if ((sizel[sizen]=bae_inidblval( bae_iniarrayvarname(PAR_GEDTXTHL, sizen),0.0))==0.0) break; if (sizen==0) { newsize=oldsize+ bae_inidblval(PAR_GEDTXTL,0.0005); } else { // Scan to size in list for (sidx=0;sidxSMALLVAL) break; if (sidxSMALLVAL || fabs(oldy-lasty)>SMALLVAL) && oldsize SMALLVAL) break; if (sidxSMALLVAL || fabs(oldy-lasty)>SMALLVAL || fabs(oldsize-cursize)>SMALLVAL) varset(GV_STARTW,oldsize); varset(GV_STARTX,oldx); varset(GV_STARTY,oldy); varset(GV_CURW,newsize); } break; // Trace segment edit functions case 403 : case 404 : if ((ged_getinputdata(oldx,oldy,oldsize,0,0.0,0.0,0.0,0,0,0, 0.0,0.0,0.0,0.0,0,0.0,0.0,0.0,0.0,0)==0 && oldsize!=0.0) || (ged_getinputdata(0.0,0.0,0.0,0,oldx,oldy,oldsize,0,0,0, 0.0,0.0,0.0,0.0,0,0.0,0.0,0.0,0.0,0)==0 && oldsize!=0.0)) { // Query last data if (varget(GV_STARTW,lastsize)) lastsize=0.0; if (varget(GV_CURW,cursize)) cursize=0.0; if (varget(GV_STARTX,lastx)) lastx=0.0; if (varget(GV_STARTY,lasty)) lasty=0.0; if (fabs(oldsize-cursize)<=SMALLVAL && (fabs(oldx-lastx)>SMALLVAL || fabs(oldy-lasty)>SMALLVAL) && oldsize SMALLVAL) break; if (sidxSMALLVAL || fabs(oldy-lasty)>SMALLVAL || fabs(oldsize-cursize)>SMALLVAL) varset(GV_STARTW,oldsize); varset(GV_STARTX,oldx); varset(GV_STARTY,oldy); varset(GV_CURW,newsize); } break; // Group movement functions case MNU_GEDMOVEGRP : case MNU_GEDCOPYGRP : case MNU_GEDLOADGRP : case 415 : case 416 : if ((enlarge=bae_inidblval(PAR_GEDGRPL,2.0))<=0.0) break; bae_storemouseiact(1,0.0,0.0,1,RMB); bae_storemenuiact(1,12,LMB); bae_storetextiact(1,ftoa(enlarge,10)); break; // Ignore on default default : break; } // Done } void enlarge_ced() /* // Enlarge picked CED objects size */ { double oldsize /* Old element size */; double newsize /* New element size */; double enlarge /* Enlarge value */; double sizel[] /* Size list */; int sizen /* Size count */; int sidx /* Size scan index */; index I_NREF nref /* Named reference index */; index I_TEXT text /* Text index */; // Get the currently active menu switch (bae_getactmenu()) { // Macro movement functions case MNU_CEDADDMAC : case MNU_CEDMOVEMAC : case MNU_CEDNEXTMAC : if (ced_getinputdata(0.0,0.0,0.0,0,0.0,0.0,0.0,0,nref,0, 0.0,0.0,0.0,0.0,0,0.0,0.0,0.0,0.0,0)==0) { if ((enlarge=bae_inidblval(PAR_CEDMACL,2.0))<=0.0) break; bae_storemouseiact(1,0.0,0.0,1,RMB); bae_storemenuiact(1,6,LMB); bae_storetextiact( 1,ftoa(enlarge*nref.SCALE,10)); } break; // Trace corner functions case 400 : case 401 : case 402 : if ((ced_getinputdata(0.0,0.0,oldsize,0,0.0,0.0,0.0,0,0,0, 0.0,0.0,0.0,0.0,0,0.0,0.0,0.0,0.0,0)==0 && oldsize!=0.0) || (ced_getinputdata(0.0,0.0,0.0,0,0.0,0.0,oldsize,0,0,0, 0.0,0.0,0.0,0.0,0,0.0,0.0,0.0,0.0,0)==0 && oldsize!=0.0)) { for (sizen=0;sizen<1000;sizen++) if ((sizel[sizen]=bae_inidblval( bae_iniarrayvarname(PAR_CEDTRCWL, sizen),0.0))==0.0) break; if (sizen==0) { newsize=oldsize+ bae_inidblval(PAR_CEDTRCL,0.000001); } else { // Scan to size in list for (sidx=0;sidxSMALLVAL) break; if (sidxSMALLVAL) break; if (sidxSMALLVAL) break; if (sidx