“ID”c的自动化
大家好,我叫布鲁诺,这是我在这里的第一个帖子!!值得一提的是,我从2014年开始在cad工作。我擅长2-D,对3-D绘图也有一点经验。对不起,我从来没有用过Lisp程序。
这就是正在发生的事情:
我在用autocad教我哥哥数值积分。我画了一个图,把它分成十个等距的部分,如下所示。
我用“ID”得到每个弦的长度,这样我就可以粘贴到excel表中并计算面积。
我的疑问是:有没有办法不逐个单击就获得多行的ID?
当您将绘图划分为100、1000或1000000个空间时,这很好。
干杯 你好,布鲁诺,
您可以使用Lee Mac的“点管理器”来获取交点的坐标(当然,您需要第二个lisp来将这些点对象放置在每个交点处),
或者,如果要直接检查区域,请创建图案填充或bpoly并查看其属性。 欢迎来到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)
pline的一个属性是面积,为什么不将形状设置为闭合pline?使用列表或属性查看区域
检索封闭区域当然很容易-我认为OP是为了证明随着分段数的增加和弦更好地逼近曲线(即从第一原理进行积分的图形演示),在真实面积值上的收敛性。 大家好,谢谢大家的支持!!!
是的,李,这正是我想要的!!你的代码就快到了,但不是这样的。。。代码必须执行Grrr所说的内容。Lisp必须:
1-)询问线路。(我的意思是,“选择线条”,类似这样,其中线条=我第一张照片上的弦cian/blue,上图)
2-)在相交点的每条线上执行ID命令。(此处的目标是复制要粘贴到word文件中的信息)
看看这段视频。我都是手工制作的。我相信它会澄清这些想法
Ps-我来自巴西。在这里,我们使用“逗号”而不是“点”,这是我在Word文件中粘贴后在视频中所做的。 为什么不使用我的程序生成的CSV文件数据?
就像我说的,你的代码真的快到了,我真的很喜欢!我喜欢最后一个文件是CSV文件的事实!!!因此,我想请您在原始代码中改进两件事(如果可能的话):
1-)结果用3个小数位表示。。。我想要4个;
2-)在创建CSV文件数据时,我希望您再添加一行,包含所有文件的最后一个长度,如以下示例所示:
再次感谢您的帮助!你不知道你是怎么帮我的!!
页:
[1]