乐筑天下

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

[编程交流] 区域lisp

[复制链接]

8

主题

38

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 11:59:10 | 显示全部楼层 |阅读模式
大家好,我想要一个lisp的面积,如果我选择一个,圆,rec,多边形,等等。。
lisp想要在图纸上标出面积或周长,请参见exzample
lisp应询问文字高度和面积或周长
 
 
请帮帮我
样品pdf
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 12:03:56 | 显示全部楼层
试试这个
 
~'J'~
 
  1. [/c(defun C:alb (/ acsp adoc ar axss hgt maxp minp obj p1 p2 pc ss txt)
  2. (vl-load-com)
  3. (setq        adoc (vla-get-activedocument
  4.       (vlax-get-acad-object)
  5.     )
  6. )
  7. (if (and
  8. (= (getvar "tilemode") 0)
  9. (= (getvar "cvport") 1)
  10. )
  11. (setq acsp (vla-get-paperspace adoc))
  12. (setq acsp (vla-get-modelspace adoc))
  13. )
  14. (vla-startundomark (vla-get-activedocument
  15.                       (vlax-get-acad-object)))
  16. (initget 7)
  17. (setq hgt (getreal "\nEnter text height: "))
  18. (prompt "\nSelect objects on screen to add area label")
  19. (if (setq ss (ssget))
  20. (progn
  21.    (setq axss (vla-get-activeselectionset adoc))
  22. (vlax-for obj axss
  23. (if (not
  24. (vl-catch-all-error-p
  25. (setq
  26.    ar (vl-catch-all-apply
  27.           (function (lambda()
  28.                         (vlax-curve-getarea obj)))))))
  29. (progn
  30. (setq txt (strcat "Area = " (rtos ar 2 2)))
  31. (vla-getboundingbox obj 'minp 'maxp)
  32. (setq p1 (vlax-safearray->list minp)
  33. p2 (vlax-safearray->list maxp)
  34. pc (mapcar (function (lambda(a b)(/ (+ a b) 2))) p1 p2)
  35. )
  36. (vlax-invoke acsp 'Addtext txt pc hgt)
  37. )
  38. )
  39. )
  40. )
  41. )
  42. (vla-endundomark (vla-get-activedocument
  43.                       (vlax-get-acad-object)))
  44.    (princ)
  45.    )
  46. (princ "\nType ALB to label objects with area text")
  47. (princ)
回复

使用道具 举报

8

主题

38

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:08:06 | 显示全部楼层
这很好,很好
 
 
但lisp也向我要perimiter
这样做我很感谢你
 
哈什哈德:)
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 12:12:46 | 显示全部楼层
请将图片附在
要放置周长文本
你想把它们放在
区域文字下方的第二行或
其他地方?
 
~'J'~
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 12:14:53 | 显示全部楼层
尝试编辑的版本
 
  1. (defun C:alb (/ acsp adoc ar axss hgt maxp minp obj p1 p2 pc1 pc2 per
  2.                ss txt1 txt2)
  3. (vl-load-com)
  4. (setq        adoc (vla-get-activedocument
  5.       (vlax-get-acad-object)
  6.     )
  7. )
  8. (if (and
  9. (= (getvar "tilemode") 0)
  10. (= (getvar "cvport") 1)
  11. )
  12. (setq acsp (vla-get-paperspace adoc))
  13. (setq acsp (vla-get-modelspace adoc))
  14. )
  15. (vla-startundomark (vla-get-activedocument
  16.                       (vlax-get-acad-object)))
  17. (initget 7)
  18. (setq hgt (getreal "\n  Enter text height: "))
  19. (prompt "\n  Select objects on screen to add area label")
  20. (if (setq ss (ssget))
  21. (progn
  22.    (setq axss (vla-get-activeselectionset adoc))
  23. (vlax-for obj axss
  24. (if
  25. (and
  26. (not
  27. (vl-catch-all-error-p
  28. (setq
  29.    ar (vl-catch-all-apply
  30.           (function (lambda()
  31.                         (vlax-curve-getarea obj)))))))
  32. (not
  33. (vl-catch-all-error-p
  34.    (setq
  35.    per (vl-catch-all-apply
  36.           (function (lambda()
  37.                         (vlax-curve-getdistatparam obj
  38.                              (vlax-curve-getendparam obj)))))))))
  39. (progn
  40. (setq txt1 (strcat "Area = " (rtos ar 2 2)))
  41. (setq txt2 (strcat "Perimeter = " (rtos per 2 2)))
  42. (vla-getboundingbox obj 'minp 'maxp)
  43. (setq p1 (vlax-safearray->list minp)
  44. p2 (vlax-safearray->list maxp)
  45. pc1 (mapcar (function (lambda(a b)(/ (+ a b) 2))) p1 p2)
  46. pc2 (mapcar '- pc1 (list 0 (* hgt 1.5) 0))   
  47.      
  48. )
  49. (vlax-invoke acsp 'Addtext txt1 pc1 hgt)
  50. (vlax-invoke acsp 'Addtext txt2 pc2 hgt)
  51. )
  52. )
  53. )
  54. )
  55. )
  56. (vla-endundomark (vla-get-activedocument
  57.                       (vlax-get-acad-object)))
  58.    (princ)
  59.    )
  60. (princ "\n   Type ALB to label objects with area and perimeter text")
  61. (princ)
  62. (C:alb)

 
~'J'~
回复

使用道具 举报

8

主题

38

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:20:22 | 显示全部楼层
很好,胖子
非常感谢:)
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 12:23:17 | 显示全部楼层
不客气
干杯
 
~'J'~
回复

使用道具 举报

2

主题

22

帖子

20

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 12:26:29 | 显示全部楼层
所以我复制了上面的lsp并在稍作修改后使用了它,但在某些情况下遇到了问题。
 
请参阅附图:
(1) 来自在旋转UCS中绘制的图形,(2)是在另一个图形中生成的边界。边界有一些分割的共线。如果段被替换为单行,则代码有效。事实上,该边界不会生成任何错误消息,但(1)会如下所示:
我对AutoLISP并不陌生,但我也不是它的专业人士。有人能帮我排除故障吗? 
我对代码所做的修改是通过拾取现有文本而不是键入文本来生成文本高度,并对齐文本中心。文字高度选取的相关部分为:
请注意,一些变量已更改。我还没有在文本选取中包含错误检查,我希望尽快了解这一点。 
谢谢
吉特
 
编辑:测试文件Test1。dwg是1mb,所以我将其内容复制到一个新的(空白)文件中,名为Test2。图纸和附件。现在(1)正在工作,但(2)仍然不工作。
测试2.dwg
回复

使用道具 举报

2

主题

22

帖子

20

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 12:30:31 | 显示全部楼层
编辑:请忽略。
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 12:33:40 | 显示全部楼层
我很抱歉
我可以稍后再看你的问题
现在我工作很忙
 
~'J'~
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:10 , Processed in 0.521629 second(s), 72 queries .

© 2020-2025 乐筑天下

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