JCYK 发表于 2022-7-5 15:34:19

用于面积计算的AutoLisp

大家好,我需要一些帮助。
 
我一直在使用autolisp(从朋友那里获得)用AutoCAD 2007计算建筑面积。然而,最近我将AutoCAD升级到2013年,我意识到lisp无法完全运行。
 
我在这里附上了lisp文件,真的希望有人能帮助纠正,使其适用于AutoCAD 2013。仅供参考,我对编写lisp代码一无所知。。。非常感谢!(不确定为什么与其他代码相比,此代码看起来如此庞大……)
 
为了与可能感兴趣的人共享,此lisp允许您选择多条多段线(例如楼层面积),然后选择代表要减去的区域的多段线(例如空心区域),它将帮助您将所有多段线地块(楼层面积减去楼层空心)与最终结果以及每个地块的标签制成表格。
 
享受
ATAB。lsp

wishbonesr 发表于 2022-7-5 15:39:03

将文件写入c:\Modern Windoze操作系统往往会限制在此级别的写入。这个程序有很多地方可以更新,我不知道从哪里开始。
 
我可能错了,但Gildred(作者)似乎打算在12084年第93个月第11天停止该软件的功能,然后联系他进行更新。我笑得很开心。
 
(ALERT"\Pls. Contact Gildred for update of this program.")
 
几乎所有变量都以“AT”开头。。。。更不用说它看起来是反编译的,因为它驻留在5行中,可能更适合500行。知道这一点,我甚至不敢下载代码,因为我不知道它的版权。
 
这就是说,写位置可能是问题所在,您可能能够自己搜索和编辑文件,以指向可写位置。
 
以下是一些可能有用的替代方案。
http://www.cadtutor.net/forum/showthread.php?22874-通过拾取内部点计算面积/第3页
 
http://www.lee-mac.com/areastofield.html
http://www.lee-mac.com/totallengthandarea.html
http://www.lee-mac.com/arealabel.html
http://www.lee-mac.com/areafieldtoattribute.html

cadplayer 发表于 2022-7-5 15:46:19

如果只计算多段线的面积,可以使用我的代码。
它显示层后分离的所有多段线的区域。
 
我非常感谢所有的反馈,让我能做得更好。
例如,如果多段线是否闭合,我将丢失一个请求
 

; question or ideas to my program
; contact me cadplayer@gmail.com!

(defun c:sa ( /
            i    ; increment
            en   ; entity
            lay; assoclist (entity . layer)
            layEn ; collect of lay
            layL ; used layer from picked areas
            ar   ; area from hatch
            arl; total area result
            )
(setvar "CMDECHO" 0)
(setq arl 0)
(prompt (strcat "\nTool to calculate area from polylines" "\nSelect polylines! "))
(if (/= (setq ss (ssget '((0 . "*POLYLINE")))) nil)
   (progn
   (setq i 0)
   (repeat (sslength ss)
       (setq en (cdr (assoc -1 (entget (ssname ss i)))))
       (setq lay (cons en (cdr (assoc 8 (entget en)))))
       (setq layEn (cons lay layEn))
       (cond
         ((/= en nil)
          (setq ar (_areaOfObject en))
          (setq arl (+ ar arl))
          )
         )
       (setq i (1+ i))
       )
   (princ (strcat "\n\n>>>> Total of all area: " (rtos arl 2 2)))
   (princ)
   (setq arl 0)
   )
   )
(if (setq layL (_RemoveDuplicates (mapcar 'cdr layEn)))
   (repeat (length layL)
   (progn
       (foreach N layEn
         (if (= (cdr N) (car layL))
         (progn
             (setq ar (_areaOfObject (car N)))
             (setq arl (+ ar arl))
             (command "_layer" "_m" (cdr N) "")
             (command "_hatch" "ansi31" 0.1 0 "_s" (car N) "")
             )
         )
         )
       (princ (strcat "\n\nLayer: " (car layL) "\nTotal area: " (rtos arl 2 2)))
       (princ)
       )
   (setq layL (cdr layL))
   (setq arl 0)
   )
   )
(princ)
)

; calculate area of object
(defun _areaOfObject (en / curve area)
(setq curve (vlax-ename->vla-object en))
(if
   (vl-catch-all-error-p
   (setq
       area
      (vl-catch-all-apply 'vlax-curve-getArea (list curve))
       )
   )
   nil
   area
   )
(progn
   (command "._area" "_O" en)
   (getvar "area")
   )
)

; Erase duplicates in list
(defun _RemoveDuplicates ( lst / foo index )
   (defun foo (x)
       (cond
         ((vl-position x index))
         ((null (setq index (cons x index))))
       )
   )
   (vl-remove-if
      'foo
       lst
   )
)


JCYK 发表于 2022-7-5 15:50:49

您好,Wishbonesr和cadplayer,感谢您的评论和帮助。
 
我以前看过一些这样的链接,尤其是李的。他们太棒了。
 
然而,我需要最终结果是在这个特定的格式,因为它是提交目的。如果您尝试使用我之前附带的autolisp,您可以找到我正在查看的格式类型。一些专家在那里请帮助~
 
下面是autolisp函数的更详细描述。。
 
情况:您有许多大的闭合多段线(楼层面积)。在每个绿色区域内都有一些小的闭合多段线(空心区域)。
 
autolisp的功能:
-它将首先要求您指定绘图比例(例如,您输入50、100或200等,它将相应地调整文本大小)。
-选择楼层面积(选择大的闭合多段线)
-有空白区域吗?(例如是)
-选择空心区域(选择小闭合多段线)
-为制表选择插入点(在空白处选择一个点)
**最终结果表如下图所示。它还将给出一个标签(例如a、B、C…)以及每个多段线区域内的面积图。
 
以上内容将有助于节省大量时间,因为没有这个lisp,我们将不得不手动完成上述所有操作。。。而且反复。
 

 
专家们非常感谢你们的大力帮助。非常感谢。

wishbonesr 发表于 2022-7-5 15:52:42

跟我老爸谈过这件事。他告诉我,对于一些Lisper(在vlisp编译之前)来说,在他们的例程上运行一个程序是很常见的,这使得修改或调试变得异常困难。然后他们保留一份原件。他称之为“一种形式的工作保障”。
随着这一点的学习,我决定更加努力,当我开始优化时,我不得不停止自己。
 
我首先要说的是,我对这部代码的任何部分都没有任何要求,所有的荣誉都归于吉尔德。
 
甚至用前缀屏蔽所有函数,以防冲突;并尽可能多地嵌套,而无需认真修改。问题实际上是它使用的临时文件的写入位置。它已经被修复,应该可以在任何系统上运行。
 
我对这个节目本该有的台数感到失望。结果是940,没有任何评论。
 
仅测试ATAB。
ATAB。LSP

Raggi_Thor 发表于 2022-7-5 15:57:54

这个文件中的撇号(“)似乎有问题,无法加载。

JCYK 发表于 2022-7-5 16:02:01

Wishbonesr。。。。。。。你救了我的命!!!!!!
 
它在AutoCAD 2013中运行良好!非常感谢!!!!!!!!!!!!!!!!!!

CADSTORHAUG 发表于 2022-7-5 16:05:41

我如何获得此ATAB。lsp到dispaly S.F.和Acres?它显示平方米。

tortamneuk 发表于 2022-7-5 16:11:29

谢谢,这就是我想要的!!!

ThibG 发表于 2022-7-5 16:14:29

问候语,
 
常规ATAB。lsp太棒了。
只有一个问题:
如何为测量的面积值设置默认文字大小?
页: [1] 2
查看完整版本: 用于面积计算的AutoLisp