如何在3D Pline/3D Spl上标记
感谢JohnM的LISP,我刚刚创建了一条三维多段线和三维样条曲线,但我不知道如何在三维多段线和三维样条曲线上标记点到点的指定距离(或变化)。是否需要LISP例程来支持解决此问题?有关详细信息,请参见附图,但请注意,所有点和尺寸均不正确,仅供展示。请帮忙,谢谢。http://img132.imageshack.us/img132/2755/makingdistanceseg5.jpg
http://img132.imageshack.us/img132/makingdistanceseg5.jpg/1/w758.png
标记距离。图纸 这将在距离曲线起点指定距离处放置一个点
为我个人使用而写,无错误检查。。。。
;places point at specified station along a polyline, measured from start LPS 2008
(defun c:pop ()
(vl-load-com)
(setq oldosnap (getvar "osmode"))
(setvar "osmode" 0)
(command "ucs" "w")
(if (/= (getvar "pdmode") 3)(setvar "pdmode" 3))
(setq ob (entsel "Select curve: "))
(setq p2 (getreal "\n Specify Distance : "))
(setq obj (vlax-ename->vla-object (car ob)))
(setq pt1 (vlax-curve-getPointAtDist Obj p2))
(command "Point" pt1)
(command "ucs" "p")
(setvar "osmode" oldosnap)
(princ)
)
感谢Lpsifert,但指定的距离必须是点到点的对齐尺寸,而不是沿曲线的长度。 以尺寸的起点为中心绘制一个半径为所需距离的圆。 您好,请注意,它们是三维多段线和三维样条曲线,那么哪些UCS将用于绘制该圆?
http://img136.imageshack.us/img136/7811/3dplineqo0.jpg
http://img136.imageshack.us/img136/3dplineqo0.jpg/1/w837.png 试试这个:
(defun c:dimcurve(/ vLst oVar cEnt sDis pt cnt pt2 pt3)
(setq vLst (list "PDMODE" "OSMODE" "CMDECHO")
oVar (mapcar 'getvar vLst))
(mapcar 'setvar vLst (list 3 0 0))
(if (and (setq cEnt (car (entsel "\nSelect Curve >")))
(member (cdadr (entget cEnt)) '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE" "ARC" "CIRCLE" "ELLIPSE"))
(not (initget 7))
(setq sDis (getreal "\nSpecify Spacing >")))
(progn
(command "_ucs" "_w")
(setq cnt 0)
(while (>= (distance (setq pt (vlax-curve-GetPointAtDist cEnt (* sDis cnt))) (vlax-curve-GetEndPoint cEnt)) sDis)
(command "_point" pt)
(setq pt2 (polar pt (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv cEnt (vlax-curve-GetParamAtPoint cEnt pt)))) 5.0))
(command "_dimaligned" pt (setq pt3 (vlax-curve-GetPointAtDist cEnt (* sDis (setq cnt (1+ cnt))))) pt2)
(command "_point" pt3))
(command "_ucs" "_P"))
(princ "\n<!> Nothing Selected <!>"))
(mapcar 'setvar vLst oVar)
(princ))
由于您所做工作的性质,DimAligned的精度仅通过在更直的直线上使用较小的增量来提高。 在我看来,李的代码也可以测量曲线上的距离,而不是“点到点”距离。手动绘制一个半径为所需距离的球体,圆心位于点1,其中曲线与曲面相交是所需的点2。
我的想法是lisp需要递增地检查点之间的距离,调整沿曲线的位置,直到曲线上的点位于所需的距离,在一定的公差范围内。 是的,我认为这需要公差-因为我们使用的是“dimaligned”,这是一个线性尺寸,当使用“GetPointatDist”函数时,测量的距离可能与直线距离有所不同,因为曲率较高。 是的,这是需要解决的主要问题。那么,如何在直线(或样条线或样条曲线)和曲面之间的交点插入点?
当我们沿着样条线/样条线插入所有正确的点时,我们可以使用自动对齐的尺寸来显示这些距离->从点到点。 谢谢李,但是所有对齐的DIM都必须在(=15)上找到
页:
[1]
2