程序思路:利用圆锥曲线的特性:对于正圆锥,垂直底面剖为双曲线,平行
母线剖为抛物线,平行底面剖为圆,斜底面剖为椭圆,于是用平面截锥体得
到抛物线,当然稍微改动即可变为双曲线
程序动机:学习vla-sectionsolid这个语句
思考:得到的spline是否为准确的抛物线呢?或者说近似度非常高呢?假如
我们承认acad的实体是足够精确,而其布尔运算也足够精确的话,这个剖面
线应该足够精确。个人觉得,spline似乎是三次曲线,按道理应该可以很好的
模拟二次曲线抛物线,但对于y^2/a^2-x^2/b^2=1的双曲线,又和y=x^3这
种三次曲线不一样。有点晕,对spline没有研究,麻烦高手解释一下,谢谢。
(defun c:test ()
(vl-load-com)
(setq *acad-object* nil)
(setq *active-document* nil)
(setq *model-space* nil)
(setq ratio (getreal "\n y=kx^2 k=?:"))
(setq vl-p1 (vlax-3d-point '(0 0 0)))
(setq vl-p2 (vlax-3d-point '(1000 0 0)))
(setq vl-p3 (vlax-3d-point '(1000 1000 0)))
(setq vl-p4 (vlax-3d-point '(0 0 -500)))
(setq vl-p5 (vlax-3d-point (list 0 0 (/ 0.5 ratio))))
(setq mycone (vla-addcone (model-space) vl-p1 1000 1000))
(vla-move mycone vl-p1 vl-p4)
(vla-rotate3d mycone vl-p1 vl-p2 (/ pi 4))
(vla-move mycone vl-p1 vl-p5)
(setq cur (vla-sectionsolid mycone vl-p1 vl-p2 vl-p3))
(vla-erase mycone)
(vla-explode cur)
(setq a (ssget "X" '((-4 . "<OR") (0 . "region")
(0 . "line")
(-4 . "OR>")
)
)
)
(command "erase" a "")
)
(defun acad-object ()
(cond
(*acad-object*)
(t
(setq *acad-object* (vlax-get-acad-object))
)
)
)
(defun active-document ()
(cond
(*active-document*)
(t
(setq *active-document* (vla-get-activedocument (acad-object)))
)
)
)
(defun model-space ()
(cond
(*model-space*)
(t
(setq *model-space* (vla-get-modelspace (active-document)))
)
)
)