乐于分享
好东西不私藏

【源码】参考线计算

【源码】参考线计算
CAD绘图中,常涉及点与线的关系计算。通过VLISP编写程序,由点与线的关系来确定点的位置。
先总结一下两种方式定点:投影式、导线式。
(defun C:CKjS(/ p1 p2 meth mthTY mthDX DRjpt a1 l1 pa pb lx ly)  (setq p1(cdr(reverse(getpoint"\n指定参考线首端点:")))	p2(cdr(reverse(getpoint"\n指定参考线尾端点:")))	meth(getstring"\n选择参考点的计算方式 [投影(T)/导线(D)] <T>"))  (setq mthTY(lambda(pt1 pt2 dx dy / a0)	       (setq a0(angle pt1 pt2))	       (polar(polar pt1 a0 dx)(+ a0(* pi 0.5))dy))	mthDX(lambda(pt1 pt2 pa pl / dst dx dy)	       (setq dst(distance pt1 pt2)		     dx(* pl(cos pa))		     dy(* pl(sin pa)))	       (mthTY pt1 pt2(+ dst dx)dy))	DRjpt(lambda(pa pb)	       (if(and pa pb)		 (progn		   (entmake(list'(0 . "LINE")(cons 10(reverse pa))(cons 11(reverse pb))))		   (entmake (list '(0 . "CIRCLE")'(62 . 1)(cons 10(reverse pa))(cons 40 0.16)))		   (princ(strcat"点坐标:"(rtos(car pa)2 3)","(rtos(car pa)2 3)))))))  (if(=(strcase meth)"D")    (while(setq a1(getreal"\n输入点偏转角(D.MS) <Exit>:"))      (while(setq l1(getreal"\n点至尾端点的距离 <Back>"))	(setq pa(mthDX p1 p2(rad1 a1) l1)	      pb p2)	(DRjpt pa pb)))    (while(setq lx(getreal"\n参考点相对里程 <Exit>:"))      (while(setq ly(getreal"\n点的偏距 <Back>:"))	(setq pa (mthTY p1 p2 lx ly)	      pb (mthTy p1 p2 lx 0))	(DRjpt pa pb))))  (princ))
注:代码缺失函数功能:1. rad1:角度(D.ms)转弧度,例(rad1 46.32185) 返回0.81225。 完善函数,即可运行。
视屏演示
已关注
关注
重播 分享 赞

相关学习资料