leonucadomi Posted February 5 Posted February 5 hello all : Does anyone know if this is possible? if you have a series of previously created dimensions , make a selection in a window and create a total dimension above them any comments are welcome Quote
rlx Posted February 5 Posted February 5 maybe not exactly what you want but pretty close : clickme 1 Quote
leonucadomi Posted February 5 Author Posted February 5 34 minutes ago, rlx said: maybe not exactly what you want but pretty close : clickme hanks, I had already seen it. I found something that works for me and I'm trying to modify it It serves to unite dimensions, that is, it creates one from two or more. here code ;Shusei Hayashi ;OffshoreCad&Management Inc. ;10F Jaka Bldg., 6780 Ayala Ave., ;Makati, Philippines ;http://www.offshorecad.com.ph/ ;http://www.offshore-management.com.ph/ ; Slightly modified to work with AutoCAD 2014 & 2015 ; Greg Battin www.autocadtips.wordpress.com ; (defun c:JDIM( / Flag ObjName1 ObjName2 Ang Ang2 Pt1 Pt2 Pt3 Pt4) (princ "\n convert two dimensions to total Dimension on the same position") (princ "\n **********************************") (setq *error* *myerror*) (SD1028) (setq LegLen 7.0) (setq Flag nil) (get_layer<ype&color) (RegistryRead_1001) (setvar "Clayer" Lay1) (setvar "Cecolor" Col1) (setvar "Celtype" LT1) (while (= Flag nil) (setq ObjName1 (car (entsel "\n Select 1st Dimension :"))) (if (and ObjName1(= (cdr (assoc 0 (setq Data1 (entget ObjName1)))) "DIMENSION")) (setq Flag T) ) ) (redraw ObjName1 3) (setq theStyle (SD3511 3 ObjName1)) (setq Flag nil) (while (= Flag nil) (setq ObjName2 (car (entsel "\n Select 2nd Dimension :"))) (if (and ObjName2 (= (cdr (assoc 0 (setq Data2 (entget ObjName2)))) "DIMENSION") (or (equal (abs (- (cdr (assoc 50 Data1))(cdr (assoc 50 Data2)))) 0.0 0.0001) (equal (abs (- (cdr (assoc 50 Data1))(cdr (assoc 50 Data2)))) pi 0.0001) ) ) (setq Flag T) (princ "\n two dimensions should have same angle") ) ) (redraw ObjName1 4) ; (setq PList (list (cdr (assoc 13 Data1))(cdr (assoc 14 Data1))(cdr (assoc 13 Data2))(cdr (assoc 14 Data2)))) ; (setq PList2 (list (cdr (assoc 10 Data1)) (cdr (assoc 10 Data2)))) ; (if (/= (distance (cdr (assoc 14 Data1))(cdr (assoc 10 Data1))) 0) (setq Ang (angle (cdr (assoc 14 Data1))(cdr (assoc 10 Data1)))) (setq Ang (+ (angle (cdr (assoc 13 Data1))(cdr (assoc 14 Data1))) (* 0.5 pi))) ) (setq Ang2 (+ Ang (* -0.5 pi))) ;ƒŒƒCƒ„[ (setq ItsLayer (cdr (assoc 8 Data1))) ; (setq PList_n (mapcar '(lambda(x)(SD1862 x Ang2))PList)) (setq PList2_n (mapcar '(lambda(x)(SD1862 x Ang2))PList2)) ; (setq PList_n_x (mapcar 'car PList_n)) ; (setq PList2_n_y (mapcar 'cadr PList2_n)) ; (setq Position1 (vl-position (apply 'min PList_n_x) PList_n_x)) ; (setq Position2 (vl-position (apply 'max PList_n_x) PList_n_x)) ; (setq Position3 (vl-position (apply 'max PList2_n_y) PList2_n_y)) (setq Pt1 (nth Position1 PList)) ; (checkcircle Pt1 1.0 "A21") (setq Pt2 (nth Position2 PList)) ; (checkcircle Pt2 1.0 "A31") (setq Pt3 (nth Position3 PList2)) ; (checkcircle Pt3 1.0 "A51") ; (setq Pt4 (polar Pt3 Ang (* LegLen Scale))) ; (checkcircle Pt4 1.0 "A21") (setq Pt1 (trans Pt1 0 1) Pt2 (trans Pt2 0 1) Pt3 (trans Pt3 0 1) ; Pt4 (trans Pt4 0 1) ) (setq UAng (angle '(0 0) (getvar "UCSXDIR"))) (setq Ang2 (- Ang2 UAng)) (command "._dimstyle" "RE" theStyle) (command "dimrotated" (* 180 (/ Ang2 pi)) Pt1 Pt2 Pt3) (command "change" (entlast) "" "P" "LA" ItsLayer "") (entdel ObjName1)(entdel ObjName2) (SD2056) (setq *error* nil) (princ) ) ;----------------------------------------- (defun RegistryRead_1001() (setq Path1001 "HKEY_CURRENT_USER\\Software\\SpeedDraftLT\\SD_1001") (if (vl-registry-read Path1001 "LegLen" ) (progn (set_tile "LegLen" (vl-registry-read Path1001 "LegLen")) (setq LegLen (atof (vl-registry-read Path1001 "LegLen"))) ) (setq LegLen 7.0) ) (if (and (vl-registry-read Path1001 "Lay1" )(member (vl-registry-read Path1001 "Lay1") Laylist1)) (progn (set_tile "Lay1" (itoa (vl-position (vl-registry-read Path1001 "Lay1") Laylist1))) (setq Lay1 (vl-registry-read Path1001 "Lay1")) ) (progn (setq Lay1 (getvar "Clayer"))(set_tile "Lay1" (itoa (vl-position Lay1 Laylist1)))) ) (if (and (vl-registry-read Path1001 "LT1" )(member (vl-registry-read Path1001 "LT1") Laylist3)) (progn (set_tile "LT1" (itoa (vl-position (vl-registry-read Path1001 "LT1") Laylist3))) (setq LT1 (vl-registry-read Path1001 "LT1")) ) (progn (setq LT1 "ByLayer")(set_tile "LT1" "0")) ) (if (and (vl-registry-read Path1001 "Col1" )(member (vl-registry-read Path1001 "Col1") Laylist2)) (progn (set_tile "Col1" (itoa (vl-position (vl-registry-read Path1001 "Col1") Laylist2))) (setq Col1 (vl-registry-read Path1001 "Col1")) ) (progn (setq Col1 "ByLayer")(set_tile "Col1" "0")) ) ) ;---------------- (defun SD1028 () (setq OldCmdEcho (getvar "CMDECHO")) (setvar "CMDECHO" 0) (command "undo" "be") (setq OldOsmode (getvar "OSMODE")) (setq OldLayer (getvar "CLAYER")) (setq OldLType (getvar "CeLType")) (setq OldCeLWeight (getvar "CeLWeight")) (setq OldColor (getvar "CeColor")) (setq OldOrtho (getvar "ORTHOMODE")) (setq OldDStyle (getvar "DIMSTYLE")) (setq OldExpert (getvar "Expert")) (setvar "EXPERT" 0) (setq Path_Lang "HKEY_CURRENT_USER\\Software\\SpeedDraftLT") ; (if (vl-registry-read Path_Lang "SD_Language" ) ; (setq SD:Lang (vl-registry-read Path_Lang "SD_Language" )) ; (progn (setq SD:Lang "J") ; (vl-registry-write Path_Lang "SD_Language" "J") ; ) ; ) (princ) ) ;******************************** (defun SD2056 () (setvar "OSMODE" OldOsmode) (command "undo" "end") (setvar "CLAYER" OldLayer) (setvar "CeLType" OldLType) (setvar "CeLWeight" OldCeLWeight) (setvar "CeColor" OldColor) (setvar "ORTHOMODE" OldOrtho) (setvar "Expert" OldExpert) (if (and (/= (getvar "DIMSTYLE") OldDStyle)(tblsearch "DIMSTYLE" OldDStyle)) (command "-dimstyle" "Restore" OldDStyle) ) (princ "\n (C)OffshoreCad&Management") (setvar "CMDECHO" OldCmdEcho) (princ) ) ;******************************** (defun get_layer<ype&color() (setq Lay (tblnext "LAYER" T) LT (tblnext "LTYPE" T) Laylist1 (list) Laylist2 (list "ByLayer" "Red" "Yellow" "Green" "Cyan" "Blue" "Magenta" "B/W") Laylist3 (list"ByLayer") ) (While Lay (setq lay1 (list (cdr (assoc 2 Lay))) lay2 (cdr (assoc 62 Lay)) lay3 (list (cdr (assoc 6 Lay))) Laylist1 (append Laylist1 lay1) Laylist3 (append Laylist3 lay3) Lay (tblnext "LAYER") ) (if (> lay2 7)(setq lay2 (list (itoa lay2)) Laylist2 (append Laylist2 lay2))) ) (While LT (setq lay3 (list (cdr (assoc 2 LT))) Laylist3 (append Laylist3 lay3) LT (tblnext "LTYPE") ) ) (setq Laylist1 (RemoveOverlap Laylist1) Laylist2 (RemoveOverlap Laylist2) Laylist3 (RemoveOverlap Laylist3)) ) ;************************ (defun RemoveOverlap ( List2 / List1 ) (while List2 (setq List1 (append List1 (list (car List2)))) (setq List2 (vl-remove (car List2) List2)) ) List1 ) ;;;---------Rotate---------------------------- (defun SD8446 ( PointA PointB Ang / XA YA XB YB PointC) (setq XA2(- (car PointA) (car PointB)) YA2(- (cadr PointA) (cadr PointB)) ) (setq PointC (list (- (* XA2 (cos Ang))(* YA2 (sin Ang))) (+ (* XA2 (sin Ang))(* YA2 (cos Ang))))) (setq PointC (mapcar '+ PointC PointB)) PointC ) ;**************************************************** (defun SD1862 (OldPt Ang / NewCs) (setq NewCs (SD8446 '(1 0) '(0 0) Ang)) (setq NewPt (trans OldPt 0 NewCs)) (setq NewPt (list (nth 2 NewPt)(nth 0 NewPt))) NewPt ) ;********************** (defun SD3511 (g e) (cond ((= (type e) 'ename) (cdr (assoc g (entget e)))) ((= (type e) 'list) (cdr (assoc g e))) ) ) ;******************************** (defun *myerror* (msg) (setq *error* nil) (SD2056) (princ "\n Error in SpeedDraftLT") (princ) ) (princ "\n Command Name: JDIM") (princ) now modify it to prevent it from deleting the selected dimensions I would just like the new dimension created to shift a little so that it doesn't overlap. Quote
GLAVCVS Posted February 5 Posted February 5 (edited) Something simpler You may need to customize the offset (defun c:agrupaDIMs (/ n conj ent lstent pt pt1 pt2 ptIni ptFin desplz desplzX desplzY punto) (setq n 0) (if (setq conj (ssget '((0 . "DIMEN*")))) (while (setq ent (ssname conj n)) (setq pt1 (cdr (assoc 13 (setq lstent (entget ent)))) pt2 (cdr (assoc 14 lstent)) desplz (distance pt2 (cdr (assoc 10 lstent))) desplzX (- (car (cdr (assoc 10 lstent))) (car pt2)) desplzY (- (cadr (cdr (assoc 10 lstent))) (cadr pt2)) ) (if (< (car pt2) (car pt1)) (setq pt pt1 pt1 pt2 pt2 pt) (if (= (car pt2) (car pt1)) () ) ) (if ptIni (if (< (car pt1) (car ptIni)) (setq ptIni pt1) ) (setq ptIni pt1) ) (if ptFin (if (> (car pt2) (car ptFin)) (setq ptFin pt2) ) (setq ptFin pt2) ) (setq n (+ n 1)) ) ) (setq punto (polar ptIni (angle ptIni ptFin) (/ (distance ptIni ptFin) 2.0)) punto (list (+ (* desplzX 2.5) (car punto)) (+ (* desplzY 2.5) (cadr punto))) ) (command "_dimaligned" ptIni ptFin punto) (princ) ) Edited Thursday at 02:43 PM by GLAVCVS 1 Quote
leonucadomi Posted Thursday at 02:16 PM Author Posted Thursday at 02:16 PM 14 hours ago, GLAVCVS said: Something simpler You may need to customize the offset (defun c:agrupaDIMs (/ n conj ent lstent pt pt1 pt2 ptIni ptFin desplz desplzX desplzY punto) (setq n 0) (if (setq conj (ssget '((0 . "DIMEN*")))) (while (setq ent (ssname conj n)) (setq pt1 (cdr (assoc 13 (setq lstent (entget ent)))) pt2 (cdr (assoc 14 lstent)) desplz (distance pt2 (cdr (assoc 10 lstent))) desplzX (- (car (cdr (assoc 10 lstent))) (car pt2)) desplzY (- (cadr (cdr (assoc 10 lstent))) (cadr pt2)) ) (if (< (car pt2) (car pt1)) (setq pt pt1 pt1 pt2 pt2 pt) (if (= (car pt2) (car pt1)) () ) ) (if ptIni (if (< (car pt1) (car ptIni)) (setq ptIni pt1) ) (setq ptIni pt1) ) (if ptFin (if (> (car pt2) (car ptFin)) (setq ptIni pt2) ) (setq ptFin pt2) ) (setq n (+ n 1)) ) ) (setq punto (polar ptIni (angle ptIni ptFin) (/ (distance ptIni ptFin) 2.0)) punto (list (+ (* desplzX 2.5) (car punto)) (+ (* desplzY 2.5) (cadr punto))) ) (command "_dimaligned" ptIni ptFin punto) (princ) ) It's precisely what I need, I have only changed "_dimaligned" to "_dimlinear". I have tried it in the following way , generate a group of dimensions I mirrored them and rotated them. and this was the result... Only on one occasion did he not do it as expected. I don't know if the precision can be adjusted or something like that. Quote
GLAVCVS Posted Thursday at 02:47 PM Posted Thursday at 02:47 PM @leonucadomi Copy the code again. Something has changed. Check if it works. The accuracy should be adjustable with some system variable. When I get home I'll take a look 1 Quote
GLAVCVS Posted Thursday at 08:21 PM Posted Thursday at 08:21 PM 6 hours ago, leonucadomi said: It's precisely what I need, I have only changed "_dimaligned" to "_dimlinear". I have tried it in the following way , generate a group of dimensions I mirrored them and rotated them. and this was the result... Only on one occasion did he not do it as expected. I don't know if the precision can be adjusted or something like that. Adjust precision? Do you mean add decimals? 1 Quote
leonucadomi Posted Thursday at 08:34 PM Author Posted Thursday at 08:34 PM 8 minutes ago, GLAVCVS said: Adjust precision? Do you mean add decimals? decimal precision no sorry, the idea is that in any position in which the group of dimensions is located up,down ,left or rigth dimensions are selected and a total dimension is added to those selected dimensions Quote
GLAVCVS Posted Thursday at 08:48 PM Posted Thursday at 08:48 PM (edited) I have improved the algorithm for calculating the displacement. This displacement will always be done in the direction of the others. I hope it helps you (defun c:agrupaDIMs (/ n conj ent lstent pt pt1 pt2 ptIni ptFin desplz desplzX desplzY punto tamTX gapTX gapAcot desplzMax osmant ang ) (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)) gapAcot (distance pt2 (cdr (assoc 10 lstent))) 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" ) desplz (+ tamTX gapTX gapAcot) ) (if desplzMax (setq desplzMax (max desplzMax desplz)) (setq desplzMax desplz) ) (if (< (car pt2) (car pt1)) (setq pt pt1 pt1 pt2 pt2 pt ) (if (= (car pt2) (car pt1)) (if (< (cadr pt2) (cadr pt1)) (setq pt pt1 pt1 pt2 pt2 pt ) ) ) ) (if ptIni (if (and (/= (car pt2) (car pt1)) (< (car pt1) (car ptIni)) ) (setq ptIni pt1) (if (= (car pt1) (car pt2)) (if (< (cadr pt1) (cadr ptIni)) (setq ptIni pt1) ) ) ) (setq ptIni pt1) ) (if ptFin (if (and (/= (car pt2) (car pt1)) (> (car pt2) (car ptFin)) ) (setq ptFin pt2) (if (= (car pt2) (car pt2)) (if (> (cadr pt2) (cadr ptFin)) (setq ptFin pt2) ) ) ) (setq ptFin pt2) ) (setq n (+ n 1)) ) (setq punto (polar ptIni (angle ptIni ptFin) (/ (distance ptIni ptFin) 2.0) ) punto (polar punto ang (* desplzMax 1.5)) ) (vl-cmdf "_dimaligned" ptIni ptFin punto) (setvar "OSMODE" osmant) ) ) (princ) ) Edited Thursday at 11:11 PM by GLAVCVS 1 Quote
leonucadomi Posted Thursday at 09:16 PM Author Posted Thursday at 09:16 PM 28 minutes ago, GLAVCVS said: I have improved the algorithm for calculating the displacement. This displacement will always be done in the direction of the others. I hope it helps you (defun c:agrupaDIMs (/ n conj ent lstent pt pt1 pt2 ptIni ptFin desplz desplzX desplzY punto tamTX gapTX gapAcot desplzMax osmant ang ) (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)) gapAcot (distance pt2 (cdr (assoc 10 lstent))) 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" ) desplz (+ tamTX gapTX gapAcot) ) (if desplzMax (setq desplzMax (max desplzMax desplz)) (setq desplzMax desplz) ) (if (< (car pt2) (car pt1)) (setq pt pt1 pt1 pt2 pt2 pt ) (if (= (car pt2) (car pt1)) (princ) ) ) (if ptIni (if (< (car pt1) (car ptIni)) (setq ptIni pt1) ) (setq ptIni pt1) ) (if ptFin (if (> (car pt2) (car ptFin)) (setq ptFin pt2) ) (setq ptFin pt2) ) (setq n (+ n 1)) ) (setq punto (polar ptIni (angle ptIni ptFin) (/ (distance ptIni ptFin) 2.0) ) punto (polar punto ang (* desplzMax 1.5)) ) (vl-cmdf "_dimaligned" ptIni ptFin punto) (setvar "OSMODE" osmant) ) ) (princ) ) stay the same Quote
GLAVCVS Posted Thursday at 11:12 PM Posted Thursday at 11:12 PM Please copy and test the code again. I have changed something. 1 Quote
1958 Posted Friday at 06:05 AM Posted Friday at 06:05 AM for the case when measurements are taken along a line with bends dim.dwg grupDIMs.lsp 1 Quote
leonucadomi Posted Friday at 01:33 PM Author Posted Friday at 01:33 PM 16 hours ago, GLAVCVS said: I have improved the algorithm for calculating the displacement. This displacement will always be done in the direction of the others. I hope it helps you (defun c:agrupaDIMs (/ n conj ent lstent pt pt1 pt2 ptIni ptFin desplz desplzX desplzY punto tamTX gapTX gapAcot desplzMax osmant ang ) (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)) gapAcot (distance pt2 (cdr (assoc 10 lstent))) 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" ) desplz (+ tamTX gapTX gapAcot) ) (if desplzMax (setq desplzMax (max desplzMax desplz)) (setq desplzMax desplz) ) (if (< (car pt2) (car pt1)) (setq pt pt1 pt1 pt2 pt2 pt ) (if (= (car pt2) (car pt1)) (if (< (cadr pt2) (cadr pt1)) (setq pt pt1 pt1 pt2 pt2 pt ) ) ) ) (if ptIni (if (and (/= (car pt2) (car pt1)) (< (car pt1) (car ptIni)) ) (setq ptIni pt1) (if (= (car pt1) (car pt2)) (if (< (cadr pt1) (cadr ptIni)) (setq ptIni pt1) ) ) ) (setq ptIni pt1) ) (if ptFin (if (and (/= (car pt2) (car pt1)) (> (car pt2) (car ptFin)) ) (setq ptFin pt2) (if (= (car pt2) (car pt2)) (if (> (cadr pt2) (cadr ptFin)) (setq ptFin pt2) ) ) ) (setq ptFin pt2) ) (setq n (+ n 1)) ) (setq punto (polar ptIni (angle ptIni ptFin) (/ (distance ptIni ptFin) 2.0) ) punto (polar punto ang (* desplzMax 1.5)) ) (vl-cmdf "_dimaligned" ptIni ptFin punto) (setvar "OSMODE" osmant) ) ) (princ) ) It's excellent now yes , thank you very much Quote
leonucadomi Posted Friday at 01:33 PM Author Posted Friday at 01:33 PM 7 hours ago, 1958 said: for the case when measurements are taken along a line with bends dim.dwg 48.28 kB · 3 downloads grupDIMs.lsp 1.35 kB · 3 downloads thanks Quote
leonucadomi Posted Friday at 01:50 PM Author Posted Friday at 01:50 PM (edited) 17 minutes ago, leonucadomi said: Edited Friday at 01:51 PM by leonucadomi WRONG Quote
leonucadomi Posted Friday at 02:09 PM Author Posted Friday at 02:09 PM 8 hours ago, 1958 said: for the case when measurements are taken along a line with bends dim.dwg 48.28 kB · 3 downloads grupDIMs.lsp 1.35 kB · 3 downloads Quote
leonucadomi Posted Friday at 02:56 PM Author Posted Friday at 02:56 PM 28 minutes ago, GLAVCVS said: Very rare Attach that drawing sometimes it does and sometimes it doesn't , The routine that I put at the beginning of the topic does it well, I just want to move it so that it doesn't overlap Drawing3.dwg 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.