![]() |
【已完成】获取所有图块包括嵌套块(多重块)内圆的圆心坐标(当前坐标系下的值)
【已完成】获取所有图块包括嵌套块(多重块)内圆的圆心坐标(当前坐标系下的值)
www.dimcax.com 【已完成】获取所有图块包括嵌套块(多重块)内圆的圆心坐标(当前坐标系下的值) 请大家修改一下程序,在取得块中圆心的时候,对于嵌套块,圆心就偏差了,如何修改才能实现采集嵌套块中的圆心坐标不产生偏离?谢谢!! [code][font=courier new] (defun allentityinblkdef (blk / bn blkdef e typ el ) (setq bn (cdr (assoc 2 (entget blk))) blkdef (tblobjname "block" bn) ) (while (setq e (entnext blkdef)) (setq typ (cdr (assoc 0 (entget e)))) (if (= typ "insert") (setq el (append (allentityinblkdef e) el)) (setq el (cons e el)) ) (setq blkdef e) ) el ) (defun c:aentinbl (/ i en ss entlst abentlst) ;bn) if while repeat 三函数 foreach (setq ss (ssget '((0 . "insert"))) abentlst '() ) (if ss (repeat (setq i (sslength ss)) (setq en (ssname ss (setq i (1- i))) entlst (allentityinblkdef en) abentlst (append (list (list (cons en (length entlst)) entlst)) abentlst) ) ;;(princ (strcat "该块内共有" (itoa (length entlst)) "个实体\n")) ) (princ "*** 你没有选择任何图块 ***") ) (princ abentlst) ;;返回的结果(((第i个图块图元名 . 块内实体图元数) (<图元名: 7ef771b0>...)) ...) ;;; (princ) ) ;; 获取图块(包括嵌套块)内所圆的有圆心坐标,返回圆心坐标组成的表:(pt0 pt1 pt2 ... ptn) (defun c:getblockcircen (/ par_list par_item par_ent par_ent_insptptcenlst sub_list out_loopn in_loopn ent entdata cenpt ) (setq par_list (c:aentinbl) ptcenlst '() ) ;;循环 (repeat (setq out_loopn (length par_list)) (setq par_item (nth (setq out_loopn (1- out_loopn)) par_list) par_ent (car (car par_item)) par_ent_inspt (cdr (assoc 10 (entget par_ent))) sub_list (car (cdr par_item)) ) (foreach ent sub_list (setq entdata (entget ent)) (if (= (cdr (assoc 0 entdata)) "circle") (setq cenpt (trans (trans (cdr (assoc 10 entdata)) par_ent 1) 1 0);ocs坐标系(distance par_ent_inspt '(0 0)) ptcenlst (append ptcenlst (list (list (+ (car par_ent_inspt) (car cenpt)) (+ (cadr par_ent_inspt) (cadr cenpt)) (+ (caddr par_ent_inspt) (caddr cenpt)) );仅对单层图块或插入点重合在一点嵌套块适用 ) ) ) ;;取得的是世界坐标值(不一定,要看块的插入点?还是建立块的时候的坐标系情况?),使用的时候需要再转换为用户坐标值 ;;经过测试,取得坐标值,与图块的插入点相关,所以上面加上块的插入点偏移值 ) ) ) (command "pline" (foreach i (trans_pt_0->1 ptcenlst) (command i)) ;;; "" ) ;该语句实现,由点表画线 (princ ptcenlst) (princ) ) ;;; **************************************************** ;;; 坐标点由世界坐标系转换到用户坐系 [code] 程序已经完成,采用了多种方法,有两种方法对任意情况的图块均得出正确的值。 d |
所有的时间均为北京时间。 现在的时间是 03:17 PM. |