utopio
发表于 2022-8-9 17:43:15
谢谢分享,
解决了大问题了。
cchessbd
发表于 2022-12-23 07:50:17
meflying 发表于 2003-12-29 08:54
看看这个程序,希望能看出这两个函数的意义(主要是返回值及参数的意义)
这个计算有误,未对(car dir1)为0的情况处理。而且画了2个方向,未展示矢向。
fangmin723
发表于 2023-5-4 12:34:31
meflying 发表于 2003-12-29 08:54
看看这个程序,希望能看出这两个函数的意义(主要是返回值及参数的意义)
优化了当拾取点为第一象限点时除数为零的错误
(defun c:test(/ angf angs ent obj os para pt vecf vecs)
(setq os (getvar "osmode"))
(setq ent (car (entsel)))
(setq obj (vlax-ename->vla-object ent))
(while (setq pt (getpoint "\n拾取点:"))
(setq para (vlax-curve-getParamAtPoint obj (setq pt (vlax-curve-getClosestPointTo obj pt))))
;;切线
(setq vecf (vlax-curve-getFirstDeriv obj para))
(setq angf (angle pt (mapcar '+ pt vecf)))
;;法线
(setq vecs (vlax-curve-getsecondDeriv obj para))
(setq angs (angle pt (mapcar '+ pt vecs)))
(setvar "osmode" 0)
(command "_.line" (polar pt (+ angf pi) 100) (polar pt angf 100) "")
(command "_.line" (polar pt (+ angs pi) 100) (polar pt angs 100) "")
(setvar "osmode" os)
)
(setvar "osmode" os)
(princ)
)