明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: biya

平分曲线(LISP免费插件)

    [复制链接]
发表于 2025-3-13 09:03:16 | 显示全部楼层
本帖最后由 hhh454 于 2025-3-13 09:05 编辑

在论坛里看到的,可以学习借鉴一下,原址找不到了,没有版主的全面
功能:在两条曲线中间建立均分曲线
,可以复制,可以下载,一样的
  1. ;---曲线按段数等分,返回点表
  2. (defun div_n_crv(obj n / len mm pts)
  3.   (setq len(vlax-curve-getdistatparam obj(vlax-curve-getendparam obj)))
  4.   (setq mm(/ len n))
  5.   (setq pts nil)
  6.   (setq pts(cons(vlax-curve-getEndPoint obj)pts));终点加入到点表
  7.   (while
  8.     (>(setq len(- len mm))0.1)
  9.     (setq pts(cons(vlax-curve-getPointAtDist obj len)pts))
  10.   )
  11.   (setq pts(cons(vlax-curve-getStartPoint obj)pts));起点加入到点表
  12. )
  13. (defun c:tween_curve(/ dis len1 len2 lenmax n obj1 obj2 pts1 pts2 pts3 pts5 tol)
  14.   (setq obj1(vlax-ename->vla-object(car(entsel "\n请选取第一根曲线:"))))
  15.   (setq obj2(vlax-ename->vla-object(car(entsel "\n请选取第二根曲线:"))))
  16.   (setq n(getint "\n两条曲线中间均分创建几条曲线?<1>"))(or n(setq n 1))
  17.   (if(not(and obj1 obj2 n))(quit));防呆措施
  18.   (setq len1(vlax-curve-getdistatparam obj1(vlax-curve-getendparam obj1)))
  19.   (setq len2(vlax-curve-getdistatparam obj2(vlax-curve-getendparam obj2)))
  20.   (setq tol(fix(* 0.01(setq lenmax(max len1 len2)))))
  21.   (setq dis(getreal(strcat "\n请设置等分近似值(以长线为准,短线适配,默认百分之一,越小越准确):<"(rtos tol 2 0)">")))
  22.   (or dis(setq dis tol))
  23.   (setq pts1(div_n_crv obj1(fix(/ lenmax dis))))
  24.   (setq pts2(div_n_crv obj2(fix(/ lenmax dis))))
  25.   (if
  26.     (>
  27.       (distance(car pts1)(car pts2))
  28.       (distance(car pts1)(last pts2))
  29.     )
  30.     (setq pts2(reverse pts2))
  31.   )
  32.   (setq pts3(mapcar '(lambda(x1 x2)
  33.                        (setq dist(distance x1 x2))
  34.                        (setq mm(/ dist(1+ n)))
  35.                        (setq pts4 nil)
  36.                        (while
  37.                          (>(setq dist(- dist mm))0.1)
  38.                          (setq pts4(cons(polar x1(angle x1 x2)dist)pts4))
  39.                        )
  40.                      )pts1 pts2))
  41.   (setq pts5(apply 'mapcar(cons 'list pts3)))
  42.   (foreach lst pts5
  43.     (entmake(append
  44.               (list
  45.                 '(0 . "SPLINE")
  46.                 '(100 . "AcDbEntity")
  47.                 '(100 . "AcDbSpline")
  48.                 '(71 . 3)
  49.                 '(62 . 6)
  50.               )
  51.               (mapcar '(lambda(x)(cons 11 x))lst)
  52.             )
  53.     )
  54.   )
  55.   (princ)
  56. )


本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-3-13 08:50:35 | 显示全部楼层
谢谢分享,下载试试!!!!!
回复 支持 反对

使用道具 举报

发表于 2025-3-13 08:50:00 | 显示全部楼层
谢谢分享,这种2个线中线均分的功能,CAD居然一直没有吸纳进来。
犀牛是自带这种功能好久了
回复 支持 反对

使用道具 举报

发表于 2025-3-13 08:43:04 | 显示全部楼层
谢谢分享辛苦了楼主
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-13 08:36:41 | 显示全部楼层
love1030312 发表于 2025-3-13 08:18
每个人的命令使用习惯不一样  太短会造成别人的重复  你要简单的可以自己自定义一下就可以了   版主是照 ...

正解,短了会冲突,到时用户骂声一片
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-13 08:35:32 | 显示全部楼层
kexiya123 发表于 2025-3-13 08:03
提个简单要求,把运用的命令名字写简单一点,不要那么长

自己写一个引导文件就行,用短命令调用,再就是在PGP文件中写一个快捷键就行,那是官方自带功能
回复 支持 反对

使用道具 举报

发表于 2025-3-13 08:30:42 来自手机 | 显示全部楼层
感谢分享,不用弄到犀牛里了
回复 支持 反对

使用道具 举报

发表于 2025-3-13 08:26:40 | 显示全部楼层
谢谢分享辛苦了楼主
回复 支持 反对

使用道具 举报

发表于 2025-3-13 08:18:06 | 显示全部楼层
kexiya123 发表于 2025-3-13 08:03
提个简单要求,把运用的命令名字写简单一点,不要那么长

每个人的命令使用习惯不一样  太短会造成别人的重复  你要简单的可以自己自定义一下就可以了   版主是照顾大家的使用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-3-31 11:53 , Processed in 0.166892 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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