明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2010|回复: 7

依据高度差分别偏移距离!难度较高!

[复制链接]
发表于 2013-1-25 14:00:28 | 显示全部楼层 |阅读模式
本帖最后由 革天明 于 2013-1-25 14:07 编辑

偏移的规则如下:
①多段线上各线、圆弧、曲线与基准点的竖起距离H与偏移量有以下要求:0≦H﹤3  0.3;3≦H≦6  0.4;6<H   0.5。
②连接以下区间的或同时跨跃两个区间的直线(竖直或倾斜),若直线两端不连接圆弧,以较低的区间进行偏移(如跨跃2-6区间,以0-3区间的0.3进行偏移);若直线两端有圆弧(一个或两个),按较大区间进行偏移(如跨跃2-6区间,以3-6区间的0.4进行偏移)
③偏移后的各小段多段线相关独立。

相关帖子见http://bbs.mjtd.com/thread-100204-1-1.html

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2013-1-25 14:43:46 | 显示全部楼层
看来难度是不小
 楼主| 发表于 2013-1-25 17:16:35 | 显示全部楼层
大侠都在数年终奖?无暇写代码了
发表于 2013-1-25 21:14:05 | 显示全部楼层
哈哈,一样的题目!

本帖子中包含更多资源

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

x
发表于 2013-1-25 21:51:46 | 显示全部楼层


(defun c:test( / en enlst i mun p3 p6 ptlst03 ptlst06 pt-min ss x)
  (setq en (car (entsel )))
  (setq enlst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en))))
  (setq PT-min (apply 'mapcar (cons 'min enlst)))
  (setq mun (- (length enlst) 1))
  (foreach  x enlst  (if (< 3 (- (cadr x)  (cadr PT-min)))  (setq ptlst03 (cons (vlax-curve-getParamatPoint en  x) ptlst03))))
  (foreach  x enlst  (if (< 6 (- (cadr x)  (cadr PT-min)))  (setq ptlst06 (cons (vlax-curve-getParamatPoint en  x) ptlst06))))
(IF
(YTM-Clockwise (NTH 0 enlst) (NTH 1 enlst) (NTH 2 enlst))
(progn
  (setq enlst (reverse enlst))
  (setq  p3 (MIN (+ (apply 'max  ptlst03 ) 1)  (+ (apply 'max  ptlst06 ) 1)))
  (setq  p6 (MAX (+ (apply 'max  ptlst03 ) 1)  (+ (apply 'max  ptlst06 ) 1)))
(if (/= 0 p3) (YTM-off -0.3 en (vlax-curve-getpointatparam en p6) (vlax-curve-getpointatparam en mun)))
(if (/= p6 p3) (YTM-off -0.4 en (vlax-curve-getpointatparam en p3) (vlax-curve-getpointatparam en p6)))
(if (/= p6 mun) (YTM-off -0.5 en (vlax-curve-getpointatparam en 0) (vlax-curve-getpointatparam en p3)))
  )
(progn
(setq  p3 (MIN (- (apply 'min  ptlst03 ) 1)  (- (apply 'min  ptlst06 ) 1)))
(setq  p6 (MAX (- (apply 'min  ptlst03 ) 1)  (- (apply 'min  ptlst06 ) 1)))
(if (/= 0 p3) (YTM-off 0.3 en (vlax-curve-getpointatparam en 0) (vlax-curve-getpointatparam en p3)))
(if (/= p6 p3) (YTM-off 0.4 en (vlax-curve-getpointatparam en p3) (vlax-curve-getpointatparam en p6)))
(if (/= p6 mun) (YTM-off 0.5 en (vlax-curve-getpointatparam en p6) (vlax-curve-getpointatparam en mun)))
)
)
)
(defun YTM-Clockwise ( p1 p2 p3 )
    (<
        (* (- (car  p2) (car  p1)) (- (cadr p3) (cadr p1)))
        (* (- (cadr p2) (cadr p1)) (- (car  p3) (car  p1)))
    )
)

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-1-26 10:21:32 | 显示全部楼层
cable2004 发表于 2013-1-25 21:51
(defun c:test( / en enlst i mun p3 p6 ptlst03 ptlst06 pt-min ss x)
  (setq en (car (entsel )))
...

效果能实现,具体细节我再参悟一下代码,另外有一个问题是你的是向下偏移的吧,而我的却是向上偏移,你的效果是我想要的。昨天那个帖子就是会出现这样的情况,向下偏或向上偏有时会错乱。
发表于 2013-1-26 10:26:37 | 显示全部楼层
这个应该不会,因为增加了一个顺时针判断,你只要相应修改参数,把正改负,负改正就可以。
 楼主| 发表于 2013-1-26 10:33:34 | 显示全部楼层
我自己再排查一下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-1 22:42 , Processed in 0.198281 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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