alat Posted June 25, 2018 Posted June 25, 2018 i am using lee-mac lisp "Areas2FieldV1-3", its calculate the area of object and print it to text. i managed to add prefix and suffix to the lisp. now its looks like that when i choose an object it shows a=xm2. i need to add increment number to my result, for example a1=xm2 to the first object a2=xm2 to the second object and so on. how do i do that? Quote
Tharwat Posted June 25, 2018 Posted June 25, 2018 Hi, (setq IncNum 0) ;; add this line of codes at the top above the iteration of objects to avoid repetition of the same value. (strcat "a" (itoa (setq IncNum (1+ IncNum))) ".......m2") Quote
alat Posted June 25, 2018 Author Posted June 25, 2018 hi, thanks for the reply i am new to this, and i really don't get it, sorry. i hope you can help me here is the code: ;;------------------------=={ Areas to Field }==------------------------;; ;; ;; ;; This program allows a user to create an MText object containing a ;; ;; Field Expression referencing the area, or sum of areas, of one or ;; ;; more selected objects. ;; ;; ;; ;; Upon issuing the command syntax 'A2F' at the AutoCAD command-line, ;; ;; the user is prompted to make a selection of objects for which to ;; ;; retrieve the area; if more than one object is selected, the ;; ;; cumulative area for all objects will be displayed by the resultant ;; ;; MText Field. ;; ;; ;; ;; Following object selection, the user is prompted to pick a point ;; ;; at which to create the MText Field. If the specified point resides ;; ;; within an AutoCAD table cell, the program will populate the table ;; ;; cell with the appropriate Field Expression. ;; ;; ;; ;; The Field will display the sum of the areas of the selected ;; ;; objects, formatted using the Field formatting code specified at ;; ;; the top of the program - this formatting code may be altered to ;; ;; suit the user's requirements. ;; ;; ;; ;;----------------------------------------------------------------------;; ;; Author: Lee Mac, Copyright © 2014 - www.lee-mac.com ;; ;;----------------------------------------------------------------------;; ;; Version 1.3 - 2014-07-17 ;; ;;----------------------------------------------------------------------;; (defun c:a2f ( / *error* fmt inc ins lst sel str ) (setq IncNum 0) (setq fmt "A=%lu6%pr1 m²") ;; Field Formatting (defun *error* ( msg ) (LM:endundo (LM:acdoc)) (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")) (princ (strcat "\nError: " msg)) ) (princ) ) (if (and (setq sel (ssget '((0 . "ARC,CIRCLE,ELLIPSE,HATCH,*POLYLINE,REGION,SPLINE")))) (setq ins (getpoint "\nPick point or cell for field: ")) ) (progn (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)) ) ) (if (= 1 (sslength sel)) (setq str (strcat "%<\\AcObjProp Object(%<\\_ObjId " (LM:ObjectID (vlax-ename->vla-object (ssname sel 0))) ">%).Area \\f \"" fmt "\">%" ) ) (progn (repeat (setq idx (sslength sel)) (setq lst (vl-list* "%<\\AcObjProp Object(%<\\_ObjId " (LM:ObjectID (vlax-ename->vla-object (ssname sel (setq idx (1- idx))))) ">%).Area>%" " + " lst ) ) ) (setq str (strcat "%<\\AcExpr " (apply 'strcat (reverse (cdr (reverse lst)))) " \\f \"" fmt "\">%" ) ) ) ) (LM:startundo (LM:acdoc)) (if (setq tmp (LM:getcell tab (trans ins 1 0))) (apply 'vla-settext (append tmp (list str))) (vla-addmtext (vlax-get-property (LM:acdoc) (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace)) (vlax-3D-point (trans ins 1 0)) 0.0 str ) ) (LM:endundo (LM:acdoc)) ) ) (princ) ) ;; 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 (and (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE")) (vlax-method-applicable-p (vla-get-utility (LM:acdoc)) 'getobjectidstring) ) (list 'vla-getobjectidstring (vla-get-utility (LM:acdoc)) 'obj ':vlax-false) '(itoa (vla-get-objectid obj)) ) ) ) (LM:ObjectID obj) ) ;; 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 ) ) ;; 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) ;;----------------------------------------------------------------------;; ;; End of File ;; ;;----------------------------------------------------------------------;; Quote
Recommended Posts
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.