从中提取长度和角度
我需要一个LISP从多行中提取“长度”和“角度”,这样我就可以将它们转换为word/excel格式。我会使用数据提取,但在办公室我们使用AutoCAD 2006,正如一些人可能知道的那样,AutoCAD 2006没有数据提取选项。
在我的例子中,我有二维几何形状,仅用多段线绘制。我也有一个观点。我需要从这一点开始,画线到每个折线的转折点,然后从这些线中提取长度和角度。
我每天都有很多这样的形状,所以每天手动操作真的很痛苦。
这是一个图片附件,以便更好地了解我的情况。
从该点开始的所有直线是否都连接到上面多段线形状的每个顶点?
长度和角度的集合必须按特定顺序吗? 对不起,我忘了提这个。
每条线都是独立的,从点到多段线顶点绘制。
例:点为X
-顶点为1,2,3,4,5,6
所有的线都是从X到1,从X到2的下一条线,从X到3的下一条线,依此类推。 这个问题最近也有人问过。请参阅此链接:http://www.cadtutor.net/forum/showthread.php?58199-Extracting-multiple-3d-length-for-line-in-AutoCAD-2007
同时检查本页底部的类似线程。 对不起,我查一下。 @SlopeSilviu:这不是和你的另一个帖子一样吗?
大约是的,但它有一些不同的基线。
我还得出结论,只有LISP可以帮助我,所以我在这里“重做”了一篇文章。 我只是为了好玩才放在一起的
为什么不让它尽可能多地做呢。
这将绘制到每个顶点的线,并生成一个以逗号分隔的文件,名为lineinfo。txt位于“C:\”
运行程序后,打开excel并导入txt文件。
(defun c:mklns (/ pt1 ss ent lsttxt txlst ff)
(setq pt1 (getpoint "Pick The Point"));_base point
(setq ss (ssget '((0 . "LWPOLYLINE"))));_polyline object
(if ss
(progn
(setq ent (entget(ssname ss 0)));_entity info for poly object
(foreach item ent
(if (= (car item) 10)
(progn
(command "pline" pt1 (cdr item) "");_draw lines
(setq lsttxt (strcat ;_make comma seperated list of length and angle
(rtos(distance pt1 (cdr item)))
","
(angtos (angle pt1 (cdr item))0 4)
);_strcat
);_setq
(setq txlst (cons lsttxt txlst));_compiled list of all line length and angles
);_progn
);_if
);_foreach
(setq ff (open "C:/LineInfo.txt" "w"));_write to file
(foreach item txlst
(write-line item ff)
);_foreach
(close ff)
);_progn
(alert "No Polyline Object Selected")
);_if
);_defun
谢谢约翰的快速回复。
我试着加载LISP,它确实加载了,但它什么都没做,可能是命令行缺少了什么,或者一定有什么我不明白的地方。
这是一张图片:
我希望这只是我的愚蠢。。。
(defun c:test (/ adoc Pline Xpoint PtList PtAngleList NewLine)
(vl-load-com)
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(if (setq Pline (car (entsel "\nSelect Pline:"))
Xpoint (getpoint "\nSelect \"X\" Point: "))
(progn
(setq PtList (mapcar
'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget Pline))))
(setq PtAngleList (open (strcat (getvar 'Dwgprefix)(vl-filename-base (getvar 'Dwgname)) ".csv") "A"))
(foreach Pts (cdr PtList)
(setq NewLine (vla-addline (vlax-get (vla-get-activelayout adoc) 'Block)
(vlax-3d-point Xpoint) (vlax-3d-point Pts)))
(write-line (strcat (rtos (vla-get-length NewLine) 2 2) ","
(rtos (vla-get-Angle NewLine) 2 2)) PtAngleList)
)
(print PtAngleList)
(close PtAngleList)
)
)
(princ)
)
页:
[1]
2