Cur点之间的距离
您好,来自保加利亚。我真的很喜欢自定义autocad,所以我很快就会学习lisp。。但现在我需要一个常规的帮助。我有一条曲线,我需要一种快速的方法来对我习惯绘制的一个轴进行线性标注,比如说x,来获得曲线点到我绘制的这个自定义轴的距离坐标,所以这个轴基本上是任意线。。我不能手工做这件事,因为他们太多了。。
另一种方法是——我有一个带有曲线x和y交点的网络,需要从交点到一条任意线绘制线性尺寸。。
还可以很好地获得表格或文件中的坐标,以便我可以快速将其转换为excel用于其他计算。。。
如果有人能帮我。。
谢谢 你能上传一张样图来澄清问题吗?
另外,这是纯二维问题吗?
谢谢
李 我用这个想法画了一幅新画。它对我来说是纯2d的,但你可以把它做成3d的,我认为它也会很有用。。在文件或excel表格中导出点是非常重要的,因为如果它们是多个点,那么获取坐标并将其键入excel将花费大量时间。
距离图纸 试一试,看看这是否是你所需要的:
(defun c:CurvPt(/ doc spc file cEnt oPt cObj Int oFile pLst)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
spc (if (zerop (vla-get-activespace doc))
(if (= (vla-get-mspace doc) :vlax-true)
(vla-get-modelspace doc)
(vla-get-paperspace doc))
(vla-get-modelspace doc)))
(setq file (getfiled "\nSelect Location for Excel File"
(if def_file def_file "") "csv" 1))
(if (not (setq def_file file))
(exit))
(if (and (setq cEnt (car (entsel "\nSelect Curve to Measure: ")))
(eq "SPLINE" (cdr (assoc 0 (entget cEnt)))))
(progn
(setq oPt (getpoint "\nSpecify Origin for Measurement <0,0,0> : "))
(or oPt (setq oPt '(0 0 0)))
(setq cObj(vlax-ename->vla-object cEnt)
Int (getreal "\nSpecify Measurement Interval <Control Points> : ")
oFile (open file "w") i -1)
(write-line "X Distance,Y Distance" oFile)
(if Int
(while (setq pt (vlax-curve-getPointatDist cObj (* Int (setq i (1+ i)))))
(setq pLst (cons pt pLst)))
(setq pLst (vlax-list->3D-point
(vlax-safearray->list
(vlax-variant-value
(vla-get-ControlPoints cObj))))))
(foreach ptpLst
(write-line
(strcat (rtos (- (car pt) (car oPt))) ","
(rtos (- (cadr pt) (cadr oPt)))) oFile)
(vla-addDimRotatedspc (vlax-3D-point pt)
(vlax-3D-point (list (car pt) (cadr oPt) 0)) (vlax-3D-point pt) (/ pi 2))
(vla-addDimRotated spc (vlax-3D-point pt)
(vlax-3D-point (list (car oPt) (cadr pt) 0)) (vlax-3D-point pt) 0))
(close oFile))
(princ "\n<!> No Spline Selected <!>"))
(princ))
(defun vlax-list->3D-point(lst)
(if lst
(cons (list (car lst) (cadr lst) (caddr lst))
(vlax-list->3D-point (cdddr lst)))))
当你指定一个间隔而不是使用控制点时,上面的问题似乎陷入了一个循环中——但我不知道为什么。“vlax curve getPointatDist”似乎没有到达曲线的末端 这似乎解决了问题,但我仍然不确定为什么原始帖子会无休止地循环
(defun c:CurvPt(/ doc spc file cEnt oPt cObj Int oFile pLst)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
spc (if (zerop (vla-get-activespace doc))
(if (= (vla-get-mspace doc) :vlax-true)
(vla-get-modelspace doc)
(vla-get-paperspace doc))
(vla-get-modelspace doc)))
(setq file (getfiled "\nSelect Location for Excel File"
(if def_file def_file "") "csv" 1))
(if (not (setq def_file file))
(exit))
(if (and (setq cEnt (car (entsel "\nSelect Curve to Measure: ")))
(eq "SPLINE" (cdr (assoc 0 (entget cEnt)))))
(progn
(setq oPt (getpoint "\nSpecify Origin for Measurement <0,0,0> : "))
(or oPt (setq oPt '(0 0 0)))
(setq cObj(vlax-ename->vla-object cEnt)
Int (getreal "\nSpecify Measurement Interval <Control Points> : ")
oFile (open file "w") i -1)
(write-line "X Distance,Y Distance" oFile)
(if Int
(while (and (setq pt (vlax-curve-getPointatDist cObj (* Int i)))
(> (distance (vlax-curve-getEndPoint cObj) pt) Int))
(setq pLst (cons pt pLst) i (1+ i)))
(setq pLst (vlax-list->3D-point
(vlax-safearray->list
(vlax-variant-value
(vla-get-ControlPoints cObj))))))
(foreach ptpLst
(write-line
(strcat (rtos (- (car pt) (car oPt))) ","
(rtos (- (cadr pt) (cadr oPt)))) oFile)
(vla-addDimRotatedspc (vlax-3D-point pt)
(vlax-3D-point (list (car pt) (cadr oPt) 0)) (vlax-3D-point pt) (/ pi 2))
(vla-addDimRotated spc (vlax-3D-point pt)
(vlax-3D-point (list (car oPt) (cadr pt) 0)) (vlax-3D-point pt) 0))
(close oFile))
(princ "\n<!> No Spline Selected <!>"))
(princ))
(defun vlax-list->3D-point(lst)
(if lst
(cons (list (car lst) (cadr lst) (caddr lst))
(vlax-list->3D-point (cdddr lst)))))
真 的:?。它工作得很好!这正是我第一个任务所需要的。谢谢
十字路口的问题仍然存在。。。要获取样条曲线与选定线的交点到一个轴的距离。。。
这是我的新需求——我希望我很傲慢。
距离2.dwg 我的函数已经处理了这个问题。
你不能只选择曲线,并指定测量间隔为线之间的距离吗。 我试过了,它从曲线而不是从我用作轴的线获得测量间隔。并在曲线的等距空间而不是直线的等距空间中测量距离。因此,在曲线弯曲的地方,它也计算长度,并且点在移动。
还有一些地方,我需要更多的数据,所以我会做更多的交叉点,他们将不在平等的空间。。。如果有一个选项可以选择相交的线,并找到曲线交点到新的特定原点的距离。
但是,如果测量间隔适用于选定的等距直线间隔而不是等距曲线间隔,这将使我的生活更轻松,我将手动完成其他不等距的交点。。
距离3.dwg 啊,当然-我道歉
看看我能做什么
页:
[1]
2