明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: gamexia

[提问] 求助!!两条非等距离的样条曲线之间如何绘制几条等分的曲线

  [复制链接]
发表于 2018-10-30 01:58:31 | 显示全部楼层
本帖最后由 lisperado 于 2018-10-30 02:12 编辑
20060510412 发表于 2018-10-29 19:24
个人感觉貌似还有几点可以改进一下:
1.生成的是直线,改为多段线是否更方便选取。
2.对于边界为直线的 ...

当然可行只是故意让你自己从思路中学习如何优化...

以下思路, 请自行明经社区里搜索应该会好多画多段线函数
1.无需代码:先选取程序所画的线(或过滤其图层)以命令: _PEDIT JOIN 可解决!
2.命令方式 : PLINE
3.entmake方式 : LWPOLYLINE
4.activeX方式:vla-AddLightWeightPolyline
推荐方法之3以参考 , 其它自行搜索&研究
在这里是以 'x' 变量表达
  1. (foreach x (vlax-curve-DivideBetweenPair e1 e2 y)
  2. ;;;      (mapcar ''((a b) (grdraw a b 1) ) x (cdr x))
  3.          (entmakex (vl-list* '(0 . "LWPOLYLINE")
  4.                             '(100 . "AcDbEntity")
  5.                             '(100 . "AcDbPolyline")
  6.                             '(62 . 1)
  7.                             (cons 70 0)
  8.                             (cons 90 (length x))
  9.                             (mapcar '(lambda (x) (cons 10 x) ) x)
  10.                             )
  11.                   )

  12.       )









回复 支持 3 反对 0

使用道具 举报

发表于 2018-10-30 18:17:09 | 显示全部楼层
(defun c:tt ( / e1 e2 y ) ;自定义lisp命令=tt , e1 e2 y 局部化避免变量冲突

  (if
    (and (setq e1 (car (entsel "\n选取第一条曲线 "))) ; 储存于变量e1
           (setq e2 (car (entsel "\n选取第二条曲线 "))) ; 储存于变量e2
           (setq y (cond  ((getint "\nDivide by # ? ")) (5))) ;平分默认值=5
           ) ; 储存于变量 y

    (foreach x (vlax-curve-DivideBetweenPair e1 e2 y) ; 把各自有效变量使用于函数参数,返回值=坐标表

;画线需要开始&终点
;利用cdr分成两个序列表 A B C D ...
;(A B C D) 陪对 (B C D) ...

;以mapcar迭代表值以用于绘画功能
;A-B,B-C,C-D etc.. 符合线型表达
      ;(mapcar ''((a b) (grdraw a b 1)) x (cdr x)) ;以grdraw函数瞬态绘画A-B,B-C,C-D....
      (Entmake-Spline x)
      )
    (princ "\n退出?") ;如果选取无效退出
    )
  (princ) ; 无痕迹退出
)

(defun Entmake-Spline (ptn / a)
  (entmake (append (list '(0 . "SPLINE")
                         '(100 . "AcDbEntity")
                         '(100 . "AcDbSpline")
                         '(71 . 3)
                   )
                   (mapcar '(lambda (pt) (cons 11 pt)) ptn)
           )
  )
  (entlast)
)

点评

利用曲线模拟,更加逼真,让我获益匪浅!感谢两位的指导!  发表于 2018-10-30 19:14
对,SPLINE曲线这才完美! p/s:开源函数的好处是在与其它人交流过程也可以获益引发更多思路,谢谢前辈 :) 小小建议 entmake + 'x' 直接entmakex 可省略 (entlast)  发表于 2018-10-30 18:50
回复 支持 3 反对 0

使用道具 举报

发表于 2018-10-30 19:24:28 | 显示全部楼层
yoyoho 发表于 2018-10-30 18:17
(defun c:tt ( / e1 e2 y ) ;自定义lisp命令=tt , e1 e2 y 局部化避免变量冲突

  (if

请问,对于边界曲线为直线的特例,能否直接生成直线而不是样条曲线呢
发表于 2018-10-31 10:58:26 | 显示全部楼层
20060510412 发表于 2018-10-30 19:24
请问,对于边界曲线为直线的特例,能否直接生成直线而不是样条曲线呢

这好象也是明经里的,不记得是谁写的,贴给你:

(defun c:hx(/ e1 e2 p1 p2 p3 p4 n i)
  (while(and(setq e1(ssget":E:S"'((0 . "line"))))
      (setq e2(ssget":E:S"'((0 . "line"))))
      (setq n(getint"插入直线数量")
      n(if n n 1)))
    (setq e1(entget(ssname e1 0))
    p1(mapcar'+'(0 0)(cdr(assoc 10 e1)))
    p2(mapcar'+'(0 0)(cdr(assoc 11 e1)))
    e2(entget(ssname e2 0))
    p3(mapcar'+'(0 0)(cdr(assoc 10 e2)))
    p4(mapcar'+'(0 0)(cdr(assoc 11 e2))))
    (if(inters p1 p3 p2 p4 t)(setq e1 p4 p4 p3 p3 e1))
    (setq e1(/(distance p1 p3)(1+ n)1.)
    e2(/(distance p2 p4)(1+ n)1.)
    p3(angle p1 p3)
    p4(angle p2 p4)
    i 0)
    (while(< i n)
      (setq i(1+ i))
      (entmakex(mapcar'cons'(0 10 11)(list"line"(polar p1 p3(* e1 i))(polar p2 p4(* e2 i))))))
    ))
发表于 2018-10-31 18:29:20 | 显示全部楼层
楼主,你好.能否把整合好的发上来供大家学习.

点评

见24楼直线模拟的代码  发表于 2021-6-9 14:35
就20多层楼,从头到尾读一下,也是一种学习哈  发表于 2018-11-1 10:21
发表于 2019-1-16 10:54:47 | 显示全部楼层
lisperado 发表于 2018-10-28 01:53
试试上传图片
[/img]

可以分享吗?太棒了
发表于 2019-1-16 17:18:10 | 显示全部楼层
lisperado 发表于 2018-10-28 01:53
试试上传图片
[/img]

大师,能把最后的插件分享一下吗?我太需要了,谢谢。

点评

见22楼曲线模拟,24楼直线模拟  发表于 2021-6-9 14:37
 楼主| 发表于 2021-6-9 14:36:44 | 显示全部楼层
yaokui25 发表于 2018-10-31 18:29
楼主,你好.能否把整合好的发上来供大家学习.

22楼就是曲线模拟的代码
发表于 2021-6-11 01:43:44 | 显示全部楼层
lisperado 发表于 2018-10-28 21:03
谢谢l顶上
但不见原版主回复所以只提供函数 ,其他用法只需自行更改参数吧!

最后一个foreach 真的是写的 不错   
发表于 2023-2-28 20:25:36 | 显示全部楼层
yoyoho 发表于 2018-10-30 18:17
(defun c:tt ( / e1 e2 y ) ;自定义lisp命令=tt , e1 e2 y 局部化避免变量冲突

  (if

亲,测试出来变成直线了,可否赐教?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 10:40 , Processed in 0.172009 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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