dcokken 发表于 2022-7-5 18:39:53

更改自定义的对话框

你好
 
我为dcl制作的autolisp有问题/困难。我对autolisp知之甚少,我不知道如何通过autolisp实现我想要的,并且可能需要代码方面的帮助。
 
lisp dcl需要执行以下操作:
1.使用lisp打开dcl时,需要自动导入自定义特性的值(请参见dwg中的dwgprops custom tap或dwg中的图片)。起初,值可以为空。
2、在对话框中填充或更改值。
3.在dwgprop中按OK更新值
 
任何帮助都很好
作为附件:项目。dcl,项目。lsp和Pdata。图纸
 
Ps;我使用字段,因此de lisp可能不会完全删除和替换自定义属性
所以不是名称,只有(更新)值。否则,字段可能会更改为####
Pdata。图纸
项目DCL
项目lsp

rlx 发表于 2022-7-5 18:45:27

我对绘图属性没有任何经验,但可以快速搜索:
 
 
http://adndevblog.typepad.com/autocad/2012/12/visual-lisp-example-for-controlling-drawing-properties-with-vla-setcustombyindex-and-similar-methods.html
 
 
http://adndevblog.typepad.com/autocad/2012/08/lisp-example-for-setting-and-getting-drawing-properties.html
 
 
 
 
http://www.cadtutor.net/forum/showthread.php?87345-使用LISP填充图形特性字段
 
 
也许你可以找到一些可以学习的方法。
 
 
gr.Rlx

dcokken 发表于 2022-7-5 18:49:59

看到那些脚印。仍然不知道如何使用dcl作为用户界面使lisp工作。
最好是有人可以修改lisp代码,以便将2个自定义道具的值导入/导出到dcl。
(或使用dcl对此主题更为具体的示例代码)
 
实际dcl更大,编辑框、弹出列表等更多。随着前两个自定义道具的工作,我可能会与其余的管理。
 
在此期间,我仍将尝试自己做这件事。如果我成功了,我会立即发帖。

rlx 发表于 2022-7-5 18:52:31

这里有一个关于dcl的非常好的链接
 
 
http://web2.airmail.net/terrycad/Tutorials/MyDialogs.htm
 
 
祝你的应用好运
 
 
gr.Rlx

Tharwat 发表于 2022-7-5 18:56:05

这就是按键添加值所需的全部内容:
 

(defun _add:custom:value (key val)
;; Tharwat 31.08.2015;;
(vla-setcustombykey (vla-get-summaryinfo (vla-get-activedocument (vlax-get-acad-object))) key val)
(princ)
)

 
用法:
 

(_add:custom:value "Project" "1")

 
对于多个键和值:
 

(mapcar '_add:custom:value '("Project" "Status") '("1" "2nd Draft"))

 
请注意正确写入密钥名称,以避免函数发出错误消息。

dcokken 发表于 2022-7-5 19:00:15

@塔尔瓦特:
 
值“1”或“2nd draft”是变量。也可以通过“233”和“第三稿”或“8540”和“最终稿”。因此,如果之前在对话框“1”或“2nd draft”中填写了您的代码,我会在对话框中将其更改为“233”和“3rd draft”或任何内容,它会自动更改dwgprops自定义选项卡中的值?

Tharwat 发表于 2022-7-5 19:02:53

 
如果是变量,则应如下所示,并且应为字符串:
 

(mapcar '_add:custom:value (list key1 key2) (list variable1 variable2))

dcokken 发表于 2022-7-5 19:05:16

顺便说一句,我找到了这个代码。工作,但我如何添加这个在Lisp程序从第一篇文章。代码用作命令行界面。我需要它在dcl接口中。因此,如果我在文本框中调用dcl behind项目,就会得到来自custom prop选项卡的值。就像在命令行中一样
 

(defun C:Getprop ()
(setqsi (vla-Get-SummaryInfo (vla-Get-ActiveDocument (vlax-Get-Acad-Object))))
(vla-GetCustomByKey si"Project" 'pval)
(princ pval)
)
 
如果在对话框中我有机会需要这个?
(vla-SetCustomByKeysi "Project" "New Value")
这样,新条目将作为customprops中的值导出回?
 
只是不知道如何把这一切放在一起

Tharwat 发表于 2022-7-5 19:10:53

你找到的代码和我的相比有什么新的地方?

Tharwat 发表于 2022-7-5 19:13:24

试试这个快速程序。
 

(defun c:test (/ id status _add:custom:value v1 v2)
;; Tharwat 01.09.2015        ;;
(if (and (< 0 (setq id (load_dialog "Project.dcl")))
          (new_dialog "Project" id)
   )
   (progn
   (defun _add:custom:value (key val)
       (vla-setcustombykey
         (vla-get-summaryinfo
         (vla-get-activedocument (vlax-get-acad-object))
         )
         key
         val
       )
       (princ)
   )
   (setq
       Status (list "1st draft" "2nd draft" "3rd draft" "Final")
   )
   (start_list "Status")
   (mapcar 'add_list Status)
   (end_list)

   (action_tile
       "accept"
       "(if (/= (setq v1 (get_tile \"Project\")) \"\") (_add:custom:value \"Project\" v1))
                            (if (setq v2 (get_tile \"Status\")) (_add:custom:value \"Status\" (nth (atoi v2) Status)))
                            (done_dialog)"
   )
   (action_tile "cancel" "(done_dialog)")
   (start_dialog)
   (unload_dialog id)
   )
   (if (< 0 id)
   (unload_dialog id)
   )
)
(princ)
)(vl-load-com)
页: [1] 2
查看完整版本: 更改自定义的对话框