编程实例清华CAD二次开发LISP
第4章 清华大学的《CAD二次开发》电子教(LISP)
4.2 Visual LISP的用户界面 的用户界面
(1)菜单 LISP提供了 个下拉菜单, 提供了9 Visual LISP提供了9个下拉菜单,每个菜单的详细内容与 当前的工作状态相关。 当前的工作状态相关。 File:创建新的或修改已有的AutoLISP程序文件, AutoLISP程序文件 File:创建新的或修改已有的AutoLISP程序文件,编译或打印 程序文件等。 程序文件等。 Edit:复制和粘贴文本,匹配表达式中的括号, Edit:复制和粘贴文本,匹配表达式中的括号,或复制控制台 窗口内以前的输入等。 窗口内以前的输入等。 Search:查找和替换文本字符串,设置书签, Search:查找和替换文本字符串,设置书签,或利用书签导航 等。 View:查找和显示程序代码中的变量和符号值等。 View:查找和显示程序代码中的变量和符号值等。 Project:使用工程和编译、链接程序等。 Project:使用工程和编译、链接程序等。 Debug:调试程序,检查变量状态和表达式的结果。 Debug:调试程序,检查变量状态和表达式的结果。 Tools:设置Visual LISP文本格式化选项和各种环境选项等 文本格式化选项和各种环境选项等。 Tools:设置Visual LISP文本格式化选项和各种环境选项等。 Window:窗口管理。 Window:窗口管理。 Help:在线帮助。 Help:在线帮助。
(5)状态行
位于屏幕底部,显示与Visual LISP所做工作相关的信息 所做工作相关的信息。 位于屏幕底部,显示与Visual LISP所做工作相关的信息。例如在编辑程序 显示“Edit: /lisp1/roots. 等信息, 时,显示“Edit: d:/lisp1/roots.lsp * ”等信息,显示当前正在编辑文件 等信息 的路径的名称,若文件名之后有一个“ 的路径的名称,若文件名之后有一个“* ”,表示该文件尚未保存最新的结 若切换到控制台窗口时,显示Visual window; 果;若切换到控制台窗口时,显示Visual LISP console window;若切换到 跟踪窗口时,显示Trace window; 跟踪窗口时,显示Trace output window;若关闭停留在菜单项或工具栏按钮 显示相应菜单项或工具栏按钮的简短的帮助信息。 时,显示相应菜单项或工具栏按钮的简短的帮助信息。在状态行的右端显示 着光标当前处于窗口第几行、第几个字符的信息。 着光标当前处于窗口第几行、第几个字符的信息。
第9章 清华大学的《CAD二次开发》电子教(LISP)
或在控制台" " 在"Command:"提示下键入 "提示下键入!elist或在控制台"_$"提示下键入 或在控制台 elist,即可得到以下该图元的图元表。 ,即可得到以下该图元的图元表。
((name: ef69500>); 69500>) ((-1 . <Entity name: 7ef69500>);图元名 "TEXT"); (0 . "TEXT");图元种类 name: ef67 00>) 67d >); (330 . <Entity name: 7ef67d00>);软指针句柄 19F") F"); (5 . "19F");图元描述字 "AcDbEntity");AutoCAD图元 (100 . "AcDbEntity");AutoCAD图元 (67 . 0);模型空间 "Model"); (410 . "Model");模型空间标识 (8 . "0") ;所在图层名 AutoCAD文本 (100 . "AcDbText") ;AutoCAD文本 10. 20. (10 10.0 20.0 0.0) ;定位点坐标 (40 . 5.0);文本字高 (1 . "ABCDE");文本内容 "ABCDE");
a
(defun c:keyway()
b
输入定位点: (setq pc (getpoint "输入定位点: ")) 输入轴的直径: (setq d (getdist pc "输入轴的直径:")) 输入键槽的宽度: (setq b (getdist pc "输入键槽的宽度:"))
AUTOCAD二次开发齿轮代码LISP
(defun c:jkxcl()(setq os(getvar "osmode"))(setvar "osmode" 0)(setq m(getreal"输入模数:M=")z(getint"输入齿数:Z=")h(getreal"输入齿轮宽度:H=")zj(getreal"输入齿轮轴径:ZJ=")lf(getreal"输入轮辐厚度(无轮辐结构时输入齿轮宽度):LF=") )(if (> h lf) (progn(setq gr(getreal"输入轮毂端面半径:gr="))(setq yr(getreal"输入轮缘端面半径:yr="))(setq s(/ (- h lf) 2))(setq l(- h s))))(setq rf(/ (* (- z 2.5) m) 2)rj(/ (* m z 0.939693) 2)r (/ (* z m) 2)ra(/ (* (+ z 2) m) 2)tt(* m pi)pj(/ 36.0 z)a (/ (* 1.25 m) (cos (* 20 (/ pi 180))))pt0(list 200.0 30.0 0.0)pt1(polar pt0 0 (/ tt 4))pt2(polar pt0 pi (/ tt 4))pt3(polar pt1 (* 110 (/ pi 180)) a)pt5(polar pt1 (* -70 (/ pi 180)) a)pt4(polar pt2 (* 70 (/ pi 180)) a)pt6(polar pt2 (* 250 (/ pi 180)) a)pt7(polar pt6 (* -90 (/ pi 180)) 2))(command "layer" "m" "11" "c" 1 "" """layer" "m" "12" "c" 2 "" """layer" "m" "13" "c" 252 "" """layer" "s" "13" """pline" pt7 pt6 pt4 pt3 pt5)(setq i 1)(while (<= i 7)(setq pt6(polar pt6 0 tt)pt4(polar pt4 0 tt)pt3(polar pt3 0 tt)pt5(polar pt5 0 tt))(command pt6 pt4 pt3 pt5)(setq i(+ i 1)))(setq pt8(polar pt5 (* -90 (/ pi 180)) 2))(command pt8 "c")(setq pt(polar pt0 (* 180 (/ pi 180)) (* 4 tt))) (command "move" "l" "" pt0 pt)(setq e0(entlast))(command "layer" "s" 11 "")(setq p0(polar pt0 (* 90 (/ pi 180)) r))(command "circle" p0 ra)(command "region" "l" "")(setq e10 (entlast))(command "layer" "s" "12" "")(setq j 1)(while (<= j z)(setq i 1)(while (<= i 10)(command "rotate" e10 "" p0 pj)(setq yd(* r pj (/ pi 180) i))(setq pt(polar pt0 0 yd))(command "copy" e0 "" pt0 pt)(command "region" "l" "")(setq e1(entlast))(command "subtract" e10 "" e1 "")(setq i (+ i 1)))(setq j(+ j 1)))基于SolidWorks开发标准件库下面通过介绍SldWorks标准件库这个软件的开发和应用过程,来具体说明利用VB作为开发工具,通过调用SolidWorks API函数,来二次开发SolidWorks的方法.1.VB开发SolidWorks标准件库的过程该标准件库软件能够在SolidWorks中实现标准件3D造型的的参数化自动绘制,涵盖的标准件类型齐全,具体包括:轴承类标准件,螺纹联结标准件,销键联结标准件,联轴器类标准件五大部分.下面按上述原理方法简要介绍一下该系统的主要开发过程.1.1 建立实体模型查阅<<机械设计手册>>(软件版)R2.0,首先:分析要建立实体的结构,使所建立的特征尽可能的简单,参数尺寸尽可能少,再次:运行SolidWorks开始宏录制命令并创建一个深沟球轴承标准件,创建完毕后结束宏的录制,将宏保存起来.最后:在宏代码中找到定义实体模型的尺寸值,用对应的参数变量代替宏文件中的关键数据.以深沟球轴承为例,通过简化,建立深沟球轴承模型需要如图3中草图1和草图2的14个关键点,共计12个坐标变量,而这12个变量都能由轴承的7个主要尺寸参数通过计算得出,这7个主要尺寸参数分别为:轴承的内径,外径,宽度,内圈外径和圆角大小.轴承的主要尺寸参数值可以根据轴承型号从数据库表中直接调用.1.2 建立标准件数据库利用VB调用SolidWorks API函数来创建标准件库需要标准件的一系列数据,本文利用VB 默认的数据库Microsoft Access为每一种标准件建立数据库,图4所示为深沟球轴承的尺寸数据库及其表单的创建.数据库建成后,在应用程序中把数据控件Data与指定的数据表链接起来,并把主要尺寸参数的TextBox和数据库中对应字段绑定.1.3建立用户界面本标准件库的程序界面是由主界面和各类标准件子界面构成,主界面简洁明了如图5,只由frame与命令按钮构成,按各类标准件按钮就能够进入相应的子界面进行标准件绘制.各类子界面主要由SSTab,TextBox,命令按钮,图片框与Data控件组成,尺寸框架中可以显示标准件的主要尺寸参数,并提供按型号查找功能,在图片框中显示用户选择标准件的示意图.子界面具体设计形式及能完成功能. 1.4主要代码及注释由于程序代码较长,下面按用到的先后顺序简要介绍一下程序中的主要定义及命令:'---------------------Solidworks宏程序变量描述------------------Public swApp As Object '声明应用程序对象Public Part As Object '声明零件对象Public boolstatus As Boolean ' 声明布尔变量Public longstatus As Long, longwarnings As Long '变量为长整型Public Feature As Object '定义特征对象'-----------------------主要命令代码注释-------------------------Set swApp = CreateObject("SldWorks.Application")'创建一个应用程序Set Part = swApp.Newpart '打开一个新实体文件Set Part = swApp.ActiveDoc '激活当前实体文件boolstatus = Part.Extension.SelectByID("前视", "PLANE", 0, 0, 0, False, 0, Nothing) '选择前视基准面为草图平面Part.InsertSketch2 True '插入草图Part.CreateLine2(xStart,yStart,zStart,xEnd,yEnd,zEnd ).Construct_ionGeometry =True '画中心线Part.ViewZoomtofit2 '整屏显示全图Part.ClearSelection '清除选择Part.CreateArcVB(p1x,py,p1z,p2x,p2y,p2z,p3x,p3y,p3z,dir) '以p1为圆心,从p2到p3生成圆弧Part.CreateLine2(xStart,yStart,zStart,xEnd,yEnd,zEnd) '两点画直线boolstatus = Part.Extension.SelectByID2(Name, Type, X, Y, Z, Append, Mark, Callout,SelectOption) '选择操作对象Part.SketchMirror '镜像所选对象Part.FeatureManager.FeatureRevolve(angle,reverseDir,angle2,revType,options, merge, useFeatScope, useAutoSel) '生成旋转特征Part.ShowNamedView2 vName, viewId 'X视图显示Part.CreatePlaneAtOffset3 val, flipDir, autoSize '插入基准面Part.InsertAxis2 True '插入基准轴Part.BlankRefGeom '隐藏所选参考几何体swApp.ExitApp '退出sldworks应用程序2.程序的应用方法为使用户更方便的使用做好的标准件库软件,我们可以将VB中建立的工程文件” standard library for sw.vbp”编译生成” standard library for sw.exe”文件,这样在打开SolidWorks 后直接点击此exe文件,就可以根据需要来绘制标准件3D模型了.上述直接运行exe文件来使用标准件库的方法,只能局限于安装了VB的计算机上,为了让没有安装VB的用户也能方便的使用该标准件库软件,我们可以用Visual Studio自带的打包工具Package and Deployment Wizard将标准件库制作成标准安装程序,打包过程中要注意包含文件步骤,一定要确认包含文件的完整性,程序使用的图标,图片,第三方控件所带的文件一定要带上,否则可能导致安装后的程序运行出错.3.结束语本文通过介绍标准件库的应用程序,说明了利用VB调用SolidWorks API函数对SolidWorks二次开发的一般方法,读者可以采用该方法建立适合自己需要的,专用的SolidWorks功能模块,继续对SolidWorks二次开发进行深入研究与探索.(插图无法上传,见谅!) 本文摘选自我的一篇学术论文,原文见《山东机械》杂志 2006.5月3期。
第10章清华大学的《CAD二次开发》电子教(LISP)
2. 了解AutoCAD应用程序的属性和方法
; ZoomCenter (2) ; ZoomExtents () ; ZoomPickWindow () ; ZoomPrevious () ; ZoomScaled (2) ; ZoomWindow (2)
在Property values(属性)部份列出了AutoCAD应用程序具 有ActiveDocument(活动的文档)、Application(应用程序的 指针)、Caption(标题)、FullName(可执行文件名)等属性 。
档的指针#<VLA-OBJECT IAcadDocument 01165340>,将其赋给变量mydoc。
4. 了解活动文档的属性 (vlax-dump-object mydoc) 返回的属性信息中有以下一行: ;ModelSpace (RO) = #<VLA-OBJECT IAcadModelSpace 011c1e04>。 ModelSpace是活动文档的属性之一,也是活动文档的下一级VLA对象。 5. 获取模型空间对象 (setq myms(vla-get-ModelSpace mydoc)) 返回模型空间的指针#<VLA-OBJECT IAcadModelSpace 011c1e04>,将其赋给 变量myms。 6.了解活动文档的属性和方法 (vlax-dump-object myms t) 返回的属性信息中有以下一行: ; Count (RO) = 2。说明该模型空间当前有两个图形对象。 返回的方法信息中有Add3Dface、Add3Dmesh、Add3Dpoly、AddArc、 AddAttribute、 AddBox、AddCircle、…、Item等许多方法。 其中 Item是根据序号获取图形对象,第一个图形对象的序号为0。
第8章编程实例清华CAD二次开发LISP
因为在命令行操作时,layer命令需要空回车响应“[?/Make/Set/New/ON /OFF/Color/Ltype/LWeight/Plot/Freeze/Thaw/LOck/Unlock/state]” 提 示 才 能 结束该命令,所以在右括号前增加一对引号(注意,引号内没有空格)。
(setq r (* 0.5 b) l1(- l b));r和l1分别是平键宽度b 和平键长度l的一半
(setq p1 (polar p (+ alf (* 0.5 pi)) r));p1-p4是多 义线的4个顶点
(setq p2 (polar p1 alf l1))
(setq p3 (polar p2 (+ alf (* 1.5 pi)) b))
(2)通过setvar函数设置目标捕捉的类型
(setvar "osmode" 7);7是捕捉端点、中点和中心的代码之和
(setvar "osmode" 0);不捕捉任何类型
将osmode设置为0(不捕捉任何类型)是通常的设置。假定 osmode的当前值为1,将捕捉直线或圆弧的端点。在这种情况下 ,如果指定的是p点,而p点处刚好有一条直线,那么实际获取 的是该直线距p点较近的那个端点,而不是p点本身。所以应该 用setvar函数将osmode设置为0。