CAD-autolisp(三)——文件、对话框

目录

  • 一、文件操作
    • 1.1 写文件
    • 1.2 读文件
  • 二、对话框DCL
    • 2.1 初识对话框
    • 2.2 常用对话框界面
      • 2.2.1 复选框、列表框
      • 2.2.2 下拉框
      • 2.2.3 文字输入框、单选点框
    • 2.3 Lisp对dcl的驱动
    • 2.4 对话框按钮实现拾取
    • 2.5 对话框加载图片
      • 2.5.1 幻灯片图片制作
      • 2.5.1 代码部分

一、文件操作

1.1 写文件

  • 代码示例
    (defun c:writefile();getfiled函数:对话框的名称,默认文件夹路径,过滤后缀名,flag;getfiled返回的是文件的绝对路径,是字符串(setq filepath (getfiled "选择要预览的对话框所在的文件" "C:\\Users\\" "txt" 7));返回文件的操作符;w:有则覆盖,没有则新建。a:有则追加,无则新建(setq file (open filepath "w"))(write-line "0,0" file)(write-line "100,0" file)(close file)
    )
    
  • 对话框选择
    在这里插入图片描述

1.2 读文件

  • 代码示例
    (defun c:readfile();getfiled返回的是文件的绝对路径,是字符串(setq filepath (getfiled "选择要预览的对话框所在的文件" "C:\\Users\\" "txt" 2));返回文件的操作符(setq file (open filepath "r"));操作文件操作符(setq fdata (read-line file));注意:这里演示可以把一个命令拆分成几块(command "pline")(while fdata(command fdata)(setq fdata (rade-line file)))(command "")(close file)(print)
    )
    
  • 对话框选择
    在这里插入图片描述

二、对话框DCL

  • DCL:Dialog Control Language,对话框控制语言,后缀名dcl,定义对话框样式布局。
  • 重点:一定别忘了分号,一定要用英文标点

