ga619091 发表于 2022-8-31 13:54:22

liuhe 发表于 2022-8-31 13:29
你会lisp编程么?我可以提供给你思路,自己写。先创立一个选择集,识别图元或者句柄,分解掉选择集。再次 ...

我不会编译,只会大概了解某段的编译意思,在大佬们分享的LISP上自己加加减减贴上变成自己想要的功能
有参考板上文章的撷取某段做偏移,不过思路有点困难

llsheng_73 发表于 2022-8-31 17:07:43

本帖最后由 llsheng_73 于 2022-9-1 17:50 编辑

ga619091 发表于 2022-8-31 11:24
可能误会我意思
原始代码 多段线或者炸开的线段都能做偏移
但把LINE拿掉 就可以炸开只选择圆弧做 ...
选择包含凸度的多段线,
不严谨的做法:遍历多段线的点p,如果它的凸度值不为0,取它的下一点及中间点,这样就有弧段起止点及中点,根据3点共圆计算圆心,
根据圆心和起止点的角度及半径加上偏移距离计算偏移后的新的起止点,用取得的凸度值画一个弧段
(defun 3pcen(p1 p2 p3)
(setq p1(list(/(+(car p1)(car p2))2)(/(+(cadr p1)(cadr p2))2))
      p3(list(/(+(car p2)(car p3))2)(/(+(cadr p2)(cadr p3))2)))
(inters p1(polar p1(+(/ pi 2)(angle p1 p2))1)p3(polar p3(+(/ pi 2)(angle p3 p2))1)nil))
(defun tt(e / en n p p1 p0 r bugle i)
(setq en(entget e'("*"))n(vlax-curve-getendparam e)e(vlax-ename->vla-object e)i -1)
(while(<(setq i(1+ i))n)
      (or(VL-CATCH-ALL-ERROR-P(setq p(vlax-curve-getpointatparam e i)
                                    bugle(VL-CATCH-ALL-APPLY'vlax-invoke-method(Liste 'GetBulge i))))
         (and(/= bugle 0)
             (setq p1(vlax-curve-getpointatparam e(1+ i)))
             (setq p0(vlax-curve-getpointatparam e(+ i 0.5)))
             (setq p0(3pcen p p0 p1)r(+(distance p0 p)d))
             (entmakex(vl-remove'nil(append(mapcar'cons'(0 100 100 62 8 90 70 10 42 10)
                           (list"LWPOLYLINE""AcDbEntity""AcDbPolyline"1"bmcl"2 128(polar p0(angle p0 p)r)bugle(polar p0(angle p0 p1)r)))
                           (mapcar'(lambda(x)(assoc x en))'(6 8 62 370 38 -3)))))))))

(defun c:tt(/ s e d)
(or(setq d(getdist"偏移距离"))(setq d 1))
(if(setq s(ssget '((0 . "lwpolyline")(-4 . "/=")(42 . 0))))
(while(setq e(ssname s 0))
    (ssdel e s)
    (tt e)
    )))


更严格的做法应该是:根据偏移距离先偏移整条多段线,再找出其中的弧段来重新绘制,删除偏移后的线

ga619091 发表于 2022-8-31 17:24:39

llsheng_73 发表于 2022-8-31 17:07


73大 厉害了 这就是我想要的效果,我自己在研究怎么用框选处理多图形

llsheng_73 发表于 2022-8-31 17:25:47

ga619091 发表于 2022-8-31 17:24
73大 厉害了 这就是我想要的效果,我自己在研究怎么用框选处理多图形

把(ssget":E:S"'((0 . "lwpolyline")(-4 . "/=")(42 . 0)))改成其它选择方式,不用点选方式

ga619091 发表于 2022-8-31 17:29:51

llsheng_73 发表于 2022-8-31 17:25
把(ssget":E:S"'((0 . "lwpolyline")(-4 . "/=")(42 . 0)))改成其它选择方式,不用点选方式

好的 谢谢 :lol

Juno 发表于 2022-8-31 21:42:53

先炸开,完成功能后,再把他们合并起来,这样从画图角度,是不是相当于没炸开?

ga619091 发表于 2022-9-1 09:13:15

Juno 发表于 2022-8-31 21:42
先炸开,完成功能后,再把他们合并起来,这样从画图角度,是不是相当于没炸开?

主要是想省炸开才能偏移圆弧这个步骤,但写程式上来说是需要炸开提出圆弧 原图再进行合并

ga619091 发表于 2022-9-1 09:19:30

顺便附上73大的 改框选版本




ga619091 发表于 2022-9-1 17:19:02

本帖最后由 ga619091 于 2022-9-1 18:11 编辑

可以了

llsheng_73 发表于 2022-9-1 17:42:07

本帖最后由 llsheng_73 于 2022-9-1 17:50 编辑

ga619091 发表于 2022-9-1 17:19
73大 能帮我看一下代码问题
我在你的代码基础上改成匡选加偏移的弧形红色显示
匡选可以 但是弧形偏移

原来(mapcar 'cons '(0 100 100 90 70 10 42 10)(list "LWPOLYLINE" "AcDbEntity" "AcDbPolyline" 2 128 (polar p0(angle p0 p)r) bugle (polar p0 (angle p0 p1)r))
加一个62组和8组就可以控制颜色和图层了
(mapcar 'cons '(0 100 100 62 90 70 10 42 10 )(list "LWPOLYLINE" "AcDbEntity" "AcDbPolyline"1 2 128 (polar p0(angle p0 p)r) bugle (polar p0 (angle p0 p1)r))


还是看12楼修改后的吧,你修改那个实在费看。。。


页: 1 [2] 3
查看完整版本: 多段线只偏移圆弧 修改