public void Save(TmpCadzj cadd) { if (cadd.Bsm <= 0) { SQLiteCommand command = new SQLiteCommand(connection); StringBuilder fieldParameters = new StringBuilder(); StringBuilder valuesParameters = new StringBuilder(); fieldParameters.Append("Handle"); valuesParameters.Append("'" + cadd.Handle + "'"); fieldParameters.Append(",EntityType"); valuesParameters.Append(",'" + cadd.EntityType + "'"); fieldParameters.Append(",FileName"); valuesParameters.Append(",'" + cadd.FileName + "'"); fieldParameters.Append(",Geometry"); valuesParameters.Append(",GeomFromText('" + cadd.Geometry.AsText() + "'," + _srid.ToString() + ")"); string query = String.Format("Insert Into TmpCadzj ({0}) Values ({1})", fieldParameters.ToString(), valuesParameters.ToString()); command.CommandText = query; ExecuteSql(command); } else { } }
private void Update(TmpCadzj cadd) { SQLiteCommand command = new SQLiteCommand(connection); StringBuilder fieldParameters = new StringBuilder(); fieldParameters.Append("Handle='" + cadd.Handle + "'"); fieldParameters.Append(",EntityType='" + cadd.EntityType + "'"); fieldParameters.Append(",FileName='" + cadd.FileName + "'"); fieldParameters.Append(",Geometry=GeomFromText('" + cadd.Geometry.AsText() + "'," + _srid.ToString() + ")"); string query = String.Format("Update TmpCadzj Set {0} Where Bsm={1}", fieldParameters.ToString(), cadd.Bsm); command.CommandText = query; ExecuteSql(command); }
private List <TmpCadzj> ProcessResult(DataTable dt) { List <TmpCadzj> cadds = new List <TmpCadzj>(); foreach (DataRow row in dt.Rows) { TmpCadzj cadd = new TmpCadzj(); cadd.Bsm = int.Parse(row[bsmCol].ToString()); cadd.Handle = (string)row[handleCol]; cadd.EntityType = (string)row[entitytypeCol]; cadd.Geometry = DbGeometry.FromText(row[3].ToString()); cadd.FileName = (string)row[4]; cadds.Add(cadd); } return(cadds); }
public void ImportDxfDrawing(string dxfName, ProjectLoadingView loadingForm) { loadingForm.ShowProgress(0,"导入环境初始化..."); //DbConnection.GetConnection().Open(); MainService mainService = ServiceFactory.GetMainService(); TmpCaddService caddService = ServiceFactory.GetTmpCaddService(); TmpCadxService cadxService = ServiceFactory.GetTmpCadxService(); TmpCadmService cadmService = ServiceFactory.GetTmpCadmService(); TmpCadzjService cadzjService = ServiceFactory.GetTmpCadzjService(); TmpCadxdataService cadxdataService = ServiceFactory.GetTmpCadxdataService(); int srid = mainService.GetGeometryColumnSRID("tmpcadd", "geometry"); mainService.ClearCADTemps(); DataSource ds = Ogr.Open(dxfName, 0); Driver drv = ds.GetDriver(); loadingForm.ShowProgress(0, "导入图形数据..."); for (int i = 0; i < ds.GetLayerCount(); i++) { Layer pLayer = ds.GetLayerByIndex(i); Feature feat = pLayer.GetNextFeature(); while (feat != null) { string handle = feat.GetFieldAsString(4); string typeName = feat.GetFieldAsString(1).Trim().Replace("AcDbEntity:",""); string geomtryStr = ""; Geometry geometry = feat.GetGeometryRef(); geometry.FlattenTo2D(); geometry.ExportToWkt(out geomtryStr); switch (typeName) { case "AcDbPolyline": case "AcDbLine": TmpCadx cadx = new TmpCadx(handle, geomtryStr, "POLYLINE", dxfName); cadxService.Create(cadx); break; case "AcDbBlockReference": //TmpCadd cadd=new TmpCadd(handle, geomtryStr, "POINT"); //caddService.Create(cadd); //因为GDAL直接读取了块图形,因此,块在下面的方法和属性一起读取 break; case "AcDbText:AcDbText": TmpCadzj cadzj = new TmpCadzj(handle, geomtryStr, "TEXT", dxfName); cadzjService.Create(cadzj); break; } feat.Dispose(); feat = pLayer.GetNextFeature(); } } //开始使用netDxf读取数据 DxfDocument doc=DxfDocument.Load(dxfName); //开始读取点数据 loadingForm.ShowProgress(40, "导入块参照属性..."); for (int i = 0; i < doc.Inserts.Count; i++) { Insert insert= doc.Inserts[i]; TmpCadd cadd=new TmpCadd(); cadd.Handle = insert.Handle; cadd.EntityType = "POINT"; cadd.FileName = dxfName; cadd.Geometry = DbGeometry.FromText(string.Format("POINT({0} {1})", insert.Position.X, insert.Position.Y)); caddService.Create(cadd); TmpCadxdata cadxdata = new TmpCadxdata(); cadxdata.Handle = insert.Handle; cadxdata.Tc = insert.Layer.Name; cadxdata.Fh = insert.Block.Name; cadxdata.Fhdx = insert.Scale.X; cadxdata.Xzjd = insert.Rotation; cadxdata.FileName = dxfName; cadxdata = ReadXData(cadxdata, insert.XData); cadxdataService.Create(cadxdata); } //开始读取点数据 loadingForm.ShowProgress(50, "导入文本数据..."); for (int i = 0; i < doc.Texts.Count; i++) { Text insert = doc.Texts[i]; //TmpCadd cadd = new TmpCadd(); //cadd.Handle = insert.Handle; //cadd.EntityType = "POINT"; //cadd.Geometry = // DbGeometry.FromText(string.Format("POINT({0} {1})", insert.Position.X, insert.Position.Y)); //caddService.Create(cadd); TmpCadxdata cadxdata = new TmpCadxdata(); cadxdata.Handle = insert.Handle; cadxdata.Tc = insert.Layer.Name; cadxdata.Fh = insert.Style.FontFamilyName; cadxdata.Fhdx = insert.Height; cadxdata.Xzjd = insert.Rotation; cadxdata.Wbnr = insert.Value; cadxdata.FileName = dxfName; cadxdata = ReadXData(cadxdata, insert.XData); cadxdataService.Create(cadxdata); } //开始读取线数据 loadingForm.ShowProgress(60, "导入线数据..."); for (int i = 0; i < doc.Lines.Count; i++) { Line insert = doc.Lines[i]; //TmpCadd cadd = new TmpCadd(); //cadd.Handle = insert.Handle; //cadd.EntityType = "POINT"; //cadd.Geometry = // DbGeometry.FromText(string.Format("POINT({0} {1})", insert.Position.X, insert.Position.Y)); //caddService.Create(cadd); TmpCadxdata cadxdata = new TmpCadxdata(); cadxdata.Handle = insert.Handle; cadxdata.Tc = insert.Layer.Name; cadxdata.Fh = insert.Linetype.Name; cadxdata.Fhdx = insert.LinetypeScale; cadxdata.Xzjd = 0.0; cadxdata.Wbnr = ""; cadxdata.FileName = dxfName; cadxdata = ReadXData(cadxdata, insert.XData); cadxdataService.Create(cadxdata); } loadingForm.ShowProgress(80, "导入多边形数据..."); for (int i = 0; i < doc.LwPolylines.Count; i++) { LwPolyline insert = doc.LwPolylines[i]; if (insert.IsClosed) { //插入多边形 TmpCadx cadx = cadxService.GetTmpCadx(insert.Handle); if (cadx != null) { TmpCadm cadm=new TmpCadm() {Handle = cadx.Handle,EntityType="POLYGON",FileName=dxfName}; string wkt = cadx.Geometry.AsText(); Geometry geometry = Ogr.ForceToPolygon(Geometry.CreateFromWkt(wkt)); string geomStr = ""; geometry.ExportToWkt(out geomStr); geomStr = geomStr.Replace("LINESTRING", "POLYGON (") + ")"; cadm.Geometry = DbGeometry.FromText(geomStr); cadmService.Create(cadm); } } //TmpCadd cadd = new TmpCadd(); //cadd.Handle = insert.Handle; //cadd.EntityType = "POINT"; //cadd.Geometry = // DbGeometry.FromText(string.Format("POINT({0} {1})", insert.Position.X, insert.Position.Y)); //caddService.Create(cadd); TmpCadxdata cadxdata = new TmpCadxdata(); cadxdata.Handle = insert.Handle; cadxdata.Tc = insert.Layer.Name; cadxdata.Fh = insert.Linetype.Name; cadxdata.Fhdx = insert.LinetypeScale; cadxdata.Xzjd = 0.0; cadxdata.Wbnr = ""; cadxdata.FileName = dxfName; cadxdata = ReadXData(cadxdata, insert.XData); cadxdataService.Create(cadxdata); } for (int i = 0; i < doc.Polylines.Count; i++) { Polyline insert = doc.Polylines[i]; if (insert.IsClosed) { //插入多边形 TmpCadx cadx = cadxService.GetTmpCadx(insert.Handle); if (cadx != null) { TmpCadm cadm = new TmpCadm() { Handle = cadx.Handle, EntityType = "POLYGON" ,FileName = dxfName}; string wkt = cadx.Geometry.AsText(); Geometry geometry = Ogr.ForceToPolygon(Geometry.CreateFromWkt(wkt)); string geomStr = ""; geometry.ExportToWkt(out geomStr); geomStr=geomStr.Replace("LINESTRING", "POLYGON (")+")"; cadm.Geometry = DbGeometry.FromText(geomStr); cadmService.Create(cadm); } } //TmpCadd cadd = new TmpCadd(); //cadd.Handle = insert.Handle; //cadd.EntityType = "POINT"; //cadd.Geometry = // DbGeometry.FromText(string.Format("POINT({0} {1})", insert.Position.X, insert.Position.Y)); //caddService.Create(cadd); TmpCadxdata cadxdata = new TmpCadxdata(); cadxdata.Handle = insert.Handle; cadxdata.Tc = insert.Layer.Name; cadxdata.Fh = insert.Linetype.Name; cadxdata.Fhdx = insert.LinetypeScale; cadxdata.Xzjd = 0.0; cadxdata.Wbnr = ""; cadxdata.FileName = dxfName; cadxdata = ReadXData(cadxdata, insert.XData); cadxdataService.Create(cadxdata); } loadingForm.ShowProgress(100, "导入完成..."); //mainService.Close(); }
public void Edit(TmpCadzj cadzj) { this.tmpCadzjDao.Save(cadzj); }
public void Create(TmpCadzj cadzj) { this.tmpCadzjDao.Save(cadzj); }