乐筑天下

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

[编程交流] 为块指定值

[复制链接]

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 06:44:11 | 显示全部楼层 |阅读模式
你好
 
我想有一个lisp计算流量的灌溉喷头在点击。
 
图形中有不同的块。我想将0.23分配给块1,0.12分配给块2,0.06分配给块3。
 
选择完块后,所需的lisp是按块1的数量x 0.23+块2的数量x 0.12+块3的数量x 0.06计算流量。
 
如果有人能用Autolisp写这篇文章,我将不胜感激。
 
谢谢,如果解释不清楚,请告诉我
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:51:41 | 显示全部楼层
欢迎来到Cadtutor
 
这是否意味着您有块(非属性块)并且您想要计算选定块中的值?
 
如果没有,请更具体地说明你的日常目标。
 
塔瓦特
回复

使用道具 举报

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 06:54:01 | 显示全部楼层
感谢您的及时回复。
 
我有没有属性块。
 
我在下面的链接中有类似的线程
 
http://www.cadtutor.net/forum/showthread.php?54111-数据提取和突出显示=灌溉
 
我正在为没有属性的块寻找相同的属性。
 
再次感谢,
 
Suriwaits。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:58:07 | 显示全部楼层
您想在文本或警报消息中显示这些值吗?
回复

使用道具 举报

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:06:09 | 显示全部楼层
警报信息将非常好。。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:09:19 | 显示全部楼层
现在试试这个草稿。。。
 
  1. (defun c:Test (/ *error* IfBlockhasSingleTextObject _sum j ss i sn l)
  2. ;;--- Tharwat 31. March, 2013 ---;;
  3. (defun *error* (msg)
  4.    (princ
  5.      "\n*Cancelled by user or by coincidence ,Nothings more*"
  6.    )
  7. )
  8. (defun IfBlockhasSingleTextObject (e / i)
  9.    (setq i 0)
  10.    (setq e (tblobjname "BLOCK" (cdr (assoc 2 (entget e)))))
  11.    (while (and    (setq e (entnext e))
  12.        (not (eq (cdr (assoc 0 (entget e))) "SEQEND"))
  13.       )
  14.      (if (wcmatch (cdr (assoc 0 (entget e))) "*TEXT")
  15.    (setq i (1+ i))
  16.      )
  17.    )
  18.    i
  19. )
  20. (defun _sum (en / sm)
  21.    (setq sm 0.)
  22.    (setq en (tblobjname "BLOCK" (cdr (assoc 2 (entget en)))))
  23.    (while (and    (setq en (entnext en))
  24.        (not (eq (cdr (assoc 0 (entget en))) "SEQEND"))
  25.       )
  26.      (if (and (wcmatch (cdr (assoc 0 (entget en))) "*TEXT")
  27.           (numberp (read (cdr (assoc 1 (entget en)))))
  28.      )
  29.    (setq sm (+ (read (cdr (assoc 1 (entget en)))) sm))
  30.      )
  31.    )
  32.    sm
  33. )
  34. (if (setq j  0.
  35.        ss (ssget "_:L" '((0 . "INSERT")))
  36.      )
  37.    (repeat (setq i (sslength ss))
  38.      (setq sn (ssname ss (setq i (1- i))))
  39.      (if (eq (IfBlockhasSingleTextObject sn) 1)
  40.    (setq j (+ (_sum sn) j))
  41.    (setq l (cons sn l))
  42.      )
  43.    )
  44. )
  45. (if l
  46.    (alert
  47.      (strcat "You have < "
  48.          (itoa (length l))
  49.          " > Blocks doesn't have or have more than one Text entity "
  50.      )
  51.    )
  52. )
  53. (if (> j 0)
  54.    (alert (strcat "Total Values : " (rtos j 2 4)))
  55. )
  56. (princ "\nWritten by Tharwat Al Shoufi")
  57. (princ)
  58. )
回复

使用道具 举报

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:13:27 | 显示全部楼层
尊敬的Tharwat先生:
 
看起来Lisp程序很好。谢谢
早上到办公室时,我会试试你的Lisp程序。
 
看到你的Lisp程序和我给你的输入不足,这不会像我想的那样奏效,
 
因为我的块中没有任何文本值或属性
 
比如说,
对于块名为BLK1的块,其值应为0.23
类似地,对于BLk2-0.12和BLK3-0.06(该值不一定要在图纸中显示,它应该取该值并乘以相应块的数量,将其与其他块x值相加,并显示为流是“总和的值”
 
我将使用你的程序张贴在这里,如果它是不可能的,我想如何。。
 
Suriwaits公司
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:19:12 | 显示全部楼层
如果您可以上传一个样例图形,那么就可以更清楚地了解代码的目标。
回复

使用道具 举报

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:23:00 | 显示全部楼层
尊敬的Tharwat先生:,
 
当块具有所需值的文本时,您的程序可以完美地工作。
 
在附图中,有3个不同的区块
下面是数量
15个180度
9个360度
2个90度
 
现在我想要程序来计算
 
15x0.12+9x0.23+2x0.06
 
0.12、0.23和0.06分别是180度、360度和90度灌溉喷嘴的流量。
喷雾器1-副本。图纸
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:27:33 | 显示全部楼层
如果我能治好你。
 
  1. (defun c:Test (/ *error* j ss i e)
  2. ;;--- Tharwat 31. March, 2013 ---;;
  3. (defun *error* (msg)
  4.    (princ
  5.      "\n*Cancelled by user or by coincidence ,Nothings more*"
  6.    )
  7. )
  8. (if (setq j  0.
  9.        ss (ssget "_:L" '((0 . "INSERT") (2 . "180DEG,360DEG,90DEG")))
  10.      )
  11.    (repeat (setq i (sslength ss))
  12.      (setq e (entget (ssname ss (setq i (1- i)))))
  13.      (cond ((eq (cdr (assoc 2 e)) "90DEG")
  14.         (setq j (+ 0.12 j))
  15.        )
  16.        ((eq (cdr (assoc 2 e)) "180DEG")
  17.         (setq j (+ 1.8 j))
  18.        )
  19.        (t
  20.         (eq (cdr (assoc 2 e)) "360DEG")
  21.         (setq j (+ 2.07 j))
  22.        )
  23.      )
  24.    )
  25. )
  26. (if (> j 0)
  27.    (alert (strcat "Total Values : " (rtos j 2 4)))
  28. )
  29. (princ)
  30. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-7 10:14 , Processed in 0.795934 second(s), 83 queries .

© 2020-2025 乐筑天下

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