GLAVCVS Posted February 7 Posted February 7 (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 February 7 by GLAVCVS 1 Quote
GLAVCVS Posted February 7 Posted February 7 Fixing this will make the code a bit more complicated. Wait 1 Quote
leonucadomi Posted February 7 Author Posted February 7 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 February 7 Posted February 7 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) ) 2 Quote
leonucadomi Posted February 11 Author Posted February 11 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.