sinmania 发表于 2022-7-5 22:24:39

Cur点之间的距离

您好,来自保加利亚。我真的很喜欢自定义autocad,所以我很快就会学习lisp。。但现在我需要一个常规的帮助。
 
我有一条曲线,我需要一种快速的方法来对我习惯绘制的一个轴进行线性标注,比如说x,来获得曲线点到我绘制的这个自定义轴的距离坐标,所以这个轴基本上是任意线。。我不能手工做这件事,因为他们太多了。。
 
另一种方法是——我有一个带有曲线x和y交点的网络,需要从交点到一条任意线绘制线性尺寸。。
 
 
还可以很好地获得表格或文件中的坐标,以便我可以快速将其转换为excel用于其他计算。。。
如果有人能帮我。。
谢谢

Lee Mac 发表于 2022-7-5 22:28:49

你能上传一张样图来澄清问题吗?
 
另外,这是纯二维问题吗?
 
谢谢
 

sinmania 发表于 2022-7-5 22:34:00

我用这个想法画了一幅新画。它对我来说是纯2d的,但你可以把它做成3d的,我认为它也会很有用。。在文件或excel表格中导出点是非常重要的,因为如果它们是多个点,那么获取坐标并将其键入excel将花费大量时间。
距离图纸

Lee Mac 发表于 2022-7-5 22:36:28

试一试,看看这是否是你所需要的:
 

(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)))))

Lee Mac 发表于 2022-7-5 22:38:09

当你指定一个间隔而不是使用控制点时,上面的问题似乎陷入了一个循环中——但我不知道为什么。“vlax curve getPointatDist”似乎没有到达曲线的末端

Lee Mac 发表于 2022-7-5 22:41:59

这似乎解决了问题,但我仍然不确定为什么原始帖子会无休止地循环
 

(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)))))

sinmania 发表于 2022-7-5 22:45:37

真 的:?。它工作得很好!这正是我第一个任务所需要的。谢谢
十字路口的问题仍然存在。。。要获取样条曲线与选定线的交点到一个轴的距离。。。
 
这是我的新需求——我希望我很傲慢。
距离2.dwg

Lee Mac 发表于 2022-7-5 22:49:54

我的函数已经处理了这个问题。
 
你不能只选择曲线,并指定测量间隔为线之间的距离吗。

sinmania 发表于 2022-7-5 22:53:12

我试过了,它从曲线而不是从我用作轴的线获得测量间隔。并在曲线的等距空间而不是直线的等距空间中测量距离。因此,在曲线弯曲的地方,它也计算长度,并且点在移动。
 
还有一些地方,我需要更多的数据,所以我会做更多的交叉点,他们将不在平等的空间。。。如果有一个选项可以选择相交的线,并找到曲线交点到新的特定原点的距离。
 
但是,如果测量间隔适用于选定的等距直线间隔而不是等距曲线间隔,这将使我的生活更轻松,我将手动完成其他不等距的交点。。
距离3.dwg

Lee Mac 发表于 2022-7-5 22:56:07

啊,当然-我道歉
 
看看我能做什么
页: [1] 2
查看完整版本: Cur点之间的距离