Jump to content

dimjogline plus in dimension ... help


Recommended Posts

Posted

hello all:

There are dimensions I need to do this to.

image.thumb.png.572731c5645aad88071b9907f6d0803c.png

I have a routine to do this

image.png.25a3cb26372ec4e0c063a7b8e59bf50f.png

It would be possible to do everything in a single selection

I mean select the dimension and place the break and the line over the text

I await comments and here I put the code, thank you

; Original by RonJonP, edited by P. Kenewell
(defun c:ltx (/ o s)
  (setvar "cmdecho" 0)
  (command "._undo" "_be")
  (if (setq s (ssget ":L" '((0 . "*TEXT,DIMENSION"))))
    (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
      (setq o (vlax-ename->vla-object e))
      (cond
         ((= "TEXT" (cdr (assoc 0 (entget e))))
            (vla-put-textstring o
               (strcat "%%O"
                  (vl-string-subst "" ""
                     (vl-string-subst "" "%%O" (vla-get-textstring o))
                  )
               )
            )
         )
         ((= "MTEXT" (cdr (assoc 0 (entget e))))
            (vla-put-textstring o
               (strcat "\\O"
                  (vl-string-subst "" "" 
                     (vl-string-subst "" "\\O" (vla-get-textstring o))
                  )
               )
            )
         )
         ((= "DIMENSION" (cdr (assoc 0 (entget e))))
            (if (= (vla-get-textoverride o) "")
               (vla-put-textoverride o "\\O<>")
               (vla-put-textoverride o
                  (strcat "\\O"
                     (vl-string-subst "" "" 
                        (vl-string-subst "" "\\O" (vla-get-textoverride o))
                     )
                  )
               )
            )
         )
      )
    )
  )
  (command "._undo" "_end")
  (setvar "cmdecho" 1)
  (princ)
)

 

 

 

 

 

 

 

 

Posted (edited)

Also you can return the vla-object list with foreach by wrapping it in mapcar.  eliminating having to use (setq o (vlax-ename->vla-object e)).  Pulling the vla-object name before the cond means your checking the variable rather then check the entity up to 3 times.

 

; Original by RonJonP, edited by P. Kenewell, updated by Mhupp
(defun c:ltx (/ D O S)
  (vl-load-com)
  (setq D (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark D)
  (if (setq s (ssget ":L" '((0 . "*TEXT,DIMENSION"))))
    (foreach o (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex s))))
      (setq typ (vla-get-ObjectName o))
      (cond
        ((= typ "AcDbText")   
          (vla-put-textstring o (strcat "%%O" (vl-string-subst "" "" (vl-string-subst "" "%%O" (vla-get-textstring o)))))
        )
        ((= typ "AcDbMText")  
          ...
        )
        ((= typ "AcDbDimension")
          ...
        )
      )
    )
  )
  (vla-endundomark D)
  (princ)
)

 

-edit

also useing the (vla-startundomark allows you to have things selected before you run the command.

Edited by mhupp
  • Like 1
Posted
On 9/22/2025 at 10:32 PM, leonucadomi said:

hello all:

There are dimensions I need to do this to.

image.thumb.png.572731c5645aad88071b9907f6d0803c.png

I have a routine to do this

image.png.25a3cb26372ec4e0c063a7b8e59bf50f.png

It would be possible to do everything in a single selection

I mean select the dimension and place the break and the line over the text

I await comments and here I put the code, thank you

; Original by RonJonP, edited by P. Kenewell
(defun c:ltx (/ o s)
  (setvar "cmdecho" 0)
  (command "._undo" "_be")
  (if (setq s (ssget ":L" '((0 . "*TEXT,DIMENSION"))))
    (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
      (setq o (vlax-ename->vla-object e))
      (cond
         ((= "TEXT" (cdr (assoc 0 (entget e))))
            (vla-put-textstring o
               (strcat "%%O"
                  (vl-string-subst "" ""
                     (vl-string-subst "" "%%O" (vla-get-textstring o))
                  )
               )
            )
         )
         ((= "MTEXT" (cdr (assoc 0 (entget e))))
            (vla-put-textstring o
               (strcat "\\O"
                  (vl-string-subst "" "" 
                     (vl-string-subst "" "\\O" (vla-get-textstring o))
                  )
               )
            )
         )
         ((= "DIMENSION" (cdr (assoc 0 (entget e))))
            (if (= (vla-get-textoverride o) "")
               (vla-put-textoverride o "\\O<>")
               (vla-put-textoverride o
                  (strcat "\\O"
                     (vl-string-subst "" "" 
                        (vl-string-subst "" "\\O" (vla-get-textoverride o))
                     )
                  )
               )
            )
         )
      )
    )
  )
  (command "._undo" "_end")
  (setvar "cmdecho" 1)
  (princ)
)

 

 

 

 

 

 

 

 

 

Hi


Do you want to place the 'jog', indicating its location in each case, or in a predetermined location?

 

Posted

To indicate the 'jog' position 1 to 1, insert this code after the clause ((= "DIMENSION"... (entget e) ))))

 

      (if (not (tblsearch "APPID" "ACAD_DSTYLE_DIMJAG_POSITION"))
	    (regapp "ACAD_DSTYLE_DIMJAG_POSITION")
	  )
	  (if (setq pt (getpoint "\nJOG: Pick a point on the DIMENSION line"))
	    (entmod (append (entget e) (list (list -3 (list "ACAD_DSTYLE_DIMJAG_POSITION" '(1070 . 387) '(1070 . 3) '(1070 . 389) (cons 1010 pt))))))
	  )

 

Posted

I think I forgot something important: when there are multiple selections, it's necessary to show the user which object will be modified in each case.
Below, I've included the complete code with a zoom utility to show the user the next object to modify.

 

; Original by RonJonP, edited by P. Kenewell and GLAVCVS
(defun c:ltx (/ o s pt i p1 p2 le)
  (setvar "cmdecho" 0)
  (command "._undo" "_be")
  (if (setq s (ssget ":L" '((0 . "*TEXT,DIMENSION"))))
    (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
      (setq o (vlax-ename->vla-object e))
      (cond
         ((= "TEXT" (cdr (assoc 0 (entget e))))
            (vla-put-textstring o
               (strcat "%%O"
                  (vl-string-subst "" ""
                     (vl-string-subst "" "%%O" (vla-get-textstring o))
                  )
               )
            )
         )
         ((= "MTEXT" (cdr (assoc 0 (entget e))))
            (vla-put-textstring o
               (strcat "\\O"
                  (vl-string-subst "" ""
                     (vl-string-subst "" "\\O" (vla-get-textstring o))
                  )
               )
            )
         )
         ((= "DIMENSION" (cdr (assoc 0 (entget e))))
	  (if (not (tblsearch "APPID" "ACAD_DSTYLE_DIMJAG_POSITION"))
	    (regapp "ACAD_DSTYLE_DIMJAG_POSITION")
	  )
	  (command "_zoom" "_w" (setq i (cdr (assoc 10 (setq le (entget e))))) (polar i (angle (setq p2 (cdr (assoc 14 le))) (setq p1 (cdr (assoc 13 le)))) (distance p1 p2)))
	  (if (setq pt (getpoint "\rJOG: Pick a point on the DIMENSION line"))
	    (entmod (append (entget e) (list (list -3 (list "ACAD_DSTYLE_DIMJAG_POSITION" '(1070 . 387) '(1070 . 3) '(1070 . 389) (cons 1010 pt))))))
	  )
	  (if (= (vla-get-textoverride o) "")
	    (vla-put-textoverride o "\\O<>")
	    (vla-put-textoverride o
	      (strcat "\\O"
		      (vl-string-subst "" ""
			(vl-string-subst "" "\\O" (vla-get-textoverride o))
		      )
	      )
	    )
          )
         )
      )
    )
  )
  (command "._undo" "_end")
  (setvar "cmdecho" 1)
  (princ)
)

 

  • Like 1

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...