用于面积计算的AutoLisp
大家好,我需要一些帮助。我一直在使用autolisp(从朋友那里获得)用AutoCAD 2007计算建筑面积。然而,最近我将AutoCAD升级到2013年,我意识到lisp无法完全运行。
我在这里附上了lisp文件,真的希望有人能帮助纠正,使其适用于AutoCAD 2013。仅供参考,我对编写lisp代码一无所知。。。非常感谢!(不确定为什么与其他代码相比,此代码看起来如此庞大……)
为了与可能感兴趣的人共享,此lisp允许您选择多条多段线(例如楼层面积),然后选择代表要减去的区域的多段线(例如空心区域),它将帮助您将所有多段线地块(楼层面积减去楼层空心)与最终结果以及每个地块的标签制成表格。
享受
ATAB。lsp 将文件写入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 如果只计算多段线的面积,可以使用我的代码。
它显示层后分离的所有多段线的区域。
我非常感谢所有的反馈,让我能做得更好。
例如,如果多段线是否闭合,我将丢失一个请求
; 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
)
)
您好,Wishbonesr和cadplayer,感谢您的评论和帮助。
我以前看过一些这样的链接,尤其是李的。他们太棒了。
然而,我需要最终结果是在这个特定的格式,因为它是提交目的。如果您尝试使用我之前附带的autolisp,您可以找到我正在查看的格式类型。一些专家在那里请帮助~
下面是autolisp函数的更详细描述。。
情况:您有许多大的闭合多段线(楼层面积)。在每个绿色区域内都有一些小的闭合多段线(空心区域)。
autolisp的功能:
-它将首先要求您指定绘图比例(例如,您输入50、100或200等,它将相应地调整文本大小)。
-选择楼层面积(选择大的闭合多段线)
-有空白区域吗?(例如是)
-选择空心区域(选择小闭合多段线)
-为制表选择插入点(在空白处选择一个点)
**最终结果表如下图所示。它还将给出一个标签(例如a、B、C…)以及每个多段线区域内的面积图。
以上内容将有助于节省大量时间,因为没有这个lisp,我们将不得不手动完成上述所有操作。。。而且反复。
专家们非常感谢你们的大力帮助。非常感谢。
跟我老爸谈过这件事。他告诉我,对于一些Lisper(在vlisp编译之前)来说,在他们的例程上运行一个程序是很常见的,这使得修改或调试变得异常困难。然后他们保留一份原件。他称之为“一种形式的工作保障”。
随着这一点的学习,我决定更加努力,当我开始优化时,我不得不停止自己。
我首先要说的是,我对这部代码的任何部分都没有任何要求,所有的荣誉都归于吉尔德。
甚至用前缀屏蔽所有函数,以防冲突;并尽可能多地嵌套,而无需认真修改。问题实际上是它使用的临时文件的写入位置。它已经被修复,应该可以在任何系统上运行。
我对这个节目本该有的台数感到失望。结果是940,没有任何评论。
仅测试ATAB。
ATAB。LSP 这个文件中的撇号(“)似乎有问题,无法加载。 Wishbonesr。。。。。。。你救了我的命!!!!!!
它在AutoCAD 2013中运行良好!非常感谢!!!!!!!!!!!!!!!!!! 我如何获得此ATAB。lsp到dispaly S.F.和Acres?它显示平方米。 谢谢,这就是我想要的!!! 问候语,
常规ATAB。lsp太棒了。
只有一个问题:
如何为测量的面积值设置默认文字大小?
页:
[1]
2