明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1676|回复: 7

[基础] 交线处理

[复制链接]
发表于 2014-1-13 13:56 | 显示全部楼层 |阅读模式
2明经币


求一程序,四条平行线两两相交,框选之后间距小的线剪断,线的图层固定为a


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

最佳答案

查看完整内容

是你自己条件改变了。把条件说清楚,不要每天修改。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-1-13 13:56 | 显示全部楼层
本帖最后由 cable2004 于 2014-1-14 13:49 编辑

是你自己条件改变了。把条件说清楚,不要每天修改。
回复

使用道具 举报

 楼主| 发表于 2014-1-13 19:59 | 显示全部楼层
自己顶一下
回复

使用道具 举报

发表于 2014-1-14 01:33 | 显示全部楼层
(defun c:bb( / a b b1 b2 l lst1 lst2 p1 p2 ss1 ss2 x)
  (setq l (ss->lst (ssget '((0 . "LINE"))))
        a (car l)
        l (cdr l)
        lst2 (list a))
  (foreach x l (if (getinterpoint (vlax-ename->vla-object x)(vlax-ename->vla-object a))
                   (setq lst1 (cons x lst1))
                   (setq lst2 (cons x lst2))
))
(setq p1 (car (getinterpoint (vlax-ename->vla-object (car lst1))(vlax-ename->vla-object (car lst2))))
      p2 (car (getinterpoint (vlax-ename->vla-object (car lst1))(vlax-ename->vla-object (cadr lst2))))
      b1 (car (getinterpoint (vlax-ename->vla-object (cadr lst1))(vlax-ename->vla-object (car lst2))))
      b2 (car (getinterpoint (vlax-ename->vla-object (cadr lst1))(vlax-ename->vla-object (cadr lst2))))
  )
(setq ss1 (ssadd))  (ssadd (car lst1)ss1)(ssadd (cadr lst1)ss1)
(setq ss2 (ssadd))  (ssadd (car lst2)ss2)(ssadd (cadr lst2)ss2)
  
(if (> (distance p1 p2)(distance p1 b1))
  (progn
    (command"trim" ss2 "" (list (car lst1) (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) p1 p2)) "")
    (command"trim" ss2 "" (list (cadr lst1)(mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) b1 b2)) "")
    )
    (progn
    (command"trim" ss1 "" (list (car lst2) (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) p1 b1)) "")
    (command"trim" ss1 "" (list (cadr lst2)(mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) p2 b2)) "")
    )
  )
)

(defun GetInterPoint (ent1 ent2 / intpoints points i) (setq intpoints (vla-intersectwith ent1 ent2 acextendnone))
(setq intpoints (vlax-variant-value intpoints))
(setq i 0)
(if (> (vlax-safearray-get-u-bound intpoints 1) 0)
(repeat (/ (+ 1
(- (vlax-safearray-get-u-bound intpoints 1)
(vlax-safearray-get-l-bound intpoints 1)
)
)
3
)
(setq points (append points (list (list
(vlax-safearray-get-element intpoints i)
(vlax-safearray-get-element intpoints (+ i 1))
(vlax-safearray-get-element intpoints (+ i 2))
)))
)
(setq i (+ 3 i))
)
)
points
)

(defun ss->lst ( ss / i l )
    (if ss
        (repeat (setq i (sslength ss))
            (setq l (cons (ssname ss (setq i (1- i))) l))
        )))
回复

使用道具 举报

 楼主| 发表于 2014-1-14 12:22 | 显示全部楼层
本帖最后由 adc 于 2014-1-14 12:57 编辑


cable2004 发表于 2014-1-14 01:33

(defun c:bb( / a b b1 b2 l lst1 lst2 p1 p2 ss1 ss2 x)
  (setq l (ss->lst (ssget '((0 . "LINE"))))
...


多谢,不过程序执行时如果选了其他图层的线就不能正常执行,还有能不能支持自定义ucs,测试文件见附件

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2014-1-14 17:36 | 显示全部楼层
有不少的提问类属于投石问路...

自己的实务应用有几许的状况得全交待在附件中以免衍生困扰
(以通过该调试文件为准)

程序有个从简原则,以满足现况需求为准
往后碰上新状况再补
回复

使用道具 举报

 楼主| 发表于 2014-1-14 20:03 | 显示全部楼层
本帖最后由 adc 于 2014-1-14 20:26 编辑
cable2004 发表于 2014-1-13 13:56
是你自己条件改变了。把条件说清楚,不要每天修改。


sorry,我没有描述清楚,多谢了,不过前面已经描述了线的图层固定为a,是希望只对图层a的对象进行操作,现在的程序不论什么图层都会剪切,测试文件里的对象图层也是a
回复

使用道具 举报

 楼主| 发表于 2014-1-14 20:36 | 显示全部楼层
Andyhon 发表于 2014-1-14 17:36
有不少的提问类属于投石问路...

自己的实务应用有几许的状况得全交待在附件中以免衍生困扰

测试文件没有改变,只是没有描述清楚,已经给了明经币了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 01:45 , Processed in 0.308807 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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