2.1 初识对话框

  • 显示效果
    在这里插入图片描述

    按确认:会在命令行输出“确认”,temp.lsp中定义

  • temp.dcl
    // 冒号后面为控件名字
    // 对话框的名字:demo1_dcl
    demo1_dcl:dialog{// 中括号内为属性label="对话框名";// 中括号内也可以包含空间:text{// 控件中的属性label="对话框内容";}// cad封装好的控件ok_cancel;	}
    

  • temp.lsp(完全版,可以作为模版)
    (defun C:demo1 ();选择dcl对话框文件:一个对话框文件中可以包含多个对话框(setq dlg_file (getfiled "选择要预览的对话框所在的文件" "C:\\Users\\" "dcl" 2))(if (= dlg_file nil) (exit));选择对话框文件中的demo1_dcl命名的对话框:有此提示时候输入demo1_dcl(setq dlg_name (getstring "\n输入对话框名称:"))(if (= dlg_name "") (exit));加载dcl对话框文件:返回加载标识符,如果只有文件名,则搜索默认路径,见代码下注释(setq dlg_id (load_dialog dlg_file));加载失败退出(if (< dlg_id 0) (exit));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;用于保存对话框操作状态(setq std 0);创建对话框对象,此时还没显示对话框,可以向对话框中添加东西(if (not (new_dialog dlg_name dlg_id))(exit));此处有两个key值:accept,cancel,是系统封装的确定取消按钮控件的key名;确认是accept,取消是cancel;done_dialog函数:结束当前对话框并指定一个结束码,;通常用来判断用户点击了哪个控件(action_tile "accept" "(done_dialog 1)")(action_tile "cancel" "(done_dialog 0)");启动对话框:开始接受使用者输入,对话框获得控制权(setq std (start_dialog));卸载对话框:控制权还给cad主程序(unload_dialog dlg_id);根据std做相应动作(if (= std 1) (print "确定"))(if (= std 0) (print "取消"))(print)
    )
    
    • 默认搜索路径:通过(getvar “acadprefix”)
      C:\Users\Administrator\appdata\roaming\autodesk\autocad 2014\r19.1\chs\support;
      C:\program files\autodesk\autocad 2014\support;
      C:\program files\autodesk\autocad 2014\fonts;
      C:\program files\autodesk\autocad 2014\help;
      C:\program files\autodesk\autocad 2014\support\zh-cn;
      C:\Program Files\Autodesk\AutoCAD 2014\drv;
  • temp.lsp(精简版)
    (defun C:demo1 ()(setq dlg_file "C:\\Users\\Administrator\\Desktop\\code\\temp.dcl")(setq std 0)(setq dlg_id (load_dialog dlg_file))(new_dialog "demo1_dcl" dlg_id)(action_tile "accept" "(done_dialog 1)")(action_tile "cancel" "(done_dialog 0)")(setq std (start_dialog))(unload_dialog dlg_id)(if (= std 1)(print "确定"))(if (= std 0)(print "取消"))(print)
    )
    

2.2 常用对话框界面

2.2.1 复选框、列表框

  • temp.dcl
    demo1_dcl:dialog{label="带边框的单复选框";// row控件中的元素都在一行// boxed_row带边框的行:row{//带外边框的列:boxed_column{label="水果";// 复选框:toggle{label="苹果";}// value=1默认选中,预设值:toggle{label="香蕉";value=1;}:toggle{label="石榴";}}// 清单选框:list_box{label="蔬菜";// 直接换行分割list="西红柿\n黄瓜\n金针菇";// 默认选择第三个,从0开始value=2;// 开启多选(按住shift),没有则是单选multiple_select=true;}}ok_cancel;}
    
  • 效果
    在这里插入图片描述

    加载:temp.lsp及调出对话框同2.1

2.2.2 下拉框

  • temp.dcl
    demo1_dcl:dialog{label="带边框的单复选框";spacer_1;:row{:popup_list{label="干果";list="核桃\n夏威夷果\n杏仁";// 默认选择第三个value=2;// 右侧下拉框的宽度edit_width=10;}}//加一个空行spacer_1;ok_cancel;	}
    
  • 效果
    在这里插入图片描述

2.2.3 文字输入框、单选点框

  • temp.dcl
    demo1_dcl:dialog{label="对话框名";:row{	// 带边框的列,排版用:boxed_column{label="坐标";:edit_box{// &后的字母会有下划线,对应键盘快捷键label="&X 坐标:";// 输入框宽度edit_width=10;}}:boxed_radio_row{label="性别";:radio_button{label="male";}:radio_button{label="female";}:radio_button{label="middle";value=1;}}}ok_cancel;}
    
  • 效果
    在这里插入图片描述

2.3 Lisp对dcl的驱动

  • temp.lsp精简模式
    (defun C:demo1 ()(setq dlg_file "C:\\Users\\Administrator\\Desktop\\code\\temp.dcl")(setq std 0);加载对话框文件(setq dlg_id (load_dialog dlg_file));创建对话框对象,此时可以向里面加东西(new_dialog "demo1_dcl" dlg_id);设置对应key值的value(setdata);设置对应两个按钮控件的回调函数,此处有两个(action_tile "accept" "(getdata) (done_dialog 1)")(action_tile "cancel" "(done_dialog 0)");显示对话框,同时控制权从cad主程序转给对话框(setq std (start_dialog));卸载对话框(unload_dialog dlg_id);点确定做相应动作(if (= std 1)(command "circle" (list x y) r))(if (= std 0)(print "取消"))(command "zoom" "e")(print)
    )
    ;获得控件对应key值的value:其是字符串
    (defun getdata ()(setq x (atof (get_tile "cir_x")))(setq y (atof (get_tile "cir_y")))(setq r (atof (get_tile "cir_r")))
    )
    ;设置控件对应key值的默认value:其是字符串
    ;如果是radio等类型控件,则其value值是真假"0"、"1"
    ;如果是list等类型控件,则其value值是序号“0”、“1”、“2”
    (defun setdata ()(set_tile "cir_x" "200.00")(set_tile "cir_y" "200.00")(set_tile "cir_r" "200.00")
    )
    
  • temp.dcl
    demo1_dcl:dialog{label="对话框名";:boxed_row{	label="画圆";:edit_box{label="&X 坐标:";edit_width=10;// 设置控件的key值key="cir_x";}:edit_box{label="&Y 坐标:";edit_width=10;// 设置控件的key值key="cir_y";}:edit_box{label="&R 半径:";edit_width=10;// 设置控件的key值key="cir_r";}}ok_cancel;}
    
  • 显示效果
    在这里插入图片描述

2.4 对话框按钮实现拾取

  • 效果图
    在这里插入图片描述

  • temp.dcl

    demo1_dcl:dialog{label="绘制圆";:column{	:edit_box{label="&R 半径:";edit_width=10;key="cir_r";}:boxed_column{label="中心";:button{label="拾取中心点";key="but_cir";}:edit_box{label="&X 坐标:";edit_width=10;key="cir_x";}:edit_box{label="&Y 坐标:";edit_width=10;key="cir_y";}}}spacer_1;ok_cancel;}
    
  • temp.lsp

    (defun C:demo1 ()(setq	dlg_id (load_dialog"C:\\Users\\Administrator\\Desktop\\code\\temp.dcl"))(if (< dlg_id 0) (exit));为了使下面while启动,此处设置大于1的整型(setq	r 200 x 200 y 200 std 2);只要没点确认或取消,就一直循环(while (> std 1);注意:每次循环都用相同的dcl文件创建一个新的对话框对象(if	(not (new_dialog "demo1_dcl" dlg_id))(exit));设置控件value值(setdata "cir_r" r "cir_x" x "cir_y" y);设置按钮动作,done_dialog函数可以关闭对话框(action_tile "but_cir" "(getdata) (done_dialog 2)")(action_tile "accept" "(getdata) (done_dialog 1)")(action_tile "cancel" "(done_dialog 0)");上面三个的done_dialog函数可以关闭对话框并返回std(setq std (start_dialog))(if	(= std 2)(progn (initget 1)(setq p (getpoint "\n请选择圆心"))(setq x (car p) y (cadr p)))));跳出循环,卸载对话框	(unload_dialog dlg_id);针对确定、取消做动作(if (= std 1)(command "circle" (list x y) r))(if (= std 0)(print "取消"));退出前做了一次缩放(command "zoom" "e")(print)
    )
    ;;;获取当前控件key值对应的value,并设置x y r:dcl-》lisp
    ;;;用于计算
    (defun getdata ()(setq x (atof (get_tile "cir_x")))(setq y (atof (get_tile "cir_y")))(setq r (atof (get_tile "cir_r")))
    )
    ;;;设置当前控件key值对应的value:lisp -》dcl
    ;;;用于展示
    (defun setdata (key_r r1 key_x x1 key_y y1)(set_tile key_r (rtos r1 2 2))(set_tile key_x (rtos x1 2 2))(set_tile key_y (rtos y1 2 2))
    )
    

2.5 对话框加载图片

2.5.1 幻灯片图片制作

  • 步骤:
    • 新建cad绘制想展示的图片
    • 命令行输入:mslide,make slide的意思,制作幻灯片,保存即可
  • 图示
    在这里插入图片描述

2.5.1 代码部分

  • 效果
    在这里插入图片描述

  • temp.lsp

    (defun C:demo1 ()(setq	dlg_id (load_dialog"C:\\Users\\Administrator\\Desktop\\code\\temp.dcl"))(if (< dlg_id 0) (exit))(if (not (new_dialog "demo1_dcl" dlg_id)) (exit));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;只有此区间新增(start_image "img_1")(slide_image 0 -20 (dimx_tile "img_1")(dimy_tile "img_1")"C:\\Users\\Administrator\\Desktop\\code\\img_1.sld")(end_image);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(action_tile "accept" " (done_dialog 1)")(action_tile "cancel" "(done_dialog 0)")(setq std (start_dialog))(unload_dialog dlg_id)(if (= std 1) (print "确认"))(if (= std 0) (print "取消"))(print)
    )
    
  • temp.dcl

    demo1_dcl:dialog{label="image展示";:row{:column{:image{//先确定宽度,调整高度时不要同时调宽度width=30;//通过调整高度,使图像显示在中间,需要一点点试height=10;// 使背景色同主窗口color=-2;key="img_1";}}}ok_cancel;
    }
    

返回目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/663168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

密钥加密问题

C参考代码&#xff1a; #include<iostream> #include<map> #include<vector> using namespace std; int main() {vector<char> x;vector<char> y;map<char,char> word;char ch getchar();getchar();string str;getline(cin,str);for(cha…

GmSSL - GmSSL的编译、安装和命令行基本指令

文章目录 Pre下载源代码(zip)编译与安装SM4加密解密SM3摘要SM2签名及验签SM2加密及解密生成SM2根证书rootcakey.pem及CA证书cakey.pem使用CA证书签发签名证书和加密证书将签名证书和ca证书合并为服务端证书certs.pem&#xff0c;并验证查看证书内容&#xff1a; Pre Java - 一…

JDK版本如何在IDEA中切换

JDK版本在IDEA中切换 一、项目结构设置 1.Platform——Settings 项目结构---SDKS 2.Project——SDK 3.Modules——SDK——Sources 4.Modules——SDK——Dependencies 二、设置--编译--字节码版本 Settings——Build,——Java Compiler

【Servlet】——Servlet API 详解

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Servlet】 本专栏旨在分享学习Servlet的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、HttpServlet二、Htt…

spring boot yaml文件中如何设置duration对象值

Spring Boot对表示持续时间有专门的支持。如果您公开java.time.Duration属性&#xff0c;则应用程序对应Duration类型的属性有以下格式可用: long类型的常规表示(使用毫秒作为默认单位&#xff0c;除非指定了DurationUnit)java.time.Duration 使用的标准ISO-8601格式其中值和单…

鸿蒙ArkUI日期选择组件

鸿蒙ArkUI日期选择组件&#xff0c;基于基础组件进行的二次封装的日期选择组件&#xff0c;快速实现日期选择。 /*** 日期*/ Component export default struct DiygwDate{//绑定的值Link Watch(onValue) value:string;// 隐藏值State valueField: string value;// 显示值Sta…

6+单基因+单细胞+实验,干湿结合是生信分析发文最真诚的必杀技

今天给同学们分享一篇生信文章“CXCR4 expression is associated with proneural-to-mesenchymal transition in glioblastoma”&#xff0c;这篇文章发表在Int J Cancer期刊上&#xff0c;影响因子为6.4。 结果解读&#xff1a; CXCR4表达与PN GBM的存活和MES标记物的表达相关…

Echarts+Vue 首页大屏静态示例Demo 第三版

效果图: 源码: <template><div class="content bg" style="height: 100vh;overflow-y: auto" :class="{ fullscreen-container: isFullScreen }"><div class="reaDiv" style="height: 10vh"><div…

MySQL 5.7.36安装操作

接上文提示&#xff1a; 【Config Type】选项用于设置服务器的类型。单击该选项右侧的下三角按钮&#xff0c;即可看到 3个选项&#xff0c;如图10所示。 Development Machine&#xff08;开发者机器&#xff09;&#xff1a;代表典型的个人桌面工作站。假定机器上运行着多个…

4.java中的输入输出/输入中的next和nextLine区别问题

&#xff08;笔试会经常让我们自己去处理输入输出&#xff09; 一.输出到控制台 println 输出的内容自带 \n&#xff08;换行&#xff09; print 不带 \n printf 的格式化输出方式和 C 语言的 printf 是基本一致的. String msg "Hello, World!";System.out.print(m…

Transformer 自然语言处理(四)

原文&#xff1a;Natural Language Processing with Transformers 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十章&#xff1a;从头开始训练变换器 在本书的开头段落中&#xff0c;我们提到了一个名为 GitHub Copilot 的复杂应用&#xff0c;它使用类似 GPT 的…

前缀和 差分

差分和前缀和都是算法里边比较重要的知识点&#xff0c;不过学习的难度并不高&#xff0c;这篇文章会讲解相关的内容。 1. 前缀和怎么玩 1&#xff09;一维前缀和 在该数之前&#xff0c;包括该数的所有数之和&#xff0c;有点类似高中学的数列的前n项和Sn。 2&#xff09;二维…

Spring框架——主流框架

文章目录 Spring(轻量级容器框架)Spring 学习的核心内容-一图胜千言IOC 控制反转 的开发模式Spring快速入门Spring容器剖析手动开发- 简单的 Spring 基于 XML 配置的程序课堂练习 Spring 管理 Bean-IOCSpring 配置/管理 bean 介绍Bean 管理包括两方面: Bean 配置方式基于 xml 文…

Unity DOTween插件常用方法(二)

文章目录 1.3 动画设置1.4 动画队列 Sequence1.5 动画回调函数1.6 等待函数&#xff08;协程中使用&#xff09; 1.3 动画设置 SetLoops 设置循环动画&#xff1b; 参数&#xff1a; loops&#xff1a;指定循环的次数&#xff0c;设置为 -1 表示无限循环&#xff1b; loopType…

洛谷p1644跳马问题

跳马问题 题目背景 在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧…… 题目描述 中国象棋半张棋盘如图 1 1 1 所示。马自左下角 ( 0 , 0 ) (0,0) (0,0) 向右上角 ( m , n ) (m,n) (m,n) 跳。规定只能往右跳&#xff0c;不准往左跳。比如图 1 1 1 中所…

Windows篇|连接共享文件夹映射驱动器教程

前言 昨天给小伙伴们分享了如何设置Windows共享文件夹的教程 超简单设置Windows共享文件夹,传输文件无烦恼 A电脑设置完共享文件夹之后,只要在同一局域网下,所有的电子设备都可以连接访问A电脑的共享文件夹里的内容。 这样就省去了U盘传输的麻烦,只要A电脑开着机,文件放入…

基于SpringBoot+Vue的校园资料分享平台(V2.0)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【GitHub项目推荐--ChatGPT开源项目】【转载】

Auto-GPT Auto-GPT 是一个实验性的开源项目&#xff0c;基于 GPT-4。你给出 Auto-GPT 一个的任务&#xff0c;它不会立即输出答案&#xff0c;而会先自己通过多轮对话来琢磨、验证、决策&#xff0c;从而自己找出一条达成目标的路&#xff0c;整个过程完全不需要人类插手&…

【C++游戏开发-01】推箱子

C游戏开发 文章目录 C游戏开发[TOC](文章目录) 前言一、逻辑分析1.1地图实现1.2人物的移动1.2.1小人移动1.2.2其他移动 1.3墙壁的碰撞1.4箱子的推动1.4.1什么时候推箱子1.4.2什么情况可以推箱子 1.5胜利的判断1.6卡关的处理1.7关卡的切换 二、DEMO代码2.1游戏框架2.2各功能函数…

Python实战:使用DrissionPage库爬取高考网大学信息

上一篇文章&#xff0c;我刚入门 DrissionPage 爬虫库&#xff0c;使用这个库爬取了拉钩网关于 Python 的职位信息。 今天再使用 DrissionPage 爬虫库练习一个案例&#xff0c;爬取高考网大学信息。 本次爬取到2885个大学信息&#xff0c;包含大学名称、所在省、市、大学标签信…