已解决-需要帮助从一组线中提取数据
你好,我想自动提取d**** Hidden Message ***** 有几个问题是线总是1-x等,它们是按1->16的顺序绘制的,这意味着只需选择线并从一个数字开始,例如1。
; http://www.theswamp.org/index.php?topic=57753.0
; simple table example lines to table
l By AlanH Aug 2022
(defun rtd (a)
(/ (* a 180.0) pi)
)
(defun pl-table ( / ss sp curspace tableobj k totlen x len ang rownum)
(setq ss (ssget (list (cons 0 "LWPOLYLINE"))))
(setq sp (vlax-3d-point (getpoint "\nPick point for top left of table ")))
(Setq curspace (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(setq tableobj (vla-addtable curspace sp 2 3 1 25))
(vla-settext tableobj 0 0 "Heading")
(vla-settext tableobj 1 0 "No.")
(vla-settext tableobj 1 1 "Length")
(vla-settext tableobj 1 2 "Angle")
(setq k 0 totlen 0.0)
(repeat (setq x (sslength ss))
(setq obj (vlax-ename->vla-object (ssname ss (setq x (1- x)))))
(setq totlen (+ totlen (vlax-get obj 'Length)))
(setq len (strcat (rtos (vlax-get obj 'Length) 2 2) " m"))
(setq ang (rtd (angle (vlax-curve-getstartPoint obj)(vlax-curve-getEndPoint obj))))
(if (> ang 180.0)
(setq ang (rtos (- ang 360.0) 2 0))
(setq ang (rtos ang 2 0))
)
(setq tableobj (vlax-ename->vla-object (entlast)))
(setq rownum (vla-get-rows tableobj))
(vla-InsertRows tableobjrownum(vla-GetRowHeight tableobj (- rownum 1)) 1)
(vla-settext tableobj rownum 0 (rtos (setq K (1+ k)) 2 0))
(vla-settext tableobj rownum 1 len)
(vla-settext tableobj rownum 2 ang)
)
(setq tableobj (vlax-ename->vla-object (entlast)))
(setq rownum (vla-get-rows tableobj))
(vla-InsertRows tableobjrownum(vla-GetRowHeight tableobj (- rownum 1)) 1)
(vla-settext tableobj rownum 0"Total")
(vla-settext tableobj rownum 1 (strcat (rtos totlen 2 0) " m"))
(princ)
)
(pl-table)
当它要求选择对象类型F并且可以在红线上拖动线时,按两次enter键结束选择,然后选择一个点。
正是我所需要的Bigal,谢谢!
不知道您说的线总是1- x是什么意思
它们是按照从1到16的顺序绘制的,如果我必须一条一条地选择线以确保顺序与文本编号匹配,这没关系。
就我所知,我可以将具有-RTOS(/length/)2 X-的行改为增减小数,以便能够在总长度中得到一个小数。它需要一个c开头的defun,直到我调用它。我可以修改它。
但是它返回一个相反的顺序,我选择的第一行是表中的最后一行,我不知道需要修改哪一行才能使它成为第一个选择-表的第一行。
编辑:
与示例的情况不同,所以我没有检查右侧,但是如果线指向左侧(-x),它也应该只有0到90°的范围,如果低于水平线,则为0到-90°,
我将尝试自己修改它,但我不必抱太大期望代码1]
编辑2:
我这样做是为了角度,
(if (> ang 270.0)
(setq ang (rtos (+ -360 ang) 2 0))
(if (> ang 90.0)
(setq ang (rtos (- 180 ang) 2 0))
(setq ang (rtos ang 2 0))
)
仍然不知道如何颠倒表格项目的顺序。 线的列表在一个阶段被颠倒了,我认为这与它们被创建的顺序有关,我没有仔细检查。有几种方法可以从第一个项目或最后一个项目向后处理选择集。也可能是选择顺序ie top -> bot或bot -> top在使用fence时没有检查。
(repeat(setq x(ss length ss))
(setq obj(vlax-ename-> vla-object(ss name ss(setq x(1-x)))))
(setq x-1)
(repeat(ss length ss)
(setq obj(vlax-ename-> vla-object(ss name ss(setq x(1+x)))))
它的like版本1和你的版本2就ok了。 我测试了具有类似套线但中创建 很高兴听到它的工作原理,它就像我做的很多事情一样“从左到右选择”,但如果以一个圆圈的方式,实际上可以从右到左,想想矩形的底部。
页:
[1]