TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: TJAM51 on January 10, 2005, 08:14:01 AM
-
The code below allows a user to pick a dimstyle and the dimstyle is set to that style. How could the layer be set at the same time?
Thanks
(defun c:SD (/ get-type get-style ent)
(defun get-type (ent)
(cdr (assoc 0 (entget ent)))
)
(defun get-style (ent)
(cdr (assoc 3 (entget ent)))
)
(cond
((setq ent (car (entsel "\nSelect Dim: ")))
(cond
((= (get-type ent) "DIMENSION")
(vl-cmdf "dimstyle" "restore" (get-style ent))
)
((= (get-type ent) "LEADER")
(vl-cmdf "dimstyle" "restore" (get-style ent))
)
)
)
(T (princ))
)
)
-
Try this:
http://theswamp.org/phpBB2/viewtopic.php?t=1654&highlight=tds
-
(defun c:dms (/ get-type get-style ent)
(defun get-type (ent)
(cdr (assoc 0 (entget ent)))
)
(defun get-style (ent)
(cdr (assoc 3 (entget ent)))
)
(defun get-layer (ent)
(cdr (assoc 8 (entget ent)))
)
(cond
((setq ent (car (entsel "\nSelect Dim: ")))
(cond
((= (get-type ent) "DIMENSION")
(vl-cmdf "dimstyle" "restore" (get-style ent))
(vl-cmdf "_.layer" "M" (get-layer ent) "")
)
((= (get-type ent) "LEADER")
(vl-cmdf "dimstyle" "restore" (get-style ent))
(vl-cmdf "_.layer" "M" (get-layer ent) "")
)
(T (princ "\nUnidentified Drawing Object"))
)
)
(T (princ))
)
(princ)
)
-
Fantastic....thank you
-
Mark, when I try this lisp routine, I get the text screen when I select the dimension. The command worked, but I have the text screen up after I select the dimension, in which I have to hit F2 to get out of it. What am I missing?
-
How are you running the program?
try this;
save code to file "dms.lsp'
drag-n-drop into acad workspace
make sure commad window is closed (F2) if not
type in 'dms'
-
I copied the lisp routine and saved it as Dim.lsp under a designated folder I have. I always use appload to load a lisp routine, and of course I have the folder in the search path for AutoCAD. The text screen is off, but I am still getting it popping up when I try the command. Would it make a difference that I am using ADT? I really like this routine because I use a couple different dimstyles in my plans and I am always matching props because I seem to forget to change the settings.
-
Just for fun, try this one.
(defun c:dms (/ get-type get-style ent)
(defun get-type (ent)
(cdr (assoc 0 (entget ent)))
)
(defun get-style (ent)
(cdr (assoc 3 (entget ent)))
)
(defun get-layer (ent)
(cdr (assoc 8 (entget ent)))
)
(cond
((setq ent (car (entsel "\nSelect Dim: ")))
(cond
((= (get-type ent) "DIMENSION")
(vl-cmdf "_.dimstyle" "restore" (get-style ent))
(vl-cmdf "_.layer" "M" (get-layer ent) "")
)
((= (get-type ent) "LEADER")
(vl-cmdf "_.dimstyle" "restore" (get-style ent))
(vl-cmdf "_.layer" "M" (get-layer ent) "")
)
(T (princ "\nUnidentified Drawing Object"))
)
)
(T (princ))
)
(princ)
)
-
Same results, getting the text screen again. Is there a way to maybe toggle the text screen off at the end of the routine?
-
try re-naming c:dms to something else. I think you're getting a conflict with another app. Maybe!
to toggle the screen use (graphscr)
-
Renaming it did the trick. Thanks
-
I'll start off by saying that I did not create this. It was created by Charles Alan Butler.
It will update the layer for any object selected. For Mtext it will update the Text Size variable to what is selected and change to the Text layer. etc. etc.
I use it all the time.
;;;====================================================================;
;;; SetCurrent.lsp ;
;;; Charles Alan Butler ;
;;; ab2draft@TampaBay.rr.com ;
;;; @ Copyright 2004 ;
;;; Original routine 2003 ;
;;;====================================================================;
;;
;; Revision 06/17/04
;; Revision 06/28/04
;; Added Leader detection & layer change for any object selected.
;; Revision 07/03/04
;; Added cross check for leader to text & text to leader
;;
;; Routine to set current Layer, Text Style and/or Dim Style by
;; picking an existing object in the drawing
;;
;; OBJECT SELECTED Set Current
;; TEXT, MTEXT or Rtext Layer, Text Style
;; Dimension Layer, Dim Style
;; Leader Layer, Dim Style
;; Leader w/text Layer, Dim & Text Style
;; Text, mtext w/Leader Layer, Dim & Text Style
;; Any other object Layer
;;
;; Enter tds from the command line to run
;; or set up a menu button with ^C^Ctds
;;
;;;====================================================================;
;;; THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED ;
;;; WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR ;
;;; PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED. ;
;;;====================================================================;
;;; Copyright 2004 by Charles Alan Butler. All Rights Reserved. ;
;;; ;
;;; You are hereby granted permission to use, copy and modify this ;
;;; software without charge, provided you do so exclusively for ;
;;; your own use or for use by others in your organization in the ;
;;; performance of their normal duties, and provided further that ;
;;; the above copyright notice appears in all copies and both that ;
;;; copyright notice and the limited warranty and restricted rights ;
;;; notice below appear in all supporting documentation. ;
;;; ;
;;; Incorporation of any part of this software into other software, ;
;;; except when such incorporation is exclusively for your own use ;
;;; or for use by others in your organization in the performance of ;
;;; their normal duties, is prohibited without the prior written ;
;;; consent of Charles Alan Butler, 1403 Duelda Drive, ;
;;; Brandon Florida, 33511 ;
;;; ;
;;; Copying, modification and distribution of this software or any ;
;;; part thereof in any form except as expressly provided herein is ;
;;; prohibited without the prior written consent of Charles Alan ;
;;; Butler, 1403 Duelda Drive, Brandon Florida, 33511 ;
;;; ;
;;;====================================================================;
(defun c:us (/ ent entbl t:styold t:stynew d:styold d:stynew usercmd
idx x )
(defun set:dim:style (elst)
(setq d:styold (getvar "dimstyle"))
(command "-dimstyle" "restore" (cdr (assoc 3 elst)))
(setq d:stynew (getvar "dimstyle"))
)
(defun set:txt:style (elst)
(setq t:stynew (cdr (assoc 7 elst))
t:styold (getvar "textstyle")
)
(setvar "TextSize" (cdr (assoc 40 elst)))
(setvar "TextStyle" t:stynew)
)
;; ************** Begin Routine ******************
(if (setq ent
(car (entsel "\nSelect Dimension or Text to make current: "))
)
(progn
(setq entbl (entget ent)) ; Get entity definition list
(setq usercmd (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(command "undo" "begin")
(cond
;; ============================================================
((= (cdr (assoc 0 entbl)) "LEADER") ; found a leader
(setvar 'clayer (cdr (assoc 8 entbl)))
(set:dim:style entbl); Set Dim Style Current
(cond ; chek to see if text is attched
((and (setq elst (entget(cdr (assoc 340 entbl))))
(wcmatch (cdr (assoc 0 elst)) "*TEXT*"))
(set:txt:style elst); Set TextStyle Current
)
)
); end cond 1
;; ===========================================================
((wcmatch (cdr (assoc 0 entbl)) "*TEXT*") ; gets Rtext as well
(set:txt:style entbl); Set TextStyle Current
(setvar 'clayer (cdr (assoc 8 entbl)))
;; Look for leader to set dim Style Current
(setq idx (1+ (length entbl)))
(while (> (setq idx (1- idx))-1)
(setq ent (nth idx entbl))
(cond
((and (= (car ent) 330) ; pointer to leader
(setq elst (entget (cdr ent))) ; valid ent ??
(= (cdr (assoc 0 elst)) "LEADER"))
(set:dim:style entbl); Set Dim Style Current
(setq idx 0); 0 = exit loop
); cond
); cond stmt
); while
) ; end cond 2
;; =============================================================
((= (cdr (assoc 0 entbl)) "DIMENSION")
(set:dim:style entbl); Set Dim Style Current
(setvar 'clayer (cdr (assoc 8 entbl)))
) ; end cond 3
;; =============================================================
(t ; catch any other object
(and (cdr (assoc 8 entbl))
(setvar 'clayer (cdr (assoc 8 entbl)))
)
) ; end cond (T)
) ; end Cond stmt
;; *************** Display Changes Made *******************
(prompt (strcat "\n*-* Object selected: " (cdr (assoc 0 entbl))))
(and (cdr (assoc 8 entbl))
(prompt (strcat "\n*-* Layer changed to: " (cdr (assoc 8 entbl)))))
(if d:styold
(prompt (strcat "\n*-* Dimension style changed: "
d:styold " to "
d:stynew "."
)
)
)
(if t:styold
(prompt
(strcat "\n*-* Text style changed: " t:styold " to " t:stynew ".")
)
)
(setq t:stynew nil
t:styold nil
d:stynew nil
d:styold nil
)
(command "undo" "end")
(setvar "CMDECHO" usercmd)
) ; end progn
) ; endif
(princ)
) ;End of Defun
(prompt "\nText / Dimension Style Changer Loaded, Type TDS to run")
(princ)
-
Thanks cparnell
Glad you like it. :)
-
Now I know what CAB stands for. I have been wondering.