GLAVCVS Posted Friday at 06:25 PM Posted Friday at 06:25 PM (edited) I just saw your drawing The problem is that the code assumes that all the origin points of each dimension are aligned. The cases in which they are not, are not contemplated in the code. That is, the code is intended for the 'dimaligned' command. Edited Friday at 06:36 PM by GLAVCVS 1 Quote
GLAVCVS Posted Friday at 06:25 PM Posted Friday at 06:25 PM Fixing this will make the code a bit more complicated. Wait 1 Quote
leonucadomi Posted Friday at 07:16 PM Author Posted Friday at 07:16 PM 50 minutes ago, GLAVCVS said: Fixing this will make the code a bit more complicated. Wait Drawing2.dwghere I all everything and it still gives me an error Quote
GLAVCVS Posted Friday at 11:30 PM Posted Friday at 11:30 PM Modified for 'dimaligned' and 'dimlinear'. Give it a go. I haven't tested it thoroughly. Do it for me (defun c:agrupaDIMs (/ n conj ent lstent pt pt1 pt2 ptIni ptFin desplz desplzX desplzY punto tamTX gapTX desplzMax osmant ang ptTx1 ptTx2 params escala rotDIM ) (setq n 0 osmant (getvar "OSMODE") ) (setvar "OSMODE" 0) (if (setq conj (ssget '((0 . "DIMEN*")))) (progn (while (setq ent (ssname conj n)) (setq pt1 (cdr (assoc 13 (setq lstent (entget ent)))) pt2 (cdr (assoc 14 lstent)) ptTx1 (cdr (assoc 10 lstent)) ptTx2 (if (setq rotDIM (= (cdr (last lstent)) "AcDbRotatedDimension")) (if (< (abs (- (cadr pt2) (cadr ptTx1))) 0.0001) (list (car ptTx1) (cadr pt1));o sea, acotación tumbada (list (car pt1) (cadr ptTx1));o sea, acotación levantada de arriba abajo o viceversa ) (polar pt1 (angle pt2 ptTx1) (distance pt2 ptTx1)) ) ang (angle pt2 (cdr (assoc 10 lstent))) tamTX (vlax-get-property (vlax-ename->vla-object ent) "TextHeight" ) gapTX (vlax-get-property (vlax-ename->vla-object ent) "TextGap" ) escala (vlax-get-property (vlax-ename->vla-object ent) "ScaleFactor" ) desplz (+ (* tamTX escala) gapTX) ) (if (not params) (setq params (list tamTX (vlax-get-property (vlax-ename->vla-object ent) 'ArrowheadSize))) ) (if desplzMax (setq desplzMax (max desplzMax desplz)) (setq desplzMax desplz) ) (if (< (car ptTx2) (car ptTx1)) (setq pt ptTx1 ptTx1 ptTx2 ptTx2 pt ) (if (= (car ptTx2) (car ptTx1)) (if (< (cadr ptTx2) (cadr ptTx1)) (setq pt ptTx1 ptTx1 ptTx2 ptTx2 pt ) ) ) ) (if ptIni (if (and (/= (car ptTx2) (car ptTx1)) (< (car ptTx1) (car ptIni)) ) (setq ptIni ptTx1) (if (= (car ptTx1) (car ptTx2)) (if (< (cadr ptTx1) (cadr ptIni)) (setq ptIni ptTx1) ) ) ) (setq ptIni ptTx1) ) (if ptFin (if (and (/= (car ptTx2) (car ptTx1)) (> (car ptTx2) (car ptFin)) ) (setq ptFin ptTx2) (if (= (car ptTx2) (car ptTx2)) (if (> (cadr ptTx2) (cadr ptFin)) (setq ptFin ptTx2) ) ) ) (setq ptFin ptTx2) ) (setq n (+ n 1)) ) (setq punto (polar ptIni (angle ptIni ptFin) (/ (distance ptIni ptFin) 2.0) ) punto (polar punto ang (* desplzMax 2.0)) ) (if rotDIM (vl-cmdf "_dimlinear" ptIni ptFin punto) (vl-cmdf "_dimaligned" ptIni ptFin punto) ) (vlax-put-property (vlax-ename->vla-object (entlast)) 'TextHeight (* (car params) escala)) (vlax-put-property (vlax-ename->vla-object (entlast)) 'ArrowheadSize (* (cadr params) escala)) (setvar "OSMODE" osmant) ) ) (princ) ) 1 Quote
leonucadomi Posted 11 hours ago Author Posted 11 hours ago On 2/7/2025 at 5:30 PM, GLAVCVS said: Modified for 'dimaligned' and 'dimlinear'. Give it a go. I haven't tested it thoroughly. Do it for me (defun c:agrupaDIMs (/ n conj ent lstent pt pt1 pt2 ptIni ptFin desplz desplzX desplzY punto tamTX gapTX desplzMax osmant ang ptTx1 ptTx2 params escala rotDIM ) (setq n 0 osmant (getvar "OSMODE") ) (setvar "OSMODE" 0) (if (setq conj (ssget '((0 . "DIMEN*")))) (progn (while (setq ent (ssname conj n)) (setq pt1 (cdr (assoc 13 (setq lstent (entget ent)))) pt2 (cdr (assoc 14 lstent)) ptTx1 (cdr (assoc 10 lstent)) ptTx2 (if (setq rotDIM (= (cdr (last lstent)) "AcDbRotatedDimension")) (if (< (abs (- (cadr pt2) (cadr ptTx1))) 0.0001) (list (car ptTx1) (cadr pt1));o sea, acotación tumbada (list (car pt1) (cadr ptTx1));o sea, acotación levantada de arriba abajo o viceversa ) (polar pt1 (angle pt2 ptTx1) (distance pt2 ptTx1)) ) ang (angle pt2 (cdr (assoc 10 lstent))) tamTX (vlax-get-property (vlax-ename->vla-object ent) "TextHeight" ) gapTX (vlax-get-property (vlax-ename->vla-object ent) "TextGap" ) escala (vlax-get-property (vlax-ename->vla-object ent) "ScaleFactor" ) desplz (+ (* tamTX escala) gapTX) ) (if (not params) (setq params (list tamTX (vlax-get-property (vlax-ename->vla-object ent) 'ArrowheadSize))) ) (if desplzMax (setq desplzMax (max desplzMax desplz)) (setq desplzMax desplz) ) (if (< (car ptTx2) (car ptTx1)) (setq pt ptTx1 ptTx1 ptTx2 ptTx2 pt ) (if (= (car ptTx2) (car ptTx1)) (if (< (cadr ptTx2) (cadr ptTx1)) (setq pt ptTx1 ptTx1 ptTx2 ptTx2 pt ) ) ) ) (if ptIni (if (and (/= (car ptTx2) (car ptTx1)) (< (car ptTx1) (car ptIni)) ) (setq ptIni ptTx1) (if (= (car ptTx1) (car ptTx2)) (if (< (cadr ptTx1) (cadr ptIni)) (setq ptIni ptTx1) ) ) ) (setq ptIni ptTx1) ) (if ptFin (if (and (/= (car ptTx2) (car ptTx1)) (> (car ptTx2) (car ptFin)) ) (setq ptFin ptTx2) (if (= (car ptTx2) (car ptTx2)) (if (> (cadr ptTx2) (cadr ptFin)) (setq ptFin ptTx2) ) ) ) (setq ptFin ptTx2) ) (setq n (+ n 1)) ) (setq punto (polar ptIni (angle ptIni ptFin) (/ (distance ptIni ptFin) 2.0) ) punto (polar punto ang (* desplzMax 2.0)) ) (if rotDIM (vl-cmdf "_dimlinear" ptIni ptFin punto) (vl-cmdf "_dimaligned" ptIni ptFin punto) ) (vlax-put-property (vlax-ename->vla-object (entlast)) 'TextHeight (* (car params) escala)) (vlax-put-property (vlax-ename->vla-object (entlast)) 'ArrowheadSize (* (cadr params) escala)) (setvar "OSMODE" osmant) ) ) (princ) ) It is tested and it is excellent , thanks Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.