乐筑天下

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

[编程交流] te如何在xr中获取块信息

[复制链接]

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 14:22:49 | 显示全部楼层 |阅读模式
你好
 
为了确定图形中块的信息,例如块的名称,我使用以下代码:
 
  1. (cdr (assoc 2 (entget (car (entsel)))))

 
它很好地返回了块名。
 
当块位于外部参照中时,当我想要获取块名称时,这似乎不起作用。
 
可以做到吗?如果可以,如何做到?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:29:06 | 显示全部楼层
我不知道为什么你会失败,应该行得通
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 14:36:32 | 显示全部楼层
然后选择整个外部参照的插入点。
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 14:40:41 | 显示全部楼层
从外部参照中的各个块中,我需要获得插入点和旋转角度。所以我可以计算出一个距离反方向15mm的点。
 
即,当选择旋转0处插入点为0,0的块(称为点pt1)时,我需要在(极性插入点块pi 15)处“设置q pt2”。
所以在相反的方向上偏移15mm。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:43:06 | 显示全部楼层
插入点为DXF 10,旋转为DXF 50代码。
 
或者,可以通过Visual LISP方法获得这些值。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:46:22 | 显示全部楼层
因此,为了理解你的观点~
 
希望这有帮助
 
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 14:53:11 | 显示全部楼层
嗨,李,
 
我最初有这个代码(在互联网上的某个地方找到):
 
  1. (defun C:test ()
  2. (setq TOTAL 0.)
  3. (setvar "OSMODE" 0)
  4. (print "Please Select blocks")
  5. (setq SSPICK (ssget))
  6. (setq SSAMT (sslength SSPICK))
  7. (setq INDEX 0.)
  8. ;
  9. (while (< INDEX SSAMT); Selection Set Loop
  10. (setq ENT-NO (ssname SSPICK INDEX))
  11. (setq DXF (entget ENT-NO))
  12. (setq XYZ (cdr (assoc 10 DXF)))
  13. (command "insert" "TESTBLOCK" XYZ 1 "" "") ; TESTBLOCK = Yes...
  14. (princ)
  15. (setq INDEX (+ INDEX 1.))
  16. (princ INDEX) (print ENT-NO)
  17. ); end while
  18. (princ)
  19. )

 
首先,你可能想解释一些问题,因为我不知道代码是从哪里来的,所以我不能在那里问。
1.我看到:TOTAL=变量:在开始时设置为0。-->点(.)是什么在那里做什么?
2、Osmode关闭
3、提出行动,然后(setq SSPICK(ssget))。
4.SSPICK=SSPICK变量中放入选定的块/事物
5.(setq SSAMT(sslength SSPICK))=这是“计数”放置在SSPICK中的块/项目是否正确?
把一个变量设为零,再加一个点。。。为什么?
7.While function->只要索引小于ssamt,它就会在(While….和)之间循环;结束,对吗?
8、这三行是不可得的:
 
  1. (setq ENT-NO (ssname SSPICK INDEX))

它将变量ENT-NO设置为(..?)
 
  1. (setq DXF (entget ENT-NO))

它将Variable DXF设置为(entget ENT-NO)
 
  1. (setq XYZ (cdr (assoc 10 DXF)))

XYZ是从(cdr(assoc 10 dxf))中获得的点,它是插入点。
 
9.(setq指数(+指数1))这里1被添加到索引。。。
10.然后索引和ENT-NO打印在命令行上
11.如果索引小于ssamt,则返回函数的else端。
 
 
我无法从头开始创建上述lisp,但我想学习阅读代码是学习过程的一部分。
 
上面的代码适用于我需要做的事情:将一个块放置在另一个块插入点上。
它不适用于我必须修改(尝试)的外部参照中的块。
 
您的代码可能有帮助:
 
  1. (polar
  2. (cdr (assoc 10 (entget <ename>)))  ; Insertion Point
  3. (+ pi
  4.    (cdr (assoc 50 (entget <ename>)))  ; Rotation
  5. ) ; End Addition
  6. 15
  7. ) ; end polar

 
