前言

这是最后一部分代码,往后若有时间,对其中的代码详细讲解。初心不变,以便日后查看。特别感谢作者孙成波译作《AutoCAD .NET 开发指南 2012 版》。三部分代码里面有些许失误,但很容易看出来,在此均做修改。若要直接运行,需要对其中的一些地址跟引用加以修改。

代码

#region CAD二次开发--第三节/// <summary>/// 折弯尺寸线 /// </summary>public static void DemisionLine(){//以读模式打开已注册应用程序表RegAppTable acRegAppTbl;acRegAppTbl = null;//<transaction>.GetObject(<current_database>.RegAppTableId,//    OpenMode.ForRead) as RegAppTable;//检查看看应用"ACAD_DSTYLE_DIMJAG_POSITION"是否已经注册,//如果没注册的话就将它添加进去if (acRegAppTbl.Has("ACAD_DSTYLE_DIMJAG_POSITION") == false){RegAppTableRecord acRegAppTblRec = new RegAppTableRecord();acRegAppTblRec.Name = "ACAD_DSTYLE_DIMJAG_POSITION";acRegAppTbl.UpgradeOpen();acRegAppTbl.Add(acRegAppTblRec);//<transaction>.AddNewlyCreatedDBObject(acRegAppTblRec,true)}//创建一个结果缓冲区来定义XdataResultBuffer acResBuf = new ResultBuffer();acResBuf.Add(new TypedValue((int)DxfCode.ExtendedDataRegAppName,"ACAD_DSTYLE_DIMJAG_POSITION"));acResBuf.Add(new TypedValue((int)DxfCode.ExtendedDataInteger16, 387));acResBuf.Add(new TypedValue((int)DxfCode.ExtendedDataInteger16, 3));acResBuf.Add(new TypedValue((int)DxfCode.ExtendedDataInteger16, 389));acResBuf.Add(new TypedValue((int)DxfCode.ExtendedDataXCoordinate,new Point3d(-1.26985, 3.91514, 0)));//将Xdata添加到尺寸标注对象//<dimension_object>.XData=acResBuf;}/// <summary>/// 创建旋转线性标注 rotated linear dimension/// </summary>[CommandMethod("CreateRotatedDimension")]public static void CreateRotatedDimension(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录ModelSpace(模型空间)BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建旋转尺寸标注RotatedDimension acRotDim = new RotatedDimension();acRotDim.XLine1Point = new Point3d(0, 0, 0);acRotDim.XLine2Point = new Point3d(6, 3, 0);acRotDim.Rotation = 0.707;acRotDim.DimLinePoint = new Point3d(0, 5, 0);acRotDim.DimensionStyle = acCurDb.Dimstyle;//将新对象添加到块表记录ModelSpace及事务acBlkTblRec.AppendEntity(acRotDim);acTrans.AddNewlyCreatedDBObject(acRotDim, true);//提交修改,关闭事务acTrans.Commit();}}/// <summary>/// 创建径向标注  Create a radial dimension/// </summary>[CommandMethod("CreateRadialDimension")]public static void CreateRadialDimension(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//Start a transaction 启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//Open the Block table for read 以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//Open the Block table record Model space for write//以写模式打开 块表记录ModelSpaceBlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//Create the radial dimension 创建半径标注RadialDimension acRadDim = new RadialDimension();acRadDim.Center = new Point3d(0, 0, 0);acRadDim.ChordPoint = new Point3d(5, 5, 0);acRadDim.LeaderLength = 5;acRadDim.DimensionStyle = acCurDb.Dimstyle;//添加新对象到模型空间和事务acBlkTblRec.AppendEntity(acRadDim);acTrans.AddNewlyCreatedDBObject(acRadDim, true);//提交修改,关闭事务acTrans.Commit();}}/// <summary>/// 创建角度标注  Create an angular dimension/// </summary>[CommandMethod("CreateAngularDimension")]public static void CreateAngularDimension(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录ModelSpaceBlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//建立角度标注LineAngularDimension2 acLinAngDim = new LineAngularDimension2();acLinAngDim.XLine1Start = new Point3d(0, 5, 0);acLinAngDim.XLine1End = new Point3d(1, 7, 0);acLinAngDim.XLine2Start = new Point3d(0, 5, 0);acLinAngDim.XLine2End = new Point3d(1, 3, 0);acLinAngDim.ArcPoint = new Point3d(3, 5, 0);acLinAngDim.DimensionStyle = acCurDb.Dimstyle;//添加新对象到模型空间和事务中acBlkTblRec.AppendEntity(acLinAngDim);acTrans.AddNewlyCreatedDBObject(acLinAngDim, true);//提交修改,关闭事务acTrans.Commit();}}/// <summary>/// 创建折弯半径标注  Create a jogged radius dimension/// </summary>[CommandMethod("CreateJoggedDimension")]public static void CreateJoggedDimension(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建一个大半径标注RadialDimensionLarge acRadDimLrg = new RadialDimensionLarge();acRadDimLrg.Center = new Point3d(-3, -4, 0);acRadDimLrg.ChordPoint = new Point3d(2, 7, 0);acRadDimLrg.OverrideCenter = new Point3d(0, 2, 0);acRadDimLrg.JogPoint = new Point3d(1, 4.5, 0);acRadDimLrg.JogAngle = 0.707;acRadDimLrg.DimensionStyle = acCurDb.Dimstyle;//将新对象添加到模型空间和事务acBlkTblRec.AppendEntity(acRadDimLrg);acTrans.AddNewlyCreatedDBObject(acRadDimLrg, true);//提交修改,关闭事务acTrans.Commit();}}/// <summary>/// 创建弧长标注  Create an arc length dimension/// </summary>[CommandMethod("CreateArcLengthDimension")]public static void CreateArcLengthDimension(){//获取当前文档和数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开Block表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开Block表记录Model空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建一个弧长标注ArcDimension acArcDim = new ArcDimension(new Point3d(4.5, 1.5, 0),new Point3d(8, 4.25, 0),new Point3d(0, 2, 0),new Point3d(5, 7, 0),"<>",acCurDb.Dimstyle);//将新对象添加到模型空间和事务acBlkTblRec.AppendEntity(acArcDim);acTrans.AddNewlyCreatedDBObject(acArcDim, true);//提交修改,关闭事务acTrans.Commit();}}/// <summary>/// 创建一个坐标标注 /// </summary>[CommandMethod("CreateOrdinateDimension")]public static void CreateOrdinateDimension(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录ModelSpaceBlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建坐标标注OrdinateDimension acOrdDim = new OrdinateDimension();acOrdDim.UsingXAxis = true;acOrdDim.DefiningPoint = new Point3d(5, 5, 0);acOrdDim.LeaderEndPoint = new Point3d(10, 5, 0);acOrdDim.DimensionStyle = acCurDb.Dimstyle;//将新对象添加到模型空间和事务acBlkTblRec.AppendEntity(acOrdDim);acTrans.AddNewlyCreatedDBObject(acOrdDim, true);//提交修改,关闭事务acTrans.Commit();}}/// <summary>/// 修改标注文字 /// </summary>[CommandMethod("OverrideDimensionText")]public static void OverrideDimensionText(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建一个对齐标注AlignedDimension acAlidim = new AlignedDimension();acAlidim.XLine1Point = new Point3d(5, 3, 0);acAlidim.XLine2Point = new Point3d(10, 3, 0);acAlidim.DimLinePoint = new Point3d(7.5, 5, 0);acAlidim.DimensionStyle = acCurDb.Dimstyle;//改写标注文字acAlidim.DimensionText = "The value is <>";//将新对象添加到模型空间和事务acBlkTblRec.AppendEntity(acAlidim);acTrans.AddNewlyCreatedDBObject(acAlidim, true);//提交修改,关闭事务acTrans.Commit();}}/// <summary>/// 拷贝 并修改/// </summary>[CommandMethod("CopyDimStyles")]public static void CopyDimStyles(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开Block表ModelSpaceBlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForRead) as BlockTableRecord;object acObj = null;foreach (ObjectId acObjId in acBlkTblRec){//获取模型空间中的第一个对象acObj = acTrans.GetObject(acObjId,OpenMode.ForRead);break;}//以读模式打开DimStyle表DimStyleTable acDimStyleTbl;acDimStyleTbl = acTrans.GetObject(acCurDb.DimStyleTableId,OpenMode.ForRead) as DimStyleTable;string[] strDimStyleNames = new string[3];strDimStyleNames[0] = "Style 1 copied from a dim.";strDimStyleNames[1] = "Style 2 copied from Style 1";strDimStyleNames[2] = "Style 3 copied from the running drawing values.";int nCnt = 0;//定义一个第一个标注样式的引用,一会儿要用到DimStyleTableRecord acDimStyleTblRec1 = null;//遍历标注样式名称数组foreach (string strDimStyleName in strDimStyleNames){DimStyleTableRecord acDimStyleTblRec;DimStyleTableRecord acDimStyleTblRecCopy = null;//检查标注样式是否存在if (acDimStyleTbl.Has(strDimStyleName) == false){if (acDimStyleTbl.IsWriteEnabled == false)acDimStyleTbl.UpgradeOpen();acDimStyleTblRec = new DimStyleTableRecord();acDimStyleTblRec.Name = strDimStyleName;acDimStyleTbl.Add(acDimStyleTblRec);acTrans.AddNewlyCreatedDBObject(acDimStyleTblRec, true);}else{acDimStyleTblRec = acTrans.GetObject(acDimStyleTbl[strDimStyleName],OpenMode.ForWrite) as DimStyleTableRecord;}//确定新的标注样式是如何填充的switch ((int)nCnt){//将标注对象的值赋给新标注样式case 0:try{//强制将对象类型转换为标注类型Dimension acDim = acObj as Dimension;//从标注复制标注样式数据并设置标注样式的名称//(复制的设置是未命名的)acDimStyleTblRecCopy = acDim.GetDimstyleData();acDimStyleTblRec1 = acDimStyleTblRec;}catch{//对象不是个标注}break;//将标注样式的值赋给新样式case 1:acDimStyleTblRecCopy = acDimStyleTblRec1;break;//将当前图形的值赋给标注样式case 2:acDimStyleTblRecCopy = acCurDb.GetDimstyleData();break;}//复制标注设置,设标注样式名称acDimStyleTblRec.CopyFrom(acDimStyleTblRecCopy);acDimStyleTblRec.Name = strDimStyleName;//注销复制的标注样式,回收内存acDimStyleTblRecCopy.Dispose();nCnt = nCnt + 1;}//提交修改,注销事务,回收内存acTrans.Commit();}}/// <summary>/// 为对齐标注输入一个用户自定义后缀/// </summary>[CommandMethod("AddDimensionTextSuffix")]public static void AddDimensionTextSuffix(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录ModelSpaceBlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForRead) as BlockTableRecord;//创建对齐标注AlignedDimension acAliDim = new AlignedDimension();acAliDim.XLine1Point = new Point3d(0, 5, 0);acAliDim.XLine2Point = new Point3d(5, 5, 0);acAliDim.DimLinePoint = new Point3d(5, 7, 0);acAliDim.DimensionStyle = acCurDb.Dimstyle;//将新对象添加到模型空间并进行事务记录acBlkTblRec.AppendEntity(acAliDim);acTrans.AddNewlyCreatedDBObject(acAliDim, true);//给标注文字添加后缀PromptStringOptions pStrOpts = new PromptStringOptions("");pStrOpts.Message = "\nEnter a new text suffix for the dimension: ";pStrOpts.AllowSpaces = true;PromptResult pStrRes = acDoc.Editor.GetString(pStrOpts);if (pStrRes.Status == PromptStatus.OK){acAliDim.Suffix = pStrRes.StringResult;}//提交修改,注销事务acTrans.Commit();}}/// <summary>/// 创建一条引线 /// </summary>[CommandMethod("CreateLeader")]public static void CreateLeader(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建引线Leader acLdr = new Leader();acLdr.AppendVertex(new Point3d(0, 0, 0));acLdr.AppendVertex(new Point3d(4, 4, 0));acLdr.AppendVertex(new Point3d(4, 5, 0));acLdr.HasArrowHead = true;//添加新对象到模型空间,记录事务acBlkTblRec.AppendEntity(acLdr);acTrans.AddNewlyCreatedDBObject(acLdr, true);//提交修改,回收内存acTrans.Commit();}}/// <summary>/// 关联引线与注释  Associate a leader to the annotation/// </summary>[CommandMethod("AddLeaderAnnotation")]public static void AddLeaderAnnotation(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建多行文字(MText)注释MText acMText = new MText();acMText.Contents = "Hello,World.";acMText.Location = new Point3d(5, 5, 0);acMText.Width = 2;//添加新对象到模型空间,记录事务acBlkTblRec.AppendEntity(acMText);acTrans.AddNewlyCreatedDBObject(acMText, true);//创建带注释的引线Leader acLdr = new Leader();acLdr.AppendVertex(new Point3d(0, 0, 0));acLdr.AppendVertex(new Point3d(4, 4, 0));acLdr.AppendVertex(new Point3d(4, 5, 0));acLdr.HasArrowHead = true;//添加新对象到模型空间,记录事务acBlkTblRec.AppendEntity(acLdr);acTrans.AddNewlyCreatedDBObject(acLdr, true);//给引线对象附加注释acLdr.Annotation = acMText.ObjectId;acLdr.EvaluateLeader();//提交修改,回收内存acTrans.Commit();}}/// <summary>/// 创建形位公差 /// </summary>[CommandMethod("CreateGeometricTolerance")]public static void CreateGeometricTolerance(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建形位公差(特征控制框)FeatureControlFrame acFcf = new FeatureControlFrame();acFcf.Text = "{\\Fgdt;j}%%v{\\Fgdt;n}0.001%%v%%v%%v%%v";acFcf.Location = new Point3d(5, 5, 0);//添加新对象到模型空间,作事务记录acBlkTblRec.AppendEntity(acFcf);acTrans.AddNewlyCreatedDBObject(acFcf, true);//提交修改,关闭事务acTrans.Commit();}}/// <summary>/// 定义、查询 2D/3D /// </summary>[CommandMethod("Polyline_2D_3D")]public static void Polyline_2D_3D(){//获取当前数据库Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;//启动事务using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//注意创建3D多段线和创建2D多段线时,//调用AddVertexAt()函数和AppendEntity()函数的顺序不一样//用2条线段(3个点)创建一条多段线Autodesk.AutoCAD.DatabaseServices.Polyline acPoly = new Autodesk.AutoCAD.DatabaseServices.Polyline();acPoly.AddVertexAt(0, new Point2d(1, 1), 0, 0, 0);acPoly.AddVertexAt(1, new Point2d(1, 2), 0, 0, 0);acPoly.AddVertexAt(2, new Point2d(2, 2), 0, 0, 0);acPoly.ColorIndex = 1;//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acPoly);acTrans.AddNewlyCreatedDBObject(acPoly, true);//用2条线段(3个点)创建一条3D多段线Polyline3d acPoly3d = new Polyline3d();acPoly3d.ColorIndex = 5;//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acPoly3d);acTrans.AddNewlyCreatedDBObject(acPoly3d, true);//给3D多段线添加顶点前,3D多段线必须已在数据库中了Point3dCollection acPts3dPoly = new Point3dCollection();acPts3dPoly.Add(new Point3d(1, 1, 0));acPts3dPoly.Add(new Point3d(2, 1, 0));acPts3dPoly.Add(new Point3d(2, 2, 0));foreach (Point3d acPt3d in acPts3dPoly){PolylineVertex3d acPolVer3d = new PolylineVertex3d(acPt3d);acPoly3d.AppendVertex(acPolVer3d);acTrans.AddNewlyCreatedDBObject(acPolVer3d, true);}//获取多段线的顶点坐标Point2dCollection acPts2d = new Point2dCollection();for (int nCnt = 0; nCnt < acPoly.NumberOfVertices; nCnt++){acPts2d.Add(acPoly.GetPoint2dAt(nCnt));}//获取3D多段线的顶点坐标Point3dCollection acPts3d = new Point3dCollection();foreach (ObjectId acObjIdvert in acPoly3d){PolylineVertex3d acPolVer3d;acPolVer3d = acTrans.GetObject(acObjIdvert,OpenMode.ForRead) as PolylineVertex3d;acPts3d.Add(acPolVer3d.Position);}//显示坐标Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("2D polyline (red): \n" +acPts2d[0].ToString() + "\n" +acPts2d[1].ToString() + "\n" +acPts2d[2].ToString());Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("3D polyline (blue): \n" +acPts3d[0].ToString() + "\n" +acPts3d[1].ToString() + "\n" +acPts3d[2].ToString());//提交事务acTrans.Commit();}}/// <summary>/// 新创建一个 UCS  并设置为当前坐标系,然后将一个点的坐标转变为 UCS /// </summary>[CommandMethod("NewUCS")]public static void NewUCS(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开UCSTableUcsTable acUCSTbl;acUCSTbl = acTrans.GetObject(acCurDb.UcsTableId,OpenMode.ForRead) as UcsTable;UcsTableRecord acUCSTblRec;//检查UCS表中是否有“New_UCS”这条记录if (acUCSTbl.Has("New_UCS") == false){acUCSTblRec = new UcsTableRecord();acUCSTblRec.Name = "New_UCS";//以写模式打开UCSTableacUCSTbl.UpgradeOpen();//往UCSTable添加新纪录acUCSTbl.Add(acUCSTblRec);acTrans.AddNewlyCreatedDBObject(acUCSTblRec, true);}else{acUCSTblRec = acTrans.GetObject(acUCSTbl["New_UCS"],OpenMode.ForWrite) as UcsTableRecord;}acUCSTblRec.Origin = new Point3d(4, 5, 3);acUCSTblRec.XAxis = new Vector3d(1, 0, 0);acUCSTblRec.YAxis = new Vector3d(0, 1, 0);//打开当前视口ViewportTableRecord acVportTblRec;acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId,OpenMode.ForWrite) as ViewportTableRecord;//在当前视口的原点显示UCS图标acVportTblRec.IconAtOrigin = true;acVportTblRec.IconEnabled = true;//设置UCS为当前坐标系acVportTblRec.SetUcs(acUCSTblRec.ObjectId);acDoc.Editor.UpdateTiledViewportsFromDatabase();//显示当前UCS坐标系的名称UcsTableRecord acUCSTblRecActive;acUCSTblRecActive = acTrans.GetObject(acVportTblRec.UcsName,OpenMode.ForRead) as UcsTableRecord;Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("The current UCS is: " +acUCSTblRecActive.Name);PromptPointResult pPtRes;PromptPointOptions pPtOpts = new PromptPointOptions("");//提示选取一个点pPtOpts.Message = "\nEnter a point: ";pPtRes = acDoc.Editor.GetPoint(pPtOpts);Point3d pPt3dWCS;Point3d pPt3dUCS;//将获得的点的坐标转变为当前UCS坐标if (pPtRes.Status == PromptStatus.OK){pPt3dWCS = pPtRes.Value;pPt3dUCS = pPtRes.Value;//将该点的当前UCS坐标转变为WCS坐标Matrix3d newMatrix = new Matrix3d();newMatrix = Matrix3d.AlignCoordinateSystem(Point3d.Origin,Vector3d.XAxis,Vector3d.YAxis,Vector3d.ZAxis,acVportTblRec.Ucs.Origin,acVportTblRec.Ucs.Xaxis,acVportTblRec.Ucs.Yaxis,acVportTblRec.Ucs.Zaxis);pPt3dUCS = pPt3dWCS.TransformBy(newMatrix);Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("The WCS coordinates are: \n" +pPt3dWCS.ToString() + "\n" +"The UCS coordinates are: \n" +pPt3dUCS.ToString());}//提交事务acTrans.Commit();}}/// <summary>/// 将OCS坐标转变为WCS坐标/// </summary>[CommandMethod("TranslateCoordinates")]public static void TranslateCoordinates(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建2D多段线Polyline2d acPoly2d = new Polyline2d();//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acPoly2d);acTrans.AddNewlyCreatedDBObject(acPoly2d, true);//先将多段线添加到块表记录,然后才能给它添加顶点Point3dCollection acPts2dPoly = new Point3dCollection();acPts2dPoly.Add(new Point3d(1, 1, 0));acPts2dPoly.Add(new Point3d(1, 2, 0));acPts2dPoly.Add(new Point3d(2, 2, 0));acPts2dPoly.Add(new Point3d(3, 2, 0));acPts2dPoly.Add(new Point3d(4, 4, 0));foreach (Point3d acPt3d in acPts2dPoly){Vertex2d acVer2d = new Vertex2d(acPt3d, 0, 0, 0, 0);acPoly2d.AppendVertex(acVer2d);acTrans.AddNewlyCreatedDBObject(acVer2d, true);}//设置2D多段线的法线acPoly2d.Normal = new Vector3d(0, 1, 2);//获取2D多段线的第1个坐标Point3dCollection acPts3d = new Point3dCollection();Vertex2d acFirstVer = null;foreach (ObjectId acObjIdVert in acPoly2d){acFirstVer = acTrans.GetObject(acObjIdVert,OpenMode.ForRead) as Vertex2d;acPts3d.Add(acFirstVer.Position);break;}//获取2D多段线的第1个顶点//Z坐标值用Elevation属性值Point3d pFirstVer = new Point3d(acFirstVer.Position.X,acFirstVer.Position.Y,acPoly2d.Elevation);//OCS到WCS转换Matrix3d mWPlane = Matrix3d.WorldToPlane(acPoly2d.Normal);Point3d pWCSPt = pFirstVer.TransformBy(mWPlane);Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("The first vertex has the following " +"coordinates: " +"\nOCS: " + pFirstVer.ToString() +"\nWCS: " + pWCSPt.ToString());//提交事务acTrans.Commit();}}/// <summary>/// 创建多边形网格/// </summary>[CommandMethod("Create3DMesh")]public static void Create3DMesh(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建多边形网格PolygonMesh acPolyMesh = new PolygonMesh();acPolyMesh.MSize = 4;acPolyMesh.NSize = 4;//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acPolyMesh);acTrans.AddNewlyCreatedDBObject(acPolyMesh, true);//添加顶点前,必须先将多边形网格添加到块表记录Point3dCollection acPts3dPMesh = new Point3dCollection();acPts3dPMesh.Add(new Point3d(0, 0, 0));acPts3dPMesh.Add(new Point3d(2, 0, 1));acPts3dPMesh.Add(new Point3d(4, 0, 0));acPts3dPMesh.Add(new Point3d(6, 0, 1));acPts3dPMesh.Add(new Point3d(0, 2, 0));acPts3dPMesh.Add(new Point3d(2, 2, 1));acPts3dPMesh.Add(new Point3d(4, 2, 0));acPts3dPMesh.Add(new Point3d(6, 2, 1));acPts3dPMesh.Add(new Point3d(0, 4, 0));acPts3dPMesh.Add(new Point3d(2, 4, 1));acPts3dPMesh.Add(new Point3d(4, 4, 0));acPts3dPMesh.Add(new Point3d(6, 4, 0));acPts3dPMesh.Add(new Point3d(0, 6, 0));acPts3dPMesh.Add(new Point3d(2, 6, 1));acPts3dPMesh.Add(new Point3d(4, 6, 0));acPts3dPMesh.Add(new Point3d(6, 6, 0));foreach (Point3d acPt3d in acPts3dPMesh){PolygonMeshVertex acPMeshVer = new PolygonMeshVertex(acPt3d);acPolyMesh.AppendVertex(acPMeshVer);acTrans.AddNewlyCreatedDBObject(acPMeshVer, true);}//打开当前视口ViewportTableRecord acVportTblRec;acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId,OpenMode.ForWrite) as ViewportTableRecord;//旋转当前视口的观察方向acVportTblRec.ViewDirection = new Vector3d(-1, -1, 1);acDoc.Editor.UpdateTiledViewportsFromDatabase();//提交事务acTrans.Commit();}}public static void CreatePolyfaceMesh(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建多面网格PolyFaceMesh acPFaceMesh = new PolyFaceMesh();//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acPFaceMesh);acTrans.AddNewlyCreatedDBObject(acPFaceMesh, true);//添加顶点前,必须先将多边形网格添加到块表记录Point3dCollection acPts3dPFMesh = new Point3dCollection();acPts3dPFMesh.Add(new Point3d(4, 7, 0));acPts3dPFMesh.Add(new Point3d(5, 7, 0));acPts3dPFMesh.Add(new Point3d(6, 7, 0));acPts3dPFMesh.Add(new Point3d(4, 6, 0));acPts3dPFMesh.Add(new Point3d(5, 6, 0));acPts3dPFMesh.Add(new Point3d(6, 6, 1));foreach (Point3d acPt3d in acPts3dPFMesh){PolyFaceMeshVertex acPMeshVer = new PolyFaceMeshVertex(acPt3d);acPFaceMesh.AppendVertex(acPMeshVer);acTrans.AddNewlyCreatedDBObject(acPMeshVer, true);}FaceRecord acFaceRec1 = new FaceRecord(1, 2, 3, 4);acPFaceMesh.AppendFaceRecord(acFaceRec1);acTrans.AddNewlyCreatedDBObject(acFaceRec1, true);FaceRecord acFaceRec2 = new FaceRecord(2, 3, 6, 5);acFaceRec2.MakeEdgeInvisibleAt(1);//使第2个顶点开始的表示不可见acPFaceMesh.AppendFaceRecord(acFaceRec2);acTrans.AddNewlyCreatedDBObject(acFaceRec2, true);//打开当前视口ViewportTableRecord acVportTblRec;acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId,OpenMode.ForWrite) as ViewportTableRecord;acDoc.Editor.UpdateTiledViewportsFromDatabase();//提交事务acTrans.Commit();}}/// <summary>/// 创建一个楔形实体/// </summary>[CommandMethod("CreateWedge")]public static void CreateWedge(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建3D楔形实体wedgeSolid3d acSol3D = new Solid3d();acSol3D.CreateWedge(10, 15, 20);//3D实体的中心点放在(5,5,0)acSol3D.TransformBy(Matrix3d.Displacement(new Point3d(5, 5, 0) - Point3d.Origin));//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3D);acTrans.AddNewlyCreatedDBObject(acSol3D, true);//打开当前视口ViewportTableRecord acVportTblRec;acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId,OpenMode.ForWrite) as ViewportTableRecord;//旋转当前视口的观察方向acVportTblRec.ViewDirection = new Vector3d(-1, -1, 1);acDoc.Editor.UpdateTiledViewportsFromDatabase();//提交事务acTrans.Commit();}}/// <summary>/// 创建一个3D旋转对象/// </summary>[CommandMethod("Rotate_3DBox")]public static void Rotate_3DBox(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建一个3D实体箱子Solid3d acSol3D = new Solid3d();acSol3D.CreateBox(5, 7, 10);//3D实体的中心点放在(5,5,0)acSol3D.TransformBy(Matrix3d.Displacement(new Point3d(5, 5, 0) -Point3d.Origin));Matrix3d curUCSMatrix = acDoc.Editor.CurrentUserCoordinateSystem;CoordinateSystem3d curUCS = curUCSMatrix.CoordinateSystem3d;//将3D箱体绕点 (-3,4,0)和点(-3,-4,0)定义的轴旋转30度Vector3d vRot = new Point3d(-3, 4, 0).GetVectorTo(new Point3d(-3, -4, 0));acSol3D.TransformBy(Matrix3d.Rotation(0.5226, vRot, new Point3d(-3, 4, 0)));//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3D);acTrans.AddNewlyCreatedDBObject(acSol3D, true);//提交事务acTrans.Commit();}}static Point2d Polarpoints(Point2d pPt, double dAng, double dDist){return new Point2d(pPt.X + dDist * Math.Cos(dAng),pPt.Y + dDist * Math.Sin(dAng));}/// <summary>/// 创建 3D  矩形阵列/// </summary>[CommandMethod("CreateRectangular3DArray")]public static void CreateRectangular3DArray(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建圆,圆心(2,2,0),半径0.5Circle acCirc = new Circle();acCirc.Center = new Point3d(2, 2, 0);acCirc.Radius = 0.5;//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acCirc);acTrans.AddNewlyCreatedDBObject(acCirc, true);//创建4行4列3层的矩形阵列int nRows = 4;int nColumns = 4;int nLevels = 3;//设置行、列、层3个方向的偏移量及阵列基角double dRowOffset = 1;double dColumnOffset = 1;double dLevelsOffset = 1;double dArrayAng = 0;//获取当前UCS坐标系X轴的角度Matrix3d curUCSMatrix = acDoc.Editor.CurrentUserCoordinateSystem;CoordinateSystem3d curUCS = curUCSMatrix.CoordinateSystem3d;Vector2d acVec2dAng = new Vector2d(curUCS.Xaxis.X, curUCS.Xaxis.Y);//如果UCS被旋转了,相应地调整阵列角度dArrayAng = dArrayAng + acVec2dAng.Angle;//使用对象界限的左上角作为阵列基点Extents3d acExts = acCirc.Bounds.GetValueOrDefault();Point2d acPt2dArrayBase = new Point2d(acExts.MinPoint.X,acExts.MaxPoint.Y);//跟踪为每列创建的对象DBObjectCollection acDBObjCollCols = new DBObjectCollection();acDBObjCollCols.Add(acCirc);//创建首列对象int nColumnsCount = 1;while (nColumns > nColumnsCount){Entity acEntClone = acCirc.Clone() as Entity;acDBObjCollCols.Add(acEntClone);//给复制的对象计算新位置Point2d acPt2dTo = PolarPoints(acPt2dArrayBase, dArrayAng, dColumnOffset * nColumnsCount);Vector2d acVec2d = acPt2dArrayBase.GetVectorTo(acPt2dTo);Vector3d acVec3d = new Vector3d(acVec2d.X, acVec2d.Y, 0);acEntClone.TransformBy(Matrix3d.Displacement(acVec3d));acBlkTblRec.AppendEntity(acEntClone);acTrans.AddNewlyCreatedDBObject(acEntClone, true);nColumnsCount = nColumnsCount + 1;}//90度的弧度值double dAng = 1.5708;//跟踪每行和列中创建的对象DBObjectCollection acDBObjCollLvls = new DBObjectCollection();foreach (DBObject acObj in acDBObjCollCols){acDBObjCollLvls.Add(acObj);}//创建每行对象foreach (Entity acEnt in acDBObjCollCols){int nRowsCount = 1;while (nRows > nRowsCount){Entity acEntClone = acEnt.Clone() as Entity;acDBObjCollLvls.Add(acEntClone);//给复制的对象计算新位置Point2d acPt2dTo = PolarPoints(acPt2dArrayBase,dArrayAng + dAng,dRowOffset * nRowsCount);Vector2d acVec2d = acPt2dArrayBase.GetVectorTo(acPt2dTo);Vector3d acVec3d = new Vector3d(acVec2d.X, acVec2d.Y, 0);acEntClone.TransformBy(Matrix3d.Displacement(acVec3d));acBlkTblRec.AppendEntity(acEntClone);acTrans.AddNewlyCreatedDBObject(acEntClone, true);nRowsCount = nRowsCount + 1;}}//创建3D阵列的层foreach (Entity acEnt in acDBObjCollLvls){int nLvlsCount = 1;while (nLevels > nLvlsCount){Entity acEntClone = acEnt.Clone() as Entity;Vector3d acVec3d = new Vector3d(0, 0, dLevelsOffset * nLvlsCount);acEntClone.TransformBy(Matrix3d.Displacement(acVec3d));acBlkTblRec.AppendEntity(acEntClone);acTrans.AddNewlyCreatedDBObject(acEntClone, true);nLvlsCount = nLvlsCount + 1;}}//提交事务acTrans.Commit();}}/// <summary>/// 3D镜像/// </summary>[CommandMethod("MirrorABoc3D")]public static void MirrorABox3D(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建3D箱体Solid3d acSol3D = new Solid3d();acSol3D.CreateBox(5, 7, 10);//3D实体的中心点放在(5,5,0)acSol3D.TransformBy(Matrix3d.Displacement(new Point3d(5, 5, 0) -Point3d.Origin));//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3D);acTrans.AddNewlyCreatedDBObject(acSol3D, true);//创建原3D箱体的拷贝并修改颜色Solid3d acSol3DCopy = acSol3D.Clone() as Solid3d;acSol3DCopy.ColorIndex = 1;//定义镜像平面Plane acPlane = new Plane(new Point3d(1.25, 0, 0),new Point3d(1.25, 2, 0),new Point3d(1.25, 2, 2));//沿平面镜像3D实体acSol3DCopy.TransformBy(Matrix3d.Mirroring(acPlane));//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3DCopy);acTrans.AddNewlyCreatedDBObject(acSol3DCopy, true);//提交事务acTrans.Commit();}}/// <summary>/// 查找两实体间的干涉(interference )/// </summary>[CommandMethod("FindInterferenceBetweenSolids")]public static void FindInterferenceBetweenSolids(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建3D箱体Solid3d acSol3DBox = new Solid3d();acSol3DBox.CreateBox(5, 7, 10);acSol3DBox.ColorIndex = 7;//3D实体中心点放在(5,5,0)acSol3DBox.TransformBy(Matrix3d.Displacement(new Point3d(5, 5, 0) -Point3d.Origin));//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3DBox);acTrans.AddNewlyCreatedDBObject(acSol3DBox, true);//创建3D圆柱体//默认构造函数的中心点为(0,0,0),这样就不用在移动了Solid3d acSol3DCyl = new Solid3d();acSol3DCyl.CreateFrustum(20, 5, 5, 5);acSol3DCyl.ColorIndex = 4;//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3DCyl);acTrans.AddNewlyCreatedDBObject(acSol3DCyl, true);//用箱体和圆柱体的干涉创建一个3D实体Solid3d acSol3DCopy = acSol3DCyl.Clone() as Solid3d;//检查箱体和圆柱体是否有重叠部分if (acSol3DCopy.CheckInterference(acSol3DBox) == true){acSol3DCopy.BooleanOperation(BooleanOperationType.BoolIntersect,acSol3DBox.Clone() as Solid3d);acSol3DCopy.ColorIndex = 1;}//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3DCopy);acTrans.AddNewlyCreatedDBObject(acSol3DCopy, true);//提交事务acTrans.Commit();}}/// <summary>/// 将一个实体切割成两个实体/// </summary>[CommandMethod("SliceABox")]public static void SliceABox(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录模型空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建3D箱体Solid3d acSol3D = new Solid3d();acSol3D.CreateBox(5, 7, 10);acSol3D.ColorIndex = 7;//3D实体的中心点放在(5,5,0)acSol3D.TransformBy(Matrix3d.Displacement(new Point3d(5, 5, 0) -Point3d.Origin));//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3D);acTrans.AddNewlyCreatedDBObject(acSol3D, true);//定义镜像平面Plane acPlane = new Plane(new Point3d(1.5, 7.5, 0),new Point3d(1.5, 7.5, 10),new Point3d(8.5, 2.5, 10));Solid3d acSol3DSlice = acSol3D.Slice(acPlane, true);acSol3DSlice.ColorIndex = 1;//将新对象添加到块表记录和事务acBlkTblRec.AppendEntity(acSol3DSlice);acTrans.AddNewlyCreatedDBObject(acSol3DSlice, true);//提交事务acTrans.Commit();}}/// <summary>/// 查询和设置视图/// </summary>[CommandMethod("ChangePlotSetting")]public static void ChangePlotSetting(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//引用布局管理器LayoutManagerLayoutManager acLayoutMgr;acLayoutMgr = LayoutManager.Current;//读取当前布局,在命令行窗口显示布局名Layout acLayout;acLayout = acTrans.GetObject(acLayoutMgr.GetLayoutId(acLayoutMgr.CurrentLayout),OpenMode.ForRead) as Layout;//输出当前布局名和设备名acDoc.Editor.WriteMessage("\nCurrent layout: " +acLayout.LayoutName);acDoc.Editor.WriteMessage("\nCurrent device name: " +acLayout.PlotConfigurationName);//从布局中获取PlotInfoPlotInfo acPlInfo = new PlotInfo();acPlInfo.Layout = acLayout.ObjectId;//复制布局中的PlotSettingsPlotSettings acPlSet = new PlotSettings(acLayout.ModelType);acPlSet.CopyFrom(acLayout);//更新PlotSettings对象的PlotConfigurationName属性PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWF6 ePlot.pc3","ANSI_A_(8.50_x_11.00_Inches)");//更新布局acLayout.UpgradeOpen();acLayout.CopyFrom(acPlSet);//输出已更新的布局设备名acDoc.Editor.WriteMessage("\nNew device name: " +acLayout.PlotConfigurationName);//将新对象保存到数据库acTrans.Commit();}}/// <summary>/// 在模型空间与图纸空间间转换/// </summary>[CommandMethod("ToggleSpace")]public static void ToggleSpace(){//获取当前文档Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;//获取系统变量CVPORT和TILEMODE的当前值object oCvports = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("CVPORT");object oTilemode = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("TILEMODE");//检查Mode布局是否为活动的(TILEMODE=1为活动)if (System.Convert.ToInt16(oTilemode) == 0){//检查Model空间是否为活动的(CVPORT=2)//CVPORT is 2 if Model space is activeif (System.Convert.ToInt16(oCvports) == 2){acDoc.Editor.SwitchToPaperSpace();}else{acDoc.Editor.SwitchToModelSpace();}}else{//切换到Paper空间布局Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("TILEMODE", 0);}}/// <summary>/// 创建并激活浮动窗口/// </summary>//导入ObjectARX全局函数acedSetCurrentVPort//对2014版,该函数在accore.dll内[DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl,EntryPoint = "?acedSetCurrentVPort@@YA?AW4ErrorStatus@Acad@PBVAcDbViewport@@@Z")]extern static private int acedSetCurrentVPort(IntPtr AcDbVport);[CommandMethod("CreateFloatingViewport")]public static void CreateFloatingViewport(){//获取当前文档和数据库,并启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录Paper空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.PaperSpace],OpenMode.ForWrite) as BlockTableRecord;//切换到Paper空间布局Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("TILEMODE", 0);acDoc.Editor.SwitchToPaperSpace();//创建一个视口Autodesk.AutoCAD.DatabaseServices.Viewport acVport = new Autodesk.AutoCAD.DatabaseServices.Viewport();acVport.CenterPoint = new Point3d(3.25, 3, 0);acVport.Width = 6;acVport.Height = 5;//添加新对象到块表记录和事务acBlkTblRec.AppendEntity(acVport);acTrans.AddNewlyCreatedDBObject(acVport, true);//修改观察方向acVport.ViewDirection = new Vector3d(1, 1, 1);//激活视口acVport.On = true;//激活视口的模型空间acDoc.Editor.SwitchToModelSpace();//使用导入的ObjectARX函数设置新视口为当前视口acedSetCurrentVPort(acVport.UnmanagedObject);//将对象保存到数据库acTrans.Commit();}}/// <summary>/// 创建四个浮动视口/// </summary>[CommandMethod("FourFloatingViewports")]public static void FourFloatingViewports(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开块表BlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开块表记录Paper空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.PaperSpace],OpenMode.ForWrite) as BlockTableRecord;//切换到Paper空间布局Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("TILEMODE", 0);acDoc.Editor.SwitchToPaperSpace();Point3dCollection acPt3dCol = new Point3dCollection();acPt3dCol.Add(new Point3d(2.5, 5.5, 0));acPt3dCol.Add(new Point3d(2.5, 2.5, 0));acPt3dCol.Add(new Point3d(5.5, 5.5, 0));acPt3dCol.Add(new Point3d(5.5, 2.5, 0));Vector3dCollection acVec3dCol = new Vector3dCollection();acVec3dCol.Add(new Vector3d(0, 0, 1));acVec3dCol.Add(new Vector3d(0, 1, 0));acVec3dCol.Add(new Vector3d(1, 0, 0));acVec3dCol.Add(new Vector3d(1, 1, 1));double dWidth = 2.5;double dHeight = 2.5;Autodesk.AutoCAD.DatabaseServices.Viewport acVportLast = null;int nCnt = 0;foreach(Point3d acPt3d in acPt3dCol){Autodesk.AutoCAD.DatabaseServices.Viewport acVport = new Autodesk.AutoCAD.DatabaseServices.Viewport();acVport.CenterPoint = acPt3d;acVport.Width = dWidth;acVport.Height = dHeight;//添加新对象到块表记录和事务acBlkTblRec.AppendEntity(acVport);acTrans.AddNewlyCreatedDBObject(acVport, true);//修改观察方向acVport.ViewDirection = acVec3dCol[nCnt];//激活视口acVport.On = true;//记录创建的最后视口acVportLast = acVport;//计数器加1nCnt = nCnt + 1;}if (acVportLast != null){//激活视口的模型空间acDoc.Editor.SwitchToModelSpace();//使用导入的ObjectARX函数设置新视口为当前视口acedSetCurrentVPort(acVportLast.UnmanagedObject);}//将新对象保存到数据库acTrans.Commit();}}/// <summary>/// 打印模型布局的范围/// </summary>[CommandMethod("PlotCurrentLayout")]public static void PlotCurrentLayout(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//引用布局管理器LayoutManagerLayoutManager acLayoutMgr;acLayoutMgr = LayoutManager.Current;//获取当前布局,在命令行窗口显示布局名字Layout acLayout;acLayout =acTrans.GetObject(acLayoutMgr.GetLayoutId(acLayoutMgr.CurrentLayout),OpenMode.ForRead) as Layout;//从布局中获取PlotInfoPlotInfo acPlInfo = new PlotInfo();acPlInfo.Layout = acLayout.ObjectId;//复制布局中的PlotSettingsPlotSettings acPlSet = new PlotSettings(acLayout.ModelType);acPlSet.CopyFrom(acLayout);//更新PlotSettings对象PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;//设置打印区域acPlSetVdr.SetPlotType(acPlSet,Autodesk.AutoCAD.DatabaseServices.PlotType.Extents);//设置打印比例acPlSetVdr.SetUseStandardScale(acPlSet, true);acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit);//居中打印acPlSetVdr.SetPlotCentered(acPlSet, true);//设置使用的打印设备acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWF6 ePlot.pc3","ANSI_A_(8.50_x_11.00_Inches)");//用上述设置信息覆盖PlotInfo对象//不会将修改保存回布局acPlInfo.OverrideSettings = acPlSet;//验证打印信息PlotInfoValidator acPlInfoVdr = new PlotInfoValidator();acPlInfoVdr.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;acPlInfoVdr.Validate(acPlInfo);//检查是否有正在处理的打印任务if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting){using (PlotEngine acPlEng = PlotFactory.CreatePublishEngine()){//使用PlotProgressDialog对话框跟踪打印进度PlotProgressDialog acPlProgDlg = new PlotProgressDialog(false,1,true);using (acPlProgDlg){//定义打印开始时显示的状态信息acPlProgDlg.set_PlotMsgString(PlotMessageIndex.DialogTitle,"Plot Progress");acPlProgDlg.set_PlotMsgString(PlotMessageIndex.CancelJobButtonMessage,"Cancel Job");acPlProgDlg.set_PlotMsgString(PlotMessageIndex.CancelSheetButtonMessage,"Cancel Sheet");acPlProgDlg.set_PlotMsgString(PlotMessageIndex.SheetProgressCaption,"Sheet Progress");//设置打印进度范围acPlProgDlg.LowerPlotProgressRange = 0;acPlProgDlg.UpperPlotProgressRange = 100;acPlProgDlg.PlotProgressPos = 0;//显示打印进度对话框acPlProgDlg.OnBeginPlot();acPlProgDlg.IsVisible = true;//开始打印acPlEng.BeginPlot(acPlProgDlg, null);//定义打印输出acPlEng.BeginDocument(acPlInfo,acDoc.Name,null,1,true,"e:\\myplot");//显示当前打印任务的有关信息acPlProgDlg.set_PlotMsgString(PlotMessageIndex.Status,"Plotting: " + acDoc.Name + "-" + acLayout.LayoutName);//设置图纸进度范围acPlProgDlg.OnBeginSheet();acPlProgDlg.LowerSheetProgressRange = 0;acPlProgDlg.UpperSheetProgressRange = 100;acPlProgDlg.SheetProgressPos = 0;//打印第一张图/布局PlotPageInfo acPlPageInfo = new PlotPageInfo();acPlEng.BeginPage(acPlPageInfo,acPlInfo,true,null);acPlEng.BeginGenerateGraphics(null);acPlEng.EndGenerateGraphics(null);//结束第一张图/布局的打印acPlEng.EndPage(null);acPlProgDlg.SheetProgressPos = 100;acPlProgDlg.OnEndSheet();//结束文档局的打印acPlEng.EndDocument(null);//打印结束acPlProgDlg.PlotProgressPos = 100;acPlProgDlg.OnEndPlot();acPlEng.EndPlot(null);}}}}}/*使用事件*//// <summary>/// 激活一个 AutoCAD  对象事件/// </summary>[CommandMethod("AddAppEvent")]public void AddAppEvent(){Autodesk.AutoCAD.ApplicationServices.Application.SystemVariableChanged += new Autodesk.AutoCAD.ApplicationServices.SystemVariableChangedEventHandler(appSysVarChanged);}[CommandMethod("RemoveAppEvent")]public void RemoveAppEvent(){Autodesk.AutoCAD.ApplicationServices.Application.SystemVariableChanged -=new Autodesk.AutoCAD.ApplicationServices.SystemVariableChangedEventHandler(appSysVarChanged);}public void appSysVarChanged(object senderObj,Autodesk.AutoCAD.ApplicationServices.SystemVariableChangedEventArgs sysVarChEvtArgs){object oVal = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable(sysVarChEvtArgs.Name);//弹出消息框,显示系统变量的名称及新值Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(sysVarChEvtArgs.Name + " was changed." +"\nNew value: " + oVal.ToString());}/// <summary>/// 激活一个 Document  对象事件/// </summary>[CommandMethod("AddDocEvent")]public void AddDocEvent(){//获取当前文档Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;acDoc.BeginDocumentClose +=new DocumentBeginCloseEventHandler(docBeginDocClose);}[CommandMethod("RemoveDocEvent")]public void RemoveDocEvent(){//获取当前文档Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;acDoc.BeginDocumentClose -=new DocumentBeginCloseEventHandler(docBeginDocClose);}public void docBeginDocClose(object senderObj,DocumentBeginCloseEventArgs docBegClsEvtArgs){//显示消息框提示是否继续关闭文档if(System.Windows.Forms.MessageBox.Show("The document is about to be closed."+"\nDo you want to continue?","Close Document",System.Windows.Forms.MessageBoxButtons.YesNo)==System.Windows.Forms.DialogResult.No){docBegClsEvtArgs.Veto();}}/// <summary>/// 激活一个 DocumentCollection  对象事件/// </summary>[CommandMethod("AddDocColEvent")]public void AddDocColEvent(){Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.DocumentActivated += new DocumentCollectionEventHandler(docColDocAct);}[CommandMethod("RemoveDocColEvent")]public void RemoveDocColEvent(){Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.DocumentActivated -=new DocumentCollectionEventHandler(docColDocAct);}public void docColDocAct(object senderObj,DocumentCollectionEventArgs docColDocActEvtArgs){Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(docColDocActEvtArgs.Document.Name +" was activated.");}//Polyline对象全局变量Autodesk.AutoCAD.DatabaseServices.Polyline acPoly = null;/// <summary>/// 激活Object事件/// </summary>[CommandMethod("AddPlObjEvent")]public void AddPlObjEvent(){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开BlockTableBlockTable acBlkTbl;acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;//以写模式打开BlockTable记录Model空间BlockTableRecord acBlkTblRec;acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;//创建闭合多段线acPoly = new Autodesk.AutoCAD.DatabaseServices.Polyline();acPoly.AddVertexAt(0, new Point2d(1, 1), 0, 0, 0);acPoly.AddVertexAt(1, new Point2d(1, 2), 0, 0, 0);acPoly.AddVertexAt(2, new Point2d(2, 2), 0, 0, 0);acPoly.AddVertexAt(3, new Point2d(3, 3), 0, 0, 0);acPoly.AddVertexAt(4, new Point2d(3, 2), 0, 0, 0);acPoly.Closed = true;//添加新对象到块表记录及事务acBlkTblRec.AppendEntity(acPoly);acTrans.AddNewlyCreatedDBObject(acPoly, true);acPoly.Modified += new EventHandler(acPolyMod);//保存新对象到数据库acTrans.Commit();}}[CommandMethod("RemovePlObjEvent")]public void RemovePlObjEvent(){if (acPoly != null){//获取当前文档和数据库,启动事务Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database acCurDb = acDoc.Database;using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()){//以读模式打开多段线acPoly = acTrans.GetObject(acPoly.ObjectId,OpenMode.ForRead) as Autodesk.AutoCAD.DatabaseServices.Polyline;if (acPoly.IsWriteEnabled == false){acPoly.UpgradeOpen();}acPoly.Modified -= new EventHandler(acPolyMod);acPoly = null;}}}public void acPolyMod(object senderObj, EventArgs evtArgs){Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("The area of " +acPoly.ToString() + " is: " +acPoly.Area);}//定义一个全局变量,用于AddCOMEvent命令和RemoveCOMEvent命令AcadApplication acAppCom;[CommandMethod("AddCOMEvent")]public void AddCOMEvent(){//用全局变量保存到应用程序的引用//并注册COM事件BeginFileDropacAppCom = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as AcadApplication;acAppCom.BeginFileDrop += new_DAcadApplicationEvents_BeginFileDropEventHandler(appComBeginFileDrop);}[CommandMethod("RemoveCOMEvent")]public void RemoveCOMEvent(){//撤销注册的COM事件处理程序acAppCom.BeginFileDrop -=new_DAcadApplicationEvents_BeginFileDropEventHandler(appComBeginFileDrop);acAppCom = null;}public void appComBeginFileDrop(string strFileName, ref bool bCancel){//显示消息框,提示是否继续插入DWG文件if (System.Windows.Forms.MessageBox.Show("AutoCAD is about to load " +strFileName +"\nDo you want to continue loading this file?","DWG File Dropped",System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No){bCancel = true;}}#endregion

CAD二次开发(C#)第三节相关推荐

  1. cad二次开发程序的绿色安装

    此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...

  2. intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题

    CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段 ...

  3. CAD 二次开发 图层操作(1)创建图层

    CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...

  4. CAD 二次开发 图层操作(3)取得指定图层下的所有对象id

    对于CAD二次开发的人来说,可能需要对某一图层下的实体(点,线,面域,块,三维实体)进行不同的操作.下面的方法,即可实现获取指定图层名称下的所有实体ID. 输入参数为图层名称: 返回值为:对象主键集合 ...

  5. 关于objectArx /CAD二次开发中“属性块”操作

    关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...

  6. c# cad二次开发 ribbon界面 给CAD加个菜单栏

    c# cad二次开发 ribbon界面 给CAD加个菜单栏 using System; using System.Collections.Generic; using System.Text; usi ...

  7. CAD二次开发:用C#在AutoCAD中插入栅格图像

    CAD二次开发:用C#在AutoCAD中插入栅格图像 using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationService ...

  8. CAD二次开发资料汇总

    欢迎加入建筑信息化开发交流群,获取开发资料 群号:711844216 一.背景 对工程出身的朋友来说,CAD就像一位朋友,常伴吾身,为了提高效率,于是小伙伴门开始尝试CAD二次开发,刚入门,资料去哪找 ...

  9. C#之CAD二次开发 (11) 文本对象

    # 0. 前言 在CAD中文本对象的处理算是一个很重要的内容了,实际工作中也会遇到很多需要批量处理CAD中文本对象的情况 之前就遇到一个批量一对一替换文本的情况,那个实例代码后面也会贴出来,一个小小的 ...

最新文章

  1. android读取剪切板的方法,Android复制粘贴剪切板内容的一种方法
  2. CF1397B Power Sequence(大胆枚举)
  3. 华为手机如何升级鸿蒙系统_华为杨海松:明年所有华为自研设备升级鸿蒙系统...
  4. Boghe连接FreeSwitch的配置
  5. 2、HTML <img>标签(插入图片)
  6. keepalived安装与配置_面试官问LVS+keepalived+nginx怎么实现时该怎么答?
  7. 我是如何零基础入门前端开发的(2021 版)
  8. 文件服务器映驱动,映射驱动程序文件 - Windows drivers | Microsoft Docs
  9. android intent拍照,Android通过Intent方式调用相机拍照取得图片
  10. Dart云平台-DartPad
  11. SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法
  12. 红米note5linux刷机包__最新最全的红米Note5ROM刷机包下载、刷机教程_红米Note5论坛_移动叔叔...
  13. 使用百词斩如何减少复习量
  14. android下拉菜单_如何调整和重新排列Android的快速设置下拉菜单
  15. 陈强教授《机器学习及R应用》课程第十一章作业
  16. ssm毕设项目班级网站45nk3(java+VUE+Mybatis+Maven+Mysql+sprnig)
  17. 计算机基础知识好学吗,计算机编程好学吗 需要什么基础知识?
  18. 机器视觉领域的牛人主页及代码
  19. Java 官网下载+安装(Linux)
  20. P1500 丘比特的烦恼(KMMCMF)

热门文章

  1. 小虎电商浏览器:多多打单怎么关联多家店铺打单
  2. 2021-12-11 WPF上位机 110-欧姆龙串口转网口的封装
  3. Python爬虫之Requests的基础运用
  4. Aid Learning0.87F3安装Home Assistant智能家居
  5. 音乐标签修改 android,mp3标签-mp3标签修改器 安卓版v4.0-PC6安卓网
  6. mysql数据表关联操作步骤_MySQL数据库(三)—— 表相关操作(二)之约束条件、关联关系、复制表...
  7. 外汇超短线交易中的“剥头皮”
  8. 计算机硬盘容量分配,500G的硬盘怎样合理分配容量
  9. java毕业设计峨眉山景点介绍及旅游攻略推荐平台Mybatis+系统+数据库+调试部署
  10. MSVCP100.dll 丢失的问题