乐筑天下

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

[编程交流] Lisp获取pline的长度

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:11:47 | 显示全部楼层 |阅读模式
尊敬的lisp advanced用户:,
请慷慨地帮助我实现以下操作的自动化
步骤1:用户选择多段线
步骤2:用户选择维度
步骤3:用户插入2个值:值1和值2
第4步:当4个不同的单独文本元素出现时,用户选择一个点:
值1;多边形长度;(尺寸测量值/值2)+1;5*线路长度*(值1)^2
 
文本的颜色应取决于值1,因此具有相同值1的文本应具有相同的颜色。
 
不幸的是,我没有在论坛上找到任何解决方案。这个lisp可能会有所帮助http://www.cadtutor.net/forum/showthread.php?36659-lisp将带有pline leangth的文本放在第2行/第2页上方。谢谢李。
提前非常感谢
回复

使用道具 举报

15

主题

315

帖子

361

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 16:35:28 | 显示全部楼层
我不确定你的值1和颜色是什么意思。例如,您的意思是:如果value1=10=>文本为红色;值1=90=>绿色。。。?
 
 
值1是整数;value2是浮点吗?
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:44:51 | 显示全部楼层
 
尊敬的Emmanuel Delay,
是的,我的意思是,如果value1=10=>文本为红色;值1=90=>绿色;
值1只能是6-8-10-12-14-16-18-20-22-25-28-32-36-40,值2可以是任何数字。
此外,(dim测量)/值2+1应四舍五入到最接近的最大整数
提前谢谢你
回复

使用道具 举报

15

主题

315

帖子

361

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 16:58:12 | 显示全部楼层
我想我明白了。请检查这是否是要求。
 
 
缺少任何功能?
 
我并没有做所有的检查,比如value1的可能值列表
 
命令为“P”,请随意更改此命令,以及代码顶部的设置
 
 
哦,是的,^2,这只是价值的动力吗?否则您需要更改(expt)的位置
 
  1. ;; [url]http://www.cadtutor.net/forum/showthread.php?101221-Lisp-to-get-length-of-a-pline-and-dim-value-and-put-it-to-the-several-text-elements[/url]
  2. ;; step 1: User select the polyline
  3. ;; step 2: User select the dimension
  4. ;; step 3: User insert 2 values: value 1 and value 2
  5. ;; step 4: User pick a point were the 4 different separate text elements appears:
  6. ;;    value 1; polyine length; (dimension measurement value/value2)+1; 5*pline length*(value1)^2
  7. ;;    the color of the text should depend from value1, so the text with the same value1 should have the same color.
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9. ;; @see [url]https://www.theswamp.org/index.php?topic=32148.0[/url]
  10. (defun Text (pt hgt str)
  11. (entmakex (list (cons 0 "TEXT")
  12.                  (cons 10  pt)
  13.                  (cons 40 hgt)
  14.                  (cons 1  str))))
  15. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  16. ;; settings
  17. (setq
  18. text_height 10
  19. text_spacing 14  ;; vertical distance between the lines
  20. )
  21. (defun c:p ( / ss_pline pline_length ss_dim dim_measurement entitylist value1 value2 pt text1 text2 text3 text4 val3)
  22. (vl-load-com)
  23. ;; step 1: User select the polyline
  24. (princ "\nSelect Polyline: ")
  25. (setq ss_pline (ssget  ":S"  (list (cons 0 "LWPOLYLINE")) ))
  26. (setq pline_length (vla-get-length (vlax-ename->vla-object (ssname ss_pline 0))))
  27. ;; step 2: User select the dimension
  28. (princ "\nSelect Dim: ")
  29. (setq ss_dim (ssget  ":S" (list (cons 0 "DIMENSION")) ))     ;;   
  30. (setq entitylist (cdr (entget (ssname ss_dim 0))))
  31. (setq dim_measurement (cdr (assoc 42 entitylist) ))
  32. ;; step 3: User insert 2 values: value 1 and value 2
  33. (setq
  34.    value1 (getint "\nValue1 (int): ")
  35.    value2 (getreal "\nValue2 (float): ")
  36. )
  37. ;; step 4: User pick a point were the 4 different separate text elements appears:
  38. (setq pt (getpoint "\nGet Point: "))
  39. ;; Make text
  40.    ;; value 1
  41. (setq text1 (Text pt text_height (itoa value1)))
  42.    ;; polyine length
  43. (setq text2 (Text (list (nth 0 pt) (- (nth 1 pt) text_spacing )) text_height (rtos pline_length)) )
  44.    ;; (dimension measurement value/value2)+1
  45. (setq val3 (fix (+ 0.5 (+ 1 (/ (float dim_measurement) value2))) ))
  46. (setq text3 (Text (list (nth 0 pt) (- (nth 1 pt) (* 2 text_spacing) )) text_height (rtos val3)) )
  47.    ;; 5*pline length*(value1)^2
  48. (setq val4 (* (* 5 pline_length) (expt value1 2) ) )
  49. (setq text4 (Text (list (nth 0 pt) (- (nth 1 pt) (* 3 text_spacing) )) text_height (rtos val4)) )
  50.    
  51.    ;; the color of the text should depend from value1
  52. (vla-put-Color (vlax-ename->vla-object text1) value1)
  53. (vla-put-Color (vlax-ename->vla-object text2) value1)
  54. (vla-put-Color (vlax-ename->vla-object text3) value1)
  55. (vla-put-Color (vlax-ename->vla-object text4) value1)
  56. )
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:04:41 | 显示全部楼层
尊敬的Emmanuel Delay,
非常感谢你!你的技能和知识都很棒!
该程序运行良好。
我可以问你一些小更新吗
1、将文本元素排成一行
2、增加第5个元素:val4*val3
3.使程序记住val1和val2的最后值
再次感谢您的时间和努力,
格言
回复

使用道具 举报

15

主题

315

帖子

361

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 17:18:04 | 显示全部楼层

 
 
我明天会试着做这件事。
不是问题。
 
 
3: 当客户端按下enter键时,将设置上一个值。
我有一个测试程序,显示了原理。顺便说一句,如果有人用更优雅的方式做这件事,请告诉我。
问题是我必须检查变量是字符串还是数字。。。这需要一些时间
 
 
  1. ;; global vars, these will remember the last chosen values
  2. (setq
  3. pickvalue1 0
  4. pickvalue2 0
  5. )
  6. ;;
  7. (defun c:test ( / value1 value2 promprstring )
  8. (setq promprstring (strcat
  9.    "\nEnter Value 1 <" (rtos pickvalue1) ">: "
  10. ))
  11. (setq value1 (getstring promprstring))
  12. (if (= value1 "")
  13.    (progn)
  14.    (setq pickvalue1 (atof value1))
  15. )
  16. (setq promprstring (strcat
  17.    "\nEnter Value 2 <" (rtos pickvalue2) ">: "
  18. ))
  19. (setq value2 (getstring promprstring))
  20. (if (= value2 "")
  21.    (progn)
  22.    (setq pickvalue2 (atof value2))
  23. )
  24. (princ "\n")
  25. (princ pickvalue1)
  26. (princ " - ")
  27. (princ pickvalue2)
  28. (princ)
  29. )

 
 
1: 列的好处是:您不需要知道文本元素的长度(大小)。你是一排的。关于每个元素的字体大小和最大宽度有什么想法吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:08 , Processed in 0.929453 second(s), 75 queries .

© 2020-2025 乐筑天下

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