但如何将两者结合起来呢?
你能帮我开始吗?
 
  1. (defun C:test ()
  2. (setvar "OSMODE" 0)
  3. (setq TOTAL 0.)
  4. (print "Please Select blocks")
  5. (setq SSPICK (ssget))
  6.         SSAMT (sslength SSPICK)
  7.         INDEX 0.)
  8. )
  9. (while (< INDEX SSAMT); Selection Set Loop
  10. (setq ENT-NO (ssname SSPICK INDEX)
  11.         DXF (entget ENT-NO)
  12.         XYZ (cdr (assoc 10 DXF))
  13. )
  14. (command "insert" "TESTBLOCK" XYZ 1 "" "") ; TESTBLOCK = Yes...
  15. (princ)
  16. (setq INDEX (+ INDEX 1.))
  17. (princ INDEX) (print ENT-NO)
  18. ); end while
  19. (princ)
  20. )

 
提前通知。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:57:22 | 显示全部楼层
 
点是使其成为实数而不是整数,因为整数有32767个极限。
 
 
 
这是因为代码使用“命令”插入块
 
 
SSGET将仅为提示显示“选择对象”,因此用户已打印另一个提示。
 
 
对的
 
 
对的
 
 
同上。
 
 
对的
 
 
在由索引表示的索引处收集选择集中对象的实体名称。这在“ssname”下的Visual LISP帮助中有详细说明。
 
 
Entget是上面检索到的实体名称。
 
 
从entget列表中获取插入点。
 
 
对的
 
 
对的
 
 
正确,如果索引仍然小于元素数,它将继续循环查看集合中的每个元素。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:02:49 | 显示全部楼层
希望这能帮助你:
 
{未测试}
 
  1. (defun c:test  (/ *error* vl ov ss i bLst pt rot pt2)  ;; Always Localise the Variables!
  2. ;; Error Handler in case the user hits Esc
  3. (defun *error* (msg)
  4.    
  5.    (if ov (mapcar 'setvar vl ov)) ; reset Sys vars
  6.    
  7.    (princ (strcat "\n<< Error: " msg " >>")) ; Print Error Message
  8.    
  9.    (princ) ; Exit Cleanly
  10.    ) ; End Error Handler
  11. (setq vl '("CMDECHO" "OSMODE") ; Sys Var list
  12.       
  13.        ov (mapcar 'getvar vl)) ; Get Old values
  14. (mapcar 'setvar vl '(0 0)) ; Turn off CMDECHO & OSMODE
  15. (print "Please Select blocks...") ; Prompt
  16. (if  ; If a SelectionSet is picked
  17.    
  18.    (setq ss (ssget '((0 . "INSERT")))) ;; Filter for Blocks
  19.    (progn
  20.      (setq i (sslength ss))  ; get number of items in SelectionSet
  21.      (while (not (minusp (setq i (1- i)))) ; While i is not Negative
  22.        (setq bLst (entget (ssname ss i)))  ; get Block Entity
  23.        (setq pt (cdr (assoc 10 bLst))   ; Insertion Point
  24.             
  25.              rot (cdr (assoc 50 bLst))) ; Rotation
  26.        (setq pt2 (polar pt (+ rot pi) 15)) ; Define New point
  27.        (command "-insert" "testblock" pt2 "1." "1." "0.") ; Insert Block at new point
  28.        ) ; End While
  29.      ) ; End Progn
  30.    (princ "\n<!> No Blocks Selected <!>") ; Else no Blocks were Picked
  31.    ) ; end If
  32. (mapcar 'setvar vl ov) ; reset Sys Vars
  33. (princ) ; Exit Cleanly
  34. ) ; end function
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 15:06:22 | 显示全部楼层
李,
 
我仍然想知道,当可选择块位于外部参照中时,该例程是否可以工作。
 
你知道我的意思吗?
 
当块在实际图形中时,效果非常好,当它们在外部参照中时,使用外部参照的插入点。。。
 
我的lisp知识仍然很差。。。
非常感谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:05 , Processed in 0.429499 second(s), 72 queries .

© 2020-2025 乐筑天下

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