乐筑天下

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

[编程交流] 检查GetString是否存在

[复制链接]

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:02:48 | 显示全部楼层 |阅读模式
你好
 
我想在用户选择的特定布局上创建一个表
使用getstring获取用户输入。
如何循环浏览布局,如果布局(名称)不存在,
获取新用户输入(getstring),直到用户键入现有输入?
 
这是我目前拥有的,只有当我键入一个存在的布局名称时,它才起作用:
 
  1. (setq acadObj (vlax-get-acad-object))
  2. (setq doc (vla-get-ActiveDocument acadObj))
  3. (setq layouts (vla-get-Layouts doc))
  4.          
  5. (setq tabname (getstring T "\nType Layout Name for Table [e.g. 01]: "))
  6.                
  7. (vlax-for tabs layouts
  8. (if (= (vla-get-Name tabs) tabname)
  9.         (progn
  10.                 (vla-put-activelayout doc tabs)
  11.                 (setq pt (vlax-3d-point 312 289 0))
  12.                 (setq curspace (vla-get-paperspace doc))
  13.                 (setq objtable (vla-addtable curspace pt 11 10 4.652 9.356))
  14.                                        
  15.                 (vla-setcelltextheight objtable 1 6 1.25)
  16.                 (vla-setcelltextheight objtable 1 7 1.25)
  17.                 (vla-setcelltextheight objtable 1 8 1.25)
  18.                 (vla-setcelltextheight objtable 1 9 1.25)
  19.         )       
  20. )
  21. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:11:23 | 显示全部楼层
也许是这样?(未测试并在邮箱中键入!):
  1. (defun c:test ( / lay lst obj )
  2.    (setq lst (mapcar 'strcase (layoutlist)))
  3.    (while
  4.        (not
  5.            (or
  6.                (= "" (setq lay (getstring t "\nEnter layout for table: ")))
  7.                (member (strcase lay) lst)
  8.            )
  9.        )
  10.        (princ (strcat "\nLayout "" lay "" doesn't exist."))
  11.    )
  12.    (if (/= "" lay)
  13.        (progn
  14.            (setq obj
  15.                (vla-addtable
  16.                    (vla-get-block (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) lay))
  17.                    (vlax-3D-point 312 289)
  18.                    11 10 4.652 9.356
  19.                )
  20.            )
  21.            (foreach col '(6 7 8 9)
  22.                (vla-setcelltextheight obj 1 col 1.25)
  23.            )
  24.        )
  25.    )
  26.    (princ)
  27. )
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:13:54 | 显示全部楼层
确切地Thanx伙计,我也在玩vla get block,但我从来没能让它工作。
 
从这里可以很容易地包括以下内容:此表仅在选定布局中不存在时创建?让它成为白痴证明
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:24:15 | 显示全部楼层
 
不客气!
 
 
除非该表具有一些定义属性,程序可以使用这些属性将其与目标布局中的其他可能表区分开来,例如,如果该表位于其自己的层上。
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:29:11 | 显示全部楼层
是的,每个表都位于一个唯一的层上,因此我可以用?:
 
  1. (setq table (ssget "x" '((0 . "ACAD_TABLE") (8 . "Layername"))))

 
但是,当我创建一个新表时,将为该表创建/设置一个新层。增量+1时会出现这种情况
e、 g.层名称以“29锚线-1”开始,每次执行LISP时,计数器都会将+1添加到一个新的层名称(如果它已经存在):“29锚线-2”、“29锚线-3”等。
那么我怎么知道用户是否随机选择了一个已经有表的现有布局,表在哪一层?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:32:17 | 显示全部楼层
请尝试以下(未测试)代码:
  1. (defun c:test ( / lay lst obj sel )
  2.    (setq lst (mapcar 'strcase (layoutlist)))
  3.    (while
  4.        (and (/= "" (setq lay (getstring t "\nEnter layout for table: ")))
  5.            (or
  6.                (and
  7.                    (not (member (strcase lay) lst))
  8.                    (princ (strcat "\nLayout "" lay "" doesn't exist."))
  9.                )
  10.                (and
  11.                    (setq sel (ssget "_X" (list '(0 . "ACAD_TABLE") '(8 . "29-anchor wires-#*") (cons 410 lay))))
  12.                    (princ
  13.                        (strcat
  14.                            "\nA table already exists on layer ""
  15.                            (cdr (assoc 8 (entget (ssname sel 0))))
  16.                            "" in layout "" lay ""."
  17.                        )
  18.                    )
  19.                )
  20.            )
  21.        )
  22.    )
  23.    (if (/= "" lay)
  24.        (progn
  25.            (setq obj
  26.                (vla-addtable
  27.                    (vla-get-block (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) lay))
  28.                    (vlax-3D-point 312 289)
  29.                    11 10 4.652 9.356
  30.                )
  31.            )
  32.            (foreach col '(6 7 8 9)
  33.                (vla-setcelltextheight obj 1 col 1.25)
  34.            )
  35.        )
  36.    )
  37.    (princ)
  38. )
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:37:51 | 显示全部楼层
嗯,我没有测试过它。
代码创建第一个表,如果布局不存在,则返回消息和新输入。
然而,第二张表并未绘制。。。。;错误:错误的参数类型:stringp nil
甚至在我可以输入布局名称之前,它就崩溃了
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:44:51 | 显示全部楼层
 
第二张表??
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:50:38 | 显示全部楼层
附图中是管道安装驳船的一块。
该驳船有10根带锚的锚索,用于在铺设管道期间将驳船固定在其位置。
我们的工程师在XLSX表格中编写的特殊软件中计算锚索的长度和角度。
 
LISP必须根据XLSX表绘制锚索、锚和中线浮标。
并将XLSX值+每条锚索端点的坐标(LISP计算的WCS)放入布局中的表格中。
 
图纸中有多个布局,因为它是驳船多个位置的序列图。
每个位置都有自己的布局和表。
锚-TV-01的黄貂鱼。图纸
锚定。lsp
锚定模式。xlsx公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:53:30 | 显示全部楼层
所以要确认的是,是你的程序崩溃了,而不是我上面发布的代码。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 00:50 , Processed in 0.537465 second(s), 72 queries .

© 2020-2025 乐筑天下

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