别担心,弗兰克
- (defun c:GetAreas (/ *error* lst->str GetObjectID DOC ENT IDS SS UFLAG UTIL)
- (vl-load-com)
- ;; Lee Mac ~ 18.03.10
- (defun *error* (msg)
- (and uFlag (vla-EndUndomark doc))
- (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
- (princ (strcat "\n** Error: " msg " **")))
- (princ))
- (defun GetObjectID (obj)
- (setq util (cond (util) ((vla-get-Utility
- (vla-get-ActiveDocument (vlax-get-acad-object))))))
-
- (if (vl-string-search "X64" (strcase (getvar 'PLATFORM)))
- (vlax-invoke-method util 'GetObjectIdString obj :vlax-false)
- (itoa (vla-get-Objectid obj))))
- (defun lst->str (lst d1 d2)
- (if (cdr lst)
- (strcat d1 (car lst) d2 (lst->str (cdr lst) d1 d2))
- (strcat d1 (car lst))))
- (princ "\nSelect Objects to Retrieve Total Area... ")
- (if (and (ssget '((0 . "ARC,CIRCLE,ELLIPE,HATCH,*POLYLINE,REGION")))
- (setq ent (car (nentsel "\nSelect Text, MText or Attrib to Place: ")))
- (wcmatch (cdr (assoc 0 (entget ent))) "*TEXT,ATTRIB"))
- (progn
- (setq uFlag (not (vla-StartUndoMark
- (setq doc (vla-get-ActiveDocument
- (vlax-get-acad-object))))))
-
- (vlax-for obj (setq ss (vla-get-ActiveSelectionSet doc))
- (setq Ids (cons (GetObjectID obj) Ids)))
- (vla-delete ss)
- (vla-put-TextString
- (vlax-ename->vla-object ent)
- (if (= 1 (length Ids))
- (strcat "%<\\AcObjProp Object(%<\\_ObjId " (car Ids) ">%).Area \\f "%lu6%qf1%ct8[1e-6]">%")
- (strcat "%<\\AcExpr" (lst->str Ids " %<\\AcObjProp Object(%<\\_ObjId " ">%).Area >% +")
- ">%).Area >% \\f "%lu6%qf1%ct8[1e-6]">%")))
- (vla-regen doc acActiveViewport)
- (setq uFlag (vla-EndUndomark doc))))
- (princ))
|