找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 970|回复: 4

[求助] [求助]:批量外部块wblock对象选择问题

[复制链接]
发表于 2008-11-7 08:57:31 | 显示全部楼层 |阅读模式

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

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

×
我希望能编一个批量写外部块的功能,原来的可以使用只是写出来的外部块的插入点离图元很远,现在我想修改能让插入点控制在图元的范围内(开始是想能控制在质心,但不成面域的多个环形不知道怎么弄,水平问题),但是我参考各位高手的代码写出来的代码有问题,图元选择出现了错误,请高手们指点,谢谢!
[code]
;选择图中所有图元并获得外轮廓的两角点
    (setq ss (ssget "x"))
    (setq obj (vlax-ename->vla-object ss))
    (vla-GetBoundingBox obj "p1" "p2")
;取得中点
    (setq p1_x (car p1))
    (setq p2_x (car p2))
    (Setq p1_y (cadr p1))
    (setq p2_y (cadr p2))
    (setq p_x (+ (/ (- p1_x p2_x) 2) p2_x))
    (Setq p_y (+ (/ (- p1_y p2_y) 2) p2_y))
    (setq p_new (list p_X p_y 0))

;以中点写外部块
    (COMMAND "WBLOCK" (STRCAT path "\\" "1" "\\" name)  "" p_new obj "")
[code]
好像vla-GetBoundingBox命令只能对一个图元进行操作,是这样的吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2008-11-8 01:08:08 | 显示全部楼层
vla-GetBoundingBox命令只能对一个图元进行操作, 你历遍不就可以了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-8 14:35:06 | 显示全部楼层
没用过遍历,但我想在块还没有炸开的时候就获取点,但到了点的处理的时候出现了问题,不知道能不能指点一下呢?
下面是我的代码
;尝试能在图块的中心写外部块
(defun c:b6 (/ path #time time-1 fn n name time-2 time-last ss idx count en entall)

        (vl-load-com)
  (setq path (getstring "\n请指定 DWG 文件目录:"))
  (princ "\n   正在处理,等一下...")
  (princ)  
  (setq cmdecho-save (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (setq #time (getvar "DATE"))                    ;Time1
  (setq time1 (* 86400.0 (- #time (fix #time))))  ;Time1
  (setq fn (open (strcat path "\\" "namelist.txt") "a"))
  (setq n 0)
  (foreach name (vl-directory-files path nil 1)
    (if (= (strcase (vl-filename-extension name) t) ".dwg")
      (progn
;*******************************************************************
        ;插入块
        (vl-cmdf "-insert" (strcat path "\\" name) '(0 0 0)"""""")
;*******************************************************************
        ;炸开块
        (setq ss (ssget "x" '((0 . "INSERT"))))

(setq idx -1 count 0)
        (if ss
        (while (<= (setq idx (1+ idx)) (1- (sslength ss)))
                (setq en (ssname ss idx))
                (if (not (assoc 1 (tblsearch "BLOCK" (cdr (assoc 2 (entget en))))))
                        (progn
;选择图中块外轮廓的两角点
        (vla-GetBoundingBox en "minp" "maxp")
        (setq p1 (vlax-safearray->list minp)
                p2 (vlax-safearray->list maxp));查询返回值
;取得中点
        (setq p1_x (car p1))
        (setq p2_x (car p2))
        (Setq p1_y (cadr p1))
        (setq p2_y (cadr p2))
        (setq p_x (+ (/ (- p1_x p2_x) 2) p2_x))
        (Setq p_y (+ (/ (- p1_y p2_y) 2) p2_y))
        (setq p_new (list p_X p_y 0))



                                (command "explode" en)
                                (setq count (1+ count))
                        )
                );endif
        )
)
(princ (strcat "\n" (itoa count)
   " block(s) exploded."))
(princ)
;*******************************************************************


;以中点写外部块
        (setq ss (ssget "x"))
        (COMMAND "WBLOCK" (STRCAT path "\\" "1" "\\" name)  "" p_new ss "")
;*******************************************************************
;删除图
        (vl-cmdf "erase" "all" "")
       
      )
    )
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 15:01 , Processed in 0.504819 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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