找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4570|回复: 36

[求助] 插入块的动态拖动及旋转

[复制链接]

已领礼包: 146个

财富等级: 日进斗金

发表于 2013-6-14 21:32:37 | 显示全部楼层 |阅读模式

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

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

×
如图是天正插入块的示例?关键点在于可以先对块进行旋转,等动态操作,然后再选点插入。
百思不得解。
对块进行动态插入运用grread可以解决,但是先动态旋转不会。。
求解惑!
11.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-14 21:40:56 | 显示全部楼层
楼主,这个照以前的还少了不少操作,比如平齐,镜像。
既然说GRREAD动态插入可以解决,那你先把GRREAD动态插入块的代码贴论坛来吧,然后在这个代码的基础上开始讨论如何动态的缩放,平齐,镜像。

点评

下面代码可以实现块的动态插入 但是不能操作旋转 我试图在while循环里加入if ,但是动态就没用了。。 XD站长支下招。。 (while loop (setq code (grread T 8)) (cond ((= (car code) 5)  详情 回复 发表于 2013-6-15 09:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-14 22:38:35 | 显示全部楼层
XD老大说的对! 你先把GRREAD动态插入解决!

当你写完动态插入的代码,估计其他的你也都会了!

点评

动态插入写完了,旋转真不会加  详情 回复 发表于 2013-6-15 09:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

 楼主| 发表于 2013-6-15 09:02:17 | 显示全部楼层
本帖最后由 qianzj 于 2013-6-15 09:03 编辑
XDSoft 发表于 2013-6-14 21:40
楼主,这个照以前的还少了不少操作,比如平齐,镜像。
既然说GRREAD动态插入可以解决,那你先把GRREAD动态 ...



  1. (defun c:tt ()
  2.   (vl-load-com)
  3.   (setq pt (cadr (grread T 8)))
  4.   (vl-cmdf "-insert" "$Sanitary$00000468" pt "" "" "0")
  5.   (setq ss (entlast))
  6.   (setq loop T)
  7.   (while loop
  8.     (setq code (grread T 8))
  9.     (cond
  10.       ((= (car code) 5)
  11.        (vla-put-InsertionPoint
  12.          (vlax-ename->vla-object ss)
  13.          (vlax-3D-point (cadr code))
  14.        )
  15.       )
  16.       ((= (car code) 3)
  17.        (setq loop nil)
  18.       )
  19.       ((equal code '(2 27))
  20.        (progn
  21.          (setq ss (entlast))
  22.          (entdel ss)
  23.        )
  24.       )
  25.     )
  26.   )
  27. )

下面代码可以实现块的动态插入  但是不能操作旋转
我试图在while循环里加入if  ,但是动态就没用了。。  XD站长支下招。。
  (while loop
    (setq code (grread T 8))
    (cond
      ((= (car code) 5)
         (if (/= (getstring "[90度旋转(A):]") nil)
          (progn  (setq ang (/ pi 2))
           (vla-put-Rotation (vlax-ename->vla-object ss) ang)
                        )
         (vla-put-InsertionPoint
           (vlax-ename->vla-object ss)
           (vlax-3D-point (cadr code))
         )
       )

点评

之所以旋转后,动态没了,是因为你的拖动是基于命令INSERT的,他在循环体外,你用IF截断了INSERT。 你试试把 (vl-cmdf "-insert" "$Sanitary$00000468" pt "" "" "0") 放到循环体里面,IF 以后的代码里面,在加进  详情 回复 发表于 2013-6-15 09:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

 楼主| 发表于 2013-6-15 09:02:46 | 显示全部楼层
wowan1314 发表于 2013-6-14 22:38
XD老大说的对! 你先把GRREAD动态插入解决!

当你写完动态插入的代码,估计其他的你也都会了!

动态插入写完了,旋转真不会加:L

点评

你的旋转代码放错位置了!  详情 回复 发表于 2013-6-15 10:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-15 09:33:18 | 显示全部楼层
qianzj 发表于 2013-6-15 09:02
下面代码可以实现块的动态插入  但是不能操作旋转
我试图在while循环里加入if  ,但是动态就没用 ...

之所以旋转后,动态没了,是因为你的拖动是基于命令INSERT的,他在循环体外,你用IF截断了INSERT。

你试试把 (vl-cmdf "-insert" "$Sanitary$00000468" pt "" "" "0") 放到循环体里面,IF 以后的代码里面,在加进来它,看看拖动是否继续。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-15 10:15:11 | 显示全部楼层
qianzj 发表于 2013-6-15 09:02
动态插入写完了,旋转真不会加

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

使用道具 举报

发表于 2013-6-15 10:20:32 | 显示全部楼层
简单的写了个! 大概思路是这样的, 仅供你参考。
  1. (DEFUN c:T1 NIL
  2.   (SETQ ENT (CAR (ENTSEL "\n 选个块测试吧")))
  3.   (setq AA T)
  4.   (PRINC "\n 指定插入点或A旋转")
  5.   (while AA
  6.     (setq BB (grread T 8))
  7.     (cond
  8.       ((= (car BB) 5)
  9.        (SETQ PT (CADR BB))
  10.        (setq ent1 (entget ENT))
  11.        (entmod (subst (cons 10 pt) (assoc 10 ent1) ent1))
  12.       )
  13.       ((= (car BB) 3) (SETQ AA NIL))
  14.       ((equal BB '(2 97))
  15.        (COMMAND "ROTATE" ENT "" PT 90)
  16.       )
  17.       ((equal BB '(2 65))
  18.        (COMMAND "ROTATE" ENT "" PT 90)
  19.       )
  20.     )
  21.   )
  22. )
123.gif

点评

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

使用道具 举报

发表于 2013-6-15 10:22:55 | 显示全部楼层
其实LISP的GRREAD不支持捕捉是最大的遗憾! 因为你无法准确直观的定位。

点评

这点其实也不是重点,GRREAD可以模拟捕捉,最关键的是当物体插入点正好与块或者选择集内物体重合时候会捕捉自身,这是无法解决的,也是无法和ARX媲美的,你看CAD的粘贴,捕捉是不会傻到捕捉自己的地步的  详情 回复 发表于 2013-6-15 16:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

 楼主| 发表于 2013-6-15 13:12:25 | 显示全部楼层
经过1天努力,在各位帮助下终于弄出可带旋转的插入块,增加出错处理,并支持捕捉  ,左右,上下镜像可自行添加。
主要参考风之影grread大杀器,彩虹的动态粗糙度
  1. (defun c:tt ()
  2.   (vl-load-com)
  3.   (setq *error_bak* *error*)
  4.   (setq pt (cadr (grread T 8)))
  5.   (vl-cmdf "-insert" "块名" pt "" "" "0")
  6.   (setq ss (entlast))
  7.   (setq entdb (entget ss))
  8.   (setq ang 0)
  9.   (setq loop T)
  10.   (setq *error* *error*_non)
  11.   (while loop
  12.     (setq code (grread T 8))
  13.     (cond
  14.       ((or (= (car code) 5) (= (car code) 3))
  15.        (if (= (car code) 3)
  16.          (setq loop nil)
  17.        )
  18.        (setq sendpt (cadr code))
  19.        (vla-put-Visible (vlax-ename->vla-object ss) :vlax-false)
  20.        (setq endpt (osnap sendpt "endp,center,int,mid"))
  21.        (vla-put-Visible (vlax-ename->vla-object ss) :vlax-true)
  22.        (if endpt
  23.          (progn
  24.            (vla-put-InsertionPoint
  25.              (vlax-ename->vla-object ss)
  26.              (vlax-3D-point endpt)
  27.            )
  28.          )
  29.          (progn

  30.            (vla-put-InsertionPoint
  31.              (vlax-ename->vla-object ss)
  32.              (vlax-3D-point sendpt)
  33.            )
  34.          )
  35.        )
  36.       )
  37.       ((or (equal code '(2 65)) (equal code '(2 97)))
  38.        (progn
  39.          (setq ang (+ ang (* pi 0.5)))
  40.          (vla-put-Rotation (vlax-ename->vla-object ss) ang)
  41.        )
  42.       )
  43.     )
  44.   )
  45.   (setq *error* *error_bak*)
  46. )
  47. (defun *error*_non (msg)
  48.   (setq *error* *error_bak*)
  49.   (entdel (entlast))
  50. )

点评

先恭喜你了,看你介绍的两个名字好响亮,大杀器。。。能把相关帖子链接帖下方便后来人吗? 如果这论坛没,请转帖下,谢谢!  详情 回复 发表于 2013-6-15 14:31
dear sir, error  详情 回复 发表于 2013-6-15 13:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2221个

财富等级: 金玉满堂

发表于 2013-6-15 13:52:45 | 显示全部楼层
qianzj 发表于 2013-6-15 13:12
经过1天努力,在各位帮助下终于弄出可带旋转的插入块,增加出错处理,并支持捕捉  ,左右,上下镜像可自行 ...

dear sir,
error
  1. Command: ap APPLOAD INSERTBLK.LSP successfully loaded.
  2. Command:
  3. Command:
  4. Defined blocks.
  5. User     Unnamed
  6. Blocks   Blocks
  7.     0      528
  8. Unknown command "TT".  Press F1 for help.
  9. Unknown command "TT".  Press F1 for help.
  10. Unknown command "0".  Press F1 for help.
  11. Too many objects selected for INTERSECT

点评

NO BLOCK AMEND (vl-cmdf "-insert" "块名" pt "" "" "0")  详情 回复 发表于 2013-6-15 14:34
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-15 14:31:38 | 显示全部楼层
qianzj 发表于 2013-6-15 13:12
经过1天努力,在各位帮助下终于弄出可带旋转的插入块,增加出错处理,并支持捕捉  ,左右,上下镜像可自行 ...

先恭喜你了,看你介绍的两个名字好响亮,大杀器。。。能把相关帖子链接帖下方便后来人吗? 如果这论坛没,请转帖下,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-15 14:34:27 | 显示全部楼层

NO BLOCK

AMEND----- (vl-cmdf "-insert" "块名" pt "" "" "0")

点评

dear sir, thxx but some error  详情 回复 发表于 2013-6-15 14:53
dear sir, thxx but some error  详情 回复 发表于 2013-6-15 14:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2221个

财富等级: 金玉满堂

发表于 2013-6-15 14:52:28 | 显示全部楼层
wowan1314 发表于 2013-6-15 14:34
NO BLOCK

AMEND----- (vl-cmdf "-insert" "块名" pt "" "" "0")

dear sir,

thxx

but some error

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

使用道具 举报

已领礼包: 2221个

财富等级: 金玉满堂

发表于 2013-6-15 14:53:11 | 显示全部楼层
wowan1314 发表于 2013-6-15 14:34
NO BLOCK

AMEND----- (vl-cmdf "-insert" "块名" pt "" "" "0")

dear sir,

thxx

but some error

  1. Too many objects selected for INTERSECT
复制代码

点评

You can try that I write  详情 回复 发表于 2013-6-15 14:55
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 20:18 , Processed in 0.203166 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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