123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- using GrxCAD.ApplicationServices;
- using GrxCAD.DatabaseServices;
- using GrxCAD.EditorInput;
- using GrxCAD.Geometry;
- using GrxCAD.Runtime;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Forms;
-
- namespace HCTools
- {
- public class InsertDOM
- {
- public static string dompath;//DOM文件所在位置
- public static string dwgpath;//DWG文件所在位置
- public void InsertDOMToCAD()
- {
- List<String> dwgname = GetNameList(dwgpath, ".dwg");//获取dwg文件
- if (dwgname.Count == 0)
- {
- MessageBox.Show("没有找到dwg文件!", "警告");
- return;
- }
- List<String> tifname = GetNameList(dompath, ".tif");//获取tif文件
- tifname.AddRange(GetNameList(dompath, ".Tif"));
- if (tifname.Count == 0)
- {
- MessageBox.Show("没有找到dom文件!", "警告");
- return;
- }
- List<String> tfwname = new List<string>();//tfw文件
- List<String> errolist = new List<string>();//无法找到对应tif的dwg文件
- foreach (String name in tifname)
- {
- if (name.Contains("tif"))
- tfwname.Add(name.Replace(".tif", ".tfw"));
- else
- tfwname.Add(name.Replace(".Tif", ".tfw"));
- }
- for (int filenum = 0; filenum < dwgname.Count; filenum++)
- {
- string dwg = dwgpath + "\\" + dwgname[filenum];
- if(tifname.Contains(dwgname[filenum].Replace(".dwg", ".tif"))||
- tifname.Contains(dwgname[filenum].Replace(".dwg", ".Tif")))
- {
- Document doc = GrxCAD.ApplicationServices.Application.DocumentManager.Add(dwg);//将dwg添加到cad中
- for (int i = 0; i < tifname.Count; i++)
- {
- //筛选与dwg同名的tif,并将tif插入到dwg中
- if (tifname[i] == (dwgname[filenum].Replace(".dwg", ".tif"))||
- tifname[i] == (dwgname[filenum].Replace(".dwg", ".Tif")))
- {
- InsertDOMs(tifname[i], tfwname[i], doc);
- tifname.RemoveAt(i);
- tfwname.RemoveAt(i);
- break;
- }
- }
- }
- else
- {
- errolist.Add(dwgname[filenum]);
- }
- }
- if (errolist.Count == 0)
- MessageBox.Show("所有DOM插入成功","提示");
- else
- {
- string erromsg=string.Empty;
- foreach(string dwg in errolist)
- {
- erromsg += dwg+"\n";
- }
- MessageBox.Show(erromsg+"无法找到与之匹配的tif图,插入失败!","警告");
- }
- }
-
-
- /// <summary>
- /// 获取文件夹中相应格式的所有文件
- /// </summary>
- private static List<String> GetNameList(String filespath, String filetype)
- {
- DirectoryInfo root = new DirectoryInfo(filespath);
- List<String> filename = new List<string>(); //文件名
- FileInfo[] files = root.GetFiles();
- foreach (FileInfo file in files)
- {
- if (file.Name.Substring(file.Name.Length - 4, 4) != filetype)
- continue;
- else
- filename.Add(file.Name);
- }
- return filename;
- }
-
-
- /// <summary>
- /// 插入DOM
- /// </summary>
- public void InsertDOMs(string tiffilename, string tfwfilename, Document doc)
- {
- Database db = doc.Database;
- Editor ed = GrxCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
- ObjectIdCollection obidcoll = new ObjectIdCollection();
- string imageName = new FileInfo(tiffilename).Name;
- double scale = 0;
- double X = 0, Y = 0;
- try
- {
- StreamReader sr = new StreamReader(dompath + "\\" + 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("警告:" + tiffilename + "图像没有相应的.tfw文件或tfw文件出错,无法正确插入!\r\n\r\n");
- }
-
- using (DocumentLock docLock = doc.LockDocument())
- {
- using (Transaction tran = db.TransactionManager.StartTransaction())
- {
- //建立名为DOM的图层
- 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);
- }
- }
- catch (GrxCAD.Runtime.Exception ex)
- {
- MessageBox.Show(ex.ToString());
- }
- tran.Commit();
- }
- using (Transaction tran = db.TransactionManager.StartTransaction())
- {
- //插入DOM
- 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 = dompath + "\\" + tiffilename;
- 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();
- GrxCAD.ApplicationServices.Application.UpdateScreen();
- }
- catch (GrxCAD.Runtime.Exception ex)
- {
- MessageBox.Show(ex.ToString());
- }
- }
- }
- doc.CloseAndSave(db.Filename);
- }
- }
- }
|