CAD_lso 发表于 2014-4-16 10:11:07

如何批量清除图纸中的线段间隙

本帖最后由 CAD_lso 于 2014-4-16 10:23 编辑

在使用填充(hatch)命令时, 提示边界未封闭, 存在间隙(gaps), 但目测没有间隙, 如何清理掉这些间隙?
尝试了调整误差, 但是效果不理想, 出现很多错误, 有没有能够合并端点的方法?
如下图所示.
谢谢.

清风明月名字 发表于 2014-4-16 19:32:08

顶一个,确实很有意思

lyqiezi 发表于 2014-4-16 20:13:25

命令:PEDIT
参数:C
回车

llsheng_73 发表于 2014-4-17 13:04:58

本帖最后由 llsheng_73 于 2014-4-17 13:06 编辑

如果边界都是直线和多线段那就比较容易,我以前写过一个只适用于直线和多线段的,还有点小问题
但实际情况通常可能还会有圆、弧、椭圆、样条曲线等,这就比较麻烦,找出这些需要处理的地方并不难,但是如果需要处理圆弧、椭圆弧、样条曲线的起止点的话,我现在水平不够,处理不了(当然,如果 调用延伸命令也能解决)

尘缘一生 发表于 2014-5-24 18:24:17

这个问题,期待高手解决,我一直想:最好有个程序,点取一点,它能自动四周封闭边界!!!

xyp1964 发表于 2014-5-24 19:35:39

属于悬挂线问题

CAD_lso 发表于 2014-5-30 18:03:32

xyp1964 发表于 2014-5-24 19:35 static/image/common/back.gif
属于悬挂线问题

可否给一个具体的的解释或链接, 在论坛上搜了一下, 没有找到悬挂线的具体说明

llsheng_73 发表于 2014-6-9 05:08:55

本帖最后由 llsheng_73 于 2014-6-11 21:45 编辑

(defun c:EX(/ dcl ctl getvalue lys l)
(defun getvalue()
    (list(CAR(MEMBER(nth(atoi(get_tile"LA"))LYS)(STB"LAYER")))
       (if(atof(get_tile"JL"))(atof(get_tile"JL"))0.5)
       (IF(=(get_tile"ALL")"1")"1""2")))
(setq dcl(makedcl'"ZDEX:dialog{label=\"~多线段自动延伸~\";:column{:row{:edit_box{label=\"限定距离\";key=\"JL\";edit_width=3;}:popup_list{label=\"图层\";key=\"LA\";}}:row{key=\"GET\";:radio_button{label=\"自动\";key=\"ALL\";value=\"1\";}:radio_button{label=\"选择\";key=\"MANU\";}:button{key=\"ESC\";label=\"取消\";is_cancel=true;}:button{key=\"GO\";label=\"确定\";}}}}")
        LYS(CONS"所有图层"(STB"LAYER"))ctl 3)
(while(> ctl 2)(new_dialog"ZDEX"dcl)
    (start_list"LA")(mapcar'add_list LYS)(end_list)
    (set_tile"JL""0.5")
    (action_tile"GO""(setq l(getvalue))(done_dialog 1)")
    (action_tile"ESC""(done_dialog 0)")
    (setq ctl (start_dialog))
    )(unload_dialog dcl)
(cond((= ctl 1)(layon)(ex(car l)(cadr l)(last l))(layreset)))
(princ))
(defun layon();图层全开、解锁、解冻
(foreach x(setq *layststatus(mapcar'(lambda(x)(entget(TBLOBJNAME"layer"x)))(stb"layer")))
    (entmod(subst(cons 62(abs(cdr(assoc 62 x))))(assoc 62 x)(subst'(70 . 0)(assoc 70 x)x)))))
(defun layreset();;恢复图层
(foreach x *layststatus(entmod x))
(setq *layststatus nil))
(Defun STB(TAB / snl sll)
(SetQ sll(TblNext TAB T))
(While(SetQ snl(Cons(Cdr(Assoc 2 sll))snl)sll(TblNext TAB nil)))
(vl-sort snl'<))
(defun makedcl(str / dclfile dclHandle)
    (setq dclfile(vl-filename-mktemp nil nil ".dcl")dclHandle(open dclfile "w"))
    (write-line str dclHandle)
    (close dclHandle)
    (setq dclHandle(load_dialog dclfile))
    (vl-file-delete dclfile)
    dclHandle)
(defun array->list(l / i p)
(if(>(vlax-safearray-get-u-bound l 1)1)
      (progn
        (setq l(vlax-safearray->list l)i -3)
        (repeat(/(length l)3)
          (setq i(+ 3 i)p(cons(list(nth i l)(nth(+ 1 i)l))p))))))
(defun SstoEs(ss / a en lst)
(if ss(progn(setq a -1)
       (while(setq en(ssname ss(setq a(1+ a))))
           (setq lst(cons en lst)))))
lst)
(defun ex(la jl fs / ss a b c d);;fs"1"全选择"2"手动选择
(setq a(if(null la)'((0 . "*lyline"))(list'(0 . "*lyline")(cons 8 la)))
        ss(sstoes(if(="1"fs)(ssget"X" a)(ssget a))))
(foreach a ss
    (setq s1(vl-remove a ss)a(vlax-ename->vla-object a))
    (foreach b s1
      (setq b(vlax-ename->vla-object b)
          d(xlst(array->list(vlax-variant-value(vla-IntersectWith a b 0)))(array->list(vlax-variant-value(vla-IntersectWith a b 1)))))
      (foreach c d
        (if(<(distance(setq b(reverse(cdr(reverse(vlax-curve-getClosestPointTo a c 0)))))c)jl)
          (entmod(subst(cons 10 c)(cons 10 b)(entget(vlax-vla-object->ename a))))))
      )))
只适合多线段,因为别的线我很少涉及到,所以没弄它

香田里浪人 发表于 2014-6-9 06:09:39

no function definition: SSTOES

cuyongping 发表于 2014-6-9 13:49:30

no function definition: SSTOES版主可否补齐!期待
页: [1] 2
查看完整版本: 如何批量清除图纸中的线段间隙