明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 荒野孤行

[源码] 批量交点插入块

    [复制链接]
发表于 2015-6-12 10:36:36 | 显示全部楼层
看看作品
发表于 2015-6-12 10:40:27 | 显示全部楼层
Linhay 发表于 2015-6-11 17:25
在图中,只要用insert重新插入一下以后就能顺利运行,否则即使在图中也不可以。

你试试这个。没用过2016
  1. ;交点插块edata @mjtd.com 2015年6月
  2. ;先选线,再选块
  3. (vl-load-com)
  4. (defun c:jdck(/ ss ss_lst ss2_lst en1 en2 lst IPTS SK_BLK SS_BLK X)
  5.   (princ "\n选择需要插入块的线计算交点:")
  6.   (if(and(setq ss(ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
  7.          (list t(princ"\n选择图块:"))
  8.          (setq ss_blk(ssget ":E:S"'((0 . "insert"))))
  9.          )
  10.     (progn
  11.       (setq sk_blk(cdr(assoc 2 (entget(ssname ss_blk 0)))))
  12.       (setq ss_lst(sk_ss->list ss))      
  13.       (while(setq en1(car ss_lst))
  14.         (setq ss2_lst(cdr ss_lst))
  15.         (while (setq en2(car ss2_lst))
  16.           (setq ipts(sk_2obj_ipts en1 en2 nil))
  17.           (if ipts (cond((=(type (car ipts)) 'LIST)
  18.                          (setq lst(append ipts lst))
  19.                          )
  20.                         (t (setq lst(cons  ipts lst)))
  21.                         )
  22.             )
  23.           (setq ss2_lst(cdr ss2_lst))
  24.           )
  25.         (setq ss_lst(cdr ss_lst))
  26.         )
  27.       (setq lst(reverse lst))
  28.       (if lst(setq lst(sk_removept lst 1e-8)))
  29.       (if lst(mapcar '(lambda(x)(sk_insert sk_blk x)) lst))
  30.       )
  31.     (princ"\n没有选择!")
  32.     )
  33.   (princ)
  34.   )
  35. (defun sk_insert(name pt)  (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt))))
  36. (defun sk_ss->list(ss / en lst )
  37.   (if (= (type ss) 'PICKSET)
  38.     (progn
  39.       (setq lst '())
  40.       (while (setq en (ssname ss 0))
  41.         (setq lst(cons en lst))
  42.         (setq ss(ssdel en ss))
  43.         )
  44.       (setq lst(reverse lst))
  45.       )
  46.     )
  47.   )
  48. (defun sk_2obj_ipts(en1 en2 mode / ipts lst obj1 obj2)
  49.   (if (and en1 en2
  50.            (or (= (type en1) 'ENAME)(= (type en1) 'VLA-OBJECT))
  51.            (or (= (type en2) 'ENAME)(= (type en2) 'VLA-OBJECT))
  52.            )
  53.     (progn
  54.       (setq obj1(if(= (type en1) 'ENAME)(vlax-ename->vla-object en1) en1)
  55.             obj2(if(= (type en2) 'ENAME)(vlax-ename->vla-object en2) en2)
  56.             mode(if (and mode (=(type mode) 'INT)) mode 0)
  57.             )
  58.       (setq ipts(vlax-variant-value (vla-intersectwith obj1 obj2 mode)));取得俩物体的交点变体
  59.       (if (> (vlax-safearray-get-u-bound ipts 1) 0)
  60.         (progn
  61.           (setq ipts(vlax-safearray->list ipts);将vla交点变体转化成表的形式
  62.                 lst '())
  63.           (if (>(length ipts) 3);分离多个交点
  64.             (repeat(/(length ipts)3)
  65.               (setq lst(cons(list(car ipts)(cadr ipts)(caddr ipts)) lst))
  66.               (setq ipts(cdddr ipts))
  67.               )
  68.             (setq lst ipts)
  69.             )
  70.           lst
  71.           )
  72.         )
  73.       )
  74.     )
  75.   )
  76. (defun sk_removept (ptLst fuzz / pt1)
  77.     (cond ((<= (length ptLst) 1) ptLst)
  78.           (t
  79.            (setq pt1 (car ptLst))
  80.            (cons pt1
  81.                  (vl-remove-if
  82.                    '(lambda (x) (and(equal (car pt1) (car x) fuzz)
  83.                                     (equal (cadr pt1) (cadr x) fuzz)
  84.                                     )
  85.                                     )
  86.                    (sk_removept (cdr ptLst) fuzz)
  87.                  )
  88.            )
  89.           )
  90.     )
  91.   )
  92.   (prompt"\n交点插块,命令 jdck")
  93.   (princ)

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 赞一个!

查看全部评分

发表于 2015-6-12 10:49:43 | 显示全部楼层
试了下匿名块

本帖子中包含更多资源

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

x
发表于 2015-6-12 11:24:56 | 显示全部楼层
本帖最后由 Linhay 于 2015-6-12 12:43 编辑
edata 发表于 2015-6-12 10:40
你试试这个。没用过2016

测试了,2016下运行没问题,谢谢~可是我还是想知道荒野大侠的作品在2016里运行到底因为什么出现错误.

本帖子中包含更多资源

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

x
发表于 2015-6-12 13:40:34 | 显示全部楼层
看看源码
发表于 2015-6-12 14:18:15 | 显示全部楼层
感谢你的分享啊
发表于 2015-6-12 14:26:40 | 显示全部楼层
一直在找这个
发表于 2015-6-12 15:58:55 | 显示全部楼层
天天有惊喜啊
发表于 2015-6-12 16:00:16 | 显示全部楼层
谢谢分享。下载下来看看。
发表于 2015-6-12 16:09:31 | 显示全部楼层
速度有待提高,赞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 11:50 , Processed in 0.195877 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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