明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: gamexia

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

  [复制链接]
发表于 2018-10-29 12:56:41 | 显示全部楼层
本帖最后由 lisperado 于 2018-10-29 13:01 编辑
20060510412 发表于 2018-10-29 08:46
lisp菜鸟,只给函数源码,还是不会使用......

来自版规则
1. 本版块为LISP源码技术交流版块,发帖时请一律发布源码或解决问题的思路、方法,不得发布编译的程序,更不得发布伪源码。
2. 会员想要发编译程序的,可到本论坛“AutoCAD工具插件”版块进行发布。
3. “授人以鱼不如授人以渔”,本版块力求打造成为会员们答疑解惑的技术交流平台,帮助大家提高Lisp编程技巧和水平
...
...

1 先了解函数功能,参数,返回值
2 反复调试
3 再动点脑筋如何应用返回表值,尝试用于其他各种函数以实现各种不同结果

以最简单方式表达:
  1. ;;simple call
  2. (defun c:tt ( / e1 e2 y ) ;自定义lisp命令=tt , e1 e2 y 局部化避免变量冲突

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

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

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

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



初学者程序可以简单运行,合适于自用
交流学习再优化通用性,检测有效选取&输入,除错等等






发表于 2018-10-29 15:40:36 | 显示全部楼层
本帖最后由 20060510412 于 2018-10-29 15:47 编辑
lisperado 发表于 2018-10-29 12:56
来自版规则

1 先了解函数功能,参数,返回值

谢谢热心楼主。我试用了一下,但是生成的对象是暂时的,一刷新,又消失了,这个怎么解决呢
发表于 2018-10-29 16:41:29 | 显示全部楼层
lisperado 发表于 2018-10-29 12:56
来自版规则

1 先了解函数功能,参数,返回值

是不是那个grdraw函数的问题呢,只能画瞬态的图形么
发表于 2018-10-29 17:13:25 | 显示全部楼层
分得很漂亮,试了也是只有瞬态的图形,帮顶一下!希望继续有代码!
发表于 2018-10-29 17:24:16 | 显示全部楼层
本帖最后由 lisperado 于 2018-10-29 18:15 编辑
20060510412 发表于 2018-10-29 16:41
是不是那个grdraw函数的问题呢,只能画瞬态的图形么

瞬态适用于调试,快而不必undo

让你自学研究
关键都在参数 a b 对吧?
  1. ;;请代替换
  2. (grdraw a b 1)

  3. ;;试验1
  4. (vl-cmdf "_LINE"  a  b "" )

  5. ;;试验2
  6. (vl-cmdf "_LINE" "_non " a "_non" b "" )

  7. ;;试验3
  8. (entmake (list '(0 . "LINE") (cons 10 a)(cons 11 b)))

  9. ;;试验4
  10. (entmakex (mapcar 'cons '(0 10 11 62)(list "LINE" a b 1)) ) (princ)


事先捕捉设定全开,osmode
看看有何区别?

尝试编码的乐趣吧
发表于 2018-10-29 19:17:50 | 显示全部楼层
lisperado 发表于 2018-10-29 17:24
瞬态适用于调试,快而不必undo

让你自学研究

好的,我大概知道什么意思了。我以前用过一段时间的vba,接触lisp这段时间以来,一直都没怎么入门
发表于 2018-10-29 19:18:42 | 显示全部楼层
20060510412 发表于 2018-10-29 19:17
好的,我大概知道什么意思了。我以前用过一段时间的vba,接触lisp这段时间以来,一直都没怎么入门

楼主热心让我十分感激,多谢!!
发表于 2018-10-29 19:24:57 | 显示全部楼层
lisperado 发表于 2018-10-29 17:24
瞬态适用于调试,快而不必undo

让你自学研究

个人感觉貌似还有几点可以改进一下:
1.生成的是直线,改为多段线是否更方便选取。
2.对于边界为直线的特例,是否可直接生成直线。
发表于 2018-10-29 21:11:03 | 显示全部楼层
本帖最后由 panliang9 于 2018-10-29 21:20 编辑

@lisperado
成了,漂亮!

完全是一个万能的分割的程序,可以画发射,可以画平行,完全根据初始的两条而定,非常好!

发表于 2018-10-29 23:18:50 | 显示全部楼层
对于地形图测量人员来说这个功能太有用了,多谢提供函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 10:18 , Processed in 0.236148 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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