PBEJSE区域字段lisp not wor
大家好我发现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\">%"))
(vla-put-AttachmentPoint
(setq txt (vla-addMText
acsp
(setq p (vlax-3d-point
(mapcar '/ sum
(list verts
verts))))
0StrField))
acAttachmentPointMiddleCenter)
(vla-put-InsertionPoint txt p)
(ssdel e ss)
)(princ "\0 Objects found:"))
(princ)
)
有人知道为什么返回的面积为零吗?
谢谢
保罗 嗨,保罗,
用以下格式替换字段代码:
"%<\\AcObjProp Object(%<\\_ObjId " id ">%).Area \\f \"%lu2%pr2%ps[, m²]%pr2%ds44\">%"
令人惊叹的谢谢Tharwat,做得很好。
不客气。所有的功劳都归于pBe。 绝对地非常感谢PBEJSE提供例行程序 FWIW,问题是已应用于结果的1e-6(0.000001)的转换系数-这可以通过单击“附加格式…”看到字段对话框中的按钮。
谢谢李。原始代码必须用于mm。
页:
[1]