明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3078|回复: 14

[已解答] 关于insert语句,后去最小包容框的问题

[复制链接]
发表于 2013-5-18 21:29 | 显示全部楼层 |阅读模式
最近在网上,看到一个获取WCS下最小包容框的函数,甚是高兴。因为给我一点希望。。

我最近遇到一个瓶颈,采用insert语句,插入其他dwg文件(如附图1.dwg)时,想让附图1.dwg内所有对象最小包容框左下角作为insert插入点。

试了很多方法,最后打算采用如下思路,
1.insert 附图1.dwg ,不采用分解,直接用块;
2.炸开块,然后选取所有 块内对象
3.采用ucsbox获取,上述对象的最小包容框的四个点坐标。
....

可每次运行到下面时候就出现错误。“错误: Automation 错误。 空范围”,实在不懂为啥。。求指教。
  1. (DEFUN C:xxx ()

  2. (setq pt1 (getpoint "请选择基点:\n"))
  3. (command "-insert"   "附图1.dwg"   pt1   1  1  0 ^C   )         
  4. (setq sek (entlast)) ;;;获得图形中最后那个主图元名﹐并存入sel。

  5. (command ".explode"   sek  )   ; 打散图块
  6. (setq sel (ssget "p"))        ; 获取打散图块图元选择集
  7. (setq num (sslength sel))
  8. (princ num)                   ;到这也能执行
  9. (setq see (ucsbox sel))
  10. )
ucsbox是网友的。我单独测试过。可用。
  1. (defun ucsbox (SS / XDIR ORG CP ANG N OBJ LL UR pl UL LR)
  2.     (setq xdir (getvar 'ucsxdir)
  3.           org  (getvar 'ucsorg)
  4.           cp   (vlax-3d-point '(0.0 0.0 0.0))
  5.           ang  (atan (cadr xdir) (car xdir))
  6.           )
  7.     (repeat (setq n (sslength ss))
  8.       (setq
  9.         obj (vlax-ename->vla-object (ssname ss (setq n (1- n))))
  10.         )
  11.       (vla-rotate obj cp (- ang))
  12.       (vla-update obj)
  13.       (vla-GetBoundingBox obj 'll 'ur) ;_ 计算包围盒
  14.       (setq ll (vlax-safearray->list ll) ;_ 坐下角点
  15.             ur (vlax-safearray->list ur) ;_ 右上角点
  16.             )
  17.       ;;_ 还原对象位置
  18.       (vla-rotate obj cp ang)
  19.       (setq pl (cons ll pl)
  20.             pl (cons ur pl)
  21.             )
  22.       )
  23.     (setq ll (apply 'mapcar (cons 'min pl)) ;_ 左下角点
  24.           ur (apply 'mapcar (cons 'max pl)) ;_ 右上角点
  25.           ul (list (car ll) (cadr ur) (caddr ll)) ;_ 左上角点
  26.           lr (list (car ur) (cadr ll) (caddr ll)) ;_ 右下角点
  27.           )
  28.     ;;返回UCS方向的WCS坐标
  29.     (mapcar '(lambda (x) (mapcar '- (trans x 1 0) org))
  30.             (list ll ul ur lr)
  31.             )
  32.     )

本帖子中包含更多资源

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

x
发表于 2013-5-18 22:38 | 显示全部楼层
估计你的附图1.dwg中有点块引起,所谓点块,指由单独一个点做成的块
发表于 2013-5-18 22:49 | 显示全部楼层
缺少块内部的外部参照 EXPLAINOFTITLE SUPERWORKS_SETTING
发表于 2013-5-18 22:57 | 显示全部楼层
清除 附图1.dwg中的点块 EXPLAINOFTITLE SUPERWORKS_SETTING,应该就行了
发表于 2013-5-18 23:01 | 显示全部楼层
其实就是一个空块,造成vla-GetBoundingBox 判断出错
发表于 2013-5-18 23:03 | 显示全部楼层
用块编辑那2个空块,加点东西,再删掉就行了
发表于 2013-5-18 23:04 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2013-5-18 23:04 | 显示全部楼层
其实对vla-GetBoundingBox 做错误检查,也可以解决问题

点评

说的没错,出错处理还是必要的  发表于 2013-5-18 23:08
 楼主| 发表于 2013-5-19 02:44 | 显示全部楼层
谢谢各位大侠。但是都好高深。。我目前的水平。。哎。。好人做到底吧。。
 楼主| 发表于 2013-5-19 12:02 | 显示全部楼层
liuyun242 发表于 2013-5-18 23:04
其实对vla-GetBoundingBox 做错误检查,也可以解决问题

大侠帮帮我如何做错误检查吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-20 00:09 , Processed in 0.264713 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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