问题描述

根据给出的模数m 齿数z 厚度b 使用C语言生成AutoCAD Script脚本绘制出齿轮图形

注意事项

  1. 本脚本中除参数需要用实际数值代替掉以外格式不允许发生任何改动(空格也不行),否则大概率会造成无法运行。
  2. 在AutoCAD中使用SCRIPT时需要关闭动态输入(F12)将输入坐标变为绝对坐标,需要关闭对象捕捉(F3),否则会因不可抗力而导致图形畸变。
  3. 脚本中出现的粗实线、细实线、尺寸线为对应的图层名称,可根据自己的配置进行修改,但需要注意附近的空格。
  4. 脚本中的空格极其重要,在运行时会起到类似回车的作用,因此要特别注意每一句中有几个空格,尤其是每一句代码的最后,有些是不需要额如CIRLCE指令,有些需要一个如LINE、LAYER指令,有些需要两个到三个。
  5. 脚本中的某些指令的运行跟高版本(我的是2018)中的指令会有些许不同,如LAYER指令,在指令框中直接运行只能打开图层管理器,而在脚本中运行时则可以更换图层,经查阅官方给的资料后发现是指令有些许改动,同名的老版本指令只需在指令前添加“-",如-LAYER,就可以使用老版本中的指令。

齿轮参数

/* 参数 */
齿顶高ha               ha=m
齿根高hf               hf=1.25m
齿高h                  h=ha+hf=1.25m
分度圆直径d            d=mz
齿顶圆直径da           da=d+2ha=m(z+2)
齿根圆直径df           df=d-2hf=m(z-2.5)
齿厚b
中心距a                a=(d1+d2)/2=m(z1+z2)/2
压力角A=20,变位系数O=0,齿高系数T=1,齿顶隙系数B=0.25,过度圆弧系数=0.38
基圆半径rb=mz/2*cos(A)
齿顶圆半径rt=mz/2+m*(T+O)
齿根圆半径rf=mz/2-m*(T+B-O)
已知齿顶圆da=220,齿数z=20,求出模数m=10,分度圆直径d=200,基圆半径rb=93.97,齿根圆df=175
//切线角度
theta_k = 360/(z*2)
//对称线角度
theta_m = 360/(z*4)
//切线长度
l = PI*rb*2/(2*z)
//过渡圆半径
mid_r = 0.38*m
//第四点
theta_4=theta_k*da/2*sin(acos(rb*2/da))/l
//渐开线上四点
x_1 = -(rb*sin(theta_k)-l*cos(theta_k))
y_1 = rb*cos(theta_k)+l*sin(theta_k))
x_2 = -(rb*sin(2*theta_k)-2*l*cos(2*theta_k))
y_2 = rb*cos(2*theta_k)+2*l*sin(2*theta_k)
x_3 = -(rb*sin(3*theta_k)-3*l*cos(3*theta_k))
y_3 = rb*cos(3*theta_k)+3*l*sin(3*theta_k)
x_4 = -(rb*sin(theta_4)-theta_4/theta_k*l*cos(theta_4))
y_4 = rb*cos(theta_4)+theta_4/theta_k*l*sin(theta_4)/* ************************************************* */

SCRIPT脚本

/* *********** 主程序 ********** */
LIMITS -(da/2+20),-(da/2+20) (da/2+20),(da/2+20)
ZOOM A
BASE 0,0
LAYER S 虚线
CIRCLE 0,0 d/2
CIRCLE 0,0 rb
LAYER S 中心线
LINE -(da/2+20),0 (da/2+20),0
LINE 0,-(da/2+20) 0,(da/2+20)
LINE 0,0 -da/2*sin(theta_m),da/2*cos(theta_m)
LAYER S 粗实线
SPLINE x_1,y_1 x_2,y_2 x_3,y_3 x_4,y_4
LINE x_1,y_1 0,(df/2+mid_r)
ARC 0,(df/2+mid_r) C mid_r,(df/2+mid_r) df/2*sin(atan(mid_r/(df/2+mid_r))),df/2*cos(atan(mid_r/(df/2+mid_r)))
ARC C 0,0 x_4,y_4 -da/2*sin(theta_m),da/2*cos(theta_m)
ARC C 0,0 df/2*sin(atan(mid_r/(df/2+mid_r))),df/2*cos(atan(mid_r/(df/2+mid_r))) A -(theta_m-asin(df/2*sin(atan(mid_r/(df/2+mid_r)))/(df/2)))
MIRROR W x_4-10,y_4+10 df/2*sin(atan(mid_r/(df/2+mid_r)))+10,df/2*cos(atan(mid_r/(df/2+mid_r)))-10  -da/2*sin(theta_k/2),da/2*cos(theta_k/2) 0,0 N
ARRAYPOLAR W -(da/2+20),(da/2+20) (da/2+20),10  0,0 I Z
LAYER S 中心线
LINE (da/2+30),0 (da/2+b+70),0
LINE (da/2+50+b/2),(da/2+20) (da/2+b/2+50),-(da/2+20)
LAYER S 粗实线
LINE (da/2+50+b/2),da/2 (da/2+b+50),da/2
LINE (da/2+b+50),da/2 (da/2+b+50),0
LINE (da/2+b/2+50),df/2 (da/2+b+50),df/2
LAYER S 虚线
LINE (da/2+b/2+50),d/2 (da/2+b+50),d/2
MIRROR W (da/2+50+b/2)-10,da/2+10 (da/2+b+50)+10,-10  (da/2+50),0 (da/2+b+70),0 N
MIRROR W (da/2+50+b/2)-10,da/2+10 (da/2+b+50)+10,-10-da/2  (da/2+50+b/2),(da/2+20) (da/2+b/2+50),-(da/2+20) N
LAYER S 尺寸线
DIM
DIMTXT 5
HOR (da/2+50),0 (da/2+50+b),0 (da/2+50+b/2),(df/5) b
VER (da/2+50+b),-df/2 (da/2+50+b),df/2 (da/2+b+90),0 df
VER (da/2+50+b),-d/2 (da/2+50+b),d/2 (da/2+b+110),0 d
VER (da/2+50+b),-da/2 (da/2+50+b),da/2 (da/2+b+130),0 da
EXIT
/* END */

