乐筑天下

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

[编程交流] 放置数字、周长和

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:11:53 | 显示全部楼层 |阅读模式
我有一个lisp例程,将多行文字放置在多边形上,以获得房间名称及其面积,如下所示。在这个例程中,我也想添加要显示的周长。我已经尝试了很多方法来完成日常工作,不幸的是,它不起作用。你能帮我显示多边形或多段线的周长以及它们的数字和面积吗。非常感谢你的帮助。
 
  1. ;        
  2. (defun drtxt (/ rn tx ls vl lt ht lb hb nr pt)
  3. (setq tx (strcat "Area: "
  4.       (rtos (/ (getvar "area") 1000000) 2 2)
  5.       " m2"
  6.       )         
  7.       rn (getstring "\nRoom Name: ")
  8. )
  9. (setq ls (list (cons 1 tx))
  10.      vl (textbox ls)
  11.      vl (cadr vl)
  12.      lt (car vl)
  13.      ht (cadr vl)
  14.      vl (grread T)
  15.      nr (car vl)
  16.      pt (cadr vl)
  17. )
  18. (princ "\nInsert Point: ")
  19. (while (/= nr 3)
  20.    (command "redraw")
  21.    (grdraw pt (setq pt (polar pt 0 lt)) 7)
  22.    (grdraw pt (setq pt (polar pt (* pi 0.5) ht)) 7)
  23.    (grdraw pt (setq pt (polar pt pi lt)) 7)
  24.    (grdraw pt (polar pt (* pi 1.5) ht) 7)
  25.    (setq vl (grread T)
  26.      nr (car vl)
  27.      pt (cadr vl)
  28.    )
  29.    ) ;end while function
  30. (command "-mtext" pt "w" 0 rn tx "")
  31. (redraw)
  32. ) ; end drtxt function
  33. (defun c:pla ()
  34. (setvar "cmdecho" 0)
  35. (while (setq et
  36.       (car
  37.             (entsel "\nSelect polyline: ")
  38.         ) ;end car function
  39.     ) ;end setq function
  40. (command "area" "o" et)
  41. (drtxt)
  42. ) ; wnd while funtion
  43. (setvar "cmdecho" 1)
  44. (princ)
  45. ) ; end c:pla function
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 17:29:16 | 显示全部楼层
我没有测试,但你可以试试这个
  1. ;        
  2. (defun drtxt (/ rn tx ls vl lt ht lb hb nr pt)
  3. (setq tx (strcat "Area: "
  4.       (rtos (/ (getvar "area") 1000000) 2 2)
  5.       " m2"
  6.       )         
  7.       rn (getstring "\nRoom Name: ")
  8.    [color=Red]per (strcat "Perimeter: " (rtos (/ (getvar "perimeter") 1000) 2 2) " m")[/color]
  9. )
  10. (setq ls (list (cons 1 tx))
  11.      vl (textbox ls)
  12.      vl (cadr vl)
  13.      lt (car vl)
  14.      ht (cadr vl)
  15.      vl (grread T)
  16.      nr (car vl)
  17.      pt (cadr vl)
  18. )
  19. (princ "\nInsert Point: ")
  20. (while (/= nr 3)
  21.    (command "redraw")
  22.    (grdraw pt (setq pt (polar pt 0 lt)) 7)
  23.    (grdraw pt (setq pt (polar pt (* pi 0.5) ht)) 7)
  24.    (grdraw pt (setq pt (polar pt pi lt)) 7)
  25.    (grdraw pt (polar pt (* pi 1.5) ht) 7)
  26.    (setq vl (grread T)
  27.      nr (car vl)
  28.      pt (cadr vl)
  29.    )
  30.    ) ;end while function
  31. (command "-mtext" pt "w" 0 rn tx[color=Red] per[/color] "")
  32. (redraw)
  33. ) ; end drtxt function
  34. (defun c:pla ()
  35. (setvar "cmdecho" 0)
  36. (while (setq et
  37.       (car
  38.             (entsel "\nSelect polyline: ")
  39.         ) ;end car function
  40.     ) ;end setq function
  41. (command "area" "o" et)
  42. (drtxt)
  43. ) ; wnd while funtion
  44. (setvar "cmdecho" 1)
  45. (princ)
  46. ) ; end c:pla function
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 17:33:06 | 显示全部楼层
这里有一种方法。
 
  1. (defun drtxt (ar px rn / ls vl lt ht lb hb nr pt pr tx)
  2. ;;;  (setq tx (strcat "Area: "
  3. ;;;       (rtos (/ (getvar "area") 1000000) 2 2)
  4. ;;;       " m2"
  5. ;;;       )         
  6. ;;;       rn (getstring "\nRoom Name: ")
  7. ;;;              
  8. ;;;
  9. ;;;  )
  10. (setq tx (strcat (rtos (/ ar 1000000.0) 2 2) " m2")
  11. pr (strcat "P= " (rtos px 2 2))
  12. ls (list (cons 1 tx))
  13.        vl (textbox ls)
  14.        vl (cadr vl)
  15.        lt (car vl)
  16.        ht (cadr vl)
  17.        vl (grread T)
  18.        nr (car vl)
  19.        pt (cadr vl)
  20. )
  21. (princ "\nInsert Point: ")
  22. (while (/= nr 3)
  23.    (command "redraw")
  24.    (grdraw pt (setq pt (polar pt 0 lt)) 7)
  25.    (grdraw pt (setq pt (polar pt (* pi 0.5) ht)) 7)
  26.    (grdraw pt (setq pt (polar pt pi lt)) 7)
  27.    (grdraw pt (polar pt (* pi 1.5) ht) 7)
  28.    (setq vl (grread T)
  29.      nr (car vl)
  30.      pt (cadr vl)
  31.    )
  32.    ) ;end while function
  33. (command "-mtext" pt "w" 0 rn tx pr "")
  34. (redraw)
  35. ) ; end drtxt function
  36. (defun c:pla ( / et obj ar px rn)
  37. (vl-load-com)
  38. (setvar "cmdecho" 0)
  39. (while (setq et
  40.       (car
  41.             (entsel "\nSelect polyline: ")
  42.         ) ;end car function
  43.     ) ;end setq function
  44. (setq obj (vlax-ename->vla-object et))
  45. (setq ar (vla-get-Area obj))
  46. (setq px (vla-get-Length obj))
  47. (setq rn (getstring "\nRoom Name: "))
  48. ;(command "area" "o" et)
  49. (drtxt ar px rn)
  50. ) ; wnd while funtion
  51. (setvar "cmdecho" 1)
  52. (princ)
  53. )
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:46:57 | 显示全部楼层
非常感谢,它工作得很好!现在我知道我哪里做错了。我需要更加努力地学习。
 
 
 
 
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 17:58:29 | 显示全部楼层
非常感谢,它工作得很好!现在我知道我哪里做错了。我需要更加努力地学习。
 
 
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 18:05:52 | 显示全部楼层
我先试试你的习惯,一切都很好。非常感谢你
 
 
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 18:15:49 | 显示全部楼层
我一直在尝试回复你的消息,但我的消息会转到不同的回复。我一开始试过你的,效果很好。再次感谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 15:51 , Processed in 0.518571 second(s), 66 queries .

© 2020-2025 乐筑天下

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