0% found this document useful (0 votes)
23 views5 pages

Lee

Uploaded by

Yosri Ibrahim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views5 pages

Lee

Uploaded by

Yosri Ibrahim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

;;--------------------=={ Area Field to Attribute }==-------------------;;

;; ;;
;; This program allows a user to populate a selected attribute with ;;
;; a Field Expression referencing the area, or sum of areas, of one ;;
;; or more objects. ;;
;; ;;
;; Upon issuing the command syntax 'A2A' 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 Field Expression. ;;
;; ;;
;; Following object selection, the user is then prompted to select ;;
;; either an attributed block or an attribute in which to house the ;;
;; 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. ;;
;;----------------------------------------------------------------------;;
;; Author: Lee Mac, Copyright � 2013 - www.lee-mac.com ;;
;;----------------------------------------------------------------------;;
;; Version 1.2 - 2016-01-16 ;;
;;----------------------------------------------------------------------;;

(defun c:a2a ( / *error* ats att enx fmt idx inc lst sel tag tmp )

(setq fmt "%lu6%qf1" ;; Field Formatting


tag nil ;; Optional predefined attribute tag
)

(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"))))
(progn
(while
(progn (setvar 'errno 0) (setq ats (nentsel "\nSelect attribute
or attributed block: "))
(cond
( (= 7 (getvar 'errno))
(princ "\nMissed, try again.")
)
( (null ats)
nil
)
( (and (= "ATTRIB" (cdr (assoc 0 (setq enx (entget
(car ats))))))
(/= 'str (type tag))
)
(setq att (vlax-ename->vla-object (car ats)))
nil
)
( (and
(or
(and (= "ATTRIB" (cdr (assoc 0 enx)))
(setq tmp (cdr (assoc 330 enx)))
)
(and (setq tmp (last (cadddr ats)))
(= "INSERT" (cdr (assoc 0 (entget
tmp))))
)
)
(setq tmp (vlax-invoke (vlax-ename->vla-object
tmp) 'getattributes))
)
(not
(or
(and (= 'str (type tag))
(setq idx (vl-position (strcase tag)
(mapcar 'vla-get-tagstring tmp)))
(setq att (nth idx tmp))
)
(and (not (cdr tmp))
(setq att (car tmp))
)
(and (setq idx (LM:listbox "Choose
Attribute" (mapcar 'vla-get-tagstring tmp) 2))
(setq att (nth (car idx) tmp))
)
)
)
)
( (princ "\nThe selected object is not an attribute
or attributed block."))
)
)
)
(= 'vla-object (type att))
)
)
(progn
(LM:startundo (LM:acdoc))
(if (= 1 (sslength sel))
(vla-put-textstring att
(strcat
"%<\\AcObjProp Object(%<\\_ObjId "
(LM:objectid (vlax-ename->vla-object (ssname sel 0)))
">%).Area \\f \"" fmt "\">%"
)
)
(progn
(repeat (setq inc (sslength sel))
(setq lst
(vl-list*
"%<\\AcObjProp Object(%<\\_ObjId "
(LM:objectid (vlax-ename->vla-object (ssname sel
(setq inc (1- inc)))))
">%).Area>%" " + "
lst
)
)
)
(vla-put-textstring att
(strcat
"%<\\AcExpr "
(apply 'strcat (reverse (cdr (reverse lst))))
" \\f \"" fmt "\">%"
)
)
)
)
(vl-cmdf "_.updatefield" (vlax-vla-object->ename att) "")
(LM:endundo (LM:acdoc))
)
)
(princ)
)

;; 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
)

;; 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:: Areas2Attribute.lsp | Version 1.2 | \\U+00A9 Lee Mac "
(menucmd "m=$(edtime,0,yyyy)")
" www.lee-mac.com ::"
"\n:: Type \"A2A\" to Invoke ::"
)
)
(princ)

;;----------------------------------------------------------------------;;
;; End of File ;;
;;----------------------------------------------------------------------;;

You might also like