明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1429|回复: 9

[提问] 如何沿着路径画等长或等距的直线

[复制链接]
发表于 2015-6-13 19:54:41 | 显示全部楼层 |阅读模式
本帖最后由 浪子_无限 于 2015-6-14 09:40 编辑

工作中有时碰到要用直线模拟曲线的情况,不知有没有办法实现如图的要求

本帖子中包含更多资源

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

x
发表于 2015-6-13 20:30:57 | 显示全部楼层
怎么标题前就加个【Gu_xl】,楼主不知是什么意思吗
 楼主| 发表于 2015-6-14 08:05:09 | 显示全部楼层
429014673 发表于 2015-6-13 20:30
怎么标题前就加个【Gu_xl】,楼主不知是什么意思吗

发帖不多,见笑
发表于 2015-6-14 12:45:07 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-6-14 12:54 编辑

按弧长相等很简单,通过vlax-curve-getpointatdist来得到需要的点,然后绘制直线就是了。按得到的直线相等这相对来说要麻烦些,可能需要按直线长度绘制圆与曲线相交才能准确得到需要的点,如果相对于曲线复杂度来说直线过长的话,可能会得到多于2个点的情况,这需要根据其在曲线上的位置vlax-curve-getdistatpoint进一步确定哪一个点才是需要的(如果解析几何很历害,可以通过数学求解来得到结果,但一是数学功底要求比较高,二是代码写起来也很复杂)
然而这两种办法都无法保证与原曲线的相似度,除非给定的直线足够小
 楼主| 发表于 2015-6-14 14:54:28 | 显示全部楼层
llsheng_73 发表于 2015-6-14 12:45
按弧长相等很简单,通过vlax-curve-getpointatdist来得到需要的点,然后绘制直线就是了。按得到的直线相等这 ...

http://bbs.mjtd.com/thread-93868-1-1.html
今天在论坛搜到这个贴子,感觉功能有些相近,只是这个是定数等分。如果放样后能满足实际工作中的允许误差,到也是一个不错的方式。
本人仅了解一些简单的代码,望高手能帮写一个
 楼主| 发表于 2015-6-14 22:06:07 | 显示全部楼层
刚刚翻到G版的大作
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92459
这个能实现第一种情况的要求,
发表于 2015-6-23 19:32:51 | 显示全部楼层
可以参照这个帖子里面的源码去修改哦:http://bbs.mjtd.com/thread-107510-1-1.html
发表于 2015-6-24 08:52:01 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2015-6-26 16:17 编辑

;近似画法
  1. (defun c:tt ()
  2. (setvar "CMDECHO" 0)
  3. (if (setq ln (getdist "\n长度: "))
  4.   (if (setq ss (ssget '((0 . "ARC,*POLYLINE,SPLINE"))))
  5.    (repeat (setq i (sslength ss))
  6.     (setq en (ssname ss (setq i (1- i))))
  7.     (setq ent (entget en))
  8.     (setq ptlst (list
  9.      (if (= (cdr(assoc 0 ent)) "ARC")
  10.       (polar (cdr(assoc 10 ent)) (cdr(assoc 51 ent)) (cdr(assoc 40 ent)))
  11.       (cdr(assoc 10 (reverse ent)))
  12.      )
  13.     ))
  14.     (command "_.MEASURE" en ln)
  15.     (setq sspt (ssget "P"))
  16.     (repeat (setq j (sslength sspt))
  17.      (setq ptlst (cons (cdr(assoc 10 (entget(ssname sspt (setq j (1- j)))))) ptlst))
  18.     )
  19.     (command "_.ERASE" sspt "")
  20.     (if (= (cdr(assoc 0 ent)) "ARC")
  21.      (command "_.PLINE" (polar (cdr(assoc 10 ent)) (cdr(assoc 50 ent)) (cdr(assoc 40 ent))))
  22.      (command "_.PLINE" (cdr(assoc 10 ent)))
  23.     )
  24.     (foreach pt ptlst (command pt))
  25.     (command "")
  26.    )
  27.   )
  28. )
  29. (setvar "CMDECHO" 1)
  30. (princ)
  31. )
 楼主| 发表于 2015-6-26 10:44:47 | 显示全部楼层
ZZXXQQ 发表于 2015-6-24 08:52
;近似画法

感谢帮助
有点小问题,我自己将第四句改成
(if (setq ss (ssget '((0 . "LINE,*POLYLINE,SPLINE,ARC"))))
想增加选择圆弧,结果会画出一个封闭的pl线,不知为何?
还有些小问题,我附在附图里,请赐教。

我有个思路,就是用cad的me命令得到一系列等分点,然后连接这些点得到最终的线段,只是连接多个点不知道该用什么方法。



本帖子中包含更多资源

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

x
发表于 2015-6-26 16:21:47 | 显示全部楼层
浪子_无限 发表于 2015-6-26 10:44
感谢帮助
有点小问题,我自己将第四句改成
(if (setq ss (ssget '((0 . "LINE,*POLYLINE,SPLINE,ARC")) ...

8楼改了。再试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-16 09:16 , Processed in 0.178163 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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