乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 32|回复: 7

[编程交流] 查找特定距离文本

[复制链接]

6

主题

29

帖子

23

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 06:56:57 | 显示全部楼层 |阅读模式
你好这是愚蠢的帕特阿甘。
 
我有一个新问题似乎很难,因为它不仅仅是“查找最近的”
 
但谁知道呢,也许你们这些巫师会记住答案。
 
这就是我要做的,我知道如何制作一个muitleader,以及所有这些,然后抓住要点并说出来,但是有了这些要点,我从DXF引入,它们有一个与之相关的名称。
 
示例1
 
这是我的习题集,这些点和它们的名字并没有分组或分块在一起,所以它们就像两个不同的实体。
此外,我不能使用“查找最近点”,因为有时我有很多点重叠。
 
示例2
 
同上。我已经发现文本距离原点只有1英寸,基本上我正在寻找一种搜索文本的方法,搜索距离只有1英寸,而不是1.001英寸。这是不是太具体了?
 
谢谢你的帮助。
 
[编辑:很抱歉第一张图像的分辨率太差,我也不是MS paint pro。]
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:07:22 | 显示全部楼层
您可以尝试以下场景(我在括号中指出了要使用的函数):
[列表]
  • 使用图形中的所有点图元创建选择集(SSGET)
  • 解析上述选择集,并使用交叉窗口模式为每个点创建一个选择集,仅保留文本实体;矩形的大小应基于点和标签之间的预期距离(为了安全起见,可以稍微增加一点),并将以当前点(SSNAME、ENTGET、POLAR、SSGET)为中心
  • 标签选择集可能有更多条目-计算点和每个标签之间的距离,并保留符合您要求的一个;可能也有助于验证角度,但仅当角度为常量时(SSNAME、ENTGET、SSGET、DISTANCE、angle)
    [/列表]
  • 回复

    使用道具 举报

    6

    主题

    29

    帖子

    23

    银币

    初来乍到

    Rank: 1

    铜币
    30
    发表于 2022-7-6 07:16:06 | 显示全部楼层
    太棒了,这应该足够让我走了。谢谢
    回复

    使用道具 举报

    6

    主题

    29

    帖子

    23

    银币

    初来乍到

    Rank: 1

    铜币
    30
    发表于 2022-7-6 07:31:13 | 显示全部楼层
    半碰半求。
     
    所以在你开始大脑编译之前,我会给你一些剧透。
     
    这是一个糟糕的结局,我知道。我需要知道如何修复它,我想要的是:
    从我的GETPOINT,我希望它找到距离GETPOINT 1.01英寸半径内的文本。
    这个半径必须都是x,y和z,因为我通常需要旋转所有的点,文本不会一直保持在同一个z平面上。
     
    我的要点列表可能有点奇怪,但我愿意,有一个简单的方法
     
    1. (ssget "_WP" (ptlist circle raduis=1) (0. "TEXT"))

     
    或者是我忽略了一些简单的事情。。。。
     
    如果你们注意到我的“getfield”很糟糕,我也不会感到惊讶
    因为我对这个也很陌生。
    谢谢你们的帮助,或者至少你们的时间伙计们。
     
     
    1. (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)
    2. (setq fn (getfiled "save DSN as..." "c:/DESIGNDUMP/" "dsn" 1)))
    3. (while ;start while
    4. (setq p (getpoint "\nPick Point"))
    5. (setq cs_from 1) ; this section keeps WCS
    6. (setq cs_to 0)
    7. (setq p1 (trans p cs_from cs_to 0))
    8. (setq textloc (getpoint p "\tPLACE TEXT\n"))
    9. (setq rstr 12) ; this section is to maintain formatting, since unformatted DSN files are sensitive.
    10. (setq space (strcat "            "))
    11. (setq x (rtos (car p1)))
    12. (setq y (rtos (cadr p1)))
    13. (setq z (rtos (caddr P1)))
    14. (setq xlen (strlen x))
    15. (setq ylen (strlen y))
    16. (setq zlen (strlen z))
    17. (setq modspacex (substr space 1 (- rstr xlen))) ; formatting length
    18. (setq modspacey (substr space 1 (- rstr ylen)))
    19. (setq modspacez (substr space 1 (- rstr zlen)))
    20. (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.
    21. (setq xTEXT1 (rtos (+ (car P1) wiggle)))
    22. (setq xTEXT2 (rtos (- (car P1) wiggle)))
    23. (setq yTEXT1 (rtos (+ (cadr P1) wiggle)))
    24. (setq yTEXT2 (rtos (- (cadr P1) wiggle)))
    25. (setq zTEXT1 (rtos (+ (caddr P1) wiggle)))
    26. (setq zTEXT2 (rtos (- (caddr P1) wiggle)))
    27. (setq PTLST (list xtext1 xtext2 ytext1 ytext2 ztext1 ztext2)
    28. (setq k (ssget "_WP" ptlist '((0 . "TEXT"))))
    29. (setq ptcoord (strcat k "\t" modspacex x"\t" modspacey y"\t" modspacez z)); the string read out for the mutileader AND dsn file
    30. (setvar "cmdecho" 0)
    31. (command "_leader" p textloc "" ptcoord "")
    32. (setq file (open fn))
    33. (write-line ptcoord file)
    34. (close file)
    35. (princ ptcoord)
    36. ) ;end while
    37. (setvar "cmdecho" 1)
    38. )

     
    **注意:文件类型“.dsn”假设为文本文件,只是扩展名为“dsn”。
    回复

    使用道具 举报

    6

    主题

    29

    帖子

    23

    银币

    初来乍到

    Rank: 1

    铜币
    30
    发表于 2022-7-6 07:32:50 | 显示全部楼层
    更新!
     
    在真正理解了我认为它需要什么之后,重新编写了我的多边形窗口。它似乎通过了SSGET,但现在我的GetField有问题
     
    它似乎没有提示另存为,也没有“设置我的q”或“设置FN”。。。。。这就是我现在的问题。除了打开文件而不是“另存为”之外,我在GetField中找不到足够的信息
    回复

    使用道具 举报

    pBe

    32

    主题

    2722

    帖子

    2666

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    211
    发表于 2022-7-6 07:46:06 | 显示全部楼层
    你在“while”中失去了我,这是否意味着在每个拾取点找到1英寸以外的对象?
    回复

    使用道具 举报

    6

    主题

    29

    帖子

    23

    银币

    初来乍到

    Rank: 1

    铜币
    30
    发表于 2022-7-6 07:55:01 | 显示全部楼层
    是 啊基本上,每次我选择一个点,都会有一英寸远的文本,这就是DXF out命令在另一个程序上的工作方式。在这期间,当我获取这些GETPOINTS时,我希望它将这些点写入“dsn”文件。
     
    这是修改后的代码,它似乎是一个好的SSGET,但却是一个坏的SSGET
     
    错误:SETQ中的变量名错误:(SETQ PTCOORD(STRCAT K“\t”MODSPACEX…)
     
    我强烈怀疑这是我的STRCAT。。。。
     
    1. (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)
    2. (setq fn (getfiled "save DSN as..." "c:/DESIGNDUMP/" "dsn" 1)))
    3. (while ;start while
    4. (setq p (getpoint "\nPick Point"))
    5. (setq cs_from 1)
    6. (setq cs_to 0)
    7. (setq p1 (trans p cs_from cs_to 0))
    8. (setq textloc (getpoint p "\tPLACE TEXT\n"))
    9. (setq rstr 12)
    10. (setq space (strcat "            "))
    11. (setq x (rtos (car p1)))
    12. (setq y (rtos (cadr p1)))
    13. (setq z (rtos (caddr P1)))
    14. (setq xlen (strlen x))
    15. (setq ylen (strlen y))
    16. (setq zlen (strlen z))
    17. (setq modspacex (substr space 1 (- rstr xlen)))
    18. (setq modspacey (substr space 1 (- rstr ylen)))
    19. (setq modspacez (substr space 1 (- rstr zlen)))
    20. (setq wiggle 1.01)
    21. (setq xTEXT1 (rtos (+ (car P1) wiggle)))
    22. (setq xTEXT2 (rtos (- (car P1) wiggle)))
    23. (setq yTEXT1 (rtos (+ (cadr P1) wiggle)))
    24. (setq yTEXT2 (rtos (- (cadr P1) wiggle)))
    25. (setq zTEXT1 (rtos (+ (caddr P1) wiggle)))
    26. (setq zTEXT2 (rtos (- (caddr P1) wiggle)))
    27. (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)))
    28. (setq k (ssget "_WP" ptlist '((0 . "TEXT")))
    29. (setq ptcoord (strcat k "\t" modspacex x"\t" modspacey y"\t" modspacez z))
    30. (setvar "cmdecho" 0)
    31. (command "_leader" p textloc "" ptcoord "")
    32. (setq file (open fn))
    33. (write-line ptcoord file)
    34. (close fn)
    35. (princ ptcoord)
    36. ) ;end while
    37. (setvar "cmdecho" 1)
    38. )
    回复

    使用道具 举报

    6

    主题

    29

    帖子

    23

    银币

    初来乍到

    Rank: 1

    铜币
    30
    发表于 2022-7-6 08:03:08 | 显示全部楼层
    更新agian!
     
    我已经走了相当远,但我的ssget“WP”点列表并不完全正确。我只是到处都是零。
     
    修订过的:
     
    1. (defun c:p2f2 (/       p       x       y       z       j       k
    2.        fn      ptlst   ptcoord textloc cs_from cs_to   file
    3.        text    filename               rstr    space   xlen    ylen
    4.        zlen    modspace
    5.       )
    6. (setq dwgname (vl-filename-base (getvar "dwgname")))
    7. (setq date (menucmd "M=$(edtime,$(getvar,date),MO_DD_YY)"))
    8. (setq        fn (getfiled "save DSN as..."
    9.              (strcat "c:/DESIGN_DUMP/" dwgname "-" date)
    10.              "dsn"
    11.              1
    12.    )
    13. )
    14. (IF (/= fn nil)
    15.    (while                                ;start while
    16.      (setq p (getpoint "\nPick Point"))
    17.       (setq cs_from 1)
    18.       (setq cs_to 0)
    19.       (setq p1 (trans p cs_from cs_to 0))
    20.       (setq textloc (getpoint p "\tPLACE TEXT\n"))
    21.       (setq rstr 12)
    22.       (setq space (strcat "            "))
    23.       (setq x (rtos (car P1)))
    24.       (setq y (rtos (cadr P1)))
    25.       (setq z (rtos (caddr P1)))
    26.       (setq xlen (strlen x))
    27.       (setq ylen (strlen y))
    28.       (setq zlen (strlen z))
    29.       (setq modspacex (substr space 1 (- rstr xlen)))
    30.       (setq modspacey (substr space 1 (- rstr ylen)))
    31.       (setq modspacez (substr space 1 (- rstr zlen)))
    32.       (setq wiggle 1.01)
    33.       (setq xTEXT1 (+ (car P) wiggle))
    34.       (setq xTEXT2 (- (car P) wiggle))
    35.       (setq yTEXT1 (+ (cadr P) wiggle))
    36.       (setq yTEXT2 (- (cadr P) wiggle))
    37.       (setq zTEXT1 (+ (caddr P) wiggle))
    38.       (setq zTEXT2 (- (caddr P) wiggle))
    39.       (setq point1 (xtext1 ytext1 ztext1))
    40.       (setq point2 (xtext1 ytext2 ztext1))
    41.       (setq point3 (xtext1 ytext1 ztext2))
    42.       (setq point4 (xtext1 ytext2 ztext2))
    43.       (setq point5 (xtext2 ytext1 ztext1))
    44.       (setq point6 (xtext2 ytext2 ztext1))
    45.       (setq point7 (xtext2 ytext1 ztext2))
    46.       (setq point8 (xtext2 ytext2 ztext2))
    47.       (setq ptlst (list point1           point2    point3    point4
    48.                  point5           point6    point7    point8
    49.                 )
    50.       )
    51.       (setq k (ssget "_WP" ptlst))
    52.       (if (= k nil)
    53. (setq k (rtos j 2 0))
    54.       )
    55.       (setq ptcoord (strcat k              "\t"     modspacex
    56.                      x              "\t"     modspacey
    57.                      y              "\t"     modspacez
    58.                      z              "\t"
    59.                     )
    60.       )
    61.       (setvar "cmdecho" 0)
    62.       (command "_leader" p textloc "" ptcoord "")
    63.       (write-line ptcoord fn)
    64.       (close fn)
    65.       (princ ptcoord)
    66.       (setq j (+ j 1))
    67.    )                                        ;end while
    68. )                                        ;end if
    69. (setvar "cmdecho" 1)
    70. )

     
    我不知道如何制作一个好的点列表。
    如果我键入“(list xtext1 ytext1 ztext1)”
    然后我得到一个stringp nil。。。。
    回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-10 10:22 , Processed in 0.591201 second(s), 68 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表