Autolisp:利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序

目录

实现结果

实现代码


实现结果

实现代码

(defun dlg1();初始化对话一
(set_tile "_m" "5");模数列表第6项
(set_tile "_z" "20");齿数20
(set_tile "_alf" "2");压力角第3项
(set_tile "s_z" "20");齿数滑动条
(set_tile "cut" "2");齿廓列表第3项
(action_tile "_m"  "(setq msh_ $value)")
(action_tile "s_z"  "(fsz)")
(action_tile "_z"  "(fz)")
(action_tile "s_x"  "(fs_x)")
(action_tile "_x"  "(f_x)")
(action_tile "_alf"  "(setq ylj_ $value)")
(action_tile "prec0"  "(setq qxcsh 5)")
(action_tile "prec1"  "(setq qxcsh 10)")
(action_tile "prec2"  "(setq qxcsh 15)")
(action_tile "accept"  "(getd)(done_dialog  1)")
(action_tile "cancel"  "(done_dialog  0)")
(action_tile "help" "(dlg3)")
)
;定义获取控件当前数据的函数
(defun getd()
(setq msh_ (get_tile "_m"))
(setq msh (atof(nth (atoi msh_) m_lst)));模数
(setq ylj_ (get_tile "_alf"))
(setq ylj (atof(nth (atoi ylj_) alf_lst)));压力角
(setq bwxsh(atof(get_tile "_x")));变位系数
(setq chsh(atoi(get_tile "_z")));齿数
)
;定义齿数编辑框的活动的函数
(defun fz(/  gz)
(setq gz(atoi $value))
(if (or (< gz 9)(> gz 100))(progn(set_tile $key (get_tile "s_z"))(setq chsh(atoi $value)))(progn(set_tile "s_z" (itoa gz))(setq chsh gz))
)
)
;定义齿数滑动条的活动的函数
(defun fsz()(set_tile "_z" $value)(setq chsh (atoi $value))
)
;定义变位系数滑动条的活动的函数
(defun fs_x(/ xx)(setq xx (atof $value))(setq bwxsh(* 0.01 xx))(setq xx(rtos bwxsh 2 2))(set_tile "_x" xx)
)
;定义变位系数编辑框的活动的函数
(defun f_x(/  xx )
(setq xx(atof $value))
(if (or (< xx -1)(> xx 1))(progn(setq xx (get_tile "s_x"))(setq xx(atof xx))(setq bwxsh(* 0.01 xx))(set_tile $key (rtos bwxsh 2 2)))(progn(setq bwxsh xx)(setq xx(* 100 xx))(set_tile "s_x" (itoa xx)))))
;定义齿轮加工的函数
(defun makegear()(setq chlzhx '(0 0));齿轮中心(setq ylj (* pi (/ ylj 180.0)));度转换为弧度(setq chgao (* msh (+ chdgaoxsh bwxsh)));齿高=1(setq fdybj (* 0.5 (* msh chsh)));分度圆半径(setq dybj (+ fdybj (* msh (+ chdgaoxsh bwxsh))));齿顶圆半径(setq kbj (* 0.25 dybj));轮孔半径(setq lm1 (list (- (car chlzhx) (* 2 dybj)) (+ (last chlzhx) dybj)));图纸界限的左下角(setq lm2 (list (+ (* 5 msh) (car chlzhx) dybj) (- (last chlzhx) (+ 10.0 (* chdjx msh)) dybj)));图纸界限的右上角(command "zoom" lm1 lm2)
(setq jybj (+ fdybj (* bwxsh msh)));节圆半径=分度圆半径+变位量
(setq temy1 (* msh (+ chdjx chdgaoxsh)));齿顶高1+齿顶间隙0.25
(setq chtgen (+ jybj temy1));齿轮中心到齿条根部的距离
(setq chtdi (+ chtgen 3.0));齿轮中心到齿条底根部的距离
(setq chtdi (- (cadr chlzhx) chtdi));齿条下底的y
(setq chtzuo (- (car chlzhx) (* 2 jybj)));齿条左边x
(setq p01 (list chtzuo chtdi))
(setq chw (* pi msh));周节
(setq chtgeny(+ chtdi 3.0));齿条根y
(setq p0 (list chtzuo chtgeny))
(setq chh (* 2.0 temy1));齿条全齿高
(setq chb (/ (* chh (sin ylj)) (cos ylj)))(setq cha (* 0.25 (- chw (* 2 chb))))
(setq chnu(* 0.5 chsh));齿条的齿数
(setq chnum 0.0)
(command "color" "green")
(setq chtemp p0)
(command "pline" p01 p0 )
(while(< chnum chnu);绘制齿条轮廓线(setq chnum (1+ chnum))(command (setq p1 (list (+ cha (car p0)) (cadr p0))))(command (setq p2 (list (+ chb (car p1)) (+ chh (cadr p1)))))(command (setq p3 (list (+ (* 2.0 cha) (car p2)) (cadr p2))))(command (setq p4 (list (+ chb (car p3)) (- (cadr p3) chh))))(command (setq p5 (list (+ cha (car p4)) (cadr p4))))(setq p0 p5)
)
(setq p02 (list (+ chtzuo (* chnum chw)) chtdi))
(command p02 p01 "c");齿条轮廓线绘制完毕
(setq e1(entlast));获取齿条的图元名
(command "region" e1 "");将齿条转换为面域
(setq tiao(entlast));获取转换为面域的齿条的图元名
(command "color" "white")
(command "circle" chlzhx dybj);绘制齿顶圆
(setq c1(entlast));获取齿顶圆的图元名
(command "region" c1 "");将齿顶圆转换为面域
(setq c1(entlast));获取转换为面域的齿顶圆的图元名
(command "circle" chlzhx kbj);绘制轮孔圆
(setq c2(entlast));获取轮孔圆的图元名
(command "region" c2 "");将轮孔圆转换为面域
(setq c2(entlast));获取转换为面域的轮孔圆的图元名
(command "subtract" c1 "" c2 "");齿顶圆的面域减去轮孔圆的面域
(setq lun(entlast));获取齿轮毛坯的图元名
(setq dphi(/ 360.0 (* chsh qxcsh)));齿轮毛坯每次旋转角度
(setq chtydjl (/ chw qxcsh));齿条每次移动距离
(setq shjqxcsh 0);实际切削次数
(setq ydjl 0.0);累计移动距离
(while (<= shjqxcsh (* qxcsh chsh))(setq ydjl (+ ydjl chtydjl))(setq dx chtydjl);齿条移动距离
(if (>= ydjl chw)(progn;ydjl大于等于周节chw(setq ydjl 0.0)(setq dx (* (- 1 qxcsh) chtydjl));齿条退回一个周节)
)
(command "copy" tiao "" '(0 0) '(0 0));原地复制齿条(setq tiao1(entlast))(command "subtract" lun "" tiao1 "");齿轮毛坯减去齿条(command "rotate" lun "" chlzhx dphi);齿轮毛坯旋转dphi(command "move" tiao "" '(0.0 0.0) (list dx 0.0));齿条移动dx(setq shjqxcsh (1+ shjqxcsh)))
)
;定义齿轮参数显示的函数
(defun showdata()(if (not (new_dialog "gear_list" id))(exit))(setq x1(dimx_tile "image2")) ;设置x1为图象宽  (setq y1(dimy_tile "image2"))  ;设置y1为图象高(start_image "image2")  ;开始建立图象(slide_image -10 -10 (+ x1 20) y1 "d:/example/sld/13-2-21")  ;-10 -10 (+ x1 20) y1(end_image) ;图象建立毕(set_tile "t1" (strcat "模数m: " (rtos msh 2 2)))(set_tile "t2" (strcat "齿数z: " (itoa chsh)))(setq ylj(* 180 (/ ylj pi)))(set_tile "t3" (strcat "压力角a: " (rtos ylj 2 2) "?" ));jlj0
(set_tile "t4" (strcat "变位系数x: " (rtos bwxsh 2 2)))
(set_tile "t5" (strcat "分度圆直径d: " (rtos (* 2 fdybj) 2 2)))
(set_tile "t6" (strcat "齿顶圆直径da: " (rtos (* 2 dybj) 2 2)))
(set_tile "t7" (strcat "齿根圆直径df: " (rtos (* 2 (- dybj (* 2.25 msh))) 2 2)))
(action_tile "accept"  "(done_dialog  1)")
(action_tile "xwj" "(done_dialog  2)")
(if (> (start_dialog) 1)(fwfile))
)
;定义将齿轮参数写到指定文件的函数
(defun fwfile()(setq fname(getfiled "输入存放齿轮参数的文件" "" "txt" 1))(setq fp(open fname "w"))(write-line (strcat "模数m: " (rtos msh 2 2)) fp)(write-line (strcat "齿数z: " (itoa chsh))fp)(write-line (strcat "压力角a: " (rtos ylj 2 2) "?" )fp)(write-line (strcat "变位系数x: " (rtos bwxsh 2 2))fp)(write-line (strcat "分度圆直径d: " (rtos (* 2 fdybj) 2 2))fp)(write-line (strcat "齿顶圆直径da: " (rtos (* 2 dybj) 2 2))fp);(write-line (strcat "齿根圆直径df: " (rtos (* 2 (- dybj (* 2.25 msh))) 2 2))fp)(close fp)
)
; 主函数
(defun c:niu( / bwxsh c1 c2 cha chb chdgaoxsh chdjx chgao chh chnu chnum  chsh chlzhx chtdi chtemp chtgen chtgeny chtydjl chtzuo chw dphi dx dybj e1 fdybj  fname fp jybj kbj lm1 lm2 lun msh msh_ p0 p01 p02 p1 p2 p3 p4 p5 qxcsh shjqxcsh temy1 tiao tiao1 x0 x1 y0 y1 ydjl ylj ylj_ zhxx zhxy)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "osmode" 0)
(setq chdgaoxsh 1.0);齿高系数
(setq chdjx 0.25);齿间隙
(setq qxcsh 15)
(setq id(load_dialog "d:/example/dcl/13-2")) ;装入对话框文件
(if (< id 0)(exit))
(setq what 3)
(while (> what 1)(if (not (new_dialog "mgear" id))(exit))(setq x1(dimx_tile "image1")) ;设置x1为图象宽(setq y1(dimy_tile "image1"))  ;设置y1为图象高(start_image "image1")  ;开始处理图象(slide_image -10 -25 (+ x1 100) y1 "d:/example/sld/13-2-1") ;-10 -25 (+ x1 20) y1(end_image) ;图象处理完毕(setq m_lst(list "1" "1.25" "1.5" "2" "2.5" "3"  "4" "5" "6" "8" "10"))(start_list "_m") ;开始处理模数列表(mapcar 'add_list m_lst)(end_list);模数列表处理完毕(setq alf_lst(list "14.5" "15" "20" "22.5" "25")) (start_list "_alf");开始处理压力角列表(mapcar 'add_list alf_lst)(end_list);压力角列表处理完毕(dlg1)  ;初始化对话框一(if (/= what 2) (setq what (start_dialog))))  ;while结束(if (= what 1)(progn(makegear);调用加工齿轮的函数(showdata);调用显示齿轮参数的函数))(unload_dialog id);卸载对话框文件
)

Autolisp:利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序相关推荐

  1. 【转载】:Autolisp:利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序-----一个处女座程序猿

    利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序 (defun dlg1();初始化对话一 (set_tile "_m" "5");模数列表第6项 ( ...

  2. Autolisp:利用AuoCAD之Lisp编程案例之自动智能绘制枫叶玫瑰

    Autolisp:利用AuoCAD之Lisp编程案例之自动智能绘制枫叶玫瑰 目录 输出结果 实现代码 输出结果 实现代码 ;风玫瑰程序: GXFMG.LSP 1989.1. (defun dbh(a) ...

  3. Autolisp:利用AuoCAD之Lisp编程案例之自动智能获取所选对象的面积并标注在指定位置

    Autolisp:利用AuoCAD之Lisp编程案例之自动智能获取所选对象的面积并标注在指定位置 目录 输出结果 实现代码 输出结果 实现代码 ;; write area value of a clo ...

  4. Python:Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3))、安装、学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略

    Python:Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3)).安装.学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略 ...

  5. 数学编程:经典数学编程案例之斐波那契:斐波那契数列的简介、代码实现、exe程序应用(斐波纳契时钟设计)之详细攻略

    数学编程:经典数学编程案例之斐波那契:斐波那契数列的简介.代码实现.exe程序应用(斐波纳契时钟设计)之详细攻略 目录 斐波那契数列的简介 斐波那契数列代码实现 1.python代码实现 2.Java ...

  6. Python花式编程案例集锦(5)

    问题描述: 输入三个序列,例如:[0.9,0.5,0.7],[0.4,0.6,0.3],[0.5,0.2,0.4],输出三个序列中各取一个相乘后最大的值,以及组合方式,如最大值为0.9*0.6*0.5 ...

  7. Hadoop hdfs编程案例和java交互

    Hadoop hdfs编程案例 一. HDFS编程实践 二.利用Java API与HDFS进行交互 三.应用程序的部署 一. HDFS编程实践 启动hadoop 切换到hadoop安装目录 cd /u ...

  8. Python 编程案例:谁没交论文?输出并生成电子表格

    Python 编程案例:谁没交论文?输出并生成电子表格 在工作或者学习中经常会对文件进行分类,比方说按姓名分类(也可以有其他分类,在此举例用姓名),就是以姓名建文件夹,然后把该人的文件存到相应姓名的文 ...

  9. 大数据 - MapReduce编程案例 -BH3

    MapReduce编程案例 用mapreduce解决问题的关键是确定key,只有key相同的结果才会到同一个reduce中进行处理 默认分区使用HashPartitoner,hashCode%redu ...

  10. Matlab编程入门指南:简介、安装、学习路线和几十个编程案例分析。

    一.Matlab编程入门指南:简介.安装.学习路线和几十个编程案例分析. 1.Matlab编程语言是一种广泛应用于科学计算.工程计算.数据分析.统计分析.信号处理等领域的高级数值计算和数据可视化软件. ...

最新文章

  1. CSS3+jQuery实现时钟插件
  2. java多数做增删改查_Java 实现一个 能够 进行简单的增删改查的 超市管理系统
  3. 前端学习(170):无语义元素二
  4. yii 1.4 constant.php,yii 中设置提示成功信息,错误提示信息,警告信息
  5. 认识Spring以及环境的配置
  6. SAP License:大陆SAP用户清单
  7. 20155327结对编程练习
  8. 打造人脉关系网,成就事业
  9. oracle awr报告提取,Oracle AWR报告提取方法
  10. 【ArcGIS微课1000例】0019:什么是Shapefile文件?Shapefile文件之全解
  11. webservice调用,控制台输出错误:编码GBK的不可映射字符
  12. HTML5新增标签--canvas之绘制你画我猜
  13. 第十四届全国大学生信息安全竞赛部分wp
  14. Windows 7无法启用网络发现的处理办法
  15. PMP复习整理考点篇【12】--- 激励理论
  16. Siege(开源Web压力测试工具)——多线程编程最佳实例
  17. Python 类的继承和组合
  18. 山东大学移动信息门户03
  19. 服务器之间的文件传输
  20. 浏览器F12控制台简述Network

热门文章

  1. [BZOJ 3654] 图样图森破
  2. 公司的苹果开发者账号续费问题
  3. Office2010安装出错1935
  4. Tableau怎么制作专业图表
  5. 如何让全屏游戏的文本编辑框支持IME和TSF输入法
  6. 华为云空间兑换码在哪里找_华为云空间在哪里找到
  7. 计算机学院论文评语,毕业设计(论文)评语的基本要求
  8. [状压dp][BZOJ3717][PA2014]Pakowanie
  9. 该内存不能为written或read的解决方案(比较全)
  10. 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔 (转帖)