pixel8er 发表于 2022-7-5 17:52:37

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)
   )
 
有人知道为什么返回的面积为零吗?
 
谢谢
保罗

Tharwat 发表于 2022-7-5 18:09:24

嗨,保罗,
 
用以下格式替换字段代码:
 

"%<\\AcObjProp Object(%<\\_ObjId " id ">%).Area \\f \"%lu2%pr2%ps[, m²]%pr2%ds44\">%"

pixel8er 发表于 2022-7-5 18:14:04

令人惊叹的谢谢Tharwat,做得很好。

Tharwat 发表于 2022-7-5 18:23:15

 
不客气。所有的功劳都归于pBe。

pixel8er 发表于 2022-7-5 18:42:06

绝对地非常感谢PBEJSE提供例行程序

Lee Mac 发表于 2022-7-5 18:52:18

FWIW,问题是已应用于结果的1e-6(0.000001)的转换系数-这可以通过单击“附加格式…”看到字段对话框中的按钮。

pixel8er 发表于 2022-7-5 19:01:57

 
谢谢李。原始代码必须用于mm。
页: [1]
查看完整版本: PBEJSE区域字段lisp not wor