乐筑天下

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

[编程交流] 更改插入点

[复制链接]

6

主题

14

帖子

8

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 18:53:04 | 显示全部楼层 |阅读模式
大家好。我正在用一个相当简单的lisp例程寻找一些帮助/建议。正如主题所说,我希望用户能够:
1.选择外部参照
2.选择第二个外部参照
3.更改第二个外部参照(插入点)的数字“10”dxf代码,以匹配第一个外部参照
 
我已经做了很多例行程序,但我想完善它,以防止用户拾取非外部参照实体或什么都没有。我已经玩了一些“while”和“if”语句,但我还没有掌握它们。
 
下面是我的代码和我的一些尝试,所以它还不是很好和整洁。该例程将在我们的办公室中使用,因此layerstate命令用于解决公司标准层的使用和问题。
 
谢谢你的帮助!
 
  1. (defun C:xer  (/ 1ent 1elist 1inspnt 2ent 2elist temp)
  2. (acet-error-init
  3. (list (list "cmdecho" 0
  4.             "osmode" (getvar "osmode")
  5.      "clayer" (getvar "clayer")
  6.      "attdia" (getvar "attdia")
  7.          );list
  8.       T
  9. );list
  10. );acet-error-init
  11. (layerstate-save "temp" 239 nil)
  12.   
  13. (setq 1ent (entsel "\nSelect the source XREF with the desired insertion point:  "))
  14.      (setq 1elist(entget (car 1ent)))
  15.      (setq 1inspnt (cdr (assoc 10 1elist)))
  16. (setq 1nestent (nentselp (cadr 1ent)))
  17. (setq 1nestlist (entget (car 1nestent)))
  18. (setq 1nentlay (cdr (assoc 8 1nestlist)))
  19. (if (vl-string-search "|" 1nentlay)
  20.    (alert "yeah!")    (alert "Object selected is not an xref. Please try again."))
  21.    (setq 2ent (entsel "\nSelect the destination XREF to be moved:  "))
  22.      (setq 2elist (entget 2ent))
  23.    
  24.      
  25.      
  26.      (command ".layer" "unlock" "*" "")
  27.        
  28. (setq 2elist (subst (cons 10 1inspnt)(assoc 10 2elist) 2elist))
  29. (entmod 2elist)
  30. (entupd 2ent)
  31. (layerstate-restore "temp")
  32. (layerstate-delete "temp")
  33. (command ".regenall")
  34. (setvar "CLAYER" CLay)
  35. (setvar "OSMODE" OMode)
  36. (setvar "CMDECHO" CEcho)
  37. (setvar "ATTDIA" ATTDIAmode)
  38. (acet-error-restore)
  39. (princ)
  40. )
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:09:09 | 显示全部楼层
试试这个。不是我的代码。
 
  1. (defun c:Mxr ( / elst matrix target)
  2. (if
  3. (and
  4. (setq elst (nentselp "\nSelect Source Xref. "))
  5. (setq matrix (caddr elst))
  6. (setq target (car (entsel "\nSelect Target Xref. ")))
  7. (setq target (vlax-ename->vla-object target))
  8. )
  9. (progn
  10. (vlax-put target 'InsertionPoint '(0.0 0.0 0.0))
  11. (vlax-put target 'XScaleFactor 1.0)
  12. (vlax-put target 'YScaleFactor 1.0)
  13. (vlax-put target 'ZScaleFactor 1.0)
  14. (vlax-put target 'Rotation 0.0)
  15. (vla-TransformBy target (vlax-tmatrix matrix))
  16. )
  17. )
  18. (princ)
  19. )
  20. (c:mxr)
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:22:40 | 显示全部楼层
更简单一点:
  1. (defun c:xer ( / source matrix target)
  2. (if
  3. (and
  4. (setq source (car (entsel "\nSelect Source Xref. ")))
  5. (setq source (vlax-ename->vla-object source))
  6. (setq target (car (entsel "\nSelect Target Xref. ")))
  7. (setq target (vlax-ename->vla-object target))
  8. )
  9. (vla-put-insertionpoint target (vla-get-insertionpoint source))
  10. )
  11. (princ)
  12. )
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:32:58 | 显示全部楼层
这不包括比例和旋转,但正确吗?
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:39:11 | 显示全部楼层
如果要检查某个对象是否为外部参照,可以在其中进行另一个检查,如下所示:
  1. (vlax-property-available-p source 'path)
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:45:21 | 显示全部楼层
 
没有,但OP没有要求旋转或缩放,只要求插入点。
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:54:36 | 显示全部楼层
没错,这部作品是从2011年开始的。。。死者在我们中间行走。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:27 , Processed in 0.525895 second(s), 77 queries .

© 2020-2025 乐筑天下

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