乐筑天下

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

[编程交流] buble上的高度

[复制链接]

20

主题

94

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 16:56:01 | 显示全部楼层 |阅读模式
你好,
 
我想自动将高度值放入块的文本字符串中
 
该高度值将是P1和P2的z值之间的差值。
 
所以这个lisp应该像这样工作:
 
第一次单击=块的基点
 
第二次点击=P1
 
第三次点击=P2
 
一个月的go Tharwat非常有帮助(再次感谢),为我写了这封信:
 
 
  1. (defun c:spou  (/ sp p)
  2. ;; Tharwat 15.Feb.2016 ;;
  3. (setq sp
  4.         (vlax-get (vla-get-activelayout
  5.                     (vla-get-ActiveDocument (vlax-get-acad-object)))
  6.                   'Block)
  7.        )
  8. (if (tblsearch "BLOCK" "spotu")
  9.    (while (setq p (getpoint "\nSpecify point :"))
  10.      (vla-put-textstring
  11.        (car (vlax-invoke
  12.               (vla-insertblock
  13.                 sp
  14.                 (vlax-3d-point p)
  15.                 "spotu"
  16.                 1.0
  17.                 1.0
  18.                 1.0
  19.                 0.0)
  20.               'getattributes))
  21.       
  22. (rtos (/ (cadr p) 1000.) 2 2)
  23.        )
  24.      )
  25.    )
  26. (princ)
  27. )(vl-load-com)

 
 
也许这是一个很好的起点。
 
 
泡图纸
 
如果有人能帮我,我会很高兴的
回复

使用道具 举报

2

主题

261

帖子

20

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 17:06:06 | 显示全部楼层
确定要成为属性?
你能用文字吗?还是多行文字?
回复

使用道具 举报

2

主题

261

帖子

20

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 17:07:16 | 显示全部楼层
这里有相似之处。
http://www.cadtutor.net/forum/showthread.php?98683-自动创建块宏&p=672657#post672657
回复

使用道具 举报

20

主题

94

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 17:14:49 | 显示全部楼层
 
谢谢你的回复
 
我需要一些东西,把高度值(zP1-zP2)从2点击2点,把椭圆周围的数字。如果这是一个块,则属性块或mtex+椭圆将是相同的。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:19:28 | 显示全部楼层
  1. (defun C:test ( / e o p d )
  2. (setvar 'errno 0)
  3. (and
  4.         vlax-get-acad-object
  5.         (while (/= 52 (getvar 'errno))
  6.                 (setq e (car (nentsel "\nSelect text to fill: ")))
  7.                 (cond
  8.                         ((= 7 (getvar 'errno))
  9.                                 (princ "\nMissed, try again.") (setvar 'errno 0)
  10.                         )
  11.                         ((and e (not (vlax-property-available-p (setq o (vlax-ename->vla-object e)) 'TextString)))
  12.                                 (princ "\nThis is not a text object.") (setq e nil)
  13.                         )
  14.                         ((and o (eq (vla-get-Lock (vla-item (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-Layer o))) :vlax-true))
  15.                                 (princ "\nThis object is on a locked layer.") (setq e nil)
  16.                         )
  17.                         (e
  18.                                 (if
  19.                                         (and
  20.                                                 (setq p (getpoint "\nSpecify first point: "))
  21.                                                 (cadr (setq p (cons p (list (getpoint "\nSpecify second point: " p)))))
  22.                                                 (setq d (rtos (abs (apply '- (mapcar 'last (mapcar '(lambda (x) (trans x 1 0)) p))))))
  23.                                         )
  24.                                         (cond
  25.                                                 ( (= "ATTDEF" (cdr (assoc 0 (entget e)))) (vla-put-TagString o d) )
  26.                                                 ( T (vla-put-TextString o d) )
  27.                                         )
  28.                                 )
  29.                                 (setvar 'errno 52)
  30.                         )
  31.                         (T nil)
  32.                 )
  33.         )
  34. )
  35. (princ)
  36. );| defun |; (or vlax-get-acad-object (vl-load-com)) (princ)

编辑:该死的,我没有注意到Tharwat的代码,你想在填充该属性之前插入块。
回复

使用道具 举报

20

主题

94

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 17:28:03 | 显示全部楼层
这很有效。当我选择块气泡时。dwg,此lisp更改值。非常感谢。你帮了我很大的忙。
 
我想问你是否可能:
 
1、第一次点击->插入块
 
2、在不使用单位的情况下,将精度限制在0.00
 
提前感谢
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:31:30 | 显示全部楼层
我建议您反转输入:
-首先指定距离的2个点
-然后插入块
 
  1. (defun C:test ( / *error* p ar Atts a)
  2. (defun *error* (m) (and ar (setvar 'attreq ar)) (print m) (princ))
  3. (redraw)
  4. (and
  5.         vlax-get-acad-object
  6.         (tblsearch "BLOCK" "spotu")
  7.         (last (setq p (list (getpoint "\nSpecify first point: "))))
  8.         (last (setq p (append p (list (getpoint "\nSpecify second point: " (car p))))))
  9.         (not (apply 'grdraw (append p (list 3 7))))
  10.         (last (setq p (append p (list (getpoint "\nSpecify insertion point :")))))       
  11.         (or
  12.                 (= 0 (getvar 'attreq))
  13.                 (and (setq ar (getvar 'attreq)) (setvar 'attreq 0))
  14.         )
  15.         (setq Atts
  16.                 (vlax-invoke
  17.                         (vla-InsertBlock
  18.                                 (vlax-get (vla-get-activelayout (vla-get-ActiveDocument (vlax-get-acad-object))) 'Block)
  19.                                 (vlax-3D-point (last p))
  20.                                 "spotu"
  21.                                 1.0
  22.                                 1.0
  23.                                 1.0
  24.                                 0.0
  25.                         )
  26.                         'GetAttributes
  27.                 )
  28.         )
  29.         (setvar 'attreq (if ar ar 0))
  30.         (vl-some '(lambda (x) (and (= (vla-get-TagString x) "22.22") (setq a x))) Atts)
  31.         (vla-put-TextString
  32.                 a
  33.                 (rtos
  34.                         (apply '- (mapcar 'last (mapcar '(lambda (x) (trans x 1 0)) (cdr (reverse p)))))
  35.                         2 2
  36.                 )
  37.         )
  38. )
  39. (redraw)
  40. (princ)
  41. );| defun |; (or vlax-get-acad-object (vl-load-com)) (princ)

所以你不会留下未填充的属性。
回复

使用道具 举报

20

主题

94

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 17:37:14 | 显示全部楼层
这是我想要的工作。
 
非常感谢你。
回复

使用道具 举报

20

主题

94

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 17:39:49 | 显示全部楼层
 
我能以米为单位得到结果吗?现在和我通常的工作单位一样是毫微米级的。
 
在上一个lisp中,转换字符串是
  1. (/       1000.)
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:46:58 | 显示全部楼层
 
只需更改此行:
  1. (rtos
  2. (apply '- (mapcar 'last (mapcar '(lambda (x) (trans x 1 0)) (cdr (reverse p)))))
  3. 2 2
  4. )

收件人:
  1. (rtos
  2. (/ (apply '- (mapcar 'last (mapcar '(lambda (x) (trans x 1 0)) (cdr (reverse p))))) 1000.)
  3. 2 2
  4. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 13:00 , Processed in 0.384648 second(s), 72 queries .

© 2020-2025 乐筑天下

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