找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1052|回复: 13

[原创]:(原代码)保持参照块位置,改块插入点.不用转换矩阵的简便写法

[复制链接]
发表于 2004-10-7 15:39:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. ;| c:chbkins = 保持参照块位置,改块插入点(only for 平面块)-----------ok!!完成--------梦断江南.lxx.2004.10
  2. 支持:wcs,ucs, 不等比参照块.镜像块.
  3. 命令: chbkins
  4. |;
  5. (defun c:chbkins ( / *doc e p000 p1e p1 p2 p2x bkobj ss lst)
  6.   (while (not(and (princ "\n请选择一个块参照:")
  7.                   (setq s (ssget ":S:E" '((0 . "INSERT"))))
  8.   )))
  9.   (setq *doc (vla-get-activedocument(vlax-get-acad-object))
  10.         p000 (list 0. 0. 0.)
  11.         e    (ssname s 0)
  12.         bkn  (xdxf e 2)                                   ;;块名.
  13.         p1e  (xdxf e 10)                                  ;;块插入点wcs,dcs.
  14.         p1   (trans p1e e 1)                              ;;块插入点ucs.
  15.         p2   (getpoint p1 "\n选择新的块插入点:"))         ;;新插入点ucs.
  16.   (if p2
  17.     (progn
  18.       (setq p2x (x-inspttrans e (trans p2 1 0)) ;;块定义相对位移点.wcs.
  19.             bkobj (vla-item (vla-get-blocks *doc) bkn)    ;;取得块定义实体.
  20.             ss          (ssget "x" (list '(0 . "INSERT") (cons 2 (xdxf e 2))))
  21.       )
  22.       ;;重新定义块---改插入点.
  23.       (vlax-for i bkobj (setq lst (cons i lst)))
  24.       (mapcar '(lambda (x) (vla-move x (ptx p2x) (ptx p000))) lst);;ok!
  25.       ;;移动块参照,使其位置保持原状.
  26.       (mapcar '(lambda (x)(vla-move(x2o x)(ptx (xdxf x 10))(ptx (x-insptbak x p2x))))(xss2lst ss))
  27.     )
  28.   )
  29.   (princ)
  30. )
  31. ;;********************************************************************************
  32. ;;(x-inspttrans e pt) = 转换新插入点为原始块定义相对定位点wcs(位移向量)-----ok!
  33. (defun x-inspttrans (e pt / obj atts attv p ang xs ys zs ) ;;for wcs
  34.   (setq p000  (list 0. 0. 0.)
  35.         obj   (vlax-ename->vla-object e)
  36.         p     (xdxf e 10)
  37.         atts '(rotation xscalefactor yscalefactor zscalefactor)
  38.         attv  (mapcar '(lambda(x)(vlax-get obj x)) atts))
  39.   (mapcar 'set '(ang xs ys zs) attv)
  40.   (setq pt (polar p000 (- (angle p pt) ang) (distance p pt))
  41.         pt (mapcar '/ pt (list xs ys zs)))
  42. )
  43. ;;********************************************************************************
  44. ;;根据位移向量pt反求块原来的插入点wcs.------------------ok!
  45. (defun x-insptbak (e pt / obj atts attv p ang xs ys zs) ;;for wcs
  46.   (setq p000  (list 0. 0. 0.)
  47.         p     (xdxf e 10)
  48.         obj   (vlax-ename->vla-object e)
  49.         atts '(rotation xscalefactor yscalefactor zscalefactor)
  50.         attv  (mapcar '(lambda(x)(vlax-get obj x)) atts))
  51.   (mapcar 'set '(ang xs ys zs) attv)
  52.   (setq pt (mapcar '* pt (list xs ys zs))
  53.         pt (polar p (+ (angle p000 pt) ang) (distance p000 pt)))
  54. )
  55. ;; 点转换为 vla点.
  56. (defun ptx (pt)
  57.   (if (= (type pt) 'variant)
  58.     pt
  59.     (vlax-3d-point pt)
  60.   )
  61. )
  62. ;; 取得实体dxf值.
  63. (defun xdxf (e id)
  64.   (cdr(assoc id (entget e)))
  65. )
  66. ;;(xss2lst ss) = 选集实体名列表.
  67. (defun xss2lst (ss / i lst)
  68.   (setq i -1)
  69.   (while (setq e (ssname ss (setq i (1+ i))))
  70.     (setq lst (cons (xdxf e -1) lst))
  71.   )(reverse lst)
  72. )
  73. ;;
  74. (defun x2o (eobj)
  75.   (if (= 'ENAME (type eobj))
  76.     (vlax-ename->vla-object eobj)
  77.     eobj
  78.   )
  79. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-10-7 17:11:37 | 显示全部楼层
沒有你說的效果  8-(
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-7 18:17:53 | 显示全部楼层
目前还不支持实体z方向不是0,0,1的情况(dxf210)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-7 18:43:15 | 显示全部楼层
选择新的块插入点:; 错误: no function definition: X2O
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-7 19:31:12 | 显示全部楼层
漏了一个函数.已经补上
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-10-8 01:24:09 | 显示全部楼层
2004.10.10 新写的一个,虽然可以用,还不太满意。

http://www.xdcad.net/forum/showt ... 1379476#post1379476
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-8 10:39:04 | 显示全部楼层
没有测试------所以沒有通過    8-)
嵌套塊要保持位置----想一下都會頭痛
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-10-8 12:20:33 | 显示全部楼层
最初由 LUCAS 发布
[B]没有测试------所以沒有通過    8-)
嵌套塊要保持位置----想一下都會頭痛 [/B]

没有测试,只是说明一个思路,块定义内实体和普通实体一样编辑后更新块引用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-8 16:43:06 | 显示全部楼层
看得头都是大的!怎么办哦。学不会
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-1-16 15:35:22 | 显示全部楼层
程序很好,谢谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-27 13:13:22 | 显示全部楼层
楼主没有测试吧,附件中的lisp加载后,运行,命令行提示:no function definition: VLAX-GET-ACAD-OBJECT.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-21 10:20:31 | 显示全部楼层
谢谢
终于找到了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-21 11:00:25 | 显示全部楼层
11楼,你用之前加一个(vl-load-com)就可以了
呵呵 楼上各位前辈的程序待俺好好学习学习 测试一下再说
不过自2006版开始不是增加了动态块的功能吗 可以很方便的调整块的插入点了

哦 原来前辈们是04年发的帖子 才看到日期 惭愧 :)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

发表于 2008-12-29 21:02:54 | 显示全部楼层
嘿嘿,不错,偶尔可以用用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 13:05 , Processed in 0.230710 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表