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

2024-01-27 13:28
文章标签 对话框 cad autolisp

本文主要是介绍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 对话框按钮实现拾取

一、文件操作

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))
    )
    

返回目录

这篇关于CAD-autolisp(三)——文件、对话框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/650381

相关文章

vue2实践:第一个非正规的自定义组件-动态表单对话框

前言 vue一个很重要的概念就是组件,作为一个没有经历过前几代前端开发的我来说,不太能理解它所带来的“进步”,但是,将它与后端c++、java类比,我感觉,组件就像是这些语言中的类和对象的概念,通过封装好的组件(类),可以通过挂载的方式,非常方便的调用其提供的功能,而不必重新写一遍实现逻辑。 我们常用的element UI就是由饿了么所提供的组件库,但是在项目开发中,我们可能还需要额外地定义一

CAD 多个页面在一个任务栏图标设置

命令行输入快捷键op或: 下图打对号,确定即可。

几种MFC对话框的隐藏方法

修改CXXAPP中的InitInstance函数,将原来的模态对话框改为非模态对话框,及修改 [cpp]  view plain copy INT_PTR nResponse = dlg.DoModal();     为 [cpp]  view plain copy dlg.Create(CModalHideDlg::IDD);

030集——自动弹出对话框、选择文件并播放wav音频文件(winform窗体)——C#学习笔记

如图所示,效果如下: 步骤如下: 新建一个winform窗体,双击界面,进入代码区: 复制(下面代码中命名空间内的代码)到(你的命名空间下),运行。 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Draw

PDF到CAD转换:四大实用工具指南!

将纸质图纸或PDF文件转化为可编辑的CAD文件是一项基本技能。无论是为了更好地进行团队协作,还是为了简化设计流程,找到一个合适的PDF转CAD工具都是至关重要的。本文将深入探讨几款主流工具的功能特色,并结合实际使用经验分享个人见解。 福昕PDF转换大师(365客户端) 直达链接:www.pdf365.cn/pdf2word/ 福昕PDF转换大师不仅是一个PDF阅读器,它还是一款强大的转换工具

Jquery EasyUI 弹出div对话框引入其他页面(iframe)

//url:窗口调用地址,title:窗口标题,width:宽度,height:高度,shadow:是否显示背景阴影罩层function showMessageDialog(url, title, width, height, shadow) {var content = '<iframe src="' + url + '" width="100%" height="99%" framebord

【Qt】输入对话框QInputDialog

输入对话框QInputDialog Qt 中提供了预定义的输⼊对话框类:QInputDialog,⽤于进⾏临时数据输⼊的场合。 输入对话框,是让用户输入一个具体的数据,可以是整数、浮点数、字符串(类似于下拉框)。 常⽤⽅法介绍: 1、双精度浮点型输⼊数据对话框 double getDouble (QWidget *parent, const QSt

【Qt】字体对话框QFontDialog

字体对话框QFontDialog Qt 中提供了预定义的字体对话框类 QFontDialog,⽤于提供选择字体的对话框部件。 例子:点击按钮修改label中的字体属性 (1)设置一个标签一个按钮 (2)设置点击按钮的槽函数 当用户设置好相对应的属性并点击ok之后,函数就会返回一个QFont对象。 (3)执行程序 (4)代码展示 #include "mainwin

CAD图纸怎么加密?这10款图纸加密工具轻松保护图纸文件

在设计和工程领域,CAD图纸是企业宝贵的知识产权和核心竞争力的体现。随着数字化进程的加速,图纸文件的安全性问题日益凸显,未经授权的访问和泄露风险也随之增加。因此,采取有效的加密措施来保护CAD图纸的安全变得至关重要。本文将介绍10款高效的图纸加密工具,它们能够帮助设计者和企业轻松保护其图纸文件,确保设计成果不被非法获取或滥用。 1.安秉图纸加密软件 安秉图纸加密软件是一款专为企业和设计师开

使用div和js脚本弹出对话框

使用div和js脚本弹出对话框 思路:div已经存在于网页当中,只是被隐藏了,当点击按钮时将其可见性设置为可见即可实现 实现:在网页中设置好需要弹出的窗口,为其他控件设置一个事件,当触发该事件时将窗口设置为可见 控件 <body class="bg" id="bg"><!--窗口--><div class="div1" id="div1"><div id="div2" class=