bruno_bdan 发表于 2022-7-5 18:12:44

“ID”c的自动化

大家好,我叫布鲁诺,这是我在这里的第一个帖子!!
 
值得一提的是,我从2014年开始在cad工作。我擅长2-D,对3-D绘图也有一点经验。对不起,我从来没有用过Lisp程序。
 
 
这就是正在发生的事情:
我在用autocad教我哥哥数值积分。我画了一个图,把它分成十个等距的部分,如下所示。
 

 
 
我用“ID”得到每个弦的长度,这样我就可以粘贴到excel表中并计算面积。
 
我的疑问是:有没有办法不逐个单击就获得多行的ID?
当您将绘图划分为100、1000或1000000个空间时,这很好。
 
干杯

Grrr 发表于 2022-7-5 18:29:44

你好,布鲁诺,
您可以使用Lee Mac的“点管理器”来获取交点的坐标(当然,您需要第二个lisp来将这些点对象放置在每个交点处),
或者,如果要直接检查区域,请创建图案填充或bpoly并查看其属性。

Lee Mac 发表于 2022-7-5 18:35:12

欢迎来到CADTutor Bruno!
 
请尝试以下操作:

;; Integration Demonstration-Lee Mac

(defun c:integrate ( / *error* axs crv csv des dis inc int lst num obj pt1 rtn tmp )

   (defun *error* ( msg )
       (if (and (= 'ename (type tmp)) (entget tmp)) (entdel tmp))
       (if (= 'file (type des)) (close des))
       (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
         (princ (strcat "\nError: " msg))
       )
       (princ)
   )
   
   (if (and (setq crv (integrate:select "\nSelect curve to 'integrate': "))
            (setq axs (integrate:select "\nSelect axis: "))
       )
       (progn
         (initget 6)
         (setq num (cond ((getint "\nSpecify number of divisions <10>: ")) (10))
               dis (vlax-curve-getdistatparam axs (vlax-curve-getstartparam axs))
               inc (/ (- (vlax-curve-getdistatparam axs (vlax-curve-getendparam axs)) dis) num)
               obj (vlax-ename->vla-object crv)
         )
         (repeat (1+ num)
               (if (setq pt1 (vlax-curve-getpointatdist axs dis))
                   (progn
                     (setq tmp
                           (entmakex
                               (list
                                  '(0 . "LINE")
                                 (cons 10 pt1)
                                 (cons 11
                                       (mapcar '+ pt1
                                           (   (lambda ( v ) (list (- (cadr v)) (car v)))
                                             (vlax-curve-getfirstderiv axs (vlax-curve-getparamatdist axs dis))
                                           )
                                       )
                                 )
                               )
                           )
                     )
                     (if
                           (setq int
                               (vlax-invoke obj 'intersectwith
                                 (vlax-ename->vla-object tmp) acextendotherentity
                               )
                           )
                           (progn
                               (setq lst (cons (distance pt1 int) lst))
                               (entmake (list '(0 . "LINE") '(62 .(cons 10 pt1) (cons 11 int)))
                           )
                     )
                     (entdel tmp)
                   )
               )
               (setq dis (+ dis inc))
         )
         (if (setq lst (reverse lst))
               (if (and (setq csv (vl-filename-mktemp "int" (getvar 'dwgprefix) ".csv"))
                        (setq des (open csv "w"))
                   )
                   (progn
                     (write-line "Length 1,Length 2,Segment Width,Segment Area" des)
                     (setq rtn
                           (mapcar
                              '(lambda ( a b / x )
                                 (write-line
                                       (strcat
                                           (rtos a 2 3) ","
                                           (rtos b 2 3) ","
                                           (rtos inc 2 3) ","
                                           (rtos (setq x (* inc 0.5 (+ a b))) 2 3)
                                       )
                                       des
                                 )
                                 x
                               )
                               lst (cdr lst)
                           )
                     )
                     (write-line "" des)
                     (write-line (strcat ",,Total Area:," (rtos (apply '+ rtn) 2 3)) des)
                     (setq des (close des))
                     (if (findfile csv) (startapp "explorer" csv))
                   )
                   (princ "\nUnable to generate CSV file.")
               )
               (princ "\nNo intersection data found.")
         )
       )
   )
   (princ)
)
(defun integrate:select ( msg / ent )
   (while
       (progn (setvar 'errno 0) (setq ent (car (entsel msg)))
         (cond
               (   (= 7 (getvar 'errno))
                   (princ "\nMissed, try again.")
               )
               (   (null ent)
                   nil
               )
               (   (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getendparam (list ent)))
                   (princ "\nInvalid object selected.")
               )
         )
       )
   )
   ent
)
(vl-load-com) (princ)

BIGAL 发表于 2022-7-5 18:45:15

pline的一个属性是面积,为什么不将形状设置为闭合pline?使用列表或属性查看区域

Lee Mac 发表于 2022-7-5 18:49:45

 
检索封闭区域当然很容易-我认为OP是为了证明随着分段数的增加和弦更好地逼近曲线(即从第一原理进行积分的图形演示),在真实面积值上的收敛性。

bruno_bdan 发表于 2022-7-5 19:03:50

大家好,谢谢大家的支持!!!
 
是的,李,这正是我想要的!!你的代码就快到了,但不是这样的。。。代码必须执行Grrr所说的内容。Lisp必须:
 
1-)询问线路。(我的意思是,“选择线条”,类似这样,其中线条=我第一张照片上的弦cian/blue,上图)
 
2-)在相交点的每条线上执行ID命令。(此处的目标是复制要粘贴到word文件中的信息)
 
看看这段视频。我都是手工制作的。我相信它会澄清这些想法
 
 
 
Ps-我来自巴西。在这里,我们使用“逗号”而不是“点”,这是我在Word文件中粘贴后在视频中所做的。

Lee Mac 发表于 2022-7-5 19:08:28

为什么不使用我的程序生成的CSV文件数据?

bruno_bdan 发表于 2022-7-5 19:19:30

 
 
就像我说的,你的代码真的快到了,我真的很喜欢!我喜欢最后一个文件是CSV文件的事实!!!因此,我想请您在原始代码中改进两件事(如果可能的话):
 
1-)结果用3个小数位表示。。。我想要4个;
2-)在创建CSV文件数据时,我希望您再添加一行,包含所有文件的最后一个长度,如以下示例所示:
 
 
 
 
再次感谢您的帮助!你不知道你是怎么帮我的!!
页: [1]
查看完整版本: “ID”c的自动化