using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.EditorInput; using System.IO; namespace T_cad { class LSTKAllCls { public LSTKAllCls() { } /// /// 测试函数 /// public void Function() { #region//后台打开一个dwg文件,最后用DataBase.saveas()进行保存 try { //for (int i = 0; i < 10; i++) //{ var filenamemuban = @"D:\test\1000tk.dwg"; Database myDB = new Database(false, true); myDB.ReadDwgFile(filenamemuban, System.IO.FileShare.ReadWrite, false, ""); ////选中所有对象进行平移 using (var myTran = myDB.TransactionManager.StartTransaction()) { var bt = (BlockTable)(myTran.GetObject(myDB.BlockTableId, OpenMode.ForWrite)); foreach (ObjectId blid in bt) { var btr = (BlockTableRecord)(myTran.GetObject(blid, OpenMode.ForWrite)); BlockTableRecordEnumerator btrenu = btr.GetEnumerator(); while (btrenu.MoveNext()) { ObjectId myobjid = btrenu.Current; Entity myentity = myTran.GetObject(myobjid, OpenMode.ForWrite) as Entity; //测试后台可否执行的代码 //myentity.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Blue); myentity.ColorIndex = 5; Point3d basept = new Point3d(0, 0, 0); Point3d targetpt = new Point3d(3000, 3000, 0); Vector3d vec = targetpt - basept; Matrix3d mt3d = Matrix3d.Displacement(vec); myentity.TransformBy(mt3d); // //平移代码 // /// ///// 指定基点与目标移动实体 ///// ///// 实体移动 ///// 基点 ///// 目标点 //public static void Move(Entity ent, Point3d basePt, Point3d targetPt) //{ //Vector3d vec = targetPt - basePt; //Matrix3d mt = Matrix3d.Displacement(vec); //ent.TransformBy(mt); //} } btrenu.Dispose(); btr.Dispose(); } bt.Dispose(); myTran.Commit(); myTran.Dispose(); } var resultfilename = @"D:\test\result\1.dwg"; //var resultfilename = @"D:\test\result\1000tk" + i.ToString() + ".dwg"; myDB.SaveAs(resultfilename, DwgVersion.Current); myDB.CloseInput(true); myDB.Dispose(); //}//end for } catch (Exception ex) { MessageBox.Show(ex.ToString()); } #endregion///////////// } public void mianfunction() { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = "请设置DOM路径"; if (fbd.ShowDialog() == DialogResult.OK) { string pathdirectory = fbd.SelectedPath; DirectoryInfo di = new DirectoryInfo(pathdirectory); FileInfo[] fiarray = di.GetFiles(); foreach (FileInfo fi in fiarray) { string filename = fi.FullName; if (filename.Contains(".tfw")) { DOMAndDWGfunction(fi); } } } MessageBox.Show("程序运行结束"); } public void DOMAndDWGfunction(FileInfo fi) { string filename = fi.FullName; //读取tfwcode string tfwfilename = filename; string imageName = filename.Replace(".tfw", ".tif"); string dwgfilename = filename.Replace(".tfw", ".dwg"); string myName = fi.Name.Replace(".tfw", "");//图幅号名 double scale = 0; double X = 0, Y = 0; try { StreamReader sr = new StreamReader(tfwfilename); scale = Convert.ToDouble(sr.ReadLine()); sr.ReadLine(); sr.ReadLine(); sr.ReadLine(); X = Convert.ToDouble(sr.ReadLine()); Y = Convert.ToDouble(sr.ReadLine()); sr.Close(); sr.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.ToString ()); } //移动dwg图框code //var filenamemuban = @"E:\2015Work\20150309DOM套图库程序\moban\1000lstk.dwg"; var filenamemuban = @"E:\2015Work\20150309DOM套图库程序\moban\1000lstkcode.dwg"; Database myDB = new Database(false, true); myDB.ReadDwgFile(filenamemuban, System.IO.FileShare.ReadWrite, false, ""); myDB.CloseInput(true); //左上角坐标除去外扩 double xmove = X + 10; double ymove = Y - 10; //左上 left top double xlt = xmove/1000.0; double ylt = ymove / 1000.0; string xltstr = xlt.ToString("f1"); string yltstr = ylt.ToString("f1"); //右上 right top double xrt = (xmove + 500) / 1000.0; double yrt = ymove / 1000.0; string xrtstr = xrt.ToString("f1"); string yrtstr = yrt.ToString("f1"); //左下 left bottom double xlb = xmove / 1000.0; double ylb = (ymove - 500) / 1000.0; string xlbstr = xlb.ToString("f1"); string ylbstr = ylb.ToString("f1"); //右下 right bottom double xrb = (xmove + 500) / 1000.0; double yrb = (ymove - 500) / 1000.0; string xrbstr = xrb.ToString("f1"); string yrbstr = yrb.ToString("f1"); ////X = 559000.000 Y = 3349500.000 Z = 2874.000 ////选中所有对象进行平移 using (var myTran = myDB.TransactionManager.StartTransaction()) { try { var bt = (BlockTable)(myTran.GetObject(myDB.BlockTableId, OpenMode.ForWrite)); foreach (ObjectId blid in bt) { var btr = (BlockTableRecord)(myTran.GetObject(blid, OpenMode.ForWrite)); BlockTableRecordEnumerator btrenu = btr.GetEnumerator(); while (btrenu.MoveNext()) { ObjectId myobjid = btrenu.Current; Entity myentity = myTran.GetObject(myobjid, OpenMode.ForWrite) as Entity; //////测试后台可否执行的代码 ////myentity.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Blue); ////myentity.ColorIndex = 5; //////修改文字代码 if (myentity is DBText) { DBText text = myentity as DBText; string str = text.TextString; switch (str) { case "aaaa": break; case "bbbb": break; case "cccc": break; case "eeee": break; case "ffff": break; case "xxxx": break; case "yyyy": break; case "zzzz": break; //case "Name": // text.TextString = "邻水县农村土地经营权DOM"; //"邻水县" + "XXX镇XXX村" + "农村土地经营权DOM"; // break; case "ididid": text.TextString = myName; break; case "xlt": text.TextString = xltstr.Substring(0, xltstr.Length - 4); break; case "xlt2": text.TextString = xltstr.Substring(xltstr.Length - 4, 4); break; case "ylt": text.TextString = yltstr.Substring(0,yltstr .Length -5); break; case "ylt2": text.TextString = yltstr.Substring(yltstr.Length - 5, 5); break; case "xrt": text.TextString = xrtstr.Substring(0, xrtstr.Length - 4); break; case "xrt2": text.TextString = xrtstr.Substring(xrtstr.Length - 4, 4); break; case "yrt": text.TextString = yrtstr.Substring(0, yrtstr.Length - 5); break; case "yrt2": text.TextString = yrtstr.Substring(yrtstr.Length - 5, 5); break; case "xlb": text.TextString = xlbstr.Substring(0, xlbstr.Length - 4); break; case "xlb2": text.TextString = xlbstr.Substring(xlbstr.Length - 4, 4); break; case "ylb": text.TextString = ylbstr.Substring(0, ylbstr.Length - 5); break; case "ylb2": text.TextString = ylbstr.Substring( ylbstr.Length - 5,5); break; case "xrb": text.TextString = xrbstr.Substring(0, xrtstr.Length - 4); break; case "xrb2": text.TextString = xrbstr.Substring(xrbstr.Length - 4, 4); break; case "yrb": text.TextString = yrbstr.Substring(0, yrbstr.Length - 5); break; case "yrb2": text.TextString = yrbstr.Substring(yrbstr.Length - 5, 5); break; //case "": // break; default: break; } myentity = text; } Point3d basept = new Point3d(0, 0, 0); Point3d targetpt = new Point3d(xmove, ymove, 0); Vector3d vec = targetpt - basept; Matrix3d mt3d = Matrix3d.Displacement(vec); myentity.TransformBy(mt3d); } btrenu.Dispose(); btr.Dispose(); } bt.Dispose(); myTran.Commit(); myTran.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.ToString ()); } } //////DOM //using (var myTran = myDB.TransactionManager.StartTransaction()) //{ // try // { // BlockTable blktbl = myTran.GetObject(myDB.BlockTableId, OpenMode.ForRead) as BlockTable; // BlockTableRecord blktblrec = myTran.GetObject(blktbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // DrawOrderTable dot = myTran.GetObject(blktblrec.DrawOrderTableId, OpenMode.ForWrite) as DrawOrderTable; // //////////////////////创建图像定义对象 // ObjectId imgid = RasterImageDef.GetImageDictionary(myDB); // if (imgid == ObjectId.Null) // imgid = RasterImageDef.CreateImageDictionary(myDB); // DBDictionary imgdict = myTran.GetObject(imgid, OpenMode.ForWrite) as DBDictionary; // RasterImageDef imgdef = new RasterImageDef(); // imgdef.SourceFileName = imageName; // imgdef.Load(); // ObjectId imgdefid = imgdict.SetAt(imageName, imgdef); // myTran.AddNewlyCreatedDBObject(imgdef, true); // RasterImage image = new RasterImage(); // image.ImageDefId = imgdefid; // //image.Layer = "DOM"; // blktblrec.AppendEntity(image); // myTran.AddNewlyCreatedDBObject(image, true); // double height = imgdef.Size.Y; // Vector3d vt1 = scale * image.Orientation.Xaxis; // Vector3d vt2 = scale * image.Orientation.Yaxis; // image.AssociateRasterDef(imgdef); // image.Draw(); // image.Orientation = new CoordinateSystem3d(new Point3d(X, Y - height * scale, 0), vt1, vt2); // ObjectIdCollection obidcoll = new ObjectIdCollection(); // //影像后置 // obidcoll.Add(image.ObjectId); // dot.MoveToBottom(obidcoll); // obidcoll = new ObjectIdCollection(); // myTran.Commit(); // myTran.Dispose(); // //Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen(); // MessageBox.Show(imageName + "影像已按照参数正确加载;"); // } // catch (Exception ex) // { // MessageBox.Show(ex.ToString()); // } //} ////保存为dwg code var resultfilename = dwgfilename; ////var resultfilename = @"D:\test\result\1000tk" + i.ToString() + ".dwg"; myDB.SaveAs(resultfilename, DwgVersion.Current); //myDB.CloseInput(true); myDB.Dispose(); } public void DWGXiugai() { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = "请设置成果路径"; if (fbd.ShowDialog() == DialogResult.OK) { string pathdirectory = fbd.SelectedPath; DirectoryInfo di = new DirectoryInfo(pathdirectory); FileInfo[] fiarray = di.GetFiles(); foreach (FileInfo fi in fiarray) { string filename = fi.FullName; if (filename.Contains(".dwg")) { //DOMAndDWGfunction(fi); DWGTextXiugai(fi); } } } MessageBox.Show("程序运行结束"); } public void DWGTextXiugai(FileInfo fi) { var filenamemuban = fi.FullName; Database myDB = new Database(false, true); myDB.ReadDwgFile(filenamemuban, System.IO.FileShare.ReadWrite, false, ""); //myDB.CloseInput(true); ////选中所有对象进行平移 using (var myTran = myDB.TransactionManager.StartTransaction()) { try { var bt = (BlockTable)(myTran.GetObject(myDB.BlockTableId, OpenMode.ForWrite)); //int count = 0; foreach (ObjectId blid in bt) { var btr = (BlockTableRecord)(myTran.GetObject(blid, OpenMode.ForWrite)); BlockTableRecordEnumerator btrenu = btr.GetEnumerator(); while (btrenu.MoveNext()) { ObjectId myobjid = btrenu.Current; Entity myentity = myTran.GetObject(myobjid, OpenMode.ForWrite) as Entity; //测试后台可否执行的代码 //myentity.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Blue); //myentity.ColorIndex = 5; ////修改文字代码 if (myentity is DBText) { DBText text = myentity as DBText; string str = text.TextString; // switch (str) // { // // case " 201503": // // text.TextString = ""; // // break; // // case "( )": // // text.TextString = ""; // // break; // // //////////////////////// // // //case "邻水县八斗丘村农村土地经营权DOM": // // // text.TextString = "邻水县" + "柳塘乡"+"八斗坵村" + "农村土地承包经营权确权登记工作底图"; // // // Point3d pt = text.Position; // // // text.Position = new Point3d(pt.X - 28, pt.Y, pt.Z); // // // break; // // //case "邻水县大步口村农村土地经营权DOM": // // // text.TextString = "邻水县" + "石滓乡" + "大步口村" + "农村土地承包经营权确权登记工作底图"; // // // Point3d pt = text.Position; // // // text.Position = new Point3d(pt.X - 28, pt.Y, pt.Z); // // // break; // // //case "邻水县大河坝村农村土地经营权DOM": // // // text.TextString = "邻水县" + "柳塘乡" + "大河坝村" + "农村土地承包经营权确权登记工作底图"; // // // Point3d pt = text.Position; // // // text.Position = new Point3d(pt.X - 28, pt.Y, pt.Z); // // // break; // // //case "邻水县沙帽石村农村土地经营权DOM": // // // text.TextString = "邻水县" + "柳塘乡" + "沙帽石村" + "农村土地承包经营权确权登记工作底图"; // // // Point3d pt = text.Position; // // // text.Position = new Point3d(pt.X - 28, pt.Y, pt.Z); // // // break; // // //case "邻水县双桥居委会农村土地经营权DOM": // // // text.TextString = "邻水县" + "柳塘乡" + "双桥居委会" + "农村土地承包经营权确权登记工作底图"; // // // Point3d pt = text.Position; // // // text.Position = new Point3d(pt.X - 28, pt.Y, pt.Z); // // // break; // // //case "邻水县雄码头村农村土地经营权DOM": // // // text.TextString = "邻水县" + "柳塘乡" + "雄码头村" + "农村土地承包经营权确权登记工作底图"; // // // Point3d pt = text.Position; // // // text.Position = new Point3d(pt.X - 28, pt.Y, pt.Z); // // // break; // // ////////////////// // // case "邻水县袁市镇增产村农村土地经营权DOM": // // text.TextString = "邻水县" + "袁市镇" + "增产村" + "农村土地承包经营权确权登记工作底图"; // // Point3d pt = text.Position; // // text.Position = new Point3d(pt.X - 28, pt.Y, pt.Z); // // break; // // case "投影方式:高斯投影。中央子午线106.5度。": // // text.TextString = "国家2000坐标系。"; // // break; // // case "国家2000坐标系。": // // text.TextString = "投影方式:高斯投影,中央子午线经度106.5。"; // // break; // // case "1985年黄海高程系。": // // text.TextString = "1985国家高程系统。"; // // break; // // case "2015年03月数字成图。": // // text.TextString = "影像2015年01月摄。"; // // break; // // case "测图员 ": // // text.TextString = "调绘者: "; // // break; // // case "土调员 ": // // text.TextString = "指界人: "; // // break; // // case "数化员 ": // // text.TextString = "组长联系方式:"; // // break; // // case "检查员 ": // // text.TextString = ""; // // break; // // case "复查员 ": // // text.TextString = ""; // // break; // //////////////////////////// // ///////////////////////////// // //case "投影方式:高斯投影。": // // text.TextString = "国家2000坐标系。"; // // break; // //case "国家2000坐标系。": // // text.TextString = "投影方式:高斯投影,中央子午线经度106.5。"; // // break; // //case "1985年黄海高程系。": // // text.TextString = "1985国家高程系统。"; // // break; // //case "2015年03月数字成图。": // // text.TextString = "影像2015年01月摄。"; // // break; // //case "数化员 陈步清": // // text.TextString = "调绘者: "; // // break; // //case "检查员 李 敏": // // text.TextString = "指界人: "; // // break; // //case "复查员 ": // // text.TextString = "组长联系方式:"; // // break; // case "影像2015年01月摄。": // text.TextString = "2015年01月摄。"; // break; // default: break; // } switch (str) { //case "投影方式:高斯投影,中央子午线经度106.5。": // if (count == 0) // text.TextString = "国家2000坐标系。"; // count++; // break ; //case "投影方式:高斯投影,中央子午线经度106.5。": // text.TextString = "国家2000坐标系。"; // break; //case "国家2000坐标系。": // text.TextString = "投影方式:高斯投影,中央子午线经度106.5。"; // break; case "邻水县八斗坵村农村土地经营权DOM": text.TextString = "邻水县柳塘乡八斗坵村农村土地承包经营权确权登记工作底图"; break; default :break ; } myentity = text; } } btrenu.Dispose(); btr.Dispose(); } bt.Dispose(); myTran.Commit(); myTran.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } ////保存为dwg code //var resultfilename = dwgfilename; ////var resultfilename = @"D:\test\result\1000tk" + i.ToString() + ".dwg"; myDB.SaveAs(filenamemuban, DwgVersion.Current); //myDB.CloseInput(true); myDB.Dispose(); } public void openfunction() { try { //for (int i = 0; i < 10; i++) //{ var filenamemuban = @"D:\test\1000tk.dwg"; //Document document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; var docMgr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager; var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Open(filenamemuban); docMgr.MdiActiveDocument = doc; //doc.Editor.WriteMessage("文档已打开0.0"); var resultfilename = @"D:\test\result\1.dwg"; //var resultfilename = @"D:\test\result\1000tk"+i.ToString ()+".dwg"; //doc.CloseAndSave(resultfilename); //Database db= doc.Database; Database database = HostApplicationServices.WorkingDatabase; database.SaveAs(resultfilename, DwgVersion.Current); //} } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } /// /// 20150611code /// public void DGWTKfunctionnew () { //OpenFileDialog ofd = new OpenFileDialog(); //if (ofd.ShowDialog() == DialogResult.OK) //{ char[] chspilt = new char[] { ',' }; try { //string fileresult = ofd.FileName; string fileresult = @"H:\2015Work\20150309DOMLS_TKCode\moban\myResult.txt"; string outfilapth = @"H:\2015Work\20150309DOMLS_TKCode\DWGResult\"; StreamReader sr = new StreamReader(fileresult); //////// int i = 0; while (sr.Peek() != -1) { //i++; //if (i > 2) // break; string temp = sr.ReadLine(); string[] spilt = temp.Split(chspilt, StringSplitOptions.RemoveEmptyEntries); if (spilt.Length >= 11) { string name = spilt[0]; double minX = Convert.ToDouble(spilt[1]); double minY = Convert.ToDouble(spilt[2]); string name1 = spilt[3]; string name2 = spilt[4]; string name3 = spilt[5]; string name4 = spilt[6]; string name5 = spilt[7]; string name6 = spilt[8]; string name7 = spilt[9]; string name8 = spilt[10]; string dwgfilename = outfilapth + name+".dwg"; { //移动dwg图框code //var filenamemuban = @"E:\2015Work\20150309DOM套图库程序\moban\1000lstk.dwg"; var filenamemuban = @"H:\2015Work\20150309DOMLS_TKCode\moban\1000lstkcode.dwg"; Database myDB = new Database(false, true); myDB.ReadDwgFile(filenamemuban, System.IO.FileShare.ReadWrite, false, ""); myDB.CloseInput(true); //左下角坐标 double xmove = minX; double ymove =minY; double len = 500; //左上 left top double xlt = minX / 1000.0; double ylt = (minY +len) / 1000.0; string xltstr = xlt.ToString("f1"); string yltstr = ylt.ToString("f1"); //右上 right top double xrt = (minX +len) / 1000.0; double yrt = (minY+len) / 1000.0; string xrtstr = xrt.ToString("f1"); string yrtstr = yrt.ToString("f1"); //左下 left bottom double xlb = minX / 1000.0; double ylb = minY/ 1000.0; string xlbstr = xlb.ToString("f1"); string ylbstr = ylb.ToString("f1"); //右下 right bottom double xrb = (minX+len) / 1000.0; double yrb = minY/ 1000.0; string xrbstr = xrb.ToString("f1"); string yrbstr = yrb.ToString("f1"); ////X = 559000.000 Y = 3349500.000 Z = 2874.000 ////左上角坐标除去外扩 //double xmove = X + 10; //double ymove = Y - 10; ////左上 left top //double xlt = xmove / 1000.0; //double ylt = ymove / 1000.0; //string xltstr = xlt.ToString("f1"); //string yltstr = ylt.ToString("f1"); ////右上 right top //double xrt = (xmove + 500) / 1000.0; //double yrt = ymove / 1000.0; //string xrtstr = xrt.ToString("f1"); //string yrtstr = yrt.ToString("f1"); ////左下 left bottom //double xlb = xmove / 1000.0; //double ylb = (ymove - 500) / 1000.0; //string xlbstr = xlb.ToString("f1"); //string ylbstr = ylb.ToString("f1"); ////右下 right bottom //double xrb = (xmove + 500) / 1000.0; //double yrb = (ymove - 500) / 1000.0; //string xrbstr = xrb.ToString("f1"); //string yrbstr = yrb.ToString("f1"); //////X = 559000.000 Y = 3349500.000 Z = 2874.000 ////选中所有对象进行平移 using (var myTran = myDB.TransactionManager.StartTransaction()) { try { var bt = (BlockTable)(myTran.GetObject(myDB.BlockTableId, OpenMode.ForWrite)); foreach (ObjectId blid in bt) { var btr = (BlockTableRecord)(myTran.GetObject(blid, OpenMode.ForWrite)); BlockTableRecordEnumerator btrenu = btr.GetEnumerator(); while (btrenu.MoveNext()) { ObjectId myobjid = btrenu.Current; Entity myentity = myTran.GetObject(myobjid, OpenMode.ForWrite) as Entity; //////测试后台可否执行的代码 ////myentity.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Blue); ////myentity.ColorIndex = 5; //////修改文字代码 if (myentity is DBText) { DBText text = myentity as DBText; string str = text.TextString; switch (str) { case "name1": if (name1 == "NULL") text.TextString = " "; else text.TextString =name1; break; case "name2": if (name2 == "NULL") text.TextString = " "; else text.TextString =name2; break; case "name3": if (name3 == "NULL") text.TextString = " "; else text.TextString =name3; break; case "name4": if (name4 == "NULL") text.TextString = " "; else text.TextString =name4; break; case "name5": if (name5 == "NULL") text.TextString = " "; else text.TextString =name5; break; case "name6": if (name6 == "NULL") text.TextString = " "; else text.TextString = name6; break; case "name7": if (name7 == "NULL") text.TextString = " "; else text.TextString =name7; break; case "name8": if (name8 == "NULL") text.TextString = " "; else text.TextString =name8; break; //case "Name": // text.TextString = "邻水县农村土地经营权DOM"; //"邻水县" + "XXX镇XXX村" + "农村土地经营权DOM"; // break; case "(ididid)": text.TextString = "("+name+")"; break; case "xlt": text.TextString = xltstr.Substring(0, xltstr.Length - 4); break; case "xlt2": text.TextString = xltstr.Substring(xltstr.Length - 4, 4); break; case "ylt": text.TextString = yltstr.Substring(0, yltstr.Length - 5); break; case "ylt2": text.TextString = yltstr.Substring(yltstr.Length - 5, 5); break; case "xrt": text.TextString = xrtstr.Substring(0, xrtstr.Length - 4); break; case "xrt2": text.TextString = xrtstr.Substring(xrtstr.Length - 4, 4); break; case "yrt": text.TextString = yrtstr.Substring(0, yrtstr.Length - 5); break; case "yrt2": text.TextString = yrtstr.Substring(yrtstr.Length - 5, 5); break; case "xlb": text.TextString = xlbstr.Substring(0, xlbstr.Length - 4); break; case "xlb2": text.TextString = xlbstr.Substring(xlbstr.Length - 4, 4); break; case "ylb": text.TextString = ylbstr.Substring(0, ylbstr.Length - 5); break; case "ylb2": text.TextString = ylbstr.Substring(ylbstr.Length - 5, 5); break; case "xrb": text.TextString = xrbstr.Substring(0, xrtstr.Length - 4); break; case "xrb2": text.TextString = xrbstr.Substring(xrbstr.Length - 4, 4); break; case "yrb": text.TextString = yrbstr.Substring(0, yrbstr.Length - 5); break; case "yrb2": text.TextString = yrbstr.Substring(yrbstr.Length - 5, 5); break; //case "": // break; default: break; } myentity = text; } Point3d basept = new Point3d(0, 0, 0); Point3d targetpt = new Point3d(xmove, ymove, 0); Vector3d vec = targetpt - basept; Matrix3d mt3d = Matrix3d.Displacement(vec); myentity.TransformBy(mt3d); } btrenu.Dispose(); btr.Dispose(); } bt.Dispose(); myTran.Commit(); myTran.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } //////DOM //using (var myTran = myDB.TransactionManager.StartTransaction()) //{ // try // { // BlockTable blktbl = myTran.GetObject(myDB.BlockTableId, OpenMode.ForRead) as BlockTable; // BlockTableRecord blktblrec = myTran.GetObject(blktbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // DrawOrderTable dot = myTran.GetObject(blktblrec.DrawOrderTableId, OpenMode.ForWrite) as DrawOrderTable; // //////////////////////创建图像定义对象 // ObjectId imgid = RasterImageDef.GetImageDictionary(myDB); // if (imgid == ObjectId.Null) // imgid = RasterImageDef.CreateImageDictionary(myDB); // DBDictionary imgdict = myTran.GetObject(imgid, OpenMode.ForWrite) as DBDictionary; // RasterImageDef imgdef = new RasterImageDef(); // imgdef.SourceFileName = imageName; // imgdef.Load(); // ObjectId imgdefid = imgdict.SetAt(imageName, imgdef); // myTran.AddNewlyCreatedDBObject(imgdef, true); // RasterImage image = new RasterImage(); // image.ImageDefId = imgdefid; // //image.Layer = "DOM"; // blktblrec.AppendEntity(image); // myTran.AddNewlyCreatedDBObject(image, true); // double height = imgdef.Size.Y; // Vector3d vt1 = scale * image.Orientation.Xaxis; // Vector3d vt2 = scale * image.Orientation.Yaxis; // image.AssociateRasterDef(imgdef); // image.Draw(); // image.Orientation = new CoordinateSystem3d(new Point3d(X, Y - height * scale, 0), vt1, vt2); // ObjectIdCollection obidcoll = new ObjectIdCollection(); // //影像后置 // obidcoll.Add(image.ObjectId); // dot.MoveToBottom(obidcoll); // obidcoll = new ObjectIdCollection(); // myTran.Commit(); // myTran.Dispose(); // //Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen(); // MessageBox.Show(imageName + "影像已按照参数正确加载;"); // } // catch (Exception ex) // { // MessageBox.Show(ex.ToString()); // } //} ////保存为dwg code var resultfilename = dwgfilename; ////var resultfilename = @"D:\test\result\1000tk" + i.ToString() + ".dwg"; myDB.SaveAs(resultfilename, DwgVersion.Current); //myDB.CloseInput(true); myDB.Dispose(); } } } } catch (Exception ex0) { MessageBox.Show(ex0.ToString()); } //} //else // return; } ///end /// public string str3(string strpama) { if (strpama == "NULL") { return strpama; } else { return strpama.Substring(strpama.Length - 3); } } /// /// 20200807code /// 20230301 update /// public void DGWTKfunction2020() { //OpenFileDialog ofd = new OpenFileDialog(); //if (ofd.ShowDialog() == DialogResult.OK) //{ char[] chspilt = new char[] { ',' }; try { Document document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database database = HostApplicationServices.WorkingDatabase; PromptStringOptions pStrOpts = new PromptStringOptions("\nEnter daihao 代号(默认无代号): "); pStrOpts.AllowSpaces = true; PromptResult pStrRes = document.Editor.GetString(pStrOpts); //代号 string ssssssss = pStrRes.StringResult; //MessageBox.Show(ssssssss); pStrOpts = new PromptStringOptions("\nEnter 小数位数(默认为2位): "); pStrOpts.AllowSpaces = true; pStrRes = document.Editor.GetString(pStrOpts); //小数位数 string xsws = pStrRes.StringResult; string ffff111222="f2"; if (xsws == "1") ffff111222 = "f1"; ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// //string fileresult = ofd.FileName; string fileresult = ""; string filenamemuban = ""; OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "请选择导出的txt文件"; if (ofd.ShowDialog() == DialogResult.OK) { fileresult = ofd.FileName; } else return; ofd.Dispose(); OpenFileDialog od222 = new OpenFileDialog(); od222.Title = "请选择模板.dwg文件"; if (od222.ShowDialog() == DialogResult.OK) { filenamemuban = od222.FileName; } else return; od222.Dispose(); string outfilapth = Path.GetDirectoryName(fileresult); StreamReader sr = new StreamReader(fileresult); //////// int i = 0; while (sr.Peek() != -1) { //i++; //if (i > 2) // break; string temp = sr.ReadLine(); string[] spilt = temp.Split(chspilt, StringSplitOptions.RemoveEmptyEntries); if (spilt.Length >= 11) { string name = spilt[0]; double minX = Convert.ToDouble(spilt[1]); double minY = Convert.ToDouble(spilt[2]); double maxX = Convert.ToDouble(spilt[3]); double maxY = Convert.ToDouble(spilt[4]); string name1 = spilt[5]; string name2 = spilt[6]; string name3 = spilt[7]; string name4 = spilt[8]; string name5 = spilt[9]; string name6 = spilt[10]; string name7 = spilt[11]; string name8 = spilt[12]; ///////////////////////// ///////////////////////// string dwgfilename = outfilapth + "\\"+name + ".dwg"; //MessageBox.Show(dwgfilename); { //移动dwg图框code //var filenamemuban = @"E:\2015Work\20150309DOM套图库程序\moban\1000lstk.dwg"; Database myDB = new Database(false, true); myDB.ReadDwgFile(filenamemuban, System.IO.FileShare.ReadWrite, false, ""); myDB.CloseInput(true); //左下角坐标 double xmove = minX; double ymove = minY; Point3d basept = new Point3d(0, 0, 0); Point3d targetpt = new Point3d(xmove, ymove, 0); Vector3d vec = targetpt - basept; Matrix3d mt3d = Matrix3d.Displacement(vec); //double len = 500; ////左上 left top 2020 code //double xlt = minX / 1000.0; //double ylt = maxY / 1000.0; //string xltstr = xlt.ToString("f1"); //string yltstr = ylt.ToString("f1"); ////右上 right top //double xrt = maxX / 1000.0; //double yrt = maxY / 1000.0; //string xrtstr = xrt.ToString("f1"); //string yrtstr = yrt.ToString("f1"); ////左下 left bottom //double xlb = minX / 1000.0; //double ylb = minY / 1000.0; //string xlbstr = xlb.ToString("f1"); //string ylbstr = ylb.ToString("f1"); ////右下 right bottom //double xrb =maxX / 1000.0; //double yrb = minY / 1000.0; //string xrbstr = xrb.ToString("f1"); //string yrbstr = yrb.ToString("f1"); ////左上 left top //double xlt = minX / 1000.0; //double ylt = maxY / 1000.0; //string xltstr = xlt.ToString("f2"); //string yltstr = ylt.ToString("f2"); ////右上 right top //double xrt = maxX / 1000.0; //double yrt = maxY / 1000.0; //string xrtstr = xrt.ToString("f2"); //string yrtstr = yrt.ToString("f2"); ////左下 left bottom //double xlb = minX / 1000.0; //double ylb = minY / 1000.0; //string xlbstr = xlb.ToString("f2"); //string ylbstr = ylb.ToString("f2"); ////右下 right bottom //double xrb = maxX / 1000.0; //double yrb = minY / 1000.0; //string xrbstr = xrb.ToString("f2"); //string yrbstr = yrb.ToString("f2"); //左上 left top 2021 code double xlt = minX / 1000.0; double ylt = maxY / 1000.0; string xltstr = xlt.ToString(ffff111222); string yltstr = ylt.ToString(ffff111222); //右上 right top double xrt = maxX / 1000.0; double yrt = maxY / 1000.0; string xrtstr = xrt.ToString(ffff111222); string yrtstr = yrt.ToString(ffff111222); //左下 left bottom double xlb = minX / 1000.0; double ylb = minY / 1000.0; string xlbstr = xlb.ToString(ffff111222); string ylbstr = ylb.ToString(ffff111222); //右下 right bottom double xrb = maxX / 1000.0; double yrb = minY / 1000.0; string xrbstr = xrb.ToString(ffff111222); string yrbstr = yrb.ToString(ffff111222); ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// string daihao = ssssssss; ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// #region//old 2020 code //////选中所有对象进行平移 //using (var myTran = myDB.TransactionManager.StartTransaction()) //{ // try // { // var bt = (BlockTable)(myTran.GetObject(myDB.BlockTableId, OpenMode.ForWrite)); // foreach (ObjectId blid in bt) // { // var btr = (BlockTableRecord)(myTran.GetObject(blid, OpenMode.ForWrite)); // BlockTableRecordEnumerator btrenu = btr.GetEnumerator(); // while (btrenu.MoveNext()) // { // ObjectId myobjid = btrenu.Current; // Entity myentity = myTran.GetObject(myobjid, OpenMode.ForWrite) as Entity; // //////测试后台可否执行的代码 // ////myentity.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Blue); // ////myentity.ColorIndex = 5; // //////修改文字代码 // if (myentity is DBText) // { // DBText text = myentity as DBText; // string str = text.TextString; // #region // switch (str) // { // case "name1": // if (name1 == "NULL") // text.TextString = " "; // else // text.TextString = name1; // break; // case "name2": // if (name2 == "NULL") // text.TextString = " "; // else // text.TextString = name2; // break; // case "name3": // if (name3 == "NULL") // text.TextString = " "; // else // text.TextString = name3; // break; // case "name4": // if (name4 == "NULL") // text.TextString = " "; // else // text.TextString = name4; // break; // case "name5": // if (name5 == "NULL") // text.TextString = " "; // else // text.TextString = name5; // break; // case "name6": // if (name6 == "NULL") // text.TextString = " "; // else // text.TextString = name6; // break; // case "name7": // if (name7 == "NULL") // text.TextString = " "; // else // text.TextString = name7; // break; // case "name8": // if (name8 == "NULL") // text.TextString = " "; // else // text.TextString = name8; // break; // //case "Name": // // text.TextString = "邻水县农村土地经营权DOM"; //"邻水县" + "XXX镇XXX村" + "农村土地经营权DOM"; // // break; // //case "ididid": // // //text.TextString = "(" + name + ")"; // // //text.TextString = name .Substring(name.Length - 3); // // text.TextString = name; // // break; // case "(ididid)": // //text.TextString = "(" + name + ")"; // //text.TextString = name .Substring(name.Length - 3); // text.TextString = "("+name+")"; // break; // case "xlt": // //text.TextString =daihao+ xltstr.Substring(0, xltstr.Length - 4); // text.TextString = daihao + xltstr.Substring(0, xltstr.Length - 5); // break; // case "xlt2": // //text.TextString = xltstr.Substring(xltstr.Length - 4, 4); // text.TextString = xltstr.Substring(xltstr.Length - 5, 5); // break; // case "ylt": // text.TextString = yltstr.Substring(0, yltstr.Length - 5); // //text.TextString = yltstr.Substring(0, yltstr.Length - 4); // break; // case "ylt2": // text.TextString = yltstr.Substring(yltstr.Length - 5, 5); // //text.TextString = yltstr.Substring(yltstr.Length - 4, 4); // break; // case "xrt": // //text.TextString = daihao + xrtstr.Substring(0, xrtstr.Length - 4); // text.TextString = daihao + xrtstr.Substring(0, xrtstr.Length - 5); // break; // case "xrt2": // //text.TextString = xrtstr.Substring(xrtstr.Length - 4, 4); // text.TextString = xrtstr.Substring(xrtstr.Length - 5, 5); // break; // case "yrt": // text.TextString = yrtstr.Substring(0, yrtstr.Length - 5); // //text.TextString = yrtstr.Substring(0, yrtstr.Length - 4); // break; // case "yrt2": // text.TextString = yrtstr.Substring(yrtstr.Length - 5, 5); // //text.TextString = yrtstr.Substring(yrtstr.Length - 4, 4); // break; // case "xlb": // //text.TextString = daihao + xlbstr.Substring(0, xlbstr.Length - 4); // text.TextString = daihao + xlbstr.Substring(0, xlbstr.Length - 5); // break; // case "xlb2": // //text.TextString = xlbstr.Substring(xlbstr.Length - 4, 4); // text.TextString = xlbstr.Substring(xlbstr.Length - 5, 5); // break; // case "ylb": // text.TextString = ylbstr.Substring(0, ylbstr.Length - 5); // //text.TextString = ylbstr.Substring(0, ylbstr.Length - 4); // break; // case "ylb2": // text.TextString = ylbstr.Substring(ylbstr.Length - 5, 5); // //text.TextString = ylbstr.Substring(ylbstr.Length - 4, 4); // break; // case "xrb": // //text.TextString = daihao + xrbstr.Substring(0, xrtstr.Length - 4); // text.TextString = daihao + xrbstr.Substring(0, xrtstr.Length - 5); // break; // case "xrb2": // //text.TextString = xrbstr.Substring(xrbstr.Length - 4, 4); // text.TextString = xrbstr.Substring(xrbstr.Length - 5, 5); // break; // case "yrb": // text.TextString = yrbstr.Substring(0, yrbstr.Length - 5); // //text.TextString = yrbstr.Substring(0, yrbstr.Length - 4); // break; // case "yrb2": // text.TextString = yrbstr.Substring(yrbstr.Length - 5, 5); // //text.TextString = yrbstr.Substring(yrbstr.Length - 4, 4); // break; // //case "": // // break; // default: break; // } // #endregion // myentity = text; // } // myentity.TransformBy(mt3d); // } // btrenu.Dispose(); // btr.Dispose(); // } // bt.Dispose(); // myTran.Commit(); // myTran.Dispose(); // } // catch (Exception ex) // { // MessageBox.Show(ex.ToString()); // } //} #endregion #region//old 2021 2023 code // 2023 edit code ////选中所有对象进行平移 using (var myTran = myDB.TransactionManager.StartTransaction()) { try { var bt = (BlockTable)(myTran.GetObject(myDB.BlockTableId, OpenMode.ForWrite)); foreach (ObjectId blid in bt) { var btr = (BlockTableRecord)(myTran.GetObject(blid, OpenMode.ForWrite)); BlockTableRecordEnumerator btrenu = btr.GetEnumerator(); while (btrenu.MoveNext()) { ObjectId myobjid = btrenu.Current; Entity myentity = myTran.GetObject(myobjid, OpenMode.ForWrite) as Entity; //////测试后台可否执行的代码 ////myentity.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Blue); ////myentity.ColorIndex = 5; //////修改文字代码 if (myentity is DBText) { DBText text = myentity as DBText; string str = text.TextString; #region switch (str) { case "name1": if (name1 == "NULL") text.TextString = " "; else text.TextString = name1; break; case "name2": if (name2 == "NULL") text.TextString = " "; else text.TextString = name2; break; case "name3": if (name3 == "NULL") text.TextString = " "; else text.TextString = name3; break; case "name4": if (name4 == "NULL") text.TextString = " "; else text.TextString = name4; break; case "name5": if (name5 == "NULL") text.TextString = " "; else text.TextString = name5; break; case "name6": if (name6 == "NULL") text.TextString = " "; else text.TextString = name6; break; case "name7": if (name7 == "NULL") text.TextString = " "; else text.TextString = name7; break; case "name8": if (name8 == "NULL") text.TextString = " "; else text.TextString = name8; break; //case "Name": // text.TextString = "邻水县农村土地经营权DOM"; //"邻水县" + "XXX镇XXX村" + "农村土地经营权DOM"; // break; //case "ididid": // //text.TextString = "(" + name + ")"; // //text.TextString = name .Substring(name.Length - 3); // text.TextString = name; // break; case "(ididid)": //text.TextString = "(" + name + ")"; //text.TextString = name .Substring(name.Length - 3); text.TextString = "(" + name + ")"; break; case "xlt": //text.TextString = daihao + xltstr.Substring(0, xltstr.Length - 4); text.TextString = daihao + xltstr.Substring(0, xltstr.Length - 5); if (xsws == "1") text.TextString = daihao + xltstr.Substring(0, xltstr.Length - 4); break; case "xlt2": //text.TextString = xltstr.Substring(xltstr.Length - 4, 4); text.TextString = xltstr.Substring(xltstr.Length - 5, 5); if (xsws == "1") text.TextString = xltstr.Substring(xltstr.Length - 4, 4); break; case "ylt": text.TextString = yltstr.Substring(0, yltstr.Length - 5); if (xsws == "1") text.TextString = yltstr.Substring(0, yltstr.Length - 4); //text.TextString = yltstr.Substring(0, yltstr.Length - 4); break; case "ylt2": text.TextString = yltstr.Substring(yltstr.Length - 5, 5); //text.TextString = yltstr.Substring(yltstr.Length - 4, 4); if (xsws == "1") text.TextString = yltstr.Substring(yltstr.Length - 4, 4); break; case "xrt": //text.TextString = daihao + xrtstr.Substring(0, xrtstr.Length - 4); text.TextString = daihao + xrtstr.Substring(0, xrtstr.Length - 5); if (xsws == "1") text.TextString = daihao + xrtstr.Substring(0, xrtstr.Length - 4); break; case "xrt2": //text.TextString = xrtstr.Substring(xrtstr.Length - 4, 4); text.TextString = xrtstr.Substring(xrtstr.Length - 5, 5); if (xsws == "1") text.TextString = xrtstr.Substring(xrtstr.Length - 4, 4); break; case "yrt": text.TextString = yrtstr.Substring(0, yrtstr.Length - 5); //text.TextString = yrtstr.Substring(0, yrtstr.Length - 4); if (xsws == "1") text.TextString = yrtstr.Substring(0, yrtstr.Length - 4); break; case "yrt2": text.TextString = yrtstr.Substring(yrtstr.Length - 5, 5); //text.TextString = yrtstr.Substring(yrtstr.Length - 4, 4); if (xsws == "1") text.TextString = yrtstr.Substring(yrtstr.Length - 4, 4); break; case "xlb": //text.TextString = daihao + xlbstr.Substring(0, xlbstr.Length - 4); text.TextString = daihao + xlbstr.Substring(0, xlbstr.Length - 5); if (xsws == "1") text.TextString = daihao + xlbstr.Substring(0, xlbstr.Length - 4); break; case "xlb2": //text.TextString = xlbstr.Substring(xlbstr.Length - 4, 4); text.TextString = xlbstr.Substring(xlbstr.Length - 5, 5); if (xsws == "1") text.TextString = xlbstr.Substring(xlbstr.Length - 4, 4); break; case "ylb": text.TextString = ylbstr.Substring(0, ylbstr.Length - 5); //text.TextString = ylbstr.Substring(0, ylbstr.Length - 4); if (xsws == "1") text.TextString = ylbstr.Substring(0, ylbstr.Length - 4); break; case "ylb2": text.TextString = ylbstr.Substring(ylbstr.Length - 5, 5); //text.TextString = ylbstr.Substring(ylbstr.Length - 4, 4); if (xsws == "1") text.TextString = ylbstr.Substring(ylbstr.Length - 4, 4); break; case "xrb": //text.TextString = daihao + xrbstr.Substring(0, xrtstr.Length - 4); text.TextString = daihao + xrbstr.Substring(0, xrtstr.Length - 5); if (xsws == "1") text.TextString = daihao + xrbstr.Substring(0, xrtstr.Length - 4); break; case "xrb2": //text.TextString = xrbstr.Substring(xrbstr.Length - 4, 4); text.TextString = xrbstr.Substring(xrbstr.Length - 5, 5); if (xsws == "1") text.TextString = xrbstr.Substring(xrbstr.Length - 4, 4); break; case "yrb": text.TextString = yrbstr.Substring(0, yrbstr.Length - 5); //text.TextString = yrbstr.Substring(0, yrbstr.Length - 4); if (xsws == "1") text.TextString = yrbstr.Substring(0, yrbstr.Length - 4); break; case "yrb2": text.TextString = yrbstr.Substring(yrbstr.Length - 5, 5); //text.TextString = yrbstr.Substring(yrbstr.Length - 4, 4); if (xsws == "1") text.TextString = yrbstr.Substring(yrbstr.Length - 4, 4); break; case "xltxx2": string xltxx2222 = (Convert.ToDouble(xltstr) + 0.5).ToString(ffff111222); text.TextString = xltxx2222.Substring(1, xltxx2222.Length - 1); break; case "xltxx3": string xltxx3333=(Convert.ToDouble(xltstr) + 1).ToString(ffff111222); text.TextString = xltxx3333.Substring(1, xltxx3333.Length - 1); break; case "xltxx4": string xltxx4444=(Convert.ToDouble(xltstr) + 1.5).ToString(ffff111222); text.TextString = xltxx4444.Substring(1, xltxx4444.Length - 1); break; case "xltxx5": string xltxx5555=(Convert.ToDouble(xltstr) + 2).ToString(ffff111222); text.TextString = xltxx5555.Substring(1, xltxx5555.Length - 1); break; case "ylbyy2": string ylbyy2222=(Convert.ToDouble(ylbstr) + 0.5).ToString(ffff111222); text.TextString = ylbyy2222.Substring(2, ylbyy2222.Length - 2); break; case "ylbyy3": string ylbyy3333=(Convert.ToDouble(ylbstr) +1).ToString(ffff111222); text.TextString = ylbyy3333.Substring(2, ylbyy3333.Length - 2); break; case "ylbyy4": string ylbyy4444=(Convert.ToDouble(ylbstr) + 1.5).ToString(ffff111222); text.TextString = ylbyy4444.Substring(2, ylbyy4444.Length - 2); break; case "ylbyy5": string ylbyy5555=(Convert.ToDouble(ylbstr) +2).ToString(ffff111222); text.TextString = ylbyy5555.Substring(2, ylbyy5555.Length - 2); break; //case "": // break; //case "": // break; //case "": // break; default: break; } #endregion myentity = text; } myentity.TransformBy(mt3d); } btrenu.Dispose(); btr.Dispose(); } bt.Dispose(); myTran.Commit(); myTran.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } #endregion ////保存为dwg code var resultfilename = dwgfilename; ////var resultfilename = @"D:\test\result\1000tk" + i.ToString() + ".dwg"; myDB.SaveAs(resultfilename, DwgVersion.Current); //myDB.CloseInput(true); myDB.Dispose(); } } } } catch (Exception ex0) { MessageBox.Show(ex0.ToString()); } //} //else // return; } public void InsertDOM() { string[] filelist; string domfilename = string.Empty; string tfwfilename = string.Empty; string imageName = string.Empty; System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog(); ofd.Title = "请选择要插入的DOM(必须有相应的.tfw文件且在同一文件夹中)"; ofd.Filter = "(DOM)*tif|*.tif"; ofd.Multiselect = true; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { filelist = ofd.FileNames; Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; ObjectIdCollection obidcoll = new ObjectIdCollection(); for (int i = 0; i < filelist.Length; i++) { domfilename = filelist[i]; imageName = new FileInfo(domfilename).Name; if (domfilename.Contains("tif")) tfwfilename = domfilename.Replace(".tif", ".tfw"); else { tfwfilename = domfilename.Replace(".TIF", ".tfw"); } double scale = 0; double X = 0, Y = 0; try { StreamReader sr = new StreamReader(tfwfilename); scale = Convert.ToDouble(sr.ReadLine()); sr.ReadLine(); sr.ReadLine(); sr.ReadLine(); X = Convert.ToDouble(sr.ReadLine()); Y = Convert.ToDouble(sr.ReadLine()); sr.Close(); sr.Dispose(); } catch (System.Exception ex) { //MessageBox.Show("警告:"+domfilename +"图像没有相应的.tfw文件,无法正确插入!!!\r\n\r\n" + ex.ToString()); MessageBox.Show("警告:" + domfilename + "图像没有相应的.tfw文件,无法正确插入!!!\r\n\r\n"); continue; } using (Transaction tran = db.TransactionManager.StartTransaction()) { LayerTable lt = tran.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable; try { if (!lt.Has("DOM")) { LayerTableRecord ltrec = new LayerTableRecord(); ltrec.Name = "DOM"; ObjectId obid = lt.Add(ltrec); tran.AddNewlyCreatedDBObject(ltrec, true); //db.Clayer = obid; } } catch (Autodesk.AutoCAD.Runtime.Exception ex) { MessageBox.Show(ex.ToString()); } tran.Commit(); } using (Transaction tran = db.TransactionManager.StartTransaction()) { BlockTable blktbl = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord blktblrec = tran.GetObject(blktbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; DrawOrderTable dot = tran.GetObject(blktblrec.DrawOrderTableId, OpenMode.ForWrite) as DrawOrderTable; try { #region //RasterImageDef dom = new RasterImageDef(); ////domimage.TransformBy(); //dom.ActiveFileName = domfilename; ////dom.OpenImage(); //dom.Load(); //dom.ImageModified = true; //dom.OpenImage(); //dom.Embed(); //RasterImage domimage = new RasterImage(); ////Matrix3d.Mirroring();//将栅格图像坐标关于Y轴镜像还原 ////Matrix3d.Displacement();//在Y轴正方向上移动图像原始高度距离 ////domimage.TransformBy();//最后用6参数组织缩放、旋转、移动的变换矩阵 //tran.AddNewlyCreatedDBObject(dom, true); //tran.Commit(); /////////////////// //RasterImage domimage = new RasterImage(); //PromptEntityOptions prent = new PromptEntityOptions("\n请选择山歌图像"); //prent.SetRejectMessage("\n选择的不是栅格图像"); //prent.AddAllowedClass(typeof(RasterImage), true); //PromptEntityResult prentres = ed.GetEntity(prent); //if (prentres.Status != PromptStatus.OK) // return; //Matrix3d transform; //ObjectId imgid = prentres.ObjectId; //domimage = (RasterImage)tran.GetObject(imgid, OpenMode.ForRead); //transform = domimage.PixelToModelTransform; #endregion //////////////////////创建图像定义对象 ObjectId imgid = RasterImageDef.GetImageDictionary(db); if (imgid == ObjectId.Null) imgid = RasterImageDef.CreateImageDictionary(db); DBDictionary imgdict = tran.GetObject(imgid, OpenMode.ForWrite) as DBDictionary; RasterImageDef imgdef = new RasterImageDef(); imgdef.SourceFileName = domfilename; imgdef.Load(); ObjectId imgdefid = imgdict.SetAt(imageName, imgdef); tran.AddNewlyCreatedDBObject(imgdef, true); RasterImage image = new RasterImage(); image.ImageDefId = imgdefid; image.Layer = "DOM"; blktblrec.AppendEntity(image); tran.AddNewlyCreatedDBObject(image, true); double height = imgdef.Size.Y; Vector3d vt1 = scale * image.Orientation.Xaxis; Vector3d vt2 = scale * image.Orientation.Yaxis; image.AssociateRasterDef(imgdef); image.Draw(); image.Orientation = new CoordinateSystem3d(new Point3d(X, Y - height * scale, 0), vt1, vt2); //影像后置 obidcoll.Add(image.ObjectId); dot.MoveToBottom(obidcoll); obidcoll = new ObjectIdCollection(); tran.Commit(); Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen(); doc.Editor.WriteMessage(imageName + "影像已按照参数正确加载;"); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { MessageBox.Show(ex.ToString()); } } } } } public List getxyscale(string filename) { List result = new List(); try { StreamReader sr = new StreamReader(filename); double scale = Convert.ToDouble(sr.ReadLine()); sr.ReadLine(); sr.ReadLine(); sr.ReadLine(); double X = Convert.ToDouble(sr.ReadLine()); double Y = Convert.ToDouble(sr.ReadLine()); sr.Close(); sr.Dispose(); result.Add(X); result.Add(Y); result.Add(scale); return result; } catch { return new List(); } } public void InserDOMbatch2021() { string dompath1 = ""; string dwgpath2 = ""; string strdomtype = ".jpg"; string strdomxyztype = ".jgw"; FolderBrowserDialog domfbd1 = new FolderBrowserDialog(); domfbd1.Description = "select dom filepath 111"; FolderBrowserDialog dwgfbd2 = new FolderBrowserDialog(); dwgfbd2.Description = "select dwg filepath 222"; if (domfbd1.ShowDialog() == DialogResult.OK) { dompath1 = domfbd1.SelectedPath; } if (dwgfbd2.ShowDialog() == DialogResult.OK) { dwgpath2 = dwgfbd2.SelectedPath; } DirectoryInfo di = new DirectoryInfo(dwgpath2); foreach (FileInfo fi in di.GetFiles()) { string filenamedwg = fi.FullName; string namedwg = fi.Name; string tfhname = namedwg.Replace(".dwg", ""); //MessageBox.Show(filenamedwg); if (filenamedwg.Contains(".dwg")) { //MessageBox.Show(filenamedwg); string filenamedom = dompath1 + "\\" + tfhname + strdomtype; string filenamedomxyz = dompath1 + "\\" + tfhname + strdomxyztype; string savefile = dompath1 + "\\" + tfhname + ".dwg"; //MessageBox.Show("1 "+filenamedom); //MessageBox.Show("2 "+filenamedomxyz); if (File.Exists(filenamedom)) { //MessageBox.Show(filenamedom); } else { MessageBox.Show("not " + filenamedom); continue; } if (File.Exists(filenamedomxyz)) { //MessageBox.Show(filenamedomxyz); } else { MessageBox.Show("not " + filenamedomxyz); continue; } List xyslist = new List(); xyslist = getxyscale(filenamedomxyz); //MessageBox.Show(xyslist.Count.ToString()); double X =xyslist[0] ; double Y=xyslist[1]; double scale=xyslist[2]; if (xyslist.Count < 2) continue; //MessageBox.Show(X.ToString()+Y.ToString()+scale.ToString()); ObjectIdCollection obidcoll = new ObjectIdCollection(); Database db = new Database(false, true); db.ReadDwgFile(filenamedwg, System.IO.FileShare.ReadWrite, false, ""); db.CloseInput(true); using (var tran = db.TransactionManager.StartTransaction()) { try { //var bt = (BlockTable)(myTran.GetObject(myDB.BlockTableId, OpenMode.ForWrite)); LayerTable lt = tran.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable; if (!lt.Has("DOM")) { LayerTableRecord ltrec = new LayerTableRecord(); ltrec.Name = "DOM"; ObjectId obid = lt.Add(ltrec); tran.AddNewlyCreatedDBObject(ltrec, true); //db.Clayer = obid; //MessageBox.Show("111"); } //MessageBox.Show("222"); } catch { MessageBox.Show("DOM layer created failed"); } } using (var tran = db.TransactionManager.StartTransaction()) { try { //MessageBox.Show("333"); BlockTable blktbl = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord blktblrec = tran.GetObject(blktbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; DrawOrderTable dot = tran.GetObject(blktblrec.DrawOrderTableId, OpenMode.ForWrite) as DrawOrderTable; //////////////////////创建图像定义对象 ObjectId imgid = RasterImageDef.GetImageDictionary(db); if (imgid == ObjectId.Null) imgid = RasterImageDef.CreateImageDictionary(db); DBDictionary imgdict = tran.GetObject(imgid, OpenMode.ForWrite) as DBDictionary; RasterImageDef imgdef = new RasterImageDef(); imgdef.SourceFileName = filenamedom; imgdef.Load(); ObjectId imgdefid = imgdict.SetAt(tfhname, imgdef); tran.AddNewlyCreatedDBObject(imgdef, true); //MessageBox.Show("444"); RasterImage image = new RasterImage(); image.ImageDefId = imgdefid; //image.Layer = "DOM"; blktblrec.AppendEntity(image); tran.AddNewlyCreatedDBObject(image, true); //MessageBox.Show("555"); double height = imgdef.Size.Y; Vector3d vt1 = scale * image.Orientation.Xaxis; Vector3d vt2 = scale * image.Orientation.Yaxis; //MessageBox.Show(vt1.X.ToString() + ',' + vt1.Y.ToString()); //MessageBox.Show(vt2.X.ToString() + ',' + vt2.Y.ToString()); image.AssociateRasterDef(imgdef); //image.Draw(); //MessageBox.Show(X.ToString() + "+++" + (Y - height * scale).ToString()); ////////////// ///////////////// //dhkjahhdflhkflhkflkflkflkjfflhkjflhkflhkflhk /////////// image.Orientation = new CoordinateSystem3d(new Point3d(X, Y - height * scale, 0), vt1, vt2); //image.Orientation = new CoordinateSystem3d(new Point3d(X, Y , 0), vt1, vt2); //MessageBox.Show("112"); //影像后置 obidcoll.Add(image.ObjectId); dot.MoveToBottom(obidcoll); obidcoll = new ObjectIdCollection(); //MessageBox.Show("555"); tran.Commit(); //MessageBox.Show("777"); //Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen(); //doc.Editor.WriteMessage(imageName + "影像已按照参数正确加载;"); } catch(Exception ex) { MessageBox.Show(ex.ToString()); } } ////////////// //MessageBox.Show("666"); //db.Save(); db.SaveAs(savefile, DwgVersion.Current); db.Dispose(); } } } ///end /// ////////////////////////////////////////////////////////// } }