查找特定距离文本
你好这是愚蠢的帕特阿甘。我有一个新问题似乎很难,因为它不仅仅是“查找最近的”
但谁知道呢,也许你们这些巫师会记住答案。
这就是我要做的,我知道如何制作一个muitleader,以及所有这些,然后抓住要点并说出来,但是有了这些要点,我从DXF引入,它们有一个与之相关的名称。
示例1
这是我的习题集,这些点和它们的名字并没有分组或分块在一起,所以它们就像两个不同的实体。
此外,我不能使用“查找最近点”,因为有时我有很多点重叠。
示例2
同上。我已经发现文本距离原点只有1英寸,基本上我正在寻找一种搜索文本的方法,搜索距离只有1英寸,而不是1.001英寸。这是不是太具体了?
谢谢你的帮助。
[编辑:很抱歉第一张图像的分辨率太差,我也不是MS paint pro。] 您可以尝试以下场景(我在括号中指出了要使用的函数):
[列表]
[*]使用图形中的所有点图元创建选择集(SSGET)
[*]解析上述选择集,并使用交叉窗口模式为每个点创建一个选择集,仅保留文本实体;矩形的大小应基于点和标签之间的预期距离(为了安全起见,可以稍微增加一点),并将以当前点(SSNAME、ENTGET、POLAR、SSGET)为中心
[*]标签选择集可能有更多条目-计算点和每个标签之间的距离,并保留符合您要求的一个;可能也有助于验证角度,但仅当角度为常量时(SSNAME、ENTGET、SSGET、DISTANCE、angle)
[/列表] 太棒了,这应该足够让我走了。谢谢 半碰半求。
所以在你开始大脑编译之前,我会给你一些剧透。
这是一个糟糕的结局,我知道。我需要知道如何修复它,我想要的是:
从我的GETPOINT,我希望它找到距离GETPOINT 1.01英寸半径内的文本。
这个半径必须都是x,y和z,因为我通常需要旋转所有的点,文本不会一直保持在同一个z平面上。
我的要点列表可能有点奇怪,但我愿意,有一个简单的方法
(ssget "_WP" (ptlist circle raduis=1) (0. "TEXT"))
或者是我忽略了一些简单的事情。。。。
如果你们注意到我的“getfield”很糟糕,我也不会感到惊讶
因为我对这个也很陌生。
谢谢你们的帮助,或者至少你们的时间伙计们。
(defun c:p2f2(/ p x y z j k ptlst ptcoord textloc cs_from cs_to file text filename rstr space xlen ylen zlen modspace)
(setq fn (getfiled "save DSN as..." "c:/DESIGNDUMP/" "dsn" 1)))
(while ;start while
(setq p (getpoint "\nPick Point"))
(setq cs_from 1) ; this section keeps WCS
(setq cs_to 0)
(setq p1 (trans p cs_from cs_to 0))
(setq textloc (getpoint p "\tPLACE TEXT\n"))
(setq rstr 12) ; this section is to maintain formatting, since unformatted DSN files are sensitive.
(setq space (strcat " "))
(setq x (rtos (car p1)))
(setq y (rtos (cadr p1)))
(setq z (rtos (caddr P1)))
(setq xlen (strlen x))
(setq ylen (strlen y))
(setq zlen (strlen z))
(setq modspacex (substr space 1 (- rstr xlen))) ; formatting length
(setq modspacey (substr space 1 (- rstr ylen)))
(setq modspacez (substr space 1 (- rstr zlen)))
(setq wiggle 1.01) ; this is where i attempt to have a SSGET using a window of wherever my point is, plus or minus 1.01 inch, since my text is exactly 1 inch away.
(setq xTEXT1 (rtos (+ (car P1) wiggle)))
(setq xTEXT2 (rtos (- (car P1) wiggle)))
(setq yTEXT1 (rtos (+ (cadr P1) wiggle)))
(setq yTEXT2 (rtos (- (cadr P1) wiggle)))
(setq zTEXT1 (rtos (+ (caddr P1) wiggle)))
(setq zTEXT2 (rtos (- (caddr P1) wiggle)))
(setq PTLST (list xtext1 xtext2 ytext1 ytext2 ztext1 ztext2)
(setq k (ssget "_WP" ptlist '((0 . "TEXT"))))
(setq ptcoord (strcat k "\t" modspacex x"\t" modspacey y"\t" modspacez z)); the string read out for the mutileader AND dsn file
(setvar "cmdecho" 0)
(command "_leader" p textloc "" ptcoord "")
(setq file (open fn))
(write-line ptcoord file)
(close file)
(princ ptcoord)
) ;end while
(setvar "cmdecho" 1)
)
**注意:文件类型“.dsn”假设为文本文件,只是扩展名为“dsn”。 更新!
在真正理解了我认为它需要什么之后,重新编写了我的多边形窗口。它似乎通过了SSGET,但现在我的GetField有问题
它似乎没有提示另存为,也没有“设置我的q”或“设置FN”。。。。。这就是我现在的问题。除了打开文件而不是“另存为”之外,我在GetField中找不到足够的信息 你在“while”中失去了我,这是否意味着在每个拾取点找到1英寸以外的对象? 是 啊基本上,每次我选择一个点,都会有一英寸远的文本,这就是DXF out命令在另一个程序上的工作方式。在这期间,当我获取这些GETPOINTS时,我希望它将这些点写入“dsn”文件。
这是修改后的代码,它似乎是一个好的SSGET,但却是一个坏的SSGET
错误:SETQ中的变量名错误:(SETQ PTCOORD(STRCAT K“\t”MODSPACEX…)
我强烈怀疑这是我的STRCAT。。。。
(defun c:p2f2(/ p x y z j k fn ptlst ptcoord textloc cs_from cs_to file text filename rstr space xlen ylen zlen modspace)
(setq fn (getfiled "save DSN as..." "c:/DESIGNDUMP/" "dsn" 1)))
(while ;start while
(setq p (getpoint "\nPick Point"))
(setq cs_from 1)
(setq cs_to 0)
(setq p1 (trans p cs_from cs_to 0))
(setq textloc (getpoint p "\tPLACE TEXT\n"))
(setq rstr 12)
(setq space (strcat " "))
(setq x (rtos (car p1)))
(setq y (rtos (cadr p1)))
(setq z (rtos (caddr P1)))
(setq xlen (strlen x))
(setq ylen (strlen y))
(setq zlen (strlen z))
(setq modspacex (substr space 1 (- rstr xlen)))
(setq modspacey (substr space 1 (- rstr ylen)))
(setq modspacez (substr space 1 (- rstr zlen)))
(setq wiggle 1.01)
(setq xTEXT1 (rtos (+ (car P1) wiggle)))
(setq xTEXT2 (rtos (- (car P1) wiggle)))
(setq yTEXT1 (rtos (+ (cadr P1) wiggle)))
(setq yTEXT2 (rtos (- (cadr P1) wiggle)))
(setq zTEXT1 (rtos (+ (caddr P1) wiggle)))
(setq zTEXT2 (rtos (- (caddr P1) wiggle)))
(setq PTLST '((xtext1 ytext1 ztext1) (xtext1 ytext2 ztext1) (xtext1 ytext1 ztext2) (xtext1 ytext2 ztext2) (xtext2 ytext1 ztext1) (xtext2 ytext2 ztext1) (xtext2 ytext1 ztext2) (xtext2 ytext2 ztext2)))
(setq k (ssget "_WP" ptlist '((0 . "TEXT")))
(setq ptcoord (strcat k "\t" modspacex x"\t" modspacey y"\t" modspacez z))
(setvar "cmdecho" 0)
(command "_leader" p textloc "" ptcoord "")
(setq file (open fn))
(write-line ptcoord file)
(close fn)
(princ ptcoord)
) ;end while
(setvar "cmdecho" 1)
) 更新agian!
我已经走了相当远,但我的ssget“WP”点列表并不完全正确。我只是到处都是零。
修订过的:
(defun c:p2f2 (/ p x y z j k
fn ptlst ptcoord textloc cs_from cs_to file
text filename rstr space xlen ylen
zlen modspace
)
(setq dwgname (vl-filename-base (getvar "dwgname")))
(setq date (menucmd "M=$(edtime,$(getvar,date),MO_DD_YY)"))
(setq fn (getfiled "save DSN as..."
(strcat "c:/DESIGN_DUMP/" dwgname "-" date)
"dsn"
1
)
)
(IF (/= fn nil)
(while ;start while
(setq p (getpoint "\nPick Point"))
(setq cs_from 1)
(setq cs_to 0)
(setq p1 (trans p cs_from cs_to 0))
(setq textloc (getpoint p "\tPLACE TEXT\n"))
(setq rstr 12)
(setq space (strcat " "))
(setq x (rtos (car P1)))
(setq y (rtos (cadr P1)))
(setq z (rtos (caddr P1)))
(setq xlen (strlen x))
(setq ylen (strlen y))
(setq zlen (strlen z))
(setq modspacex (substr space 1 (- rstr xlen)))
(setq modspacey (substr space 1 (- rstr ylen)))
(setq modspacez (substr space 1 (- rstr zlen)))
(setq wiggle 1.01)
(setq xTEXT1 (+ (car P) wiggle))
(setq xTEXT2 (- (car P) wiggle))
(setq yTEXT1 (+ (cadr P) wiggle))
(setq yTEXT2 (- (cadr P) wiggle))
(setq zTEXT1 (+ (caddr P) wiggle))
(setq zTEXT2 (- (caddr P) wiggle))
(setq point1 (xtext1 ytext1 ztext1))
(setq point2 (xtext1 ytext2 ztext1))
(setq point3 (xtext1 ytext1 ztext2))
(setq point4 (xtext1 ytext2 ztext2))
(setq point5 (xtext2 ytext1 ztext1))
(setq point6 (xtext2 ytext2 ztext1))
(setq point7 (xtext2 ytext1 ztext2))
(setq point8 (xtext2 ytext2 ztext2))
(setq ptlst (list point1 point2 point3 point4
point5 point6 point7 point8
)
)
(setq k (ssget "_WP" ptlst))
(if (= k nil)
(setq k (rtos j 2 0))
)
(setq ptcoord (strcat k "\t" modspacex
x "\t" modspacey
y "\t" modspacez
z "\t"
)
)
(setvar "cmdecho" 0)
(command "_leader" p textloc "" ptcoord "")
(write-line ptcoord fn)
(close fn)
(princ ptcoord)
(setq j (+ j 1))
) ;end while
) ;end if
(setvar "cmdecho" 1)
)
我不知道如何制作一个好的点列表。
如果我键入“(list xtext1 ytext1 ztext1)”
然后我得到一个stringp nil。。。。
页:
[1]