Code Red > AutoLISP (Vanilla / Visual)

Asci characters in layer names

(1/4) > >>

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