C语言实现脚本生成

typedef struct __POINT_
{float x;float y;
}MyPoint;
/**
* @brief  根据模数、齿数、齿厚、压力角生成AutoCAD脚本 gear.scr
*/
void gear(float m, float z, float b ,float A)
{FILE *fp;float d = m*z;               //分度圆直径     float da = m*(z + 2*1);       //齿顶圆直径     齿顶高 ha* = 1        float df = m*(z - 2*1.25);     //齿根圆直径     齿根高 hf* = ha* +c*=1.25    float rb = m*z / 2 * cos(A * PI / 180); //基圆半径 float theta_k = 360 / (z * 2) * PI / 180; //切线角度float theta_m = 360 / (z * 4) * PI / 180;    //对称线偏角float l = PI * rb * 2 / (2 * z);        //切线长度float mid_r = 0.38 * m;      //齿根过渡圆圆角 过度圆弧系数 = 0.38float theta_4 = theta_k * da / 2 * sin(acos(rb * 2 / da)) / l;MyPoint P[4];                //渐开线上四点char filename[50];sprintf_s(filename,"gear_z_%.1f_m_%.1f_b_%.1f_Alpha_%.1f.scr",z,m,b,A);P[0].x = -(rb*sin(theta_k) - l * cos(theta_k));P[0].y = rb * cos(theta_k) + l * sin(theta_k);P[1].x = -(rb*sin(2 * theta_k) - 2 * l*cos(2 * theta_k));P[1].y = rb * cos(2 * theta_k) + 2 * l*sin(2 * theta_k);P[2].x = -(rb*sin(3 * theta_k) - 3 * l*cos(3 * theta_k));P[2].y = rb * cos(3 * theta_k) + 3 * l*sin(3 * theta_k);P[3].x = -(rb*sin(theta_4) - theta_4 / theta_k * l*cos(theta_4));P[3].y = rb * cos(theta_4) + theta_4 / theta_k * l*sin(theta_4);if (fopen_s(&fp, filename, "w") != NULL){printf("文件生成失败\n");return;}fprintf(fp, "LIMITS %.2f,%.2f %.2f,%.2f\n", -(da/2+20), -(da/2+20), (da/2+20), (da/2+20));fprintf(fp, "ZOOM A\n");fprintf(fp, "BASE 0,0\n");fprintf(fp, "LAYER S 虚线 \n");fprintf(fp, "CIRCLE 0,0 %.2f\n", d / 2);fprintf(fp, "CIRCLE 0,0 %.2f\n", rb);fprintf(fp, "LAYER S 中心线 \n");fprintf(fp, "LINE %.2f,0 %.2f,0 \n", -(da / 2 + 20), (da / 2 + 20));fprintf(fp, "LINE 0,%.2f 0,%.2f \n", -(da / 2 + 20), (da / 2 + 20));fprintf(fp, "LINE 0,0 %.2f,%.2f \n", -da / 2 * sin(theta_m), da / 2 * cos(theta_m));fprintf(fp, "LAYER S 粗实线 \n");fprintf(fp, "SPLINE %.2f,%.2f %.2f,%.2f %.2f,%.2f %.2f,%.2f   \n",P[0].x,P[0].y,P[1].x,P[1].y, P[2].x, P[2].y, P[3].x, P[3].y);fprintf(fp, "LINE %.2f,%.2f 0,%.2f \n", P[0].x, P[0].y, (df / 2 + mid_r));fprintf(fp, "ARC 0,%.2f C %.2f,%.2f %.2f,%.2f\n", (df / 2 + mid_r), mid_r, (df / 2 + mid_r), df / 2 * sin(atan(mid_r / (df / 2 + mid_r))), df / 2 * cos(atan(mid_r / (df / 2 + mid_r))));fprintf(fp, "ARC C 0,0 %.2f,%.2f %.2f,%.2f\n", P[3].x,P[3].y, -da / 2 * sin(theta_m), da / 2 * cos(theta_m));fprintf(fp, "ARC C 0,0 %.2f,%.2f A %.2f\n", df / 2 * sin(atan(mid_r / (df / 2 + mid_r))), df / 2 * cos(atan(mid_r / (df / 2 + mid_r))), -(theta_m - asin(df / 2 * sin(atan(mid_r / (df / 2 + mid_r))) / (df / 2)))*180/PI);fprintf(fp, "MIRROR W %.2f,%.2f %.2f,%.2f  %.2f,%.2f 0,0 N  \n", P[3].x-10, P[3].y+10, df / 2 * sin(atan(mid_r / (df / 2 + mid_r))) + 10, df / 2 * cos(atan(mid_r / (df / 2 + mid_r))) - 10, -da / 2 * sin(theta_k / 2), da / 2 * cos(theta_k / 2));fprintf(fp, "ARRAYPOLAR W %.2f,%.2f %.2f,10  0,0 I %.2f  \n", -(da / 2 + 20), (da / 2 + 20), (da / 2 + 20), z);fprintf(fp, "LAYER S 中心线 \n");fprintf(fp, "LINE %.2f,0 %.2f,0 \n", (da / 2 + 30), (da / 2 + b + 70));fprintf(fp, "LINE %.2f,%.2f %.2f,%.2f \n", (da / 2 + 50 + b / 2), (da / 2 + 20), (da / 2 + b / 2 + 50), -(da / 2 + 20));fprintf(fp, "LAYER S 粗实线 \n");fprintf(fp, "LINE %.2f,%.2f %.2f,%.2f \n", (da / 2 + 50 + b / 2), da / 2, (da / 2 + b + 50), da / 2);fprintf(fp, "LINE %.2f,%.2f %.2f,0 \n", (da / 2 + b + 50), da / 2, (da / 2 + b + 50));fprintf(fp, "LINE %.2f,%.2f %.2f,%.2f \n", (da / 2 + b / 2 + 50), df / 2, (da / 2 + b + 50), df / 2);fprintf(fp, "LAYER S 虚线 \n");fprintf(fp, "LINE %.2f,%.2f %.2f,%.2f \n", (da / 2 + b / 2 + 50), d / 2, (da / 2 + b + 50), d / 2);fprintf(fp, "MIRROR W %.2f,%.2f %.2f,-10  %.2f,0 %.2f,0 N  \n", (da / 2 + 50 + b / 2) - 10, da / 2 + 10, (da / 2 + b + 50) + 10, (da / 2 + 50), (da / 2 + b + 70));fprintf(fp, "MIRROR W %.2f,%.2f %.2f,%.2f  %.2f,%.2f %.2f,%.2f N  \n", (da / 2 + 50 + b / 2) - 10, da / 2 + 10, (da / 2 + b + 50) + 10, -10 - da / 2, (da / 2 + 50 + b / 2), (da / 2 + 20), (da / 2 + b / 2 + 50), -(da / 2 + 20));fprintf(fp, "LAYER S 尺寸线 \n");fprintf(fp, "DIM\n");fprintf(fp, "DIMTXT 5\n");fprintf(fp, "HOR %.2f,0 %.2f,0 %.2f,%.2f %.2f \n", (da / 2 + 50), (da / 2 + 50 + b), (da / 2 + 50 + b / 2), (df / 5),b);fprintf(fp, "VER %.2f,%.2f %.2f,%.2f %.2f,0 %.2f \n", (da / 2 + 50 + b), -df / 2, (da / 2 + 50 + b), df / 2, (da / 2 + b + 90), df);fprintf(fp, "VER %.2f,%.2f %.2f,%.2f %.2f,0 %.2f \n", (da / 2 + 50 + b), -d / 2, (da / 2 + 50 + b), d / 2, (da / 2 + b + 110), d);fprintf(fp, "VER %.2f,%.2f %.2f,%.2f %.2f,0 %.2f \n", (da / 2 + 50 + b), -da / 2, (da / 2 + 50 + b), da / 2, (da / 2 + b + 130), da);fprintf(fp, "EXIT\n");fclose(fp);
}

