大家好
我发现PBEJSE的一个例程非常适合我——但它在AutoCAD 2013中返回了零面积——见图。
但是如果我选择字段。。。
...更改属性类型。。。
...然后将属性更改回“面积”,它就会起作用。我唯一能指出的是,字段表达式现在与lisp代码中的不同
代码是。。。
- ;; Written by PBEJSE on CADTutor
- ;; Post #4 https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/multiple-polyline-area-labels/td-p/3459894
- (defun c:PolyArea (/ BitVersion acsp ss e ptList ID StrField txt p)
- (vl-load-com)
- (setq BitVersion
- (if (> (strlen
- (vl-prin1-to-string
- (vlax-get-acad-object)))
- 40) T nil)
- acsp (vla-get-block
- (vla-get-activelayout
- (vla-get-activedocument
- (vlax-get-acad-object)))))
- (if (setq ss (ssget "_X" '((0 . "*POLYLINE")
- (8 . "A-AREA-BDRY")
- (-4 . "&")
- (70 . 1)(410 . "Model"))))
- (repeat (sslength ss)
- (setq e (ssname ss 0)
- sum '(0 0)
- verts (cdr (assoc 90 (entget e))))
- (setq ptList
- (mapcar 'cdr
- (vl-remove-if-not
- '(lambda (x) (= (car x) 10))
- (entget e))))
- (foreach x ptList (setq sum (mapcar '+ x sum)))
- (setq ID (if BitVersion
- (vlax-invoke-method
- (vla-get-Utility
- (vla-get-ActiveDocument
- (vlax-get-acad-object)))
- 'GetObjectIdString
- (vlax-ename->vla-object
- e)
- :vlax-False)
- (itoa (vla-get-objectid
- (vlax-ename->vla-object e)))))
- (setq StrField
- (strcat
- "%<\\AcObjProp Object(%<\\_ObjId "
- ID
- ">%).Area \\f "%lu2%pr2%ps[, m²]%ds44%ct8[1e-006]">%"))
- (vla-put-AttachmentPoint
- (setq txt (vla-addMText
- acsp
- (setq p (vlax-3d-point
- (mapcar '/ sum
- (list verts
- verts))))
- 0 StrField))
- acAttachmentPointMiddleCenter)
- (vla-put-InsertionPoint txt p)
- (ssdel e ss)
- )(princ "\0 Objects found:"))
- (princ)
- )
有人知道为什么返回的面积为零吗?
谢谢
保罗 |