检查GetString是否存在
你好我想在用户选择的特定布局上创建一个表
使用getstring获取用户输入。
如何循环浏览布局,如果布局(名称)不存在,
获取新用户输入(getstring),直到用户键入现有输入?
这是我目前拥有的,只有当我键入一个存在的布局名称时,它才起作用:
(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))
(setq layouts (vla-get-Layouts doc))
(setq tabname (getstring T "\nType Layout Name for Table : "))
(vlax-for tabs layouts
(if (= (vla-get-Name tabs) tabname)
(progn
(vla-put-activelayout doc tabs)
(setq pt (vlax-3d-point 312 289 0))
(setq curspace (vla-get-paperspace doc))
(setq objtable (vla-addtable curspace pt 11 10 4.652 9.356))
(vla-setcelltextheight objtable 1 6 1.25)
(vla-setcelltextheight objtable 1 7 1.25)
(vla-setcelltextheight objtable 1 8 1.25)
(vla-setcelltextheight objtable 1 9 1.25)
)
)
)
也许是这样?(未测试并在邮箱中键入!):
(defun c:test ( / lay lst obj )
(setq lst (mapcar 'strcase (layoutlist)))
(while
(not
(or
(= "" (setq lay (getstring t "\nEnter layout for table: ")))
(member (strcase lay) lst)
)
)
(princ (strcat "\nLayout \"" lay "\" doesn't exist."))
)
(if (/= "" lay)
(progn
(setq obj
(vla-addtable
(vla-get-block (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) lay))
(vlax-3D-point 312 289)
11 10 4.652 9.356
)
)
(foreach col '(6 7 8 9)
(vla-setcelltextheight obj 1 col 1.25)
)
)
)
(princ)
) 确切地Thanx伙计,我也在玩vla get block,但我从来没能让它工作。
从这里可以很容易地包括以下内容:此表仅在选定布局中不存在时创建?让它成为白痴证明
不客气!
除非该表具有一些定义属性,程序可以使用这些属性将其与目标布局中的其他可能表区分开来,例如,如果该表位于其自己的层上。 是的,每个表都位于一个唯一的层上,因此我可以用?:
(setq table (ssget "x" '((0 . "ACAD_TABLE") (8 . "Layername"))))
但是,当我创建一个新表时,将为该表创建/设置一个新层。增量+1时会出现这种情况
e、 g.层名称以“29锚线-1”开始,每次执行LISP时,计数器都会将+1添加到一个新的层名称(如果它已经存在):“29锚线-2”、“29锚线-3”等。
那么我怎么知道用户是否随机选择了一个已经有表的现有布局,表在哪一层? 请尝试以下(未测试)代码:
(defun c:test ( / lay lst obj sel )
(setq lst (mapcar 'strcase (layoutlist)))
(while
(and (/= "" (setq lay (getstring t "\nEnter layout for table: ")))
(or
(and
(not (member (strcase lay) lst))
(princ (strcat "\nLayout \"" lay "\" doesn't exist."))
)
(and
(setq sel (ssget "_X" (list '(0 . "ACAD_TABLE") '(8 . "29-anchor wires-#*") (cons 410 lay))))
(princ
(strcat
"\nA table already exists on layer \""
(cdr (assoc 8 (entget (ssname sel 0))))
"\" in layout \"" lay "\"."
)
)
)
)
)
)
(if (/= "" lay)
(progn
(setq obj
(vla-addtable
(vla-get-block (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) lay))
(vlax-3D-point 312 289)
11 10 4.652 9.356
)
)
(foreach col '(6 7 8 9)
(vla-setcelltextheight obj 1 col 1.25)
)
)
)
(princ)
) 嗯,我没有测试过它。
代码创建第一个表,如果布局不存在,则返回消息和新输入。
然而,第二张表并未绘制。。。。;错误:错误的参数类型:stringp nil
甚至在我可以输入布局名称之前,它就崩溃了
第二张表?? 附图中是管道安装驳船的一块。
该驳船有10根带锚的锚索,用于在铺设管道期间将驳船固定在其位置。
我们的工程师在XLSX表格中编写的特殊软件中计算锚索的长度和角度。
LISP必须根据XLSX表绘制锚索、锚和中线浮标。
并将XLSX值+每条锚索端点的坐标(LISP计算的WCS)放入布局中的表格中。
图纸中有多个布局,因为它是驳船多个位置的序列图。
每个位置都有自己的布局和表。
锚-TV-01的黄貂鱼。图纸
锚定。lsp
锚定模式。xlsx公司 所以要确认的是,是你的程序崩溃了,而不是我上面发布的代码。
页:
[1]
2