运行结果

AutoCAD利用SCRIPT脚本生成齿轮相关推荐

  1. java ant war包_java利用Ant脚本生成war包全过程

    使用ant脚本前的准备 1.下载一个ant安装包.如:apache-ant-1.8.4-bin.zip.解压到E盘. 2.配置环境变量.新增ANT_HOME:E:\apache-ant-1.8.4:P ...

  2. 利用shell脚本生成动态sql(67天)

    在一些分布式环境中,可能涉及到的数据库有很多,相关的数据库用户也不少,有些看似简单的变更可能需要在不同的库,不同的用户间要进行复杂的操作.现在我们有3套环境,一套是测试环境test,一套是准生产环境x ...

  3. 如何使用Elasticsearch groovy script脚本更新数据

    2019独角兽企业重金招聘Python工程师标准>>> 如何使用Elasticsearch groovy script脚本更新数据 博客分类: 搜索引擎,爬虫 今天细说一下elast ...

  4. 【Android】iOS开发中xconfig和script脚本的使用

    利用Xcode进行开发时需要进行很多build setting的设置以便能让项目按照设置的进行编译,同时有时候需要在编译时利用script脚本进行一些设置,本文主要介绍xconfig文件和script ...

  5. 蛙蛙推荐:利用WMI脚本批量恢复SQLSERVER数据库

    转载原文: 蛙蛙推荐:利用WMI脚本批量恢复SQLSERVER数据库 蛙蛙推荐:利用WMI脚本批量恢复SQLSERVER数据库 问题提出 蛙蛙求助:以编程的方式还原sqlserver数据库问题 我有一 ...

  6. 西门子触摸屏脚本程序_西门子触摸屏利用VBScript脚本创建csv文件

    功能描述:利用VBScript脚本创建csv/txt文件 有时需要将PLC或运动控制器Simotion中的数据写到SD卡或U盘上.一种实现方法是,如果使用的是精致面板(comfort panel),可 ...

  7. 利用EA根据sql脚本生成数据库文档

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 最近接到一个任务,通过数据库的sql脚本生成相应的数据库文档,表的数量比较多,手动写是 ...

  8. python图标的演变_把Python脚本生成exe文件并添加版本信息和自定义图标

    pyinstaller和py2exe把Python脚本生成exe文件,并添加版本信息和自定义图标. 写了一个查找产品通道号的小程序,目前还没进行异常处理. 以下是程序源码. # -*- coding: ...

  9. HFSS学习笔记(四)利用MATLAB脚本进行HFSS快速建模

    HFSS学习笔记(四)利用MATLAB脚本进行HFSS快速建模 在HFSS中,我们经常会遇到复杂且重复的模型,比如你要画30个不同的矩形块,每个矩形块都有自己的参数比如,a1,a2,-,a30,那么此 ...

最新文章

  1. python使用for循环打印99乘法表-python3:使用for循环打印九九乘法表
  2. SSH服务的渗透测试
  3. svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
  4. 机器学习中的不平衡分类方法(part3)--不平衡分类学习策略
  5. [eclipse]Syntax error on token ;,{ expected after this token
  6. Halcon的应用程序 打开后 弹出没有帮助文件错误提示
  7. 基础总结篇之四:Service完全解析
  8. python画十字_matplotlib绘制鼠标的十字光标的实现(内置方式)
  9. JSP 九大内置对象及作用域(源码刨析,建议收藏)
  10. php可以用lucene吗,php – Lucene外国字符问题
  11. c语言setlocale第二个参数,setlocale_本地化支持 | Localization support_C_参考手册_非常教程...
  12. 通信工程是计算机类还是电子信息类公考,通信工程属于电子信息类吗
  13. CMOS图像传感器OV7725数据手册
  14. python学习——基础信息
  15. 美的空气净化器H32评测:美观、实用以及更多
  16. sap系统中的batch_SAP 批次管理(Batch management)配置介绍
  17. Office 2016 系列 VOL版本下载
  18. 智能物流仓储机器人|海格里斯HEGERLS货物夹抱式防倾倒装置四向穿梭车
  19. widget jquery 理解
  20. css3 flex弹性盒子布局梳理,打通任督二脉

热门文章

  1. 考研进度记录表(2021.6-2021.11)
  2. JRE极限精简探求手册 1 ——精简一个Swing的即时战略游戏
  3. 自监督学习: 人工智能的未来
  4. 阅人无数,不如一本好书
  5. 通过网页版堡垒机访问服务器失败,堡垒机远程连接服务器被拒绝
  6. RSA加密明文密码传输
  7. 台式电脑计算机怎么看是固态硬盘,如何辨别自己的电脑是固态硬盘还是机械硬盘?...
  8. 非常详细的Lattice 的FPGA接口模块SerDes讲解
  9. android 动画x轴旋转,写给小白——Android旋转动画(3个方向的旋转)
  10. 如何恢复回收站被清空的文件