版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章AutoCAD数据库基础TOC\o"1-5"\h\z\o"CurrentDocument"2.1 AutoCAD数据库概述 1\o"CurrentDocument"2.1.1 符号表 1\o"CurrentDocument"2.1.2 对象字典 2\o"CurrentDocument"AutoCAD数据库的基本操作 2\o"CurrentDocument"数据库的初始状态 2\o"CurrentDocument"创建数据库对象的基本方法 2\o"CurrentDocument"数据库的建立和存盘 4\o"CurrentDocument"AutoCAD数据库对象的编辑 5\o"CurrentDocument"数据库对象的打开和关闭 5\o"CurrentDocument"1.数据库对象的打开 6\o"CurrentDocument"2.对象的关闭 6\o"CurrentDocument"获得数据库对象标识符的方法 6\o"CurrentDocument"数据库对象的常用编辑 7\o"CurrentDocument"对象共有属性的编辑及常用函数 72.对象专有属性的编辑 8\o"CurrentDocument"2.4 复杂实体的生成和编辑 9\o"CurrentDocument"生成一个Polyline2d对象 9\o"CurrentDocument"Polyline2d对象的编辑 11\o"CurrentDocument"修改多段线的封闭状态 12\o"CurrentDocument"追加一个项点 12\o"CurrentDocument"顶点的修改 12\o"CurrentDocument"4.顶点的查询 12AutoCAD数据库概述AutoCAD数据库(AutoCADDatabase)是按一定结构组织的AutoCAD图形全部有关数据的集合。存储在AutoCAD数据库中的数据称为数据库对象(DBObject),它是一幅AutoCAD图形的基本组成部分,包括可见几何实体对象和不可见的非几何对象等。一组符号表和有名对象字宁典是AutoCAD数据库的关被组成部分。由于它们又包含了其他对象,因而称为容器对象(ContainerObject)。容器对象的作用是组织和管理数据库对象。AutoCAD数据库主要包括9个符号表和对象字典。2.1.1符号表在AutoCAD数据库中有9种符号表,分别是:块表(BlockTabLe)尺寸标注样式表(DimStyleTable)层表(LayerTable)线型表(LinetypeTable)应用程序注册表(RegAppTable)文字样式表(TextStyleTable)用户坐标系表(UCSTable)视口表(ViewportTable)视窗表(ViewTable)其中,块表中存储实体的记录称为块表记录,即所有的实体均存储在块表记录中;层表中的记录存储层的有关信息。尺寸标注样式表、层表、线型表和文字样式表等均用来存储相应的表记录,具体用法将枉后续章节中介绍。2.1.2对象字典有名对象字典是存储一般对象的容器,可用来存储任何数据库对象和子类,主要包括组(GROUP)和多线(MLINE)两个数据库字典。用户可以创建一个新的对象,并存储于对象字典中。另外,在AutoCAD数据库中,用对象句柄(Handle)和对象标识符(或称ID号)来区别数据库对象。一幅AutoCAD图形是由存储在一个数据库中的DBObject对象组成的,在数据库中的每个对象都有一个句柄,它是在具体的图形文件中某一对象与其他对象的唯一区别。对象标识符是在图形文件打开后对象的唯一标识。在Aut。CAD图形编辑状态,可以装入多个数据库。各数据库中的对象标识符是唯—的,而对象句柄却不能保证是唯—的。AutoCAD数据库的基本操作本节阐述AutoCAD数据库的基本操作,包括数据库的初始状态、如何创建数据库对象和新的数据库、如何在一个图形文件中读入数据库和数据库的存储等。数据库的初始状态进入AutoCAD环境,系统已自动生成一个缺省的数据库,包括9个符号表和一个有名对象字典。层表中已有一条0层记录;块表有“MODEL_SPACE”(模型空间)和“PAPER_SPACE”(图纸空间)两条记录;线型表中有“CONTINUOUS”、“BY_LAYER”和“BY_BL0CK”记录,应用程序注册表中有“ACAD”表记录;文字样式表中有“STANDARD”表记录。当创建数据库时,有名对象字典中包含GROUP和MLINE两个数据库字典。其中,MLINE数据字典已有一条“STANDARD”字体样式记录。创建数据库对象的基本方法先讨论一种特殊的数据库对象——实体的生成方法。在AutoCAD数据库中生成一个实体类对象(统称为对象),有下述几种方式:1) 用AutoCAD命令生成一个对象。2) 用AutoLISP的command函数生成一个对象。3) 用ADS的ads_command函救生成—个对象。4) 用ARX数据库操作函救生成—个对象。无论采用何种途径生成一个对象,其结果都是在相应数据库中写入有关记录。在前三种方式中,写数据库的操作由AutoCAD系统完成,后一种方式在ARX程序中直接调用有关函数实现。在AutoCAD数据库中,一个实体实际上是该数据库中的一条记录。在块表中存有模型空间和图纸空间记录。在模型空间记录中存有实体对象,存储实体的表称为块表记录。因此,生成一个实体对象的实质是向AutoCAD数据库的块表记录中增加一条记录。在ARX应用程序中,这个过程是通过ARX数据库操作函数来完成的。下面介绍用ARX数据库操作函数创建DBObject类对象的基本步骤和方法。这个过程可以分为三步:启动一个事务(Transaction),调用Transaction类的方法GetObject()获得当前图形的块表对象。调用Transaction类的方法GetObject()获得当前图形的块表记录对象。调用DBObject对象的构造函数创建对象,并将对象写入块表记录。例2-1当我们用line命令在模型空间作一条起点为(3,2)、终点为(10,7)的线段时,AutoCAD系统在其数据库中生成Line类的一个对象,并在模型空间中存入一条有关Line的记录。用ARX程序来实现这一功能的C#源程序如下:publicObjectIdCreateLine(){Point3dstartPoint=newPoint3d(3,2,0);//定义起点Point3dendPoint=newPoint3d(10,7,0);//定义终点ObjectIdlineld;Databasedb=HostApplicationServices.WorkingDatabase;//获取当前数据库using(Transactiontrans=db.TransactionManager.StartTransaction())//启动一个事务处理{//第一步:获得当前图形的块表对象BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableld,OpenMode.ForRead);//第二步:获得当前图形的块表记录对象BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);//第三步:生成Line对象,并写入数据库Lineline=newLine(startPoint,endPoint);lineId=btr.AppendEntity(line);//将Line对象加入到模型空间块表记录中trans.AddNewlyCreatedDBObject(line,true);//通知事务处理加入新的Line对象trans.Commit();//提交事务处理}returnlineld;//返回Line的对象标识}依照上述程序,不难写出在AutoCAD数据库中增加一个圆(Circle)实体的程序代码:publicObjectIdCreateCircle(){Point3dcenter=newPoint3d(9,3,0);//定义圆心Vector3dnormal=newVector3d(0,0,1);//定义法向矢量ObjectIdcircleId;Databasedb=HostApplicationServices.WorkingDatabase;//获取当前数据库using(Transactiontrans=db.TransactionManager.StartTransaction())〃启动一个事务处理{〃第一步:获得当前图形的块表对象BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableld,OpenMode.ForRead);〃第二步:获得当前图形的块表记录对象BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);〃第三步:生成Circle对象,并写入数据库Circlecircle=newCircle(center,normal,2.0);circleId=btr.AppendEntity(circle);//将Circle对象加入到模型空间块表记录中trans.AddNewlyCreatedDBObject(circle,true);//通知事务处理加入新的Circle对象trans.Commit();〃提交事务处理}returncircleld;//返回Circle的对象标识}CreateCircle()函数的执行结果是在AutoCAD数据库中生成Circle类的一个对象。在数据库中增加实体对象的关键是掌握DBObject对象类构造函数的用法,Line和Circle均是Curve类的派生类,其构造函数调用格式为:Line(pointer1,pointer2);Circle(center,normal,radius);参数pointerl、pointer2、center为WCS坐标系中的三维点,为Point3d类的变量;normal为法向矢量,属Vector3d类变量;radius为double类型。2.2.3数据库的建立和存盘通常,创建数据库对象使用的数据库是进入AutoCAD环境时自动生成的缺省数据库,实际上还可以根据需要用Database类新建一个数据库。下面是新建一个数据库,并创建一个圆弧(Arc)对象的程序片断:publicvoidCreateDwg(){Point3dcenter=newPoint3d(5,5,0);doubleradius=5.0,startAngle=0.0,endAngle=3.14;using(Databasedb=newDatabase())//新建一个数据库{using(Transactiontrans=db.TransactionManager.StartTransaction()){//获得块表对象BlockTablebt=(BlockTable)trans.GetObject(db.BlockTableld,OpenMode.ForRead);//以写方式打开模型空间,获得对应的块表记录对象BlockTableRecordbtr=(BlockTableRecord)trans.GetObject//以下代码为生成Arc对象,并写入数据库Arcarc=newArc(center,radius,startAngle,endAngle);btr.AppendEntity(arc);trans.AddNewlyCreatedDBObject(arc,true);trans.Commit();}db.SaveAs("tul.dwg",DwgVersion.Current);}}上段程序生成了一个新的数据库,并包含一段圆心为(5,5,0)、半径为5的半圆弧。最后调用Database类的成员函数SaveAs()将该数据库存入图形文件tul.dwg中。SaveAs()函数的原型为:voidSaveAs(stringfileName,DwgVersionversion);voidSaveAs(stringfileName,SecurityParameterssecurity);参数fileName为文件名,是string类型的数据。缺省为当前目录,否则应包含盘符和路径,如:e:\\arxbook\tul.dwg或e:/arxbook/tul.dwg。文件的扩展名不能缺省。下面的语句将当前图形的数据库存盘:HostApplicationServices.WorkingDatabase・SaveAs("filename・dwg");需要说明的是,当用Database类新建一个数据库时,生成的数据库是否包含初始化状态的标准对象取决于Database类构造函数中的成员变量。Database类的构造函数定义如下:Database();Database(boolbuildDefaultDrawing,boolnoDocument);第一个构造函数(缺省构造函数)等价于Database(true,false)。其中,参数buildDefaultDrawing若为false,则建立一个空的数据库;参数noDocument表示是否将当前文档与此数据库关联。此外,由于新建的数据库不是当前数据库,因而,向该数据库加入的实体将不会在当前屏幕上显示。AutoCAD数据库对象的编辑在本章的2.2节中已介绍了在AutoCAD数据库中插入一个新对象的基本方法,本节将讨论如何对数据库中已有的对象(DBObject)进行编辑等基本操作。对数据库对象进行编辑的前提是必须首先使用事务处理打开对象,然后利用ARX函数和属性实施所需操作。2.3.1数据库对象的打开和关闭在AutoCAD数据库中获得特定的对象主要有二种途径:通过对象句柄、对象标识符。对象句柄是AutoCAD图形文件中各对象之间的唯一区别,存在于整个图形文件的生命期;即只要图形文件没有被删除,无论该文件是否被打开对象句柄总是存在。在图形文件打开后,数据库中的每—个对象都具有一个区别于其他对象的对象标识符,直到图形文件的关闭或数据库的删除。1.数据库对象的打开Transaction类的GetObject()函数用来打开—个数据库对象,并获得该对象。函数原型为:DBObjectGetObejct(ObjectIdid,OpenModemode);DBObjectGetObejct(ObjectIdid,OpenModemode,boolopenErased);DBObjectGetObejct(ObjectIdid,OpenModemode,boolopenErased,boolforceOpenOnLockedLayer);各参数意义如下:id:数据库对象的对象标识符。mode:对象打开的方式,为OpenMode枚举。有ForRead、ForWrite、ForNotify三种方式。openErased:布尔植,若为true表示打开已删除的对象。forceOpenOnLockedLayer:布尔植,若为true表示打开锁定层上的对象。如果打开成功,则函数返回数据库中对象标识符为id的对象,为DBObject类型,一般要进行强制类型转换成所需的对象类型。若打开失败,则会抛出相应的异常。下例情况均会导致打开失败:•在openErased为false时企图打开一个被删除的对象•在forceOpenOnLockedLayer为false时企图打开一个在锁定层上的对象•用OpenMode.ForRead方式打开一个已用读方式打开256次的对象。•试图再打开一个已用OpenMode.ForNotify方式打开的对象。•试图再打开一个已用OpenMode.ForWrite方式的对象。•试图再打开对象标识符为Objectld.Null的对象。异常值可以通过try-catch语句进行捕捉,异常值的类型通常为Autodesk.AutoCAD.Runtime.Exception,异常的具体信息可以通过访问该类的ErrorStatus属性得到。上述情形的异常值的ErrorStatus属性值分别为ErrorStatus.WasErased、ErrorStatus.OnLockedLayer、ErrorStatus.AtMaxReaders、ErrorStatus.WasNotifying、ErrorStatus.WasOpenForWrite和ErrorStatus.NullObjectId。2.对象的关闭C++中对象的关闭通过调用成员函数close()完成,.net由于使用的是事务处理机制,因此不需要使用函数来关闭对象。2.3.2获得数据库对象标识符的方法为了对一个数据库对象进行操作,可以通过对象标识符获得对象。获得数据库对象标识符有下述几种方法:创建—个数据库对象并写入数据库时,直接得到对象标识符。使用数据库协议得到对象标识符。使用特殊的类协议得到对象标识符。如符号表、字典及其他对象所拥有的定义类,这些类提供了获得所拥有的对象标识符的协议。通过选择集获得对象标识符。下段程序代码表示了用交互方式改变数据库中对象颜色的方法。publicvoidChangeColor(){intnewColor;Objectldeld;//定义对象标识符Databasedb=HostApplicationServices.WorkingDatabase;Editored=Application.DocumentManager.MdiActiveDocument.Editor;using(Transactiontrans=db.TransactionManager.StartTransaction()){eld=ed.GetEntity("\n选择实体:").ObjectId;//获得对象标识符newColor=ed.GetInteger("\n新的颜色值:").Value;//以写的方式打开所选择的实体Entityent=(Entity)trans.GetObject(eId,OpenMode.ForWrite);ent.Colorlndex=newColor;//改变颜色trans.Commit();}}2.3.3数据库对象的常用编辑对象编辑的主要操作内容是对其属性的查询和修改。数据库对象的属性包括共有属性和专有属性两大类:以图形形式表示的实体类对象的共有属性主要指颜色、层和线型等;专有属性与特定的对象有关,如直线的起点和端点、圆的圆心和半径等。1.对象共有属性的编辑及常用函数对象共有属性的查询和修改比较简单,首先利用事务处理打开指定的对象,并把获得的DBObject类强制类型转换为Entity(实体)类,然后利用Entity类的属性及函数对进行查询和修改。对于修改操作,最后提交事务处理保存所做的修改。下面为对象属性进行查询和修改的一段代码:下面列出常用属性、函数及其说明:颜色:intColorIndex(Read/write);获取或设置实体的颜色为AutoCAD的颜色代码(0〜256)。如果颜色设置失败则抛出ErrorStatus属性为InvalidIndex的异常。线型:stringLinetype(Read/write);获取或设置实体的线型。线型为当前数据库中已有的线型名。如果当前数据库中的线型表记录中没有指定的线型则抛出ErrorStatus属性为KeyNotFound的异常。该函数返问指定实体的线型线型比例:doubleLinetypeScale(Read/write);层:stringLayer(Read/write);获取或设置实体所在的层名。ObjectIdLayerId(Read/write);获取或设置实体所在的层表记录的对象ID号设置数据库缺省值:voidSetDatabaseDefaults();voidSetDatabaseDefaults(DatabasesourceDatabase);参数sourceDatabase为数据库对象,第一个无参数的则表示当前数据库。用于设置Color(颜色)、Layer(层)、Linetype(线型)、LinetypeScale(线型比例)和Visible(可见性)。设置指定对象加亮显示:voidHighlight(FullSubentityPathsubId,boolhighlightAll);取消指定对象加亮显示:voidUnhighlight(FullSubentityPathsubId,boolhighlightAll);2.对象专有属性的编辑对象专有属性的查询和修改要比共有属性的查询和修改复杂一些,其基本方法是:首先利用事务处理打开指定的实体对象并强制类型转换为实体对象所属的某一具体类(如Line、Circle等);第二,使用该类的属性查询或修改对象的属性。先介绍Line类对象起点和终点的查询和修改。由于AutoCAD图形中的一条直线在AutoCAD数据库中是Line类的一个实例,因此,我们可以利用该类的属性查询和修改其属性。主要属性的原型和功能如下:直线起点:Point3dStartPoint(Read/write);该属性获取或设置直线起点(WCS坐标系),等同于DXF组码10的组值。如果设置直线起点失败,则抛出ErrorStatus属性为InvalidInput的异常。下面为修改选定直线起点的程序片断:publicvoidChangLine(){Databasedb=HostApplicationServices.WorkingDatabase;Editored=Application.DocumentManager.MdiActiveDocument.Editor;using(Transactiontrans=db.TransactionManager.StartTransaction()){PromptEntityResultres=ed.GetEntity("\n选择实体:");if(res.Status!=PromptStatus.OK)return;ObjectIdeId=res.ObjectId;//以写的方式打开所选择的实体,并强制类型转换为Line型Lineline=trans.GetObject(eId,OpenMode.ForWrite)asLine;if(line!=null)//如果选中的为直线{PromptPointResultpointRes=ed.GetPoint("\n输入直线的起点:”);if(pointRes.Status==PromptStatus.OK){line.StartPoint=pointRes.Value;//改变直线的起点}}trans.Commit();}}上面的程序通过GetEntityO和GetObject()函数得到Line对象。由于GetObject()函数返回的是DBObject类的对象,因而我们不能通过该对象调用特定类的属性,如StartPoint。这是因为StartPoint属性是Line类的成员属性,所以必须把DBObject类的对象强制类型转换为Line类。代码中使用了as转换标识符,这样做的好处是即使所选择的不是直线对象也不会有什么问题,然后通过if语句判断如果类型转换成功即实体对象为直线的话,就修改它的起点。同理,如果所选择的是Circle类的对象,则获得Circle类对象的代码为:Circlecircle=trans.GetObject(eId,OpenMode.ForWrite)asCircle;通过Circle对象,我们就可以调用Circle类的成员属性。如:圆心:Point3dCenter(Read/write);半径:doubleRadius(Read/write);由此可见,只要获得某一特定的对象,就可以通过“对象.属性”的形式查询或修改对象的属性。正是由于ARX应用程序可以直接访问AutoCAD数据库对象,因此其远行速度比ADS应用程序快得多。2.4复杂实体的生成和编辑在AutoCAD中诸如多段线(Polyline)等具有于子实体的特殊对象称为复杂实休。本节主要介绍二维多段线(类名:Polyline2d)的生成和编辑方法、组对象的生成以及浏览器的用法等。2.4.1生成一个Polyline2d对象在AutoCAD数据库中生成一个二维多段线是通过调用Curve类的派生类Polyline2d实现的,其构造函数格式为:Polyline2d(Poly2dTypetype,Point3dCollectionvertices,doubleelevation,boolclosed,doublestartWidth,doubleendWidth,DoubleCollectionbulges)函数的参数说明如下:type:多段线类型,主要有:SimplePoly 标准多段线。FitCurvePoly 曲线拟合。QuadSplinePoly 二次样条曲线拟合。CubicSplinePoly 三次样条曲线拟合。vertices:由多段线各顶点构成的数组。elevation:标高.closed:布尔值,表示多段线是否封闭。startWidth:起始线宽。endWidth:结束线宽。bulges:凸度值。凸度值用来表示当前顶点和下一顶点的连接形式,取零为直线连接,非零为圆弧连接。若两点为光滑连接,其值为两顶点之间圆弧所包含角度四分之—的正切值。生成Polyline2d类对象的方法与前面介绍的line、circle、arc、text等简单实体基本相同,但多段线的各顶点坐标要用数组表示。publicvoidCreateCzd(){Point3dCollectionptArr=newPoint3dCollection();//定义三维坐标数组对象//设置生成粗糙度符号的各顶点ptArr.Add(newPoint3d(3.0,4.243,0.0));ptArr.Add(newPoint3d(-3.0,4.243,0.0));ptArr.Add(newPoint3d(0.0,0.0,0.0));ptArr.Add(newPoint3d(6.0,8.486,0.0));//生成粗糙度符号Polyline2dpline=newPolyline2d(Poly2dType.SimplePoly,ptArr,0.0,true,0.0,0.0,null);//标注粗糙度数值Point3dpt=newPoint3d(3.0,5.243,0.0);//定义坐标DBTexttext=newDBText();//生成DBText类对象text.HorizontalMode=TextHorizontalMode.TextRight;//设置右对齐方式text.AlignmentPoint=pt;//设置对齐点text.TextString="12.5";//设置粗糙度数值text.TextStyle=Objectld.Null;//设置字体text.Height=3.0;//设置字高text.Rotation=0.0;//设置转角Databasedb=HostApplicationServices.WorkingDatabase;//获取当前数据库using(Transactiontrans=db.TransactionManager.StartTransaction()){BlockTableRecordbtr=(BlockTableRecord)trans.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db),OpenMode.ForWrite);//将粗糙度符号和数值加入数据库,并得到其标识符ObjectIdplineId=btr.AppendEntity(pline);trans.AddNewlyCreatedDBObject(pline,true);ObjectIdtextId=btr.AppendEntity(text);trans.AddNewlyCreatedDBObject(text,true);//生成新组"CAD"Groupgroup=newGroup("CZD",true);//将已生成的粗糙度符号和文字加入组中group.Append(plineId);group.Append(textId);//将生成的组加入组字典DBDictionarydict=(DBDictionary)trans.GetObject(db.GroupDictionaryld,OpenMode.ForWrite);//打开当前图形区的组字典//将"CZD"组写入组字典中dict.SetAt("CZD",group);trans.AddNewlyCreatedDBObject(group,true);trans.Commit();//提交事务处理}Documentdoc=Application.DocumentManager.MdiActiveDocument;//在指定位置标注doc.SendStringToExecute("move\nL\n0,0\n",false,false,false);}在例2-3中用Polyline2d类生成一个粗糙度符号,用DBText类生成粗糙度数值,然后将生成的两个对象组合成一个组并加入到组字典中,最后通过调用AutoCAD的move命令,将粗糙度符号和数值拖动到任意位置。Move命令中的目标选择为“L”方式,此时的‘L”为包括粗糙度符号和数值
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械工艺与装备课程设计
- 机械夹具斜支架课程设计
- 机械可靠性课程设计
- 机械原理专业课程设计
- 吉林省四平市第十七中学七年级微机 编制废气污染图表教案
- 机械制造学课程设计
- 机械制造原理课程设计
- 高中地理 第一章 自然灾害与人类活动 第二节 主要自然灾害的形成与分布地震、滑坡、泥石流等地质灾害教案 新人教版选修5
- 八年级信息技术下册 第20课 画龙点睛教案
- 2024学年九年级物理上册 第6章 电功率 6.4灯泡的电功率教案 (新版)教科版
- 深圳市中小学生流感疫苗接种知情同意书
- 城市轨道交通线路选线设计-徐振廷
- 工程委外维保流程ppt课件
- 探究如何提高机电工程施工质量的方法
- 中建股份公司合同管理手册
- 仓库分区及状态标识
- 浅析微博营销对消费者购买行为的影响
- 超高层建筑电气设计要点分析
- 1到10套文章听力 (1)[教案教学]
- 全公安机关易制爆危险化学品安全监管要点暨检查记录表
- 关于集中式供水单位卫生监督管理情况汇报
评论
0/150
提交评论