+ Reply to Thread
Results 1 to 5 of 5
  1. #1
    Junior Member
    Discipline
    Structural
    Using
    AutoCAD 2017
    Join Date
    Jun 2018
    Posts
    16

    Default adding increment number to lisp

    Registered forum members do not see this ad.

    you helped me before with one lisp, i am trying to do the same thing to another lisp but with no success.
    my original post
    http://www.cadtutor.net/forum/showth...g-to-area-text

    my goal is the same like my first post, to add increment number in the text, next to the "L" letter
    the lisp i want to change:

    Code:
    ;;-------------------------=={ Length Field }==-------------------------;;
    ;;                                                                      ;;
    ;;  This program allows a user to generate a field expression           ;;
    ;;  referencing the length/perimeter/circumference of one or more       ;;
    ;;  selected objects. In the case of selecting multiple objects, the    ;;
    ;;  field expression will reference the sum of the lengths of all       ;;
    ;;  objects in the selection.                                           ;;
    ;;                                                                      ;;
    ;;  The user may opt to specify a point at which to create a new        ;;
    ;;  multiline text object housing the field expression, pick a table    ;;
    ;;  cell in which the field should be inserted, or select an existing   ;;
    ;;  single-line text, multiline text, multileader, or attribute to      ;;
    ;;  be populated with the field expression.                             ;;
    ;;                                                                      ;;
    ;;  Upon issuing the command syntax 'LF' (Length Field) at the AutoCAD  ;;
    ;;  command-line, the program first prompts the user to make a          ;;
    ;;  selection of objects for which to return the length summation.      ;;
    ;;                                                                      ;;
    ;;  At this prompt, the user may select any number of Arcs, Circles,    ;;
    ;;  Lines, 2D Polylines (light or heavy), or 3D Polylines.              ;;
    ;;                                                                      ;;
    ;;  The user is then prompted to specify a point or table cell to       ;;
    ;;  insert a field expression referencing the summation of the lengths  ;;
    ;;  of the selected objects.                                            ;;
    ;;                                                                      ;;
    ;;  At this prompt, the user may also choose the 'Object' option in     ;;
    ;;  order to populate the content of an existing annotation object      ;;
    ;;  with the field expression.                                          ;;
    ;;                                                                      ;;
    ;;  Upon choosing this option, the user may select any single-line      ;;
    ;;  text (DText), multiline text (MText), single-line or multiline      ;;
    ;;  attribute, attributed block, or multileader (MLeader) with either   ;;
    ;;  multiline text or attributed block content.                         ;;
    ;;                                                                      ;;
    ;;  If the user selects an attributed block or attributed multileader   ;;
    ;;  with more than one attribute, the user is presented with a dialog   ;;
    ;;  interface listing the available attributes, and is prompted to      ;;
    ;;  select a destination for the field expression.                      ;;
    ;;                                                                      ;;
    ;;  The user may optionally predefine the target block/multileader      ;;
    ;;  attribute by specifying the attribute tag where noted at the top    ;;
    ;;  of the program source code.                                         ;;
    ;;                                                                      ;;
    ;;  The resulting field expression will display the sum of the lengths  ;;
    ;;  of the selected objects, formatted using the field formatting code  ;;
    ;;  specified at the top of the program.                                ;;
    ;;                                                                      ;;
    ;;----------------------------------------------------------------------;;
    ;;  Author:  Lee Mac, Copyright © 2017  -  www.lee-mac.com              ;;
    ;;----------------------------------------------------------------------;;
    ;;  Version 1.0    -    2017-08-06                                      ;;
    ;;                                                                      ;;
    ;;  - First release.                                                    ;;
    ;;----------------------------------------------------------------------;;
    ;;  Version 1.1    -    2017-08-06                                      ;;
    ;;                                                                      ;;
    ;;  - Program modified to account for selection of existing annotation  ;;
    ;;    objects which already contain a field expression.                 ;;
    ;;----------------------------------------------------------------------;;
    
    (defun c:lf ( / *error* ent enx flg fmt idx lst obj oid prp sel str tab tag tmp typ )
    
        (setq fmt "L=%lu6%pr2 cm" ;; Field Formatting (my goal=  L1, L2, L3, L...)
              tag nil    ;; Optional predefined attribute tag
        )
        
        (defun *error* ( msg )
            (LM:endundo (LM:acdoc))
            (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
                (princ (strcat "\nError: " msg))
            )
            (princ)
        )
        (LM:startundo (LM:acdoc))
    
        (setq prp
           '(
                ("AcDbArc"        . "ArcLength")
                ("AcDbCircle"     . "Circumference")
                ("AcDbLine"       . "Length")
                ("AcDbPolyline"   . "Length")
                ("AcDb2dPolyline" . "Length")
                ("AcDb3dPolyline" . "Length")
            )
        )
    
        (if
            (setq sel
                (LM:ssget "\nSelect objects to obtain total length <exit>: "
                    (list
                        (list
                           '(000 . "ARC,CIRCLE,LINE,*POLYLINE")
                           '(-04 . "<NOT")
                               '(-04 . "<AND")
                                   '(000 . "POLYLINE") '(-04 . "&") '(070 . 80)
                               '(-04 . "AND>")
                           '(-04 . "NOT>")
                            (if (= 1 (getvar 'cvport))
                                (cons 410 (getvar 'ctab))
                               '(410 . "Model")
                            )
                        )
                    )
                )
            )
            (progn
                (if (= 1 (sslength sel))
                    (setq obj (vlax-ename->vla-object (ssname sel 0))
                          str 
                        (strcat
                            "%<\\AcObjProp Object(%<\\_ObjId "
                            (LM:objectid obj)
                            ">%)." (cdr (assoc (vla-get-objectname obj) prp)) " \\f \"" fmt "\">%"
                        )
                    )
                    (progn
                        (repeat (setq idx (sslength sel))
                            (setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx))))
                                  lst
                                (vl-list*
                                    "%<\\AcObjProp Object(%<\\_ObjId "
                                    (LM:objectid obj)
                                    ">%)." (cdr (assoc (vla-get-objectname obj) prp)) ">%" " + "
                                    lst
                                )
                            )
                        )
                        (setq str
                            (strcat
                                "%<\\AcExpr "
                                (apply 'strcat (reverse (cdr (reverse lst))))
                                " \\f \"" fmt "\">%"
                            )
                        )
                    )
                )
                (if
                    (setq tmp
                        (ssget "_X"
                            (list '(0 . "ACAD_TABLE")
                                (if (= 1 (getvar 'cvport))
                                    (cons 410 (getvar 'ctab))
                                   '(410 . "Model")
                                )
                            )
                        )
                    )
                    (repeat (setq idx (sslength tmp))
                        (setq tab (cons (vlax-ename->vla-object (ssname tmp (setq idx (1- idx)))) tab))
                    )
                )
                (while
                    (not
                        (progn
                            (if flg
                                (progn
                                    (setvar 'errno 0)
                                    (initget "Point eXit")
                                    (setq sel (nentsel "\nSelect text, mtext, mleader, attribute or attributed block [Point/eXit] <eXit>: "))
                                )
                                (progn
                                    (initget "Object eXit")
                                    (setq sel (getpoint "\nSpecify point or cell for field [Object/eXit] <eXit>: "))
                                )
                            )
                            (cond
                                (   (= 7 (getvar 'errno))
                                    (prompt "\nMissed, try again.")
                                )
                                (   (or (null sel) (= "eXit" sel)))
                                (   (= "Point" sel)
                                    (setq flg nil)
                                )
                                (   (= "Object" sel)
                                    (not (setq flg t))
                                )
                                (   flg
                                    (setq ent (car sel)
                                          enx (entget ent)
                                          typ (cdr (assoc 0 enx))
                                          obj (vlax-ename->vla-object ent)
                                    )
                                    (cond
                                        (   (and (= 2 (length sel)) (wcmatch typ "TEXT,MTEXT"))
                                            (if (vlax-write-enabled-p obj)
                                                (LF:puttextstring obj str)
                                                (prompt "\nThe selected text object is on a locked layer.")
                                            )
                                        )
                                        (   (and (= "ATTRIB" typ)
                                                 (/= 'str (type tag))
                                            )
                                            (if (vlax-write-enabled-p obj)
                                                (progn
                                                    (LF:puttextstring obj str)
                                                    (LF:updatefield ent)
                                                )
                                                (prompt "\nThe selected attribute is on a locked layer.")
                                            )
                                        )
                                        (   (and
                                                (or
                                                    (and (= "ATTRIB" typ)
                                                         (setq tmp (cdr (assoc 330 enx)))
                                                    )
                                                    (and (setq tmp (last (cadddr sel)))
                                                         (= "INSERT" (cdr (assoc 0 (entget tmp))))
                                                    )
                                                )
                                                (setq tmp (vlax-invoke (vlax-ename->vla-object tmp) 'getattributes))
                                                (or
                                                    (and (= 'str (type tag))
                                                         (setq idx (vl-position (strcase tag) (mapcar 'vla-get-tagstring tmp)))
                                                         (setq obj (nth idx tmp))
                                                    )
                                                    (and (not (cdr tmp))
                                                         (setq obj (car tmp))
                                                    )
                                                    (and (setq idx (LM:listbox "Choose Attribute" (mapcar 'vla-get-tagstring tmp) 2))
                                                         (setq obj (nth (car idx) tmp))
                                                    )
                                                )
                                            )
                                            (if (vlax-write-enabled-p obj)
                                                (progn
                                                    (LF:puttextstring obj str)
                                                    (LF:updatefield (vlax-vla-object->ename obj))
                                                )
                                                (prompt "\nThe selected attribute is on a locked layer.")
                                            )
                                        )
                                        (   (and (= 2 (length sel)) (= "MULTILEADER" typ))
                                            (setq typ (cdr (assoc 172 (reverse enx))))
                                            (cond
                                                (   (and (<= acblockcontent typ acmtextcontent) (not (vlax-write-enabled-p obj)))
                                                    (prompt "\nThe selected multileader is on a locked layer.")
                                                )
                                                (   (= acmtextcontent typ)
                                                    (LF:puttextstring obj str)
                                                    (vla-regen (LM:acdoc) acactiveviewport)
                                                    t
                                                )
                                                (   (and
                                                        (= acblockcontent typ)
                                                        (setq tmp (LM:getmleaderattributes obj))
                                                        (or
                                                            (and (= 'str (type tag))
                                                                 (setq oid (cdr (assoc (strcase tag) tmp)))
                                                            )
                                                            (and (not (cdr tmp))
                                                                 (setq oid (cdar tmp))
                                                            )
                                                            (and (setq idx (LM:listbox "Choose Attribute" (mapcar 'car tmp) 2))
                                                                 (setq oid (cdr (nth (car idx) tmp)))
                                                            )
                                                        )
                                                    )
                                                    (LM:setmleaderattributevalue obj oid str)
                                                    (vla-regen (LM:acdoc) acactiveviewport)
                                                    t
                                                )
                                                (   (prompt "\nThe select multileader has no editable content."))
                                            )
                                        )
                                        (   (prompt "\nThe selected object is not text, mtext, multileader, attribute or attributed block."))
                                    )
                                )
                                (   (setq tmp (LM:getcell tab (trans sel 1 0)))
                                    (if (vlax-write-enabled-p (car tmp))
                                        (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-settext (append tmp (list str)))))
                                        (prompt "\nThe selected table cell belongs to a table on a locked layer.")
                                    )
                                )
                                (   (vla-addmtext
                                        (vlax-get-property (LM:acdoc) (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace))
                                        (vlax-3D-point (trans sel 1 0))
                                        0.0
                                        str
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
        (*error* nil) (princ)
    )
    
    (defun LF:puttextstring ( obj str )
        (vla-put-textstring obj "") ;; To clear any existing field
        (vla-put-textstring obj str)
        t
    )
    
    (defun LF:updatefield ( ent / cmd rtn )
        (setq cmd (getvar 'cmdecho))
        (setvar 'cmdecho 0)
        (setq rtn (vl-cmdf "_.updatefield" ent ""))
        (setvar 'cmdecho cmd)
        rtn
    )
    
    ;; ssget  -  Lee Mac
    ;; A wrapper for the ssget function to permit the use of a custom selection prompt
    ;; msg - [str] selection prompt
    ;; arg - [lst] list of ssget arguments
    
    (defun LM:ssget ( msg arg / sel )
        (princ msg)
        (setvar 'nomutt 1)
        (setq sel (vl-catch-all-apply 'ssget arg))
        (setvar 'nomutt 0)
        (if (not (vl-catch-all-error-p sel)) sel)
    )
    
    ;; Get MLeader Attributes  -  Lee Mac
    ;; Returns an association list of attribute tags & object IDs for all attributes held by an mleader block
    ;; mld - [vla] MLeader vla-object
    ;; Returns: [lst] List of ((<Attribute Tag> . <Object ID>) ... )
    
    (defun LM:getmleaderattributes ( mld / rtn )
        (vlax-for obj (vla-item (vla-get-blocks (vla-get-document mld)) (vla-get-contentblockname mld))
            (if
                (and
                    (= "AcDbAttributeDefinition" (vla-get-objectname obj))
                    (= :vlax-false (vla-get-constant obj))
                )
                (setq rtn (cons (cons (strcase (vla-get-tagstring obj)) (LM:intobjectid obj)) rtn))
            )
        )
        (reverse rtn)
    )
    
    ;; Object ID (integer)  -  Lee Mac
    ;; Returns an integer representing the ObjectID of a supplied VLA-Object
    ;; Compatible with 32-bit & 64-bit systems
    
    (defun LM:intobjectid ( obj )
        (if (vlax-property-available-p obj 'objectid32)
            (defun LM:intobjectid ( obj ) (vla-get-objectid32 obj))
            (defun LM:intobjectid ( obj ) (vla-get-objectid   obj))
        )
        (LM:intobjectid obj)
    )
    
    ;; Set MLeader Attribute Value  -  Lee Mac
    ;; obj - [vla] MLeader vla-object
    ;; idx - [int] Attribute Definition Object ID
    ;; str - [str] Attribute value
    
    (defun LM:setmleaderattributevalue ( obj idx str )
        (if (vlax-method-applicable-p obj 'setblockattributevalue32)
            (defun LM:setmleaderattributevalue ( obj idx str ) (vla-setblockattributevalue32 obj idx str))
            (defun LM:setmleaderattributevalue ( obj idx str ) (vla-setblockattributevalue   obj idx str))
        )
        (LM:setmleaderattributevalue obj idx str)
    )
    
    ;; List Box  -  Lee Mac
    ;; Displays a DCL list box allowing the user to make a selection from the supplied data.
    ;; msg - [str] Dialog label
    ;; lst - [lst] List of strings to display
    ;; bit - [int] 1=allow multiple; 2=return indexes
    ;; Returns: [lst] List of selected items/indexes, else nil
     
    (defun LM:listbox ( msg lst bit / dch des tmp rtn )
        (cond
            (   (not
                    (and
                        (setq tmp (vl-filename-mktemp nil nil ".dcl"))
                        (setq des (open tmp "w"))
                        (write-line
                            (strcat "listbox:dialog{label=\"" msg "\";spacer;:list_box{key=\"list\";multiple_select="
                                (if (= 1 (logand 1 bit)) "true" "false") ";width=50;height=15;}spacer;ok_cancel;}"
                            )
                            des
                        )
                        (not (close des))
                        (< 0 (setq dch (load_dialog tmp)))
                        (new_dialog "listbox" dch)
                    )
                )
                (prompt "\nError Loading List Box Dialog.")
            )
            (   t     
                (start_list "list")
                (foreach itm lst (add_list itm))
                (end_list)
                (setq rtn (set_tile "list" "0"))
                (action_tile "list" "(setq rtn $value)")
                (setq rtn
                    (if (= 1 (start_dialog))
                        (if (= 2 (logand 2 bit))
                            (read (strcat "(" rtn ")"))
                            (mapcar '(lambda ( x ) (nth x lst)) (read (strcat "(" rtn ")")))
                        )
                    )
                )
            )
        )
        (if (< 0 dch)
            (unload_dialog dch)
        )
        (if (and tmp (setq tmp (findfile tmp)))
            (vl-file-delete tmp)
        )
        rtn
    )
    
    ;; Get Cell  -  Lee Mac
    ;; If the supplied point lies within a cell boundary,
    ;; returns a list of: (<VLA Table Object> <Row> <Col>)
     
    (defun LM:getcell ( lst pnt / dir )
        (setq dir (vlax-3D-point (trans (getvar 'viewdir) 1 0))
              pnt (vlax-3D-point pnt)
        )
        (vl-some
           '(lambda ( tab / row col )
                (if (= :vlax-true (vla-hittest tab pnt dir 'row 'col))
                    (list tab row col)
                )
            )
            lst
        )
    )
    
    ;; ObjectID  -  Lee Mac
    ;; Returns a string containing the ObjectID of a supplied VLA-Object
    ;; Compatible with 32-bit & 64-bit systems
    
    (defun LM:objectid ( obj )
        (eval
            (list 'defun 'LM:objectid '( obj )
                (if (wcmatch (getenv "PROCESSOR_ARCHITECTURE") "*64*")
                    (if (vlax-method-applicable-p (vla-get-utility (LM:acdoc)) 'getobjectidstring)
                        (list 'vla-getobjectidstring (vla-get-utility (LM:acdoc)) 'obj ':vlax-false)
                       '(LM:ename->objectid (vlax-vla-object->ename obj))
                    )
                   '(itoa (vla-get-objectid obj))
                )
            )
        )
        (LM:objectid obj)
    )
    
    ;; Entity Name to ObjectID  -  Lee Mac
    ;; Returns the 32-bit or 64-bit ObjectID for a supplied entity name
    
    (defun LM:ename->objectid ( ent )
        (LM:hex->decstr
            (setq ent (vl-string-right-trim ">" (vl-prin1-to-string ent))
                  ent (substr ent (+ (vl-string-position 58 ent) 3))
            )
        )
    )
    
    ;; Hex to Decimal String  -  Lee Mac
    ;; Returns the decimal representation of a supplied hexadecimal string
    
    (defun LM:hex->decstr ( hex / foo bar )
        (defun foo ( lst rtn )
            (if lst
                (foo (cdr lst) (bar (- (car lst) (if (< 57 (car lst)) 55 48)) rtn))
                (apply 'strcat (mapcar 'itoa (reverse rtn)))
            )
        )
        (defun bar ( int lst )
            (if lst
                (if (or (< 0 (setq int (+ (* 16 (car lst)) int))) (cdr lst))
                    (cons (rem int 10) (bar (/ int 10) (cdr lst)))
                )
                (bar int '(0))
            )
        )
        (foo (vl-string->list (strcase hex)) nil)
    )
    
    ;; Start Undo  -  Lee Mac
    ;; Opens an Undo Group.
    
    (defun LM:startundo ( doc )
        (LM:endundo doc)
        (vla-startundomark doc)
    )
    
    ;; End Undo  -  Lee Mac
    ;; Closes an Undo Group.
    
    (defun LM:endundo ( doc )
        (while (= 8 (logand 8 (getvar 'undoctl)))
            (vla-endundomark doc)
        )
    )
    
    ;; Active Document  -  Lee Mac
    ;; Returns the VLA Active Document Object
    
    (defun LM:acdoc nil
        (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
        (LM:acdoc)
    )
    
    ;;----------------------------------------------------------------------;;
    
    (vl-load-com)
    (princ
        (strcat
            "\n:: LengthField.lsp | Version 1.0 | \\U+00A9 Lee Mac "
            (menucmd "m=$(edtime,0,yyyy)")
            " www.lee-mac.com ::"
            "\n:: Type \"LF\" to Invoke ::"
        )
    )
    (princ)
    
    ;;----------------------------------------------------------------------;;
    ;;                             End of File                              ;;
    ;;----------------------------------------------------------------------;;
    i tried to changed it according to the other lisp but with no luck
    this what come up:
    Code:
    (setq mynumber 0)
    (defun increment (str / )
      (setq mynumber (+ mynumber 1))
      (vl-string-subst (itoa mynumber) "*" str)
    )
    
    ;;-------------------------=={ Length Field }==-------------------------;;
    ;;                                                                      ;;
    ;;  This program allows a user to generate a field expression           ;;
    ;;  referencing the length/perimeter/circumference of one or more       ;;
    ;;  selected objects. In the case of selecting multiple objects, the    ;;
    ;;  field expression will reference the sum of the lengths of all       ;;
    ;;  objects in the selection.                                           ;;
    ;;                                                                      ;;
    ;;  The user may opt to specify a point at which to create a new        ;;
    ;;  multiline text object housing the field expression, pick a table    ;;
    ;;  cell in which the field should be inserted, or select an existing   ;;
    ;;  single-line text, multiline text, multileader, or attribute to      ;;
    ;;  be populated with the field expression.                             ;;
    ;;                                                                      ;;
    ;;  Upon issuing the command syntax 'LF' (Length Field) at the AutoCAD  ;;
    ;;  command-line, the program first prompts the user to make a          ;;
    ;;  selection of objects for which to return the length summation.      ;;
    ;;                                                                      ;;
    ;;  At this prompt, the user may select any number of Arcs, Circles,    ;;
    ;;  Lines, 2D Polylines (light or heavy), or 3D Polylines.              ;;
    ;;                                                                      ;;
    ;;  The user is then prompted to specify a point or table cell to       ;;
    ;;  insert a field expression referencing the summation of the lengths  ;;
    ;;  of the selected objects.                                            ;;
    ;;                                                                      ;;
    ;;  At this prompt, the user may also choose the 'Object' option in     ;;
    ;;  order to populate the content of an existing annotation object      ;;
    ;;  with the field expression.                                          ;;
    ;;                                                                      ;;
    ;;  Upon choosing this option, the user may select any single-line      ;;
    ;;  text (DText), multiline text (MText), single-line or multiline      ;;
    ;;  attribute, attributed block, or multileader (MLeader) with either   ;;
    ;;  multiline text or attributed block content.                         ;;
    ;;                                                                      ;;
    ;;  If the user selects an attributed block or attributed multileader   ;;
    ;;  with more than one attribute, the user is presented with a dialog   ;;
    ;;  interface listing the available attributes, and is prompted to      ;;
    ;;  select a destination for the field expression.                      ;;
    ;;                                                                      ;;
    ;;  The user may optionally predefine the target block/multileader      ;;
    ;;  attribute by specifying the attribute tag where noted at the top    ;;
    ;;  of the program source code.                                         ;;
    ;;                                                                      ;;
    ;;  The resulting field expression will display the sum of the lengths  ;;
    ;;  of the selected objects, formatted using the field formatting code  ;;
    ;;  specified at the top of the program.                                ;;
    ;;                                                                      ;;
    ;;----------------------------------------------------------------------;;
    ;;  Author:  Lee Mac, Copyright © 2017  -  www.lee-mac.com              ;;
    ;;----------------------------------------------------------------------;;
    ;;  Version 1.0    -    2017-08-06                                      ;;
    ;;                                                                      ;;
    ;;  - First release.                                                    ;;
    ;;----------------------------------------------------------------------;;
    ;;  Version 1.1    -    2017-08-06                                      ;;
    ;;                                                                      ;;
    ;;  - Program modified to account for selection of existing annotation  ;;
    ;;    objects which already contain a field expression.                 ;;
    ;;----------------------------------------------------------------------;;
    
    (defun c:lf ( / *error* ent enx flg fmt idx lst obj oid prp sel str tab tag tmp typ )
    
        (setq fmt "L=%lu6%pr2 cm" ;; Field Formatting
        (setq fmt (increment fmt))
              tag nil    ;; Optional predefined attribute tag
        )
        
        (defun *error* ( msg )
            (LM:endundo (LM:acdoc))
            (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
                (princ (strcat "\nError: " msg))
            )
            (princ)
        )
        (LM:startundo (LM:acdoc))
    
        (setq prp
           '(
                ("AcDbArc"        . "ArcLength")
                ("AcDbCircle"     . "Circumference")
                ("AcDbLine"       . "Length")
                ("AcDbPolyline"   . "Length")
                ("AcDb2dPolyline" . "Length")
                ("AcDb3dPolyline" . "Length")
            )
        )
    
        (if
            (setq sel
                (LM:ssget "\nSelect objects to obtain total length <exit>: "
                    (list
                        (list
                           '(000 . "ARC,CIRCLE,LINE,*POLYLINE")
                           '(-04 . "<NOT")
                               '(-04 . "<AND")
                                   '(000 . "POLYLINE") '(-04 . "&") '(070 . 80)
                               '(-04 . "AND>")
                           '(-04 . "NOT>")
                            (if (= 1 (getvar 'cvport))
                                (cons 410 (getvar 'ctab))
                               '(410 . "Model")
                            )
                        )
                    )
                )
            )
            (progn
                (if (= 1 (sslength sel))
                    (setq obj (vlax-ename->vla-object (ssname sel 0))
                          str 
                        (strcat
                            "%<\\AcObjProp Object(%<\\_ObjId "
                            (LM:objectid obj)
                            ">%)." (cdr (assoc (vla-get-objectname obj) prp)) " \\f \"" fmt "\">%"
                        )
                    )
                    (progn
                        (repeat (setq idx (sslength sel))
                            (setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx))))
                                  lst
                                (vl-list*
                                    "%<\\AcObjProp Object(%<\\_ObjId "
                                    (LM:objectid obj)
                                    ">%)." (cdr (assoc (vla-get-objectname obj) prp)) ">%" " + "
                                    lst
                                )
                            )
                        )
                        (setq str
                            (strcat
                                "%<\\AcExpr "
                                (apply 'strcat (reverse (cdr (reverse lst))))
                                " \\f \"" fmt "\">%"
                            )
                        )
                    )
                )
                (if
                    (setq tmp
                        (ssget "_X"
                            (list '(0 . "ACAD_TABLE")
                                (if (= 1 (getvar 'cvport))
                                    (cons 410 (getvar 'ctab))
                                   '(410 . "Model")
                                )
                            )
                        )
                    )
                    (repeat (setq idx (sslength tmp))
                        (setq tab (cons (vlax-ename->vla-object (ssname tmp (setq idx (1- idx)))) tab))
                    )
                )
                (while
                    (not
                        (progn
                            (if flg
                                (progn
                                    (setvar 'errno 0)
                                    (initget "Point eXit")
                                    (setq sel (nentsel "\nSelect text, mtext, mleader, attribute or attributed block [Point/eXit] <eXit>: "))
                                )
                                (progn
                                    (initget "Object eXit")
                                    (setq sel (getpoint "\nSpecify point or cell for field [Object/eXit] <eXit>: "))
                                )
                            )
                            (cond
                                (   (= 7 (getvar 'errno))
                                    (prompt "\nMissed, try again.")
                                )
                                (   (or (null sel) (= "eXit" sel)))
                                (   (= "Point" sel)
                                    (setq flg nil)
                                )
                                (   (= "Object" sel)
                                    (not (setq flg t))
                                )
                                (   flg
                                    (setq ent (car sel)
                                          enx (entget ent)
                                          typ (cdr (assoc 0 enx))
                                          obj (vlax-ename->vla-object ent)
                                    )
                                    (cond
                                        (   (and (= 2 (length sel)) (wcmatch typ "TEXT,MTEXT"))
                                            (if (vlax-write-enabled-p obj)
                                                (LF:puttextstring obj str)
                                                (prompt "\nThe selected text object is on a locked layer.")
                                            )
                                        )
                                        (   (and (= "ATTRIB" typ)
                                                 (/= 'str (type tag))
                                            )
                                            (if (vlax-write-enabled-p obj)
                                                (progn
                                                    (LF:puttextstring obj str)
                                                    (LF:updatefield ent)
                                                )
                                                (prompt "\nThe selected attribute is on a locked layer.")
                                            )
                                        )
                                        (   (and
                                                (or
                                                    (and (= "ATTRIB" typ)
                                                         (setq tmp (cdr (assoc 330 enx)))
                                                    )
                                                    (and (setq tmp (last (cadddr sel)))
                                                         (= "INSERT" (cdr (assoc 0 (entget tmp))))
                                                    )
                                                )
                                                (setq tmp (vlax-invoke (vlax-ename->vla-object tmp) 'getattributes))
                                                (or
                                                    (and (= 'str (type tag))
                                                         (setq idx (vl-position (strcase tag) (mapcar 'vla-get-tagstring tmp)))
                                                         (setq obj (nth idx tmp))
                                                    )
                                                    (and (not (cdr tmp))
                                                         (setq obj (car tmp))
                                                    )
                                                    (and (setq idx (LM:listbox "Choose Attribute" (mapcar 'vla-get-tagstring tmp) 2))
                                                         (setq obj (nth (car idx) tmp))
                                                    )
                                                )
                                            )
                                            (if (vlax-write-enabled-p obj)
                                                (progn
                                                    (LF:puttextstring obj str)
                                                    (LF:updatefield (vlax-vla-object->ename obj))
                                                )
                                                (prompt "\nThe selected attribute is on a locked layer.")
                                            )
                                        )
                                        (   (and (= 2 (length sel)) (= "MULTILEADER" typ))
                                            (setq typ (cdr (assoc 172 (reverse enx))))
                                            (cond
                                                (   (and (<= acblockcontent typ acmtextcontent) (not (vlax-write-enabled-p obj)))
                                                    (prompt "\nThe selected multileader is on a locked layer.")
                                                )
                                                (   (= acmtextcontent typ)
                                                    (LF:puttextstring obj str)
                                                    (vla-regen (LM:acdoc) acactiveviewport)
                                                    t
                                                )
                                                (   (and
                                                        (= acblockcontent typ)
                                                        (setq tmp (LM:getmleaderattributes obj))
                                                        (or
                                                            (and (= 'str (type tag))
                                                                 (setq oid (cdr (assoc (strcase tag) tmp)))
                                                            )
                                                            (and (not (cdr tmp))
                                                                 (setq oid (cdar tmp))
                                                            )
                                                            (and (setq idx (LM:listbox "Choose Attribute" (mapcar 'car tmp) 2))
                                                                 (setq oid (cdr (nth (car idx) tmp)))
                                                            )
                                                        )
                                                    )
                                                    (LM:setmleaderattributevalue obj oid str)
                                                    (vla-regen (LM:acdoc) acactiveviewport)
                                                    t
                                                )
                                                (   (prompt "\nThe select multileader has no editable content."))
                                            )
                                        )
                                        (   (prompt "\nThe selected object is not text, mtext, multileader, attribute or attributed block."))
                                    )
                                )
                                (   (setq tmp (LM:getcell tab (trans sel 1 0)))
                                    (if (vlax-write-enabled-p (car tmp))
                                        (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-settext (append tmp (list str)))))
                                        (prompt "\nThe selected table cell belongs to a table on a locked layer.")
                                    )
                                )
                                (   (vla-addmtext
                                        (vlax-get-property (LM:acdoc) (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace))
                                        (vlax-3D-point (trans sel 1 0))
                                        0.0
                                        str
                                    )
                                )
                            )
                        )
                    )
                )
            )
        )
        (*error* nil) (princ)
    )
    
    (defun LF:puttextstring ( obj str )
        (vla-put-textstring obj "") ;; To clear any existing field
        (vla-put-textstring obj str)
        t
    )
    
    (defun LF:updatefield ( ent / cmd rtn )
        (setq cmd (getvar 'cmdecho))
        (setvar 'cmdecho 0)
        (setq rtn (vl-cmdf "_.updatefield" ent ""))
        (setvar 'cmdecho cmd)
        rtn
    )
    
    ;; ssget  -  Lee Mac
    ;; A wrapper for the ssget function to permit the use of a custom selection prompt
    ;; msg - [str] selection prompt
    ;; arg - [lst] list of ssget arguments
    
    (defun LM:ssget ( msg arg / sel )
        (princ msg)
        (setvar 'nomutt 1)
        (setq sel (vl-catch-all-apply 'ssget arg))
        (setvar 'nomutt 0)
        (if (not (vl-catch-all-error-p sel)) sel)
    )
    
    ;; Get MLeader Attributes  -  Lee Mac
    ;; Returns an association list of attribute tags & object IDs for all attributes held by an mleader block
    ;; mld - [vla] MLeader vla-object
    ;; Returns: [lst] List of ((<Attribute Tag> . <Object ID>) ... )
    
    (defun LM:getmleaderattributes ( mld / rtn )
        (vlax-for obj (vla-item (vla-get-blocks (vla-get-document mld)) (vla-get-contentblockname mld))
            (if
                (and
                    (= "AcDbAttributeDefinition" (vla-get-objectname obj))
                    (= :vlax-false (vla-get-constant obj))
                )
                (setq rtn (cons (cons (strcase (vla-get-tagstring obj)) (LM:intobjectid obj)) rtn))
            )
        )
        (reverse rtn)
    )
    
    ;; Object ID (integer)  -  Lee Mac
    ;; Returns an integer representing the ObjectID of a supplied VLA-Object
    ;; Compatible with 32-bit & 64-bit systems
    
    (defun LM:intobjectid ( obj )
        (if (vlax-property-available-p obj 'objectid32)
            (defun LM:intobjectid ( obj ) (vla-get-objectid32 obj))
            (defun LM:intobjectid ( obj ) (vla-get-objectid   obj))
        )
        (LM:intobjectid obj)
    )
    
    ;; Set MLeader Attribute Value  -  Lee Mac
    ;; obj - [vla] MLeader vla-object
    ;; idx - [int] Attribute Definition Object ID
    ;; str - [str] Attribute value
    
    (defun LM:setmleaderattributevalue ( obj idx str )
        (if (vlax-method-applicable-p obj 'setblockattributevalue32)
            (defun LM:setmleaderattributevalue ( obj idx str ) (vla-setblockattributevalue32 obj idx str))
            (defun LM:setmleaderattributevalue ( obj idx str ) (vla-setblockattributevalue   obj idx str))
        )
        (LM:setmleaderattributevalue obj idx str)
    )
    
    ;; List Box  -  Lee Mac
    ;; Displays a DCL list box allowing the user to make a selection from the supplied data.
    ;; msg - [str] Dialog label
    ;; lst - [lst] List of strings to display
    ;; bit - [int] 1=allow multiple; 2=return indexes
    ;; Returns: [lst] List of selected items/indexes, else nil
     
    (defun LM:listbox ( msg lst bit / dch des tmp rtn )
        (cond
            (   (not
                    (and
                        (setq tmp (vl-filename-mktemp nil nil ".dcl"))
                        (setq des (open tmp "w"))
                        (write-line
                            (strcat "listbox:dialog{label=\"" msg "\";spacer;:list_box{key=\"list\";multiple_select="
                                (if (= 1 (logand 1 bit)) "true" "false") ";width=50;height=15;}spacer;ok_cancel;}"
                            )
                            des
                        )
                        (not (close des))
                        (< 0 (setq dch (load_dialog tmp)))
                        (new_dialog "listbox" dch)
                    )
                )
                (prompt "\nError Loading List Box Dialog.")
            )
            (   t     
                (start_list "list")
                (foreach itm lst (add_list itm))
                (end_list)
                (setq rtn (set_tile "list" "0"))
                (action_tile "list" "(setq rtn $value)")
                (setq rtn
                    (if (= 1 (start_dialog))
                        (if (= 2 (logand 2 bit))
                            (read (strcat "(" rtn ")"))
                            (mapcar '(lambda ( x ) (nth x lst)) (read (strcat "(" rtn ")")))
                        )
                    )
                )
            )
        )
        (if (< 0 dch)
            (unload_dialog dch)
        )
        (if (and tmp (setq tmp (findfile tmp)))
            (vl-file-delete tmp)
        )
        rtn
    )
    
    ;; Get Cell  -  Lee Mac
    ;; If the supplied point lies within a cell boundary,
    ;; returns a list of: (<VLA Table Object> <Row> <Col>)
     
    (defun LM:getcell ( lst pnt / dir )
        (setq dir (vlax-3D-point (trans (getvar 'viewdir) 1 0))
              pnt (vlax-3D-point pnt)
        )
        (vl-some
           '(lambda ( tab / row col )
                (if (= :vlax-true (vla-hittest tab pnt dir 'row 'col))
                    (list tab row col)
                )
            )
            lst
        )
    )
    
    ;; ObjectID  -  Lee Mac
    ;; Returns a string containing the ObjectID of a supplied VLA-Object
    ;; Compatible with 32-bit & 64-bit systems
    
    (defun LM:objectid ( obj )
        (eval
            (list 'defun 'LM:objectid '( obj )
                (if (wcmatch (getenv "PROCESSOR_ARCHITECTURE") "*64*")
                    (if (vlax-method-applicable-p (vla-get-utility (LM:acdoc)) 'getobjectidstring)
                        (list 'vla-getobjectidstring (vla-get-utility (LM:acdoc)) 'obj ':vlax-false)
                       '(LM:ename->objectid (vlax-vla-object->ename obj))
                    )
                   '(itoa (vla-get-objectid obj))
                )
            )
        )
        (LM:objectid obj)
    )
    
    ;; Entity Name to ObjectID  -  Lee Mac
    ;; Returns the 32-bit or 64-bit ObjectID for a supplied entity name
    
    (defun LM:ename->objectid ( ent )
        (LM:hex->decstr
            (setq ent (vl-string-right-trim ">" (vl-prin1-to-string ent))
                  ent (substr ent (+ (vl-string-position 58 ent) 3))
            )
        )
    )
    
    ;; Hex to Decimal String  -  Lee Mac
    ;; Returns the decimal representation of a supplied hexadecimal string
    
    (defun LM:hex->decstr ( hex / foo bar )
        (defun foo ( lst rtn )
            (if lst
                (foo (cdr lst) (bar (- (car lst) (if (< 57 (car lst)) 55 48)) rtn))
                (apply 'strcat (mapcar 'itoa (reverse rtn)))
            )
        )
        (defun bar ( int lst )
            (if lst
                (if (or (< 0 (setq int (+ (* 16 (car lst)) int))) (cdr lst))
                    (cons (rem int 10) (bar (/ int 10) (cdr lst)))
                )
                (bar int '(0))
            )
        )
        (foo (vl-string->list (strcase hex)) nil)
    )
    
    ;; Start Undo  -  Lee Mac
    ;; Opens an Undo Group.
    
    (defun LM:startundo ( doc )
        (LM:endundo doc)
        (vla-startundomark doc)
    )
    
    ;; End Undo  -  Lee Mac
    ;; Closes an Undo Group.
    
    (defun LM:endundo ( doc )
        (while (= 8 (logand 8 (getvar 'undoctl)))
            (vla-endundomark doc)
        )
    )
    
    ;; Active Document  -  Lee Mac
    ;; Returns the VLA Active Document Object
    
    (defun LM:acdoc nil
        (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
        (LM:acdoc)
    )
    
    ;;----------------------------------------------------------------------;;
    
    (vl-load-com)
    (princ
        (strcat
            "\n:: LengthField.lsp | Version 1.0 | \\U+00A9 Lee Mac "
            (menucmd "m=$(edtime,0,yyyy)")
            " www.lee-mac.com ::"
            "\n:: Type \"LF\" to Invoke ::"
        )
    )
    (princ)
    
    ;;----------------------------------------------------------------------;;
    ;;                             End of File                              ;;
    ;;----------------------------------------------------------------------;;

  2. #2
    Full Member
    Using
    AutoCAD 2014
    Join Date
    Dec 2010
    Posts
    94

    Default

    What my function increment does, is replace a * character in the pattern by the number you want.

    So you have to put a * somewhere in this string:

    Code:
    (setq fmt "L=%lu6%pr2 cm" ;; Field Formatting
    And of course you have to close every bracket that you open.
    The error message that you are getting now is a syntax error, telling you that Autocad refuses to load the script (as long as the brackets don't match).


    Try this:
    Code:
    (setq fmt "L*=%lu6%pr2 cm") ;; Field Formatting

  3. #3
    Junior Member
    Discipline
    Structural
    Using
    AutoCAD 2017
    Join Date
    Jun 2018
    Posts
    16

    Default

    still not working

  4. #4
    Full Member
    Using
    AutoCAD 2014
    Join Date
    Dec 2010
    Posts
    94

    Default

    Ah, the closing bracket had moved to to the next line.

    Make sure it's like this:
    Code:
        (setq fmt "L*=%lu6%pr2 cm") ;; Field Formatting
        (setq 
              fmt (increment fmt)
              tag nil    ;; Optional predefined attribute tag
        )

  5. #5
    Junior Member
    Discipline
    Structural
    Using
    AutoCAD 2017
    Join Date
    Jun 2018
    Posts
    16

    Default

    Registered forum members do not see this ad.

    you are the best!
    thank you very much, i also understand what you did there.

Similar Threads

  1. adding increment number to lisp
    By alat in forum AutoLISP, Visual LISP & DCL
    Replies: 5
    Last Post: 10th Jul 2018, 11:16 am
  2. adding increment number to lisp
    By alat in forum AutoLISP, Visual LISP & DCL
    Replies: 2
    Last Post: 25th Jun 2018, 11:02 am
  3. Adding number of selected mtext using lisp
    By reynaldomalasaga in forum AutoLISP, Visual LISP & DCL
    Replies: 4
    Last Post: 21st Feb 2017, 08:55 am
  4. Lisp for adding number to multiple text entities?
    By EvilSi in forum AutoLISP, Visual LISP & DCL
    Replies: 25
    Last Post: 15th May 2015, 01:01 pm
  5. LISP for adding a number to text..
    By geo999 in forum AutoLISP, Visual LISP & DCL
    Replies: 10
    Last Post: 26th Jan 2011, 04:15 pm

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts