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)
)
页: 1 2 [3]
查看完整版本: 再探 vlax-curve-getsecondDeriv和曲线上一点的切线和法线