SolidWorks_工程图设计1_工程图基础入门

发布时间:2026/7/10 3:28:58
SolidWorks_工程图设计1_工程图基础入门 工程图基础入门从模型创建标准三视图与图纸格式设置摘要在机械设计和制造领域工程图是工程师之间交流设计思想、传递制造信息的通用语言。本文将从零开始系统讲解如何从三维模型创建标准三视图主视图、俯视图、左视图并详细介绍工程图图纸格式的设置方法。通过本文的学习读者将掌握工程图制作的核心技能包括投影原理、视图布局、尺寸标注、标题栏填写等关键知识点。文中将提供完整的代码示例帮助读者快速上手实践。引言工程图Engineering Drawing被誉为“工程师的语言”它是产品设计、制造、检验和装配过程中不可或缺的技术文件。在计算机辅助设计CAD技术高度发达的今天虽然三维建模已经非常普及但二维工程图仍然在以下场景中发挥着不可替代的作用制造加工车间工人需要清晰的二维图纸进行零件加工质量检验质检人员依据图纸尺寸进行产品检测装配指导装配工人依赖装配图进行产品组装技术交流不同部门之间通过图纸传递技术信息本文将使用Python和ezdxf库作为主要工具演示如何从三维模型数据生成标准三视图。选择ezdxf的原因是其开源性、跨平台性和对DXF格式的完整支持。通过本文的实践读者将理解工程图制作的基本原理并能够自动化生成符合国标GB的工程图纸。1. 工程图基础理论1.1 投影法与三视图工程图的核心是正投影法即投影线相互平行且垂直于投影面的投影方法。在正投影中为了完整表达物体的形状通常需要从三个方向进行投影主视图前视图从前向后投影最能反映物体形状特征俯视图顶视图从上向下投影反映物体宽度和深度左视图侧视图从左向右投影反映物体高度和深度这三个视图之间存在严格的投影关系主视图和俯视图长对正长度相等主视图和左视图高平齐高度相等俯视图和左视图宽相等宽度相等1.2 图纸幅面与格式根据国家标准GB/T 14689-2008常用图纸幅面尺寸如下幅面代号尺寸B×LmmA0841×1189A1594×841A2420×594A3297×420A4210×297图纸通常包含以下区域图框图纸的边界线标题栏包含图纸名称、编号、比例、材料等信息绘图区域放置视图的实际区域2. 开发环境搭建2.1 安装必要库首先需要安装ezdxf库和numpy库pipinstallezdxf numpy2.2 基础导入importezdxffromezdxf.mathimportVec2,Vec3fromezdxf.enumsimportTextEntityAlignmentimportnumpyasnpfromtypingimportList,Tuple3. 创建三维模型数据3.1 定义基础几何体首先我们定义一个简单的三维模型——带孔矩形块。这个模型包含基本的几何特征平面、孔适合演示三视图的生成。classSimplePart3D:定义三维零件模型def__init__(self):# 零件尺寸单位mmself.width100# X方向长度self.depth60# Y方向长度self.height40# Z方向长度self.hole_radius10# 孔半径self.hole_x50# 孔中心X坐标self.hole_y30# 孔中心Y坐标defget_vertices(self)-List[Vec3]:获取所有顶点坐标w,d,hself.width,self.depth,self.heightreturn[Vec3(0,0,0),# 顶点0Vec3(w,0,0),# 顶点1Vec3(w,d,0),# 顶点2Vec3(0,d,0),# 顶点3Vec3(0,0,h),# 顶点4Vec3(w,0,h),# 顶点5Vec3(w,d,h),# 顶点6Vec3(0,d,h),# 顶点7]defget_edges(self)-List[Tuple[int,int]]:获取所有棱边顶点索引对# 底部矩形边bottom_edges[(0,1),(1,2),(2,3),(3,0)]# 顶部矩形边top_edges[(4,5),(5,6),(6,7),(7,4)]# 垂直棱边vertical_edges[(0,4),(1,5),(2,6),(3,7)]returnbottom_edgestop_edgesvertical_edgesdefget_hole_circle_points(self,num_points:int32)-List[Vec3]:获取孔圆周上的点在顶面和底面points[]forzin[0,self.height]:foriinrange(num_points):angle2*np.pi*i/num_points xself.hole_xself.hole_radius*np.cos(angle)yself.hole_yself.hole_radius*np.sin(angle)points.append(Vec3(x,y,z))returnpoints4. 生成标准三视图4.1 投影变换函数根据正投影原理我们需要将三维坐标投影到三个投影面上defproject_to_front_view(point:Vec3)-Vec2:主视图投影从前向后看保留Y高度和X宽度returnVec2(point.x,point.z)# 注意工程图中高度方向为Y轴defproject_to_top_view(point:Vec3)-Vec2:俯视图投影从上向下看保留X长度和Y深度returnVec2(point.x,point.y)defproject_to_left_view(point:Vec3)-Vec2:左视图投影从左向右看保留Z高度和Y深度returnVec2(point.z,point.y)# 注意左视图深度方向为Y轴4.2 视图布局计算三视图在图纸上的布局需要满足“长对正、高平齐、宽相等”的原则defcalculate_view_positions(part:SimplePart3D,spacing:float20): 计算三视图在图纸上的位置 返回{视图名称: (基准点x, 基准点y)} # 主视图位于左下角front_baseVec2(50,50)# 俯视图位于主视图正上方长对正top_baseVec2(50,50part.heightspacing)# 左视图位于主视图正右方高平齐left_baseVec2(50part.widthspacing,50)return{front:front_base,top:top_base,left:left_base}4.3 绘制单个视图defdraw_2d_view(msp,points_2d:List[Vec2],edges:List[Tuple[int,int]],base_point:Vec2,color:int1): 在图纸上绘制二维视图 :param msp: 模型空间 :param points_2d: 二维点列表 :param edges: 边列表顶点索引对 :param base_point: 视图基准点 :param color: 线条颜色1红色2黄色3绿色4青色5蓝色7白色 forstart_idx,end_idxinedges:startpoints_2d[start_idx]base_point endpoints_2d[end_idx]base_point msp.add_line(start,end,dxfattribs{color:color})4.4 生成完整三视图defcreate_three_views(part:SimplePart3D,msp)-None: 生成零件的标准三视图 # 获取零件几何数据verticespart.get_vertices()edgespart.get_edges()# 计算视图位置positionscalculate_view_positions(part)# 1. 主视图前视图front_points[project_to_front_view(v)forvinvertices]draw_2d_view(msp,front_points,edges,positions[front],color7)# 白色# 2. 俯视图顶视图top_points[project_to_top_view(v)forvinvertices]draw_2d_view(msp,top_points,edges,positions[top],color4)# 青色# 3. 左视图侧视图left_points[project_to_left_view(v)forvinvertices]draw_2d_view(msp,left_points,edges,positions[left],color3)# 绿色# 4. 绘制孔虚线表示隐藏特征hole_pointspart.get_hole_circle_points()# 在主视图中孔显示为虚线矩形上下两条水平线hole_top_zpart.height hole_bottom_z0# 主视图中的孔投影front_hole_leftpart.hole_x-part.hole_radius front_hole_rightpart.hole_xpart.hole_radius# 添加隐藏线虚线msp.add_line(Vec2(front_hole_left,hole_bottom_z)positions[front],Vec2(front_hole_right,hole_bottom_z)positions[front],dxfattribs{color:2,linetype:DASHED}# 黄色虚线)msp.add_line(Vec2(front_hole_left,hole_top_z)positions[front],Vec2(front_hole_right,hole_top_z)positions[front],dxfattribs{color:2,linetype:DASHED})5. 图纸格式设置5.1 创建图框defcreate_drawing_frame(msp,paper_size:strA4)-Tuple[float,float]: 创建标准图框 返回图框左下角和右上角坐标 # 图纸尺寸mmpaper_sizes{A4:(210,297),A3:(297,420),A2:(420,594),A1:(594,841),A0:(841,1189)}ifpaper_sizenotinpaper_sizes:raiseValueError(f不支持的图纸尺寸:{paper_size})width,heightpaper_sizes[paper_size]# 图框边界距纸边10mmmargin10leftmargin bottommargin rightwidth-margin topheight-margin# 绘制外框粗实线msp.add_lwpolyline([(left,bottom),(right,bottom),(right,top),(left,top),(left,bottom)],dxfattribs{color:7,lineweight:30})# 线宽0.3mm# 绘制内框细实线inner_margin5msp.add_lwpolyline([(leftinner_margin,bottominner_margin),(right-inner_margin,bottominner_margin),(right-inner_margin,top-inner_margin),(leftinner_margin,top-inner_margin),(leftinner_margin,bottominner_margin)],dxfattribs{color:7,lineweight:10})return(left,bottom),(right,top)5.2 创建标题栏defcreate_title_block(msp,bottom_left:Tuple[float,float],width:float180,height:float56): 创建标准标题栏符合GB/T 10609.1-2008 x,ybottom_left# 标题栏外框msp.add_lwpolyline([(x,y),(xwidth,y),(xwidth,yheight),(x,yheight),(x,y)],dxfattribs{color:7,lineweight:20})# 内部网格线# 第一行从上到下row1_yyheight-8msp.add_line((x,row1_y),(xwidth,row1_y),dxfattribs{color:7})# 第二行row2_yyheight-16msp.add_line((x,row2_y),(xwidth,row2_y),dxfattribs{color:7})# 第三行row3_yyheight-24msp.add_line((x,row3_y),(xwidth,row3_y),dxfattribs{color:7})# 垂直分隔线msp.add_line((x40,y),(x40,yheight),dxfattribs{color:7})msp.add_line((x80,y),(x80,yheight),dxfattribs{color:7})msp.add_line((x120,y),(x120,yheight),dxfattribs{color:7})# 添加标题栏文字text_style{height:3.5,color:7}# 第一行图纸名称msp.add_text(零件图,dxfattribstext_style).set_placement(Vec2(x20,row1_y2),alignTextEntityAlignment.CENTER)# 第二行材料msp.add_text(材料: 45钢,dxfattribstext_style).set_placement(Vec2(x60,row2_y2),alignTextEntityAlignment.CENTER)# 第三行比例msp.add_text(比例: 1:1,dxfattribstext_style).set_placement(Vec2(x100,row3_y2),alignTextEntityAlignment.CENTER)# 第四行图号msp.add_text(图号: 001,dxfattribstext_style).set_placement(Vec2(x140,y2),alignTextEntityAlignment.CENTER)5.3 添加尺寸标注defadd_dimensions(msp,part:SimplePart3D,positions:dict): 为三视图添加尺寸标注 # 主视图尺寸标注front_basepositions[front]# 标注宽度水平方向msp.add_linear_dim(basefront_baseVec2(0,-10),# 尺寸线位置p1front_baseVec2(0,0),# 第一延伸线起点p2front_baseVec2(part.width,0),# 第二延伸线起点dimtextf{part.width},dxfattribs{color:5}# 蓝色)# 标注高度垂直方向msp.add_linear_dim(basefront_baseVec2(-10,0),p1front_baseVec2(0,0),p2front_baseVec2(0,part.height),dimtextf{part.height},dxfattribs{color:5})# 俯视图标注深度top_basepositions[top]msp.add_linear_dim(basetop_baseVec2(0,-10),p1top_baseVec2(0,0),p2top_baseVec2(part.depth,0),dimtextf{part.depth},dxfattribs{color:5})6. 完整工作流程示例6.1 主程序defmain():主程序生成完整的工程图纸# 1. 创建DXF文档docezdxf.new(R2010)mspdoc.modelspace()# 2. 创建零件模型partSimplePart3D()# 3. 设置图纸格式A4竖放create_drawing_frame(msp,A4)# 4. 创建标题栏位于图纸右下角frame_bottom_left,frame_top_rightcreate_drawing_frame(msp,A4)title_block_width180title_block_height56title_xframe_top_right[0]-