pBe 发表于 2022-7-6 10:46:23

 
试试这个:

(defun tst5(val / objts objt_length strt_pt pts valA fn f)
(vl-load-com)
(cond ((and
(setq objts (car (entsel)))
(setq
objt_length
   (vlax-curve-getDistAtParam
   objts
   (vlax-curve-getEndParam (vlax-ename->vla-objectobjts))))
(setq strt_pt (vlax-curve-getStartPoint objts))
(setq
    pts(list strt_pt)
    valA val)
(repeat (fix (/ objt_length val))
    (setq
      pts (cons (vlax-curve-getPointAtDist objts val) pts)
      val (+ val valA)))
(setq pts (reverse (cons (vlax-curve-getendpoint objts) pts)))
(if (not
      (setq
          fn
         (getfiled "Export to file" (getvar "dwgprefix") "csv" 1)))
    (alert "No file selected!")
    (progn
      (setq f (open fn "a"))
      (foreach
         ptpts
      (write-line
          (strcat (rtos (car pt)) "," (rtos (cadr pt) 2 4))
          f))
      (close f)
      (alert (strcat "Finish export points to file: " fn))))
      )
   )
   )
(princ)
)

 
你发布的代码中有很多错误的括号和函数:
 
这次您不需要使用vl princ来字符串来写入值,因为您没有编写列表。
[这就是我们一开始这么做的原因]
 
通过这样做
(写入行
(strcat(vl princ to string(car pt))”,“(vl princ to string(cadr pt)))f)
结果将是
A列B列
2.32328e+007 1.45359e+008
而这个
(写入行(strcat(rtos(car pt))”,“(rtos(cadr pt)2 4))f)
会给你
A列B列
23232768.8310 145358905.9378
 
我想你应该做的是,在你的例行程序中做一个条件来检查实体类型,线/线/弧/椭圆,并为每个条件分配一组变量
这样你只需要写一个代码

Hari Prashanth 发表于 2022-7-6 10:49:35

哇,非常感谢。那真是太好了。。。你一点一点地引导着我,尽管我对AutoLISP一无所知。这对我来说意义重大。我不知道如何报答你。我想我在某种程度上精通C、CPP和java等编程语言。。。如果有关于编程的事情,我可以提供一些帮助。再次感谢pBe。
页: 1 [2]
查看完整版本: 节点提取