diff --git a/devlay-v2.lsp b/devlay-v2.lsp index e07c955..1c55aad 100644 --- a/devlay-v2.lsp +++ b/devlay-v2.lsp @@ -164,7 +164,6 @@ (progn (princ (strcat "\n[devlay_update] Found blocks named \"" blkName "\".")) (setq pairs (build-pairs maxDesca)) - (setq sioLikeBlocks '("PLCIO_ARMORBLOCK_SIO" "PLCIO_ARMBLOCK_FIOM" "PLCIO_ARMORBLOCK_FIOH")) (setq i 0) (while (< i (sslength ss)) (setq ent (ssname ss i)) @@ -235,7 +234,13 @@ ;; EXISTING CODE for all other blocks (if (and val1 val2 (or (and (vl-string-search "SEL" val1) (vl-string-search "SEL" val2)) - (and (vl-string-search "DPM" val1) (vl-string-search "DPM" val2)))) + (and (vl-string-search "DPM" val1) (vl-string-search "DPM" val2)) + ;; NEW: Additional conditions for single straight block + (and (vl-string-search "VFD" val1) (vl-string-search "STO" val1) + (vl-string-search "VFD" val2) (vl-string-search "STO" val2)) + (and (vl-string-search "JR" val1) (vl-string-search "_PB" val1) (vl-string-search "JR" val2) (vl-string-search "_PB_LT" val2)) + (and (vl-string-search "EPC" val1) (vl-string-search "EPC" val2)) + (and (vl-string-search "SSP" val1) (vl-string-search "SSP" val2)))) (progn ;; Insert single straight block (command "_-INSERT" "HC01_CORDSET_STR-STR_STRAIGHT" newPt1 1 1 0) @@ -259,6 +264,28 @@ ) ) + ;; === NEW: Move single straight block left/right depending on side === + (if (or (and (= blkName "PLCIO_ARMORPOWERFLEX") (>= tagNum 7)) + (and (member blkName sioLikeBlocks) (>= tagNum 8))) + ;; Right side: move left 1 unit + (progn + (setq basePt (vlax-get finalBlock 'InsertionPoint)) + (setq targetPt (list (- (car basePt) 0.5) (cadr basePt) (caddr basePt))) + (vla-move finalBlock (vlax-3d-point basePt) (vlax-3d-point targetPt)) + ) + ;; Left side: move right 0.5 unit + (if (or (and (= blkName "PLCIO_ARMORPOWERFLEX") (<= tagNum 7)) + (and (member blkName sioLikeBlocks) (< tagNum 8))) + (progn + (setq basePt (vlax-get finalBlock 'InsertionPoint)) + (setq targetPt (list (+ (car basePt) 1.0) (cadr basePt) (caddr basePt))) + (vla-move finalBlock (vlax-3d-point basePt) (vlax-3d-point targetPt)) + ) + + ) + ) + ;; === END NEW === + ;; Move all SEL blocks 1 unit down. Also move 4 units left for DESCA07 - 09 (SIO) (setq shiftX (if (>= tagNum mirrorThreshold) -3 0)) (setq shiftY -0.5) @@ -324,23 +351,31 @@ (if (< tagNum mirrorThreshold) 0.5 -1.4) ) ) ; inward move - (setq newX1 (+ (car newPt1) moveVecX)) - (setq newX2 (+ (car newPt2) moveVecX)) + + ;; Additional right shift of 0.5 for SIO-like blocks on right side (tagNum >= 9) + (setq rightShift (if (and (member blkName sioLikeBlocks) (>= tagNum 9)) 0.5 0.0)) + ;; Additional downward shift of 0.5 for SIO-like blocks on right side (tagNum >= 9) + (setq downShift (if (and (member blkName sioLikeBlocks) (>= tagNum 9)) 0.1 0.0)) + + (setq newX1 (+ (car newPt1) moveVecX rightShift)) + (setq newX2 (+ (car newPt2) moveVecX rightShift)) (setq newX3 (if (or (= tagNum 7) (= tagNum 8)) - (+ (car newPt3) -1.5) - (+ (car newPt3) moveVecX) + (+ (car newPt3) -1.5 rightShift) + (+ (car newPt3) moveVecX rightShift) ) ) + (setq newY1 (- (cadr newPt1) downShift)) + (setq newY2 (- (cadr newPt2) downShift)) (setq newY3 (if (or (= tagNum 7) (= tagNum 8)) - (+ (cadr newPt3) -0.015) - (cadr newPt3) + (+ (cadr newPt3) -0.015 downShift) + (- (cadr newPt3) downShift) ) ) - (vla-move newBlock1 (vlax-3d-point newPt1) (vlax-3d-point newX1 (cadr newPt1) (caddr newPt1))) - (vla-move newBlock2 (vlax-3d-point newPt2) (vlax-3d-point newX2 (cadr newPt2) (caddr newPt2))) + (vla-move newBlock1 (vlax-3d-point newPt1) (vlax-3d-point newX1 newY1 (caddr newPt1))) + (vla-move newBlock2 (vlax-3d-point newPt2) (vlax-3d-point newX2 newY2 (caddr newPt2))) (vla-move (vlax-ename->vla-object (entlast)) (vlax-3d-point newPt3) (vlax-3d-point newX3 newY3 (caddr newPt3))) ) ) @@ -376,7 +411,7 @@ (setq y (- (cadr pt) 0.5)) (setq xAdjust (if (and (member blkName sioLikeBlocks) (>= tagNum 9)) - 0.5 ; right side → move slightly left + 0.0 ; right side → move slightly left (if (member blkName sioLikeBlocks) 0.7 ; left side → move slightly right 0.0 ; other blocks → no change @@ -422,9 +457,32 @@ (progn (command "_MIRROR" newEnt "" insPt (list (car insPt) (+ (cadr insPt) 0.1)) "N") (entdel newEnt) + (setq newBlock (vlax-ename->vla-object (entlast))) ) ) + ;; === NEW: Move single straight block left/right depending on side === + (if (or (and (= blkName "PLCIO_ARMORPOWERFLEX") (>= tagnum 7)) + (and (member blkName sioLikeBlocks) (>= tagnum 8) (= tagnum 15))) + ;; Right side: move left 1 unit (only for last DESCA in SIO-like blocks) + (progn + (setq basePt (vlax-get newBlock 'InsertionPoint)) + (setq targetPt (list (+ (car basePt) 0.5) (cadr basePt) (caddr basePt))) + (vla-move newBlock (vlax-3d-point basePt) (vlax-3d-point targetPt)) + ) + ) + + ;; === NEW: Move SIO-like single blocks on left side to the left === + (if (and (member blkName sioLikeBlocks) (< tagnum 8)) + ;; Left side SIO-like blocks: move left 0.5 unit + (progn + (setq basePt (vlax-get newBlock 'InsertionPoint)) + (setq targetPt (list (- (car basePt) 0.7) (cadr basePt) (caddr basePt))) + (vla-move newBlock (vlax-3d-point basePt) (vlax-3d-point targetPt)) + ) + ) + ;; === END NEW === + (setvar "ATTDIA" oldAttdia) (setvar "ATTREQ" oldAttreq) ) diff --git a/layout-base-v2.lsp b/layout-base-v2.lsp index 2c0d0eb..f1eefda 100644 --- a/layout-base-v2.lsp +++ b/layout-base-v2.lsp @@ -9,6 +9,42 @@ ) ) +(defun placeDeviceLabel (vlaBlock / insPt labelText labelPt ent) + (setq insPt (vlax-get vlaBlock 'InsertionPoint)) + (setq labelPt (list (+ (car insPt) 3.6) (+ (cadr insPt) 1.2) (caddr insPt))) + + (setq labelText + (cond + ((wcmatch (strcase (vla-get-effectivename vlaBlock)) "*POWERFLEX*") "APF") + ((wcmatch (strcase (vla-get-effectivename vlaBlock)) "*SIO*") "SIO") + ((wcmatch (strcase (vla-get-effectivename vlaBlock)) "*FIOM*") "FIO") + ((wcmatch (strcase (vla-get-effectivename vlaBlock)) "*FIOH*") "FIOH") + (T "") + ) + ) + + (if (/= labelText "") + (progn + ;; Create text entity with alignment point for justification + (setq ent (entmakex + (list + (cons 0 "TEXT") + (cons 8 "0") + (cons 7 "WD") + (cons 62 7) ;; white color + (cons 10 labelPt) ;; insertion point + (cons 11 labelPt) ;; alignment point (required for vertical just >0) + (cons 40 0.5) + (cons 72 0) ;; Horizontal Left + (cons 73 3) ;; Vertical Top + (cons 1 labelText) + (cons 50 0.0) ;; rotation angle + ) + )) + ) + ) +) + (defun insertBlockAt (blockName basePt targetPt) (command "_.-INSERT" blockName basePt 1 1 0) (setq ent (entlast)) @@ -66,42 +102,6 @@ ) ) -(defun placeDeviceLabel (vlaBlock / insPt labelText labelPt ent) - (setq insPt (vlax-get vlaBlock 'InsertionPoint)) - (setq labelPt (list (+ (car insPt) 3.6) (+ (cadr insPt) 1.2) (caddr insPt))) - - (setq labelText - (cond - ((wcmatch (strcase (vla-get-effectivename vlaBlock)) "*POWERFLEX*") "APF") - ((wcmatch (strcase (vla-get-effectivename vlaBlock)) "*SIO*") "SIO") - ((wcmatch (strcase (vla-get-effectivename vlaBlock)) "*FIOM*") "FIO") - ((wcmatch (strcase (vla-get-effectivename vlaBlock)) "*FIOH*") "FIOH") - (T "") - ) - ) - - (if (/= labelText "") - (progn - ;; Create text entity with alignment point for justification - (setq ent (entmakex - (list - (cons 0 "TEXT") - (cons 8 "0") - (cons 7 "WD") - (cons 62 7) ;; white color - (cons 10 labelPt) ;; insertion point - (cons 11 labelPt) ;; alignment point (required for vertical just >0) - (cons 40 0.5) - (cons 72 0) ;; Horizontal Left - (cons 73 3) ;; Vertical Top - (cons 1 labelText) - (cons 50 0.0) ;; rotation angle - ) - )) - ) - ) -) - ;; Function to read device list from a text file (defun readDeviceListFromFile ( / file filePath line result) ;; Open file dialog for user to pick device list text file @@ -198,7 +198,7 @@ (setq vlaEnt (vlax-ename->vla-object ent)) (vla-move vlaEnt (vlax-3d-point 0 0 0) (vlax-3d-point pos)) (setDESCAtoSpare vlaEnt) - (placeDeviceLabel vlaEnt) + ; (placeDeviceLabel vlaEnt) ) (princ (strcat "\nFailed to insert block: " blk)) ) @@ -210,7 +210,7 @@ ) -(defun update20ZoneBlockAttributes (blockEnt layoutIndex startValue / blockObj attrList attr attrName newValue) +(defun update20ZoneBlockAttributes (blockEnt layoutIndex startValue / blockObj attrList attr attrName newValue formattedValue) (setq blockObj (vlax-ename->vla-object blockEnt)) (setq attrList (vlax-invoke blockObj 'GetAttributes)) @@ -226,11 +226,11 @@ ;; Convert string to number, add index (setq newValue (+ (atoi startValue) layoutIndex)) - ;; Format as 5-digit string with leading zeros, add "." - (setq newValue (strcat (substr (strcat "00000" (itoa newValue)) (- (strlen (strcat "00000" (itoa newValue))) 4)) ".")) + ;; Format as string with period, no leading zeros + (setq formattedValue (strcat (itoa newValue) ".")) ;; Apply value - (vlax-put-property attr 'TextString newValue) + (vlax-put-property attr 'TextString formattedValue) (vlax-invoke attr 'Update) ) ) diff --git a/network-diagram-v2.lsp b/network-diagram-v2.lsp index 7c9ead9..0e3b1af 100644 --- a/network-diagram-v2.lsp +++ b/network-diagram-v2.lsp @@ -136,7 +136,7 @@ (setq labelPt (list (- (car basePt) 0.05) ; left - (+ (cadr basePt) 0.9) ; up + (+ (cadr basePt) 0.65) ; up (caddr basePt))) ;; Create label text @@ -285,6 +285,8 @@ (setq deviceGroups (cadr csvData)) (setq count (length dpmList)) + (setq userInput (getstring "\nEnter zone number (e.g., 01, 02): ")) + (if (and blockName (> count 0)) (progn @@ -348,13 +350,17 @@ ;; Move the inserted block from (0,0,0) to desired point (if ent (progn + (setq vlaObj (vlax-ename->vla-object ent)) (vla-move vlaObj (vlax-3d-point 0 0 0) (vlax-3d-point desiredX desiredY 0)) + ;; Set ALL attributes in the ZONE_32H block to E8912., E8913., etc. + + (setq zoneName (strcat userInput (itoa (+ 702 i)) ".")) + (foreach att (vlax-invoke vlaObj 'GetAttributes) + (vla-put-textstring att zoneName) + ) ;; Label the ZONE_32H lines (labelZone32Lines ent) - (setq insPt targetPt) - (setq revTriPt (list (+ (car insPt) 42.7) (+ (cadr insPt) desiredY) (caddr insPt))) - (command "_.-INSERT" "REVTRIANGLE2" revTriPt 1 0 1) ) ) diff --git a/network-diagram.lsp b/network-diagram.lsp index 35567ca..e18a911 100644 --- a/network-diagram.lsp +++ b/network-diagram.lsp @@ -131,7 +131,7 @@ (setq labelPt (list (- (car basePt) 0.05) ; left - (+ (cadr basePt) 0.9) ; up + (+ (cadr basePt) 0.65) ; up (caddr basePt))) ;; Create label text @@ -266,6 +266,27 @@ (vlax-3d-point targetPt) ) ) + + ;; Add layout label text at the top + (setq layoutLabel (strcat "Layout " (itoa (+ i 1)))) + (setq labelPt (list (+ x 20.0) (+ y 40.0) 0)) ; Adjust position as needed + (entmake + (list + (cons 0 "TEXT") + (cons 8 "0") + (cons 7 "WD") + (cons 62 7) ; White color + (cons 10 labelPt) + (cons 11 labelPt) + (cons 40 2.0) ; Text height + (cons 72 1) ; Center alignment + (cons 73 2) + (cons 1 layoutLabel) + (cons 50 0.0) ; Rotation + (cons 100 "AcDbEntity") + (cons 100 "AcDbText") + ) + ) ;; Insert DPM-UPS at fixed offset inside layout (setq dpmPair (nth i dpmList)) @@ -310,11 +331,15 @@ (progn (setq vlaObj (vlax-ename->vla-object ent)) (vla-move vlaObj (vlax-3d-point 0 0 0) (vlax-3d-point desiredX desiredY 0)) + + ;; Set ALL attributes in the ZONE_32H block to E8912., E8913., etc. + (setq zoneName (strcat "E" (itoa (+ 8912 i)) ".")) + (foreach att (vlax-invoke vlaObj 'GetAttributes) + (vla-put-textstring att zoneName) + ) + ;; Label the ZONE_32H lines (labelZone32Lines ent) - (setq insPt targetPt) - (setq revTriPt (list (+ (car insPt) 42.7) (+ (cadr insPt) desiredY) (caddr insPt))) - (command "_.-INSERT" "REVTRIANGLE2" revTriPt 1 0 1) ) )