Code Red > AutoLISP (Vanilla / Visual)
Asci characters in layer names
TJAM51:
Is there any way a routine could find through some selection a way of renaming layers with asci characters or deleting the asci characters from the layer name.
CAB:
WCMATCH is a great tool.
Would you please define "ASCII characters", as all characters are ASCII characters in my book.
TJAM51:
here is an example of the layer name
30x42-ttl$0$G-TTTLT
T.Willey:
--- Quote from: TJAM51 on February 20, 2008, 12:40:32 PM ---here is an example of the layer name
30x42-ttl$0$G-TTTLT
--- End quote ---
Don't bind xref's as binds then. :-D
Are you just trying to remove anything that isn't a letter or number or hyphen?
Or is it just the dollar signs and whats in between them?
MP:
It's long in the tooth but it still may work => link.
Look for the 'topmost' version of BindFix15.lsp.
Edit: Fubar 404 -- Autodesk killed the thread or something. See code below instead:
--- Code: ---(defun c:BindFix
;;====================================================================
;;
;; BindFix.lsp (AutoCAD 2000+)
;;
;;--------------------------------------------------------------------
;;
;; Copyright 2003-2014 · Michael Puckett · All Rights Reserved
;;
;; Ver 1.00 2003/??/?? (MP) Original code .
;;
;; Ver 1.01 2004/04/23 (MP) General fixes.
;;
;; Fixed:
;;
;; _RenameTableEntry: had superfluous local decl. 'data'.
;; _RenameTableEntryViaActiveX: had superfluous local decl. 'data'
;; _StripBindingArtifacts: missing local decl. 'ceiling'.
;; _GetUniqueTableEntryName: missing local decl. 'i'.
;;
;; Ver 1.02 2014/12/08 (MP) Add ability to rename dictionaries etc.
;;
;; Added:
;;
;; _GetDictEntries: To support renaming dictionary based entries.
;; _GetName: See above.
;; _RenameDataLinks: As name suggests.
;; _RenameDicts: As name suggests.
;; _Try: General purpose fubar catcher.
;;
;; Recoded:
;;
;; _StripBindingArtifacts: Didn't deal with nested artifacts.
;;
;;--------------------------------------------------------------------
( /
_GetDictEntries
_GetName
_GetTableEntries
_GetUniqueTableEntryName
_Main
_RenameDataLinks
_RenameDicts
_RenameTableEntry
_RenameTableEntryViaActiveX
_RenameTableEntryViaObjname
_StripBindingArtifacts
_Try
)
(defun _Try ( try_statement / try_catch try_result )
(if
(vl-catch-all-error-p
(setq try_catch
(vl-catch-all-apply
(function
(lambda ( )
(setq try_result (eval try_statement))
)
)
)
)
)
(setq *try_errors* ;; global
(cons
(list
try_statement
(vl-catch-all-error-message try_catch)
)
*try_errors*
)
)
)
try_result
)
(defun _GetTableEntries ( table / data result )
(while (setq data (tblnext table (null data)))
(setq result
(cons (cdr (assoc 2 data)) result)
)
)
result
)
(defun _RenameTableEntry ( doc table oldname newname )
;; wrapper for _RenameTableEntryViaObjname
;; and _RenameTableEntryViaActiveX functions
(setq table
(cond
((eq (setq table (strcase table t)) "ltype") "linetype")
(t table)
)
)
(if (member table '("style" "dimstyle"))
;; autodesk made textstyles and dimstyles read-only to
;; the automation model w/regards to the symbol name, why?
(_RenameTableEntryViaObjname table oldname newname)
(_RenameTableEntryViaActiveX doc table oldname newname)
)
)
(defun _RenameTableEntryViaObjname ( table oldname newname / data )
;; calling function responsible for
;; ensuring appropriate data passed
(entmod
(subst
(cons 2 newname)
(assoc 2 (setq data (entget (tblobjname table oldname))))
data
)
)
)
(defun _RenameTableEntryViaActiveX ( doc table oldname newname )
(_Try
'(vla-put-name
(vla-item
(vlax-get
doc
(read (strcat table "s"))
)
oldname
)
newname
)
)
)
(defun _StripBindingArtifacts ( entry / n )
(while (progn (setq n 0) (wcmatch entry "*$#$*"))
(while (wcmatch (substr entry (setq n (1+ n))) "~$#$*"))
(setq entry (substr entry (+ n 3)))
)
entry
)
(defun _GetUniqueTableEntryName ( table entry / i )
(cond
( (tblsearch table entry)
(setq i 1)
(while
(tblsearch table
(strcat entry "_" (itoa (setq i (1+ i))))
)
)
(strcat entry "_" (itoa i))
)
( t entry )
)
)
(defun _GetDictEntries ( doc dictName / result )
(_Try
'(vlax-for item (vla-item (vla-get-dictionaries doc) dictName)
(setq result (cons item result))
)
)
(reverse result)
)
(defun _GetName ( object / name )
(_Try '(setq name (vla-get-name object)))
(if name name "")
)
(defun _RenameDicts ( dictEntries / suffix i name new_name )
(foreach dict dictEntries
(if (wcmatch (setq suffix "" i 1 name (_GetName dict)) "*$#$*")
(progn
(setq new_name (_StripBindingArtifacts name))
(while
(member
(strcase
(setq new_name
(strcat new_name suffix)
)
)
(mapcar 'strcase (mapcar '_GetName dictEntries))
)
(setq suffix (strcat "_" (itoa (setq i (1+ i)))))
)
(_Try '(vla-put-name dict new_name))
(princ
(strcat "\n"
(if (eq new_name (_GetName dict))
(strcat
"Renamed "
(vla-get-objectname dict) " "
name " => "
new_name "."
)
(strcat
"Could not rename "
(vla-get-objectname dict) " "
name "."
)
)
)
)
)
)
)
)
(defun _RenameDataLinks ( doc / ename data new_names old_names )
(_Try
'(setq data
(entget
(setq ename
(vlax-vla-object->ename
(vla-item
(vla-get-dictionaries doc)
"ACAD_DATALINK"
)
)
)
)
)
)
(_Try
'(entmod
(mapcar
(function
(lambda ( pair / i suffix name new_name )
(cond
( (and
(eq 3 (car pair))
(wcmatch (setq name (cdr pair)) "*$#$*")
(setq old_names (cons name old_names))
(setq i 1 suffix "" new_name (_StripBindingArtifacts name))
)
(while
(member
(strcase (setq new_name (strcat new_name suffix)))
(mapcar 'strcase new_names)
)
(setq suffix (strcat "_" (itoa (setq i (1+ i)))))
)
(cons 3
(car
(setq new_names
(cons new_name new_names)
)
)
)
)
( t
pair
)
)
)
)
data
)
)
)
(_Try
'(setq data
(entget ename)
)
)
(if old_names
(foreach lst (mapcar 'cons old_names new_names)
(princ
(strcat "\n"
(if (member (cons 3 (cdr lst)) data)
(strcat
"Renamed datalink "
(car lst) " => "
(cdr lst) "."
)
(strcat
"Could not rename datalink "
(car lst) "."
)
)
)
)
)
)
)
(defun _Main ( doc / newname )
;; do normal table entries
(foreach table '("block" "dimstyle" "layer" "ltype" "style")
(foreach entry (reverse (_GetTableEntries table))
(cond
( (wcmatch entry "*`$#`$*")
(_RenameTableEntry
doc
table
entry
(setq newname
(_GetUniqueTableEntryName table
(_StripBindingArtifacts entry)
)
)
)
(princ
(strcat "\n"
(if (tblsearch table newname)
(strcat
"Renamed "
table " "
entry " => "
newname "."
)
(strcat
"Could not rename "
table " "
entry "."
)
)
)
)
)
)
)
)
;; now do dictionary based entries
(foreach dictName
'( "ACAD_GROUP"
"ACAD_MLEADERSTYLE"
"ACAD_MLINESTYLE"
"ACAD_TABLESTYLE"
)
(_RenameDicts (_GetDictEntries doc dictName))
)
;; now datalinks
(_RenameDataLinks doc)
(princ)
)
(_Main
(progn
(vl-load-com)
(vla-get-activedocument (vlax-get-acad-object))
)
)
)
--- End code ---
Navigation
[0] Message Index
[#] Next page
Go to full version