乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 91|回复: 5

[编程交流] 在Autolisp中使用Area命令

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:08:26 | 显示全部楼层 |阅读模式
我试图使用area命令获取面积,并通过将其乘以用户给定的输入来打印输出。
 
我不擅长编程,所以使用了本论坛中给出的一些代码。
 
我已经尝试了以下代码来完成工作。。。但它打印出了一些错误。。。。你能帮我做这件事吗。
 
  1. (defun c:Test (/ val)
  2. (command "_.area")
  3.    (while (< 0 (getvar 'cmdactive))
  4.    (progn (princ "\nSpecify point: ")
  5.           (command PAUSE)
  6.    )
  7. )
  8. (setq SupPercent (getreal "\n Enter Super Built Percentage : "))
  9. (setq supArea (* (getvar 'AREA) (/ SupPercent 100)) )
  10. (princ (strcat "\n" (rtos (getvar 'AREA)) " m²") )
  11. (princ (strcat (rtos SupPercent) "% Sup Area = " (rtos supArea)) " m²") )
  12. )

 
还有一件事,是否可以使用Autocad Area命令通过(1)选择点(如上述代码所示)和(2)通过对象选择(如闭合多边形)来获取面积。实际上,我希望代码能够通过两种方式获得面积。
 
提前感谢
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 17:23:08 | 显示全部楼层
请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。
 
[NOPARSE]
  1. Your Code Here
[/NOPARSE]=
  1. Your Code Here
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:38:40 | 显示全部楼层
编辑完成。。。。。。
回复

使用道具 举报

BKT

1

主题

124

帖子

123

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-7-5 17:56:11 | 显示全部楼层
删除“while”行上的额外括号:
 
  1. (while (< 0 (getvar 'cmdactive)[color=red])[/color]
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:03:46 | 显示全部楼层
最简单的问题是,在开始时你要问哪种方法,唯一可能的一个选择是当你选择第一个点时,它是一个普林线物体还是圆,我可以看到这一点,问题是一个点在同一点上有直线等。使用vla get area对象可能是最简单的,所以使用点生成一个新的pline get area,然后最后擦除。
 
  1. ; create pline by picking points press enter when finished
  2. (command "_pline")
  3. (while (= (getvar "cmdactive") 1 ) (command pause)
  4. )
  5. (alert (strcat "Area is " (rtos (vla-get-area (vlax-ename->vla-object (entlast))) 2 3 )))
  6. (command "erase" "Last" "" )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:13:48 | 显示全部楼层
试试这个
 
  1. (defun c:test ( / obj)
  2. (setq obj (vlax-ename->vla-object (car (entsel "Pick object"))))
  3. (if (= (vlax-get obj 'ObjectName) "AcDbPolyline")
  4. (alert (strcat "Area is " (rtos (vla-get-area obj) 2 3 )))
  5. (progn
  6. (alert "Pick all points including start") ; avoids finding start point of picked object
  7. (command "_pline")
  8. (while (= (getvar "cmdactive") 1 ) (command pause)
  9. ) ; while
  10. (setq obj (vlax-ename->vla-object (entlast)))
  11. (alert (strcat "Area is " (rtos (vla-get-area obj) 2 3 )))
  12. (command "erase" "last" "")
  13. ) ; progn
  14. ) ; if
  15. ) ; defun
  16. (c:test)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 09:08 , Processed in 0.671282 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表