--@----- 发表于 2013-11-27 23:50:09

双向偏移增强优化版,大师们看看能实现不?

还是看图说问题吧,如下图左边是偏移前,右边是偏移后效果。对T字形 T型,十字型,以及下面的围合线都能实现双向偏移,删除源线,自动裁剪的效果。(偏移默认值,记忆上次值):      (最下面围合的图形可能是单独处理的,外框线是往内偏移的,框内线还是双向偏移的)。根据eachy大师的单线边窗的帖子,触发想起这些功能的 ,图片看不清楚的,下面有上传的文件。

--@----- 发表于 2013-11-27 23:53:14

本帖最后由 --@----- 于 2013-11-28 00:00 编辑

CAD示例文件 下载 (T字型,L字型,十字型线,打错了个字)

newer 发表于 2013-11-28 00:00:35

--@----- 发表于 2013-11-27 23:53
CAD示例文件 下载

你这应该叫 单线变双,专业应用的。

st788796 发表于 2013-11-28 00:05:41

变通一下,轴线生墙,几乎每个建筑软件必须的

--@----- 发表于 2013-11-28 00:08:57

本帖最后由 --@----- 于 2013-11-28 00:10 编辑

st788796 发表于 2013-11-28 00:05
变通一下,轴线生墙,几乎每个建筑软件必须的

其实就是单线变墙那种效果。关键是单线生成墙,生成的是墙图层,而且要得把墙体砸开,砸开的话你还是得去修剪,还得去设置生成墙的那些参数,专业就是单线变双呵呵

newer 发表于 2013-11-28 00:18:41

--@----- 发表于 2013-11-28 00:08
其实就是单线变墙那种效果。关键是单线生成墙,生成的是墙图层,而且要得把墙体砸开,砸开的话你还是得 ...

设不设墙图层,那是代码定的,设路图层,就是单线变路。

墙体炸开是什么意思? 专业软件的单线变双,和你贴图的有什么区别的地方?

st788796 发表于 2013-11-28 00:23:46

newer 发表于 2013-11-28 00:18
设不设墙图层,那是代码定的,设路图层,就是单线变路。

墙体炸开是什么意思? 专业软件的单线变双, ...

偶然发现 Curve_getOffsetCurves 还有自动倒内角疗效{:soso_e113:}

图示均为 Line 用 Curve_getoffsetCurves 双向偏移后自动把内角给倒了!偏移后仍旧为 Line

st788796 发表于 2013-11-28 08:16:31

本帖最后由 st788796 于 2013-11-28 08:20 编辑

倒内角有条件的, 不完美的变双


(defun c:tt (/ ss d hw)
(if (and (setq ss (ssget '((0 . "line"))))
           (setq d (getdist "\n宽度: "))
      )
    (progn
      (xdrx_begin)
      (setq hw (* d 0.5))
      (mapcar '(lambda (x)
               (xdrx_curve_getoffsetcurves x hw)
               (xdrx_curve_getoffsetcurves x (- hw))
             )
              (setq el (xdrx_pickset->ents ss))
      )
      (setq ss (xdrx_curve_intersectbreak (xdrx_getss) 0.))
      (xdrx_document_redraw ss) ;_更新数据库,不然 F 选不到
      (xdrx_setsstodb ss 9)
      (mapcar
        '(lambda (x / s)
           (if (setq s (ssget "F" x '((0 . "Line"))))
             (xdrx_entity_delete
             (xdrx_pickset_intersect s (xdrx_getss 9))
             )
           )
       )
        (mapcar 'xdrx_entity_getstretchpoint el)
      )
      (xdrx_end)
    )
)
(princ)
)

--@----- 发表于 2013-11-30 00:38:17

本帖最后由 --@----- 于 2013-11-30 01:00 编辑

突然间想起来一个处理单线变双的步骤:处理之前先把这些单线转换成多断线,再合并有端头连接的多段线,单线双向偏移、删除源线、交点打断、删除短线(500之内默认短线一般情况下单线变双两根线之间的距离都很短的不会超于500)故把这部分当成个短线来处理掉,以上步骤都是对选中的线以及偏移后的线的处理 。至于程序是啥原理,咱也不懂,这也只是个想法,,呵呵

st788796 发表于 2013-11-30 09:05:41

--@----- 发表于 2013-11-30 00:38
突然间想起来一个处理单线变双的步骤:处理之前先把这些单线转换成多断线,再合并有端头连接的多段线,单线 ...


(defun c:tt (/ ss d hw hhw _pi2)
(if (and (setq ss (ssget '((0 . "line"))))
           (setq d (getdist "\n宽度: "))
      )
    (progn
      (xdrx_begin)
      (setq hw       (* d 0.5)
          hhw       (* 0.9 hw)
          _pi2 (* pi 0.5)
      )
      (xdrx_setmark)
      (mapcar '(lambda (x)
               (xdrx_curve_getoffsetcurves x hw)
               (xdrx_curve_getoffsetcurves x (- hw))
             )
              (setq el (xdrx_pickset->ents ss))
      )
      (setq ss (xdrx_curve_intersectbreak (xdrx_getss) 0.))
      (xdrx_document_redraw ss) ;_更新数据库,不然 F 选不到
      (xdrx_setsstodb ss 9)
      (mapcar
        '(lambda (x / s)
           (if (setq s (ssget "F" x '((0 . "Line"))))
             (xdrx_entity_delete
             (xdrx_pickset_intersect s (xdrx_getss 9))
             )
           )
       )
        (apply
          'append
          (mapcar
          '(lambda (e / an sp ep)
             (setq an (xdrx_getpropertyvalue e "angle"))
             (mapcar 'set '(sp ep) (xdrx_entity_getstretchpoint e))
             (list (list (polar sp (- an _pi2) hhw)
                           (polar ep (- an _pi2) hhw)
                     )
                     (list (polar sp (+ an _pi2) hhw)
                           (polar ep (+ an _pi2) hhw)
                     )
             )
             )
          el
          )
        )
      )
      (xdrx_end)
    )
)
(princ)
)

这样能删掉短线,但有缺角

DASDASA 发表于 2020-4-7 17:54:51

8楼和10楼的代码不能用呀{:1_2:}

DASDASA 发表于 2020-4-7 18:44:13

st788796 发表于 2013-11-30 09:05
这样能删掉短线,但有缺角

代码不能用呀

DASDASA 发表于 2020-4-7 18:45:25

st788796 发表于 2013-11-28 08:16
倒内角有条件的, 不完美的变双

代码不能用呀

tinedis 发表于 2025-12-19 16:33:24

和楼主的需求一样!期待能有大师制作出来。
页: [1]
查看完整版本: 双向偏移增强优化版,大师们看看能实现不?