明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: zhangcan0515

[提问] 求助:LISP写完了,DCL与LISP交互目前没有搞定

[复制链接]
发表于 2022-6-20 19:41:32 | 显示全部楼层
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   (setq dcl_file (open (setq tmp-dcl-file-name (vl-filename-mktemp nil nil  ".DCL")) "w"))
              (progn
                 (foreach x
                   '(  

                     "yu:dialog {"  
                     "    label = \"圆变多边形\" ;    "  
                     "    :boxed_column {"  
                     "        label = \"选择内外\" ;"  
                     "        :edit_box{label = \"边数:\" ;key = \"Text1\";  height=1.2;}"  
                     "        :button {label = \"内接于圆:<I>\"; key=\"bb1\"; height=3; }"  
                     "        :button {label = \"外切于圆:<C>\"; key=\"bb2\"; height=3; }"  
                     "        }"  
                     "    cancel_button;"  
                     "}"  
     ) (write-line x dcl_file) )
     (setq dcl_file (close dcl_file)))

(defun C:TT()
     (setq dcl_id (load_dialog tmp-dcl-file-name));加载DCL
         (if (not (new_dialog "yu" dcl_id))(exit)) ;;激活对话框
     (if (not side) (setq side 5))
     (set_tile "Text1" (rtos side 2 0))
     (action_tile "accept" "(get_yu_Text) (done_dialog 0)")
     (action_tile "bb1"    "(get_yu_Text) (done_dialog 1)")
     (action_tile "bb2"    "(get_yu_Text) (done_dialog 2)")
     (setq yua_d (start_dialog))
         (cond
             ((= yua_d 1) (setq ttype "I") (c:yuantd))
             ((= yua_d 2) (setq ttype "C") (c:yuantd))
         )      
)

(defun get_yu_Text()
     (setq side (atoi (get_tile "Text1")))
)

(defun c:yuantd()
  (setvar "cmdecho" 0)
  (setq osm (getvar "osmode"))
  (setvar "osmode" 0)
  (setq ss (ssget (list (cons 0 "CIRCLE")  )))
  (setq n 0)
  (repeat (sslength ss)
    (setq ent (ssname ss n)) ;;;获取提n个像素名
    (setq ent_data (entget ent))
    (setq r (cdr (assoc 40 ent_data))
             pc (cdr (assoc 10 ent_data))
        )
             (command "polygon" side pc ttype r)
    (setq n (1+ n))
  )
  (setvar "osmode" osm)
  (princ)
)

合并版 试用看看

评分

参与人数 1明经币 +1 收起 理由
zhangcan0515 + 1 又学习到了

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2022-6-21 10:50:59 | 显示全部楼层
DCL和LSP交换,大致就是启动加载LOAD_DIALOG/START_DIALOG,参数值赋值SET_TILE给按钮,按钮执行ACTION_TILE动作或者取得新的值GET_TILE,最后用关闭按钮关闭面板DONE_DIALOG。
学得差不多了,可以考虑在LSP里写DCL,感觉这种方式,在写多层面板等来回交互较多的面板时,比较顺手。
 楼主| 发表于 2022-6-21 12:46:31 | 显示全部楼层
lostbalance 发表于 2022-6-21 10:50
DCL和LSP交换,大致就是启动加载LOAD_DIALOG/START_DIALOG,参数值赋值SET_TILE给按钮,按钮执行ACTION_TIL ...

好的,谢谢老师细心指导!!
发表于 2022-6-21 16:33:59 | 显示全部楼层
楼主,我是把dcl里面的代码当做字符串放进了lisp里面,运行程序时,自动生成临时文件,程序运行完自行删除,不删除也可以,电脑清理的时候会自动删,我发了个CAD批量打印的,你可以看一看里面的源码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 07:08 , Processed in 0.163763 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表