Command:ADS
This function adds new object alike selected one. The routine checks polyline width and multiline justification. Works also with AECB objects (Autocad Vertical versions objects)Code:
;;; ================================================= ;;; ADDSELECTED_AECB_v3_00.LSP ;;; ;;; Written by Andrzej Kalinowski, www.autolisps.blogspot.com ;;; v1.00 - 15.05.2016 ;;; v2.01 - 01.03.2019 - updated polyline width restoration and error section ;;; v2.02 - 20.05.2020 - fixed bug with polyline width ;;; v3.00 - 22.12.2021 - corrected matching properties for Labelcuves in Autocad MEP ;;; v3.01 - 27.04.2024 - added option to create rectangle after selectiong an another rectanle (or polyliene) ;;; ;;; Command: ADS - adds new object alike selected one. The routine checks polyline width and multiline justification. ;;; Works also with AECB objects (Autocad MEP / Autocad Architecture ). ;;; ================================================= (vl-load-com) (defun c:ADS (/ obj1 type1 justi1 MLSca1 MLSty1 lay1 col1 Ltyp1 Lw1 obj2 entlist2 pt1 plwid01 rec1) ;----------------------------------------- ;error section ;----------------------------------------- (defun *error* (msg) (princ "error: ") (princ msg) (princ) ); (defun errtrap1 (errormsg1 / ) (ADS_RESTORE_VAR) (if (and errormsg1 (not (wcmatch (strcase errormsg1) "*BREAK*,*CANCEL*,*QUIT*") ) ) (prompt (strcat "\n--------------------------------------------\nError: " errormsg1) );then );if (princ) );defun err ;----------------------------------------- (setq temperr *error* ;saving error *error* errtrap1 ; assigning errtrap1 function to *error* variable old_plinewid (getvar "PLINEWID") old_clayer (getvar "CLAYER") old_celtype (getvar "CELTYPE");linetype old_celweight (getvar "CELWEIGHT"); lineweight old_cecolor (getvar "CECOLOR") );setq ;----------------------------------------- ;object selection ;----------------------------------------- (setq obj1 nil) (prompt "select object") (while (= obj1 nil) (setq obj1 (ssget "_:S+.") ) (if (= obj1 nil) (princ "\nwrong object");then (if (> (sslength obj1) 1);else-checks if there is only one object selected (progn (princ "\nselect only one object") (princ) (setq obj1 nil) );progn );end if );end if );end while (setq obj1 (ssname obj1 0) );takes first and only one element from selection set. You can retreive entlist from element of seleset - not from selection set. (setq type1 (cdr (assoc 0 (entget obj1) )) ) (setvar "CLAYER" (cdr (assoc 8 (entget obj1) ))) (if (assoc 6 (entget obj1) ) (setvar "CELTYPE" (cdr (assoc 6 (entget obj1) ))) ); Linetype (if (assoc 370 (entget obj1) ) (setvar "CELWEIGHT" (cdr (assoc 370 (entget obj1) ))) ); Linetype (ADS_SETCECOLOR (entget obj1)) (setq type1 (cdr (assoc 0 (entget obj1) )) ) (if (and (member type1 (list "LWPOLYLINE" "POLYLINE")) (member (vla-get-objectname (vlax-ename->vla-object obj1 ) ) (list "AcDbPolyline" "AcDb2dPolyline")) (/= (cdr (assoc 43 (entget obj1) )) nil) );and (setvar "PLINEWID" (cdr (assoc 43 (entget obj1) )) ) );if ;----------------------------------------- (cond ;HVAC ( (= type1 "AECB_DUCTFLEX") (command "_DuctFlexAddSelected" obj1) ) ( (= type1 "AECB_PIPEFITTING") (command "_pipeFittingAddSelected" obj1) ) ( (= type1 "AECB_MVPART") (command "_MvPartAddSelected" obj1) ) ( (= type1 "AECB_PIPE") (command "_PipeAddSelected" obj1) ) ( (= type1 "AECB_DUCT") (command "_DuctAddSelected" obj1) ) ( (= type1 "AECB_DUCTFITTING") (command "_DuctFittingAddSelected" obj1) ) ( (= type1 "AECB_PIPECUSTOMFITTING") (command "_AecbPipeCustomFitting" obj1) ) ( (= type1 "AECB_DUCTCUSTOMFITTING") (command "_AecbDuctCustomFitting" obj1) ) ( (= type1 "AEC_MVBLOCK_REF") (command "_TagAddSelected" obj1) ) ;ARCHITECTURAL AND STRUCTURAL ( (= type1 "AEC_COLUMN_GRID") (command "_COLUMNGRIDADD" obj1) ) ( (= type1 "AEC_CEILING_GRID") (command "_CEILINGGRIDADD" obj1) ) ( (= type1 "AEC_ROOFSLAB") (command "_RoofSlabAddSelected" obj1) ) ( (= type1 "AEC_ROOF") (command "_RoofAdd" obj1) ) ( (= type1 "AEC_SLAB") (command "_SlabAddSelected" obj1) ) ( (= type1 "AEC_WALL") (command "_WallAddSelected" obj1) ) ( (= type1 "AEC_DOOR") (command "_DoorAddSelected" obj1) ) ( (= type1 "AEC_OPENING") (command "_OpeningAddSelected" obj1) ) ( (= type1 "AEC_WINDOW_ASSEMBLY") (command "_DoorWinAssemblyAddSelected" obj1) ) ( (= type1 "AEC_WINDOW") (command "_WindowAddSelected" obj1) ) ( (= type1 "AEC_STAIR") (command "_StairAddSelected" obj1) ) ( (= type1 "AEC_RAILING") (command "_RailingAddSelected" obj1) ) ( (= type1 "AEC_SPACE") (command "_SpaceAddSelected" obj1) ) ( (= type1 "AEC_ZONE") (command "_ZoneAddSelected" obj1) ) ( (= type1 "AEC_MASS_ELEM") (command "_MassElementAddSelected" obj1) ) ( (= type1 "AEC_CURTAIN_WALL_LAYOUT") (command "_CurtainWallAddSelected" obj1) ) ( (= type1 "AEC_CURTAIN_WALL_UNIT") (command "_AecCwUnitAdd" obj1) ) ( (= type1 "AECS_MEMBER") (command "_MemberAddSelected" obj1) ) ;ELECTRICAL ( (= type1 "AECB_DEVICE") (command "_DeviceAddSelected" obj1) ) ( (= type1 "AECB_CONDUITFITTING") (command "_ConduitFittingAddSelected" obj1) ) ( (= type1 "AECB_CABLETRAY") (command "_CableTrayAddSelected" obj1) ) ( (= type1 "AECB_CONDUIT") (command "_ConduitAddSelected" obj1) ) ( (= type1 "AECB_CABLETRAYFITTING") (command "_ConduitFittingAddSelected" obj1) ) ( (= type1 "AECB_PANEL") (command "_PanelAddSelected" obj1) ) ( (= type1 "AECB_WIRE") (command "_WireAddSelected" obj1) ) ;SCHEMATIC ( (= type1 "AECB_SCHEMATIC") (command "_SLineAddSelected" obj1) ) ( (= type1 "AECB_SCHEMATICSYMBOL") (command "_SymbolAddSelected" obj1) ) ( (= type1 "AECB_SCHEMATIC_PIPE") (command "_PlumbingLineAddSelected" obj1) ) ( (= type1 "AECB_SCHEMATICPIPEFITTING") (command "_PlumbingFittingAddSelected" obj1) ) ;OTHER ( (= type1 "AECB_LABEL_CURVE") (command "_LabelCurveAddSelected" obj1) ) ;( (= type1 "ABST_DB_HANGER") () ) ;There is no add selected function for that object type ( (= type1 "MLINE") (setq MLSca1 (vlax-get (vlax-ename->vla-object obj1 ) 'MLineScale) MLSty1 (vlax-get (vlax-ename->vla-object obj1 ) 'StyleName) );setq (cond ( (= 0 (vlax-get (vlax-ename->vla-object obj1 ) 'Justification) ) (setq justi1 "_Top") ) ( (= 1 (vlax-get (vlax-ename->vla-object obj1 ) 'Justification) ) (setq justi1 "_Zero") ) ( (= 2 (vlax-get (vlax-ename->vla-object obj1 ) 'Justification) ) (setq justi1 "_Bottom") ) );cond (command "_ADDSELECTED" obj1 "_J" justi1 "_S" MLSca1 "_ST" MLSty1 ) ) ( (member (vla-get-objectname (vlax-ename->vla-object obj1 ) ) (list "AcDbPolyline" "AcDb2dPolyline")) (if (= (type (vl-catch-all-apply 'vlax-get-property (list (vlax-ename->vla-object obj1 ) 'ConstantWidth ) ) ) 'REAL) ; checking if polyline hast a global width. for AcDb2dPolyline group code 43. doesnt exist. ( Group code 43 defined global polyline widht for AcDbPolyline) (setq plwid01 (vlax-get (vlax-ename->vla-object obj1 ) 'ConstantWidth) ) ; nil or value );if (initget "Rectangle") (setq pt1 (getpoint "\nSpecify first point, or [Rectangle]: ") ) (if (= pt1 "Rectangle") (progn (setq rec1 1) (if (/= plwid01 nil) (command "_Rectang" "_Width" plwid01 pause pause) (command "_Rectang" pause pause) );if );progn (command "_ADDSELECTED" obj1 pt1) );if ) (t (command "_ADDSELECTED" obj1) ) );cond (while (= 1 (getvar "cmdactive") );prevents exiting whole routine after finishing drawing the polyline (command pause) );while ;----------------------------------------- ;matching layer, color and linetype ;----------------------------------------- (if rec1 (progn (setq obj2 (vlax-ename->vla-object (entlast))) (vla-put-linetype obj2 (vla-get-linetype (vlax-ename->vla-object obj1) )) (vla-put-lineweight obj2 (vla-get-lineweight (vlax-ename->vla-object obj1) )) (vla-put-linetypescale obj2 (vla-get-linetypescale (vlax-ename->vla-object obj1) )) );progn );if ;| (setq obj2 (vlax-ename->vla-object (entlast))) (setq entlist2 (entget (entlast))) (cond ( (/= (assoc 430 (entget obj1)) nil) (vla-put-truecolor obj2 (vla-get-truecolor (vlax-ename->vla-object obj1) )) (setq entlist2 (append entlist2 (list (assoc 430 (entget obj1)))));setq (entmod entlist2) ) ( (and (/= (assoc 420 (entget obj1)) nil) (= (assoc 430 (entget obj1)) nil) ) (vla-put-truecolor obj2 (vla-get-truecolor (vlax-ename->vla-object obj1) )) ) ( T (vla-put-color obj2 (vla-get-color (vlax-ename->vla-object obj1) )) ) );cond (vla-put-linetype obj2 (vla-get-linetype (vlax-ename->vla-object obj1) )) (vla-put-lineweight obj2 (vla-get-lineweight (vlax-ename->vla-object obj1) )) (vla-put-layer obj2 old_lay1) |; ;----------------------------------------- ;restoring to old system variables ;----------------------------------------- (ADS_RESTORE_VAR) (princ);exiting quietly );defun ;;; ================================================ ;;; ADS_RESTORE_VAR ;;; ================================================ (defun ADS_RESTORE_VAR ( / ) (setvar "PLINEWID" old_plinewid) (setvar "CLAYER" old_clayer) (setvar "CELTYPE" old_celtype);linetype (setvar "CELWEIGHT" old_celweight);lineweight (setvar "CECOLOR" old_cecolor) (setq *error* temperr) (setq old_plinewid nil old_clayer nil old_celtype nil old_celweight nil old_cecolor nil temperr nil) );defun ;;; ================================================ ;;; ADS_SETCECOLOR ;;; ================================================ (defun ADS_SETCECOLOR (engt1 / rgbval1);feed with objects entity list (entget) (cond ( (assoc 430 engt1 ) (setvar "CECOLOR" (cdr(assoc 430 engt1 ) )) ) ( (assoc 420 engt1 ) (setq rgbval1 (cdr(assoc 420 engt1 ) )) (setvar "CECOLOR" (strcat "RGB:" (itoa (lsh (lsh rgbval1 8) -24) ) "," ;R (itoa (lsh (lsh rgbval1 16) -24) ) ",";G (itoa (lsh (lsh rgbval1 24) -24) );B );strcat );setvar ) ( (assoc 62 engt1 ) (setvar "CECOLOR" (itoa (cdr (assoc 62 engt1 ) ) ) ) ) ( (= nil (assoc 62 engt1 )) (setvar "CECOLOR" "256" ) );ByLayer );cond );defun
Version history:
1.00 - [15.05.2016] First release.
[...] - misc. updates
2.01 - 01.03.2019 - updated polyline width restoration and error section
2.02 - 20.05.2020 - fixed bug with polyline width
3.00 - 22.12.2021 - corrected matching properties for Labelcuves in Autocad MEP
3.01 - 27.04.2024 - added option to create rectangle after selectiong an another rectanle (or polyliene)
Compatibility:
2011 and later versions of Autocad and its vertical versions
Download file:
ADDSELECTED_AECB_v3_01.FAS
No comments:
Post a Comment