基于它们的位置选择形状”;“在”内;另一个对象。
嗨,朋友们,我是一名架构研究员(不是架构师),我不知道如何编写一个小程序。在一些AutoCad的东西上,我相当有见识,但是因为我是自学的,所以我的知识中肯定会有一些漏洞,所以没有建议是太愚蠢了。
我有许多平面布置图,需要使用一个名为DepthMap的程序进行分析(这基本上是一个可视化分析程序)。这个程序可以将数据输出到一个文本文件中,我已经创建了一个awk(基于Linux的)程序,将数据转换为AutoCad脚本。运行时,该脚本在AutoCad模型的新图层上“绘制”深度图程序中的数据。每个数据点都是三维矩形的形式,其中x和y给出了x和y位置,厚度表示来自DepthMap程序的数据。每个数据点都用一种特定的算法着色——下面我给出了一个例子。
color 180
_ rectang thickness 3.18203 0,15 0.99,15.99
我倾向于有很多这样的小数据点(一般> 3万)。我想做的是能够在一个单独的层上绘制一个区域(理想情况下是一个多边形),然后创建一个AutoCad程序,自动选择该区域内的所有数据点。然后,我想将这些数据点的属性导出到Excel(谢天谢地,我知道如何导出到Excel)。
我想在单独的图层上绘制这些区域的原因是,有时我需要返回并为不同的分析选择相同的数据点,并且我需要确保每次都获得相同的数据点。此外,由于这些计划中有许多重复的、形状奇怪的房间,我希望能够一次性绘制一个多边形区域并复制/粘贴它,而不是尝试手动选择大量繁琐的数据点。
因此,简而言之:
我在图层A上有许多小矩形。
我在图层b上有由多边形定义的区域。
我想编写一个脚本,导出图层A上每个矩形的属性,这些属性落在图层b上每个多边形的界限内。
任何建议都是非常受欢迎的,即使只是引用一个可能有用的函数。谢谢,
迈克尔
**** Hidden Message ***** 试试这个,它是两年前为一个来自
意大利的家伙写的,看起来和你想解决的任务一样
(defun c:WPL (/ Collector Color Coors Data Dz Elist En First_String Fn Fname I P1 P3 Ptlist Rect Second_String Ss
Thick Tmpss)
(setq dz (getvar "dimzin"))
(setvar "dimzin" 8)
(command "_zoom" "_e")
(if (setq ss (ssget "_X"
(list
(cons -4 "")
)
)
)
(progn
(setq i -1)
(repeat (sslength ss)
(setq en (ssname ss (setq i (1+ i))))
(setq
ptlist (vl-remove-if
(function not)
(mapcar
(function (lambda (x)
(if (= 10 (car x))
(list (car (cdr x)) (cadr (cdr x)))
)
)
)
(entget en)
)
)
)
(setq tmpss (ssget "_CP"
ptlist
(list
(cons -4 "")
)
)
)
(if tmpss
(while
(setq rect (ssname tmpss 0))
(setq collector (cons rect collector))
(ssdel rect tmpss)
)
)
)
)
(alert "No boundaries with \nthese properties")
)
(command "_zoom" "_p")
(foreach itmcollector
(setq elist (entget itm))
(setq coors (vl-remove-if
(function not)
(mapcar (function (lambda (x)
(if (equal 10 (car x))
(cdr x)
)
)
)
elist
)
)
)
(setq p1 (car coors)
;;; p2 (cadr coors)
p3 (caddr coors)
;;; p4 (cadddr coors)
)
(setq thick (cdr (assoc 40 elist))
color (cdr (assoc 62 elist))
)
(setq first_string(strcat "color " (itoa color))
second_string (strcat "_rectang thickness "
(rtos thick 2 5)
" "
(rtos (car p1) 2 2)
","
(rtos (cadr p1) 2 2)
" "
(rtos (car p3) 2 2)
","
(rtos (cadr p3) 2 2)
)
)
(setq data (cons first_string data)
data (cons second_string data))
)
(setq data (reverse data))
(setq fname (strcat (getstring
"\nEnter text file name w/o extension to save data: ")
".txt"))
(setq fn (open (strcat (getvar "dwgprefix") fname) "w"))
(mapcar (function (lambda (x) (write-line x fn)))
data
)
(close fn)
(alert "done")
(setvar "dimzin" dz)
(princ)
)
(princ "\n>> Start command with WPL")
(prin1)
~'J'~
抱歉,Michael,我忘了这是VBA分行
试试这个代码1]
~'J'~
胖子,
谢谢,我非常感谢。我们在学期末就到了,所以批改论文等可能意味着这需要几天的时间,但这非常有帮助! 不客气,迈克尔
祝你顺利度过这学期
~'J'~
页:
[1]