/// <summary> /// 三维场景中绘制面要素 20110609 /// </summary> /// <param name="pGeometry">面要素</param> /// <param name="r"></param> /// <param name="g"></param> /// <param name="b"></param> /// <param name="Z"></param> /// <param name="Width"></param> /// <returns></returns> public static IElement DrawPolygonZ(IGeometry pGeometry, int r, int g, int b, int Z, double Width) { IPolygon pEnvPolygon = (IPolygon)pGeometry; IZAware pZAware = (IZAware)pEnvPolygon; ((IZAware)pZAware).ZAware = true; IZ pZ = (IZ)pEnvPolygon; pZ.SetConstantZ(Z); IElement pElement; IPolygonElement pPolygonElement = new PolygonElementClass(); pElement = pPolygonElement as IElement; IFillShapeElement pFillShapeElement = pPolygonElement as IFillShapeElement; ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass(); pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSCross; pSimpleFillSymbol.Color = getRGB(r, g, b); ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass(); pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDotDot; pSimpleLineSymbol.Color = getRGB(r, g, b); pSimpleLineSymbol.Color.Transparency = 10; pSimpleLineSymbol.Width = Width; ISymbol pSymbol = pSimpleLineSymbol as ISymbol; pSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen; pSimpleFillSymbol.Outline = pSimpleLineSymbol; pElement.Geometry = pZ as IGeometry; pFillShapeElement.Symbol = pSimpleFillSymbol; return(pElement); }
public static void SetGeometry(IGeometry pGeometry, IFeature pFeature) { double num; double num1; IFeatureClass @class = pFeature.Class as IFeatureClass; try { int num2 = @class.FindField(@class.ShapeFieldName); IGeometryDef geometryDef = @class.Fields.Field[num2].GeometryDef; if (!geometryDef.HasZ) { ((IZAware)pGeometry).ZAware = false; } else { ((IZAware)pGeometry).ZAware = true; if (pGeometry is IZ) { IZ igeometry0 = (IZ)pGeometry; geometryDef.SpatialReference.GetZDomain(out num, out num1); igeometry0.SetConstantZ(num); } else if (pGeometry is IPoint) { geometryDef.SpatialReference.GetZDomain(out num, out num1); (pGeometry as IPoint).Z = num; } } if (!geometryDef.HasM) { ((IMAware)pGeometry).MAware = false; } else { ((IMAware)pGeometry).MAware = true; } IFeature feature = @class.CreateFeature(); (pGeometry as ITopologicalOperator6).SimplifyAsFeature(); feature.Shape = pGeometry; try { ((IRowSubtypes)feature).InitDefaultValues(); } catch (Exception exception) { Logger.Current.Error("", exception, null); } EditorEvent.NewRow(feature); feature.Store(); } catch (COMException cOMException) { Logger.Current.Error("", cOMException, null); } catch (Exception exception1) { Logger.Current.Error("", exception1, null); } }
public void AddShapeToTin() { object Missing = Type.Missing; IPointCollection ptc = pGeometry as IPointCollection; if (ptc == null) { return; } //for (int i = 0; i < ptc.PointCount; i++) //{ // IPoint pt = ptc.get_Point(i); // IZAware pza = pt as IZAware; // pza.ZAware = true; // pt.Z = dHeight; //} IZAware pza = pGeometry as IZAware; pza.ZAware = true; IZ pz = pGeometry as IZ; pz.SetConstantZ(dHeight); try { pTinEdit.AddShapeZ(pGeometry, esriTinSurfaceType.esriTinHardReplace, 0, ref Missing); } catch (SystemException e) { } if (pMapCtr != null) { pMapCtr.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } }
private void CreateFeature(IGeometry geo, IMap pMap, IFeatureClass fc) { try { if (geo == null || fc == null || pMap == null) { return; } IDataset pDataset = fc as IDataset; IWorkspaceEdit pWorkspaceEdit = pDataset.Workspace as IWorkspaceEdit; int index = fc.FindField(fc.ShapeFieldName); IGeometryDef pGD = fc.Fields.get_Field(index).GeometryDef; if (pGD.HasZ) { IZAware pZA = geo as IZAware; pZA.ZAware = true; IZ pZ = geo as IZ; double zmin = -1000, zmax = 1000; if (pGD.SpatialReference.HasZPrecision()) { pGD.SpatialReference.GetZDomain(out zmin, out zmax); } if (pZ != null) { pZ.SetConstantZ(0); } else { IPoint p = geo as IPoint; if (p.Z.ToString() == "非数字") { p.Z = 0; } } } if (pGD.HasM) { IMAware pMA = geo as IMAware; pMA.MAware = true; } if (!pWorkspaceEdit.IsBeingEdited()) { pWorkspaceEdit.StartEditing(true); pWorkspaceEdit.StartEditOperation(); } IFeature pFeature = fc.CreateFeature(); pFeature.Shape = geo; pFeature.Store(); if (pWorkspaceEdit.IsBeingEdited()) { pWorkspaceEdit.StartEditOperation(); pWorkspaceEdit.StopEditing(true); } pMap.ClearSelection(); } catch (System.Exception ex) { return; } }
public static void MakeOffsetZ(IGeometry igeometry_0, double double_0) { if (igeometry_0 is IZ) { GeometryOperator.MakeZMAware(igeometry_0, true); IZ igeometry0 = igeometry_0 as IZ; igeometry0.CalculateNonSimpleZs(); igeometry0.OffsetZs(double_0); } }
public static void MakeConstantZ(IGeometry igeometry_0, double double_0) { if (igeometry_0 is IZ) { Utils3D.MakeZMAware(igeometry_0, true); IZ iZ = igeometry_0 as IZ; iZ.CalculateNonSimpleZs(); iZ.SetConstantZ(double_0); } }
public static int CreateFeature(IGeometry pGeometry, IFeatureClass pFeatureClass) { double num; double num1; int oID; try { if ((pGeometry == null ? false : pFeatureClass != null)) { int num2 = pFeatureClass.FindField(pFeatureClass.ShapeFieldName); IGeometryDef geometryDef = pFeatureClass.Fields.Field[num2].GeometryDef; if (geometryDef.HasZ) { ((IZAware)pGeometry).ZAware = true; if (pGeometry is IZ) { IZ igeometry0 = (IZ)pGeometry; geometryDef.SpatialReference.GetZDomain(out num, out num1); igeometry0.SetConstantZ(num); } else if (pGeometry is IPoint) { geometryDef.SpatialReference.GetZDomain(out num, out num1); (pGeometry as IPoint).Z = num; } } if (geometryDef.HasM) { ((IMAware)pGeometry).MAware = true; } IFeature feature = pFeatureClass.CreateFeature(); feature.Shape = pGeometry; try { ((IRowSubtypes)feature).InitDefaultValues(); } catch (Exception exception) { Logger.Current.Error("", exception, null); } EditorEvent.NewRow(feature); feature.Store(); EditorEvent.AfterNewRow(feature); oID = feature.OID; return(oID); } } catch (Exception exception1) { Logger.Current.Error("", exception1, null); } oID = -1; return(oID); }
public static void CreateFeature2(IGeometry pGeometry, IFeatureClass pFeatureClass) { double num; double num1; if (pGeometry != null && !pGeometry.IsEmpty) { pGeometry.Envelope.Expand(10, 10, false); try { int num2 = pFeatureClass.FindField(pFeatureClass.ShapeFieldName); IGeometryDef geometryDef = pFeatureClass.Fields.Field[num2].GeometryDef; if (geometryDef.HasZ) { ((IZAware)pGeometry).ZAware = true; if (pGeometry is IZ) { IZ igeometry0 = (IZ)pGeometry; geometryDef.SpatialReference.GetZDomain(out num, out num1); igeometry0.SetConstantZ(num); } else if (pGeometry is IPoint) { geometryDef.SpatialReference.GetZDomain(out num, out num1); (pGeometry as IPoint).Z = num; } } if (geometryDef.HasM) { ((IMAware)pGeometry).MAware = true; } IFeature feature = pFeatureClass.CreateFeature(); feature.Shape = pGeometry; try { ((IRowSubtypes)feature).InitDefaultValues(); } catch (Exception exception) { Logger.Current.Error("", exception, null); } EditorEvent.NewRow(feature); feature.Store(); } catch (COMException cOMException) { Logger.Current.Error("", cOMException, null); } catch (Exception exception1) { Logger.Current.Error("", exception1, null); } } }
public static void MakeConstantZAsMaxZ(IPolyline ipolyline_0) { if (ipolyline_0 is IZ) { IZAware iZAware = ipolyline_0 as IZAware; iZAware.ZAware = true; IZ iZ = ipolyline_0 as IZ; iZ.SetConstantZ(iZ.ZMax); } else { System.Windows.Forms.MessageBox.Show("Geometry is not IZ.", "MakeConstantZAsMaxZ"); } }
private void CreateParallel(IGeometry pGeometry, IFeatureClass pFeatureClass) { double num; double num1; try { if ((pGeometry == null ? false : pFeatureClass != null)) { int num2 = pFeatureClass.FindField(pFeatureClass.ShapeFieldName); IGeometryDef geometryDef = pFeatureClass.Fields.Field[num2].GeometryDef; if (geometryDef.HasZ) { ((IZAware)pGeometry).ZAware = true; if (pGeometry is IZ) { IZ igeometry0 = (IZ)pGeometry; geometryDef.SpatialReference.GetZDomain(out num, out num1); igeometry0.SetConstantZ(num); } else if (pGeometry is IPoint) { geometryDef.SpatialReference.GetZDomain(out num, out num1); (pGeometry as IPoint).Z = num; } } if (geometryDef.HasM) { ((IMAware)pGeometry).MAware = true; } IFeature feature = pFeatureClass.CreateFeature(); feature.Shape = pGeometry; try { ((IRowSubtypes)feature).InitDefaultValues(); } catch (Exception exception) { // CErrorLog.writeErrorLog(this, exception, ""); } feature.Store(); } } catch (Exception exception1) { //CErrorLog.writeErrorLog(null, exception1, ""); } }
public static RealMatrix GetIdentityMatrix(int n) { var identityMatrix = new RealMatrix(n, n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) { identityMatrix.M[i][j] = IR.New(IZ.New(1)); } } } return(identityMatrix); }
public void EraseOper() { //空间查询 ISpatialFilter tSF = new SpatialFilterClass(); tSF.Geometry = pEnvelope; tSF.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; IFeatureCursor tFeatureCursor = pFeatureClass.Search(tSF, false); IFeature tFeature = tFeatureCursor.NextFeature(); while (tFeature != null) { if (tFeature.Shape.SpatialReference != pEnvelope.SpatialReference) //sourceGeometry为被裁剪的图形 { pEnvelope.Project(tFeature.Shape.SpatialReference); } //此处应保持裁剪与被裁剪图层的空间参考一致,否则容易发生异常 switch (tFeature.Shape.GeometryType) { case esriGeometryType.esriGeometryPolygon: ITopologicalOperator tTope1 = pEnvelope as ITopologicalOperator; tTope1.Simplify(); ITopologicalOperator tTope2 = tFeature.ShapeCopy as ITopologicalOperator; tTope2.Simplify(); IGeometry tGeoDe = tTope2.Difference((IGeometry)tTope1); if (tFeature.Fields.get_Field(tFeature.Fields.FindField("Shape")).GeometryDef.HasZ) { IZAware zAware = (IZAware)tGeoDe; zAware.ZAware = true; IZ iz = (IZ)tGeoDe; iz.SetConstantZ(0); } tFeature.Shape = tGeoDe; tFeature.Store(); tFeature = tFeatureCursor.NextFeature(); break; default: break; } tFeature = tFeatureCursor.NextFeature(); } ReleaseCom(tFeatureCursor); }
/// <summary> /// Geometry中Z值和M值处理 /// </summary> /// <params name="feature"></params> /// <params name="geometry"></params> /// <params name="zValue"></params> public static void HandleZMValue(IFeature feature, IGeometry geometry, double zValue) { //先判断图层要素是否有Z值 int index; index = feature.Fields.FindField(GIS_Const.FIELD_SHAPE); IGeometryDef pGeometryDef; pGeometryDef = feature.Fields.get_Field(index).GeometryDef as IGeometryDef; IPointCollection pPointCollection = geometry as IPointCollection; if (pGeometryDef.HasZ) { IZAware pZAware = (IZAware)geometry; pZAware.ZAware = true; if (geometry.GeometryType == esriGeometryType.esriGeometryPoint) { IPoint point = (IPoint)geometry; point.Z = zValue; } else { IZ iz1 = (IZ)geometry; iz1.SetConstantZ(zValue); //将Z值设置为zValue } } else { IZAware pZAware = (IZAware)geometry; pZAware.ZAware = false; } if (pGeometryDef.HasM) { IMAware pMAware = (IMAware)geometry; pMAware.MAware = true; } else { IMAware pMAware = (IMAware)geometry; pMAware.MAware = false; } }
private void Operacje() { foreach (var wskaznik in KO) { if (wskaznik < 10) { IZ.Add(1); } else if (wskaznik >= 10 && wskaznik <= 50) { IZ.Add(2); } else { IZ.Add(3); } } }
public static IGeometry ModifyGeometryZMValue(IObjectClass featureClass, IGeometry modifiedGeometry) { IFeatureClass targetFeatureClass = featureClass as IFeatureClass; if (targetFeatureClass == null) { return(null); } string shapeFieldName = targetFeatureClass.ShapeFieldName; IFields fields = targetFeatureClass.Fields; int geometryIndex = fields.FindField(shapeFieldName); IField field = fields.get_Field(geometryIndex); IGeometryDef geometryDef = field.GeometryDef; IPointCollection pointCollection = modifiedGeometry as IPointCollection; if (geometryDef.HasZ) { IZAware zAware = modifiedGeometry as IZAware; zAware.ZAware = true; IZ iz = modifiedGeometry as IZ; //将Z值设置为0 iz.SetConstantZ(0); } else { IZAware zAware = modifiedGeometry as IZAware; zAware.ZAware = false; } if (geometryDef.HasM) { IMAware mAware = modifiedGeometry as IMAware; mAware.MAware = true; } else { IMAware mAware = modifiedGeometry as IMAware; mAware.MAware = false; } return(modifiedGeometry); }
/// <summary> /// Geometry中Z值和M值处理 /// </summary> /// <params name="feature"></params> /// <params name="geometry"></params> /// <params name="zValue"></params> public static void HandleZMValue(IFeature feature, IGeometry geometry) { //先判断图层要素是否有Z值 int index; index = feature.Fields.FindField(GIS_Const.FIELD_SHAPE); IGeometryDef pGeometryDef; pGeometryDef = feature.Fields.get_Field(index).GeometryDef as IGeometryDef; IPointCollection pPointCollection = geometry as IPointCollection; if (pGeometryDef.HasZ) { IZAware pZAware = (IZAware)geometry; pZAware.ZAware = true; if (geometry.Envelope.ZMax.ToString() == "非数字" || geometry.Envelope.ZMax.ToString() == "NaN") { IZ iz1 = (IZ)geometry; iz1.SetConstantZ(0); //将Z值设置为0 } //IPoint point = (IPoint)geometry; //point.Z = 0; } else { IZAware pZAware = (IZAware)geometry; pZAware.ZAware = false; } if (pGeometryDef.HasM) { IMAware pMAware = (IMAware)geometry; pMAware.MAware = true; } else { IMAware pMAware = (IMAware)geometry; pMAware.MAware = false; } }
public static IGeometry ModifyGeomtryZMValue(IObjectClass featureClass, IGeometry modifiedGeo) { IFeatureClass trgFtCls = featureClass as IFeatureClass; if (trgFtCls == null) { return(null); } string shapeFieldName = trgFtCls.ShapeFieldName; IFields fields = trgFtCls.Fields; int geometryIndex = fields.FindField(shapeFieldName); IField field = fields.get_Field(geometryIndex); IGeometryDef pGeometryDef = field.GeometryDef; IPointCollection pPointCollection = modifiedGeo as IPointCollection; if (pGeometryDef.HasZ) { IZAware pZAware = modifiedGeo as IZAware; pZAware.ZAware = true; IZ iz1 = modifiedGeo as IZ; //将z值设置为0 iz1.SetConstantZ(0); } else { IZAware pZAware = modifiedGeo as IZAware; pZAware.ZAware = false; } if (pGeometryDef.HasM) { IMAware pMAware = modifiedGeo as IMAware; pMAware.MAware = true; } else { IMAware pMAware = modifiedGeo as IMAware; pMAware.MAware = false; } return(modifiedGeo); }
/// <summary> /// 存储范围线 /// </summary> /// <param name="geo"></param> /// <param name="strRegionName"></param> /// <param name="fc"></param> private void SaveFanWei(IGeometry geo, string strRegionName, IFeatureClass fc) { try { int index1, index2, index3, index4; IFeature pFea; index1 = fc.FindField("REGIONNAME"); index2 = fc.FindField("SMSCODE"); index3 = fc.FindField("GEOOBJNUM"); index4 = fc.FindField("Mark"); //存储范围线 pFea = fc.CreateFeature(); pFea.set_Value(index1, strRegionName); pFea.set_Value(index2, "更新范围"); pFea.set_Value(index3, "194013"); pFea.set_Value(index4, "已导出,未导入更新"); int index = fc.FindField(fc.ShapeFieldName); IGeometryDef pGD = fc.Fields.get_Field(index).GeometryDef; if (pGD.HasZ) { IZAware pZA = geo as IZAware; pZA.ZAware = true; IZ pZ = geo as IZ; double zmin = -1000, zmax = 1000; if (pGD.SpatialReference.HasZPrecision()) { pGD.SpatialReference.GetZDomain(out zmin, out zmax); } if (pZ != null) { pZ.SetConstantZ(0); } else { IPoint p = geo as IPoint; if (p != null) { if (p.Z.ToString() == "非数字") { p.Z = 0; } } } } if (pGD.HasM) { IMAware pMA = geo as IMAware; pMA.MAware = true; } (geo as ITopologicalOperator).Simplify(); pFea.Shape = geo as IGeometry; pFea.Store(); } catch (System.Exception ex) { } }
public void CreateFeature(IGeometry igeometry_0) { try { if (igeometry_0 != null) { IFeatureLayer featureLayer = Yutai.ArcGIS.Common.Editor.Editor.CurrentEditTemplate.FeatureLayer; IDataset dataset = (IDataset)featureLayer.FeatureClass; IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)dataset.Workspace; int index = featureLayer.FeatureClass.FindField(featureLayer.FeatureClass.ShapeFieldName); IGeometryDef geometryDef = featureLayer.FeatureClass.Fields.get_Field(index).GeometryDef; if (geometryDef.HasZ) { IZAware iZAware = (IZAware)igeometry_0; iZAware.ZAware = true; IZ iZ = (IZ)igeometry_0; double constantZ; double num; geometryDef.SpatialReference.GetZDomain(out constantZ, out num); iZ.SetConstantZ(constantZ); } if (geometryDef.HasM) { IMAware iMAware = (IMAware)igeometry_0; iMAware.MAware = true; } workspaceEdit.StartEditOperation(); IFeature feature = featureLayer.FeatureClass.CreateFeature(); if (igeometry_0 is ITopologicalOperator) { (igeometry_0 as ITopologicalOperator).Simplify(); } feature.Shape = igeometry_0; try { IRowSubtypes rowSubtypes = (IRowSubtypes)feature; rowSubtypes.InitDefaultValues(); } catch (Exception exception_) { CErrorLog.writeErrorLog(this, exception_, ""); } feature.Store(); workspaceEdit.StopEditOperation(); EditorEvent.AddFeature(featureLayer, feature); IActiveView activeView = (IActiveView)_context.FocusMap; _context.FocusMap.ClearSelection(); _context.FocusMap.SelectFeature(featureLayer, feature); if (igeometry_0.GeometryType == esriGeometryType.esriGeometryPoint) { double distance = Common.ConvertPixelsToMapUnits((IActiveView)_context.FocusMap, 30.0); ITopologicalOperator topologicalOperator = (ITopologicalOperator)igeometry_0; topologicalOperator.Buffer(distance); activeView.Refresh(); } else { activeView.Refresh(); } } } catch (COMException ex) { if (ex.ErrorCode == -2147220936) { System.Windows.Forms.MessageBox.Show("坐标值或量测值超出范围!", "创建要素", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Hand); } } }
/// <summary> /// 裁切一个几何对象,不需要传出 /// </summary> /// <param name="shape"></param> /// <param name="geometryType"></param> /// <param name="ply"></param> /// <param name="geoObjNum"></param> /// <returns></returns> private bool ClipGeometry(ref IGeometry inGeometry, esriGeometryType geometryType, IPolygon clipPolygon, string GeoObjNum) { IPolycurve pPolyCurve; bool returnValue = false; IGeometry tempGeometry = null; IGeometry tempGeometry1 = null; ITopologicalOperator topologyOper = clipPolygon as ITopologicalOperator; topologyOper.Simplify(); IRelationalOperator relationOper = clipPolygon as IRelationalOperator; IZAware zIn = inGeometry as IZAware; IMAware mAware; IPoint pPoint, pPoint1; IPointCollection pPtC; ICurve pCurve; IGeometryCollection pGeoC; bool HasM = true; IHitTest pHitTest; double dblHitDist = 0; int partIndex = 0; int segmentIndex = 0; bool bRightSide = true; IPoint hitPoint = new PointClass(); //返回击中位置 IPath pPath; IPointCollection pPointC; IPoint P1, P2; switch (geometryType) { case esriGeometryType.esriGeometryPoint: //如果点包含在多边形中 if (relationOper.Contains(inGeometry)) { //tempGeometry = inGeometry; returnValue = true; } break; case esriGeometryType.esriGeometryPolyline: //'如果多义线穿越多边形或包含在多边形中 if (relationOper.Contains(inGeometry)) { returnValue = true; //tempGeometry = inGeometry; } else //if(relationOper.Crosses(inGeometry)) 2008.1.29 TianK 注释掉 解决了裁切丢数据的问题 { pPolyCurve = inGeometry as IPolycurve; pPolyCurve.Generalize(0.03); if (DIRECTIONLINE.IndexOf(GeoObjNum) != -1) //如果是有方向的线性地物 { pHitTest = (IHitTest)inGeometry; mAware = inGeometry as IMAware; ////2008.1.27TianK 修改 确保裁切后的线不反向 if (mAware.MAware == true) { HasM = true; pPtC = inGeometry as IPointCollection; for (int i = 0; i < pPtC.PointCount; i++) { pPoint = pPtC.get_Point(i); pPoint.M = i; pPtC.UpdatePoint(i, pPoint); } } else { HasM = false; mAware.MAware = true; pPtC = inGeometry as IPointCollection; for (int i = 0; i < pPtC.PointCount; i++) { pPoint = pPtC.get_Point(i); pPoint.M = i; pPtC.UpdatePoint(i, pPoint); } } tempGeometry1 = topologyOper.Intersect(inGeometry, esriGeometryDimension.esriGeometry1Dimension); tempGeometry = (inGeometry as ITopologicalOperator).Difference(tempGeometry1); ////2008.1.27TianK 修改 确保裁切后的线不反向 mAware = tempGeometry as IMAware; mAware.MAware = true; pGeoC = tempGeometry as IGeometryCollection; for (int j = 0; j < pGeoC.GeometryCount; j++) { pPtC = pGeoC.get_Geometry(j) as IPointCollection; pPoint = pPtC.get_Point(0); pPoint1 = pPtC.get_Point(pPtC.PointCount - 1); if (double.IsNaN(pPoint.M)) { if (pHitTest.HitTest(pPoint, 0.01, esriGeometryHitPartType.esriGeometryPartBoundary, hitPoint, ref dblHitDist, ref partIndex, ref segmentIndex, ref bRightSide)) //如果击中该要素 { pPath = (IPath)(inGeometry as IGeometryCollection).get_Geometry(partIndex); pPointC = (IPointCollection)pPath; //接口跳转 P1 = pPointC.get_Point(segmentIndex); P2 = pPointC.get_Point(segmentIndex + 1); AddM_P1_P2(P1, P2, ref pPoint); pPtC.UpdatePoint(0, pPoint); } } if (double.IsNaN(pPoint1.M)) { if (pHitTest.HitTest(pPoint1, 0.01, esriGeometryHitPartType.esriGeometryPartBoundary, hitPoint, ref dblHitDist, ref partIndex, ref segmentIndex, ref bRightSide)) //如果击中该要素 { pPath = (IPath)(inGeometry as IGeometryCollection).get_Geometry(partIndex); pPointC = (IPointCollection)pPath; //接口跳转 P1 = pPointC.get_Point(segmentIndex); P2 = pPointC.get_Point(segmentIndex + 1); AddM_P1_P2(P1, P2, ref pPoint1); pPtC.UpdatePoint(pPtC.PointCount - 1, pPoint1); } } pPoint = pPtC.get_Point(0); pPoint1 = pPtC.get_Point(pPtC.PointCount - 1); if (pPoint.M >= pPoint1.M) { pCurve = pGeoC.get_Geometry(j) as ICurve; pCurve.ReverseOrientation(); } if (HasM) { for (int i = 0; i < pPtC.PointCount; i++) { pPoint = pPtC.get_Point(i); pPoint.M = 0; pPtC.UpdatePoint(i, pPoint); } } else { mAware.MAware = false; } } } else { int i; IPoint p; tempGeometry1 = topologyOper.Intersect(inGeometry, esriGeometryDimension.esriGeometry1Dimension); tempGeometry = (inGeometry as ITopologicalOperator).Difference(tempGeometry1); } if (zIn.ZAware) { IZAware zOut = tempGeometry as IZAware; zOut.ZAware = zIn.ZAware; IZ iz = tempGeometry as IZ; try { iz.CalculateNonSimpleZs(); } catch { //该值应该传入,表示如果栽得的线如果不能插值出Z值赋一个默认值,或再次计算 //可以根据inGeometry计算 iz.SetConstantZ(0); } } } break; case esriGeometryType.esriGeometryMultipoint: case esriGeometryType.esriGeometryPolygon: //如果多边形与裁剪多边形相交或在裁剪多边形中 if (relationOper.Contains(inGeometry)) { //tempGeometry = inGeometry; returnValue = true; } else //if( relationOper.Overlaps(inGeometry)) 2008.1.29 TianK 注释掉 { pPolyCurve = inGeometry as IPolycurve; pPolyCurve.Generalize(0.03); tempGeometry1 = topologyOper.Intersect(inGeometry, esriGeometryDimension.esriGeometry2Dimension); tempGeometry = (inGeometry as ITopologicalOperator).Difference(tempGeometry1); if (zIn.ZAware) { IZAware zOut = tempGeometry as IZAware; zOut.ZAware = zIn.ZAware; IZ iz = tempGeometry as IZ; try { iz.CalculateNonSimpleZs(); } catch { //该值应该传入,表示如果栽得的线如果不能插值出Z值赋一个默认值,或再次计算 //可以根据inGeometry计算 iz.SetConstantZ(0); } } } break; } if (tempGeometry != null && !tempGeometry.IsEmpty) { inGeometry = tempGeometry; } return(returnValue); }
protected void wcFileManager_SelectedItemsAction(object sender, IZ.WebFileManager.SelectedItemsActionCancelEventArgs e) { //string relativePath = e.DestinationDirectory.FileManagerPath.Replace('/', '\\').TrimStart(new char[] { '\\' }); string destinationRelativePath = TrimPackageNameFromVirtualPathAndMakeRelative(this.Target, e.DestinationDirectory.FileManagerPath); switch (e.Action) { case IZ.WebFileManager.SelectedItemsAction.Copy: foreach (var selectedItem in e.SelectedItems) { string sourceFile = TrimPackageNameFromVirtualPathAndMakeRelative(this.Target, selectedItem.FileManagerPath); AutoUpdateManager.CopyFileInPackage(this.Target, Path.GetDirectoryName(sourceFile), Path.GetFileName(sourceFile), destinationRelativePath); } break; case IZ.WebFileManager.SelectedItemsAction.Delete: foreach (var selectedItem in e.SelectedItems) { if ((File.GetAttributes(selectedItem.PhysicalPath) & FileAttributes.Directory) == FileAttributes.Directory) AutoUpdateManager.DeleteFolderFromPackage(this.Target, destinationRelativePath); else AutoUpdateManager.DeleteFileFromPackage(this.Target, destinationRelativePath, Path.GetFileName(selectedItem.PhysicalPath)); } break; case IZ.WebFileManager.SelectedItemsAction.Move: foreach (var selectedItem in e.SelectedItems) { if ((File.GetAttributes(selectedItem.PhysicalPath) & FileAttributes.Directory) == FileAttributes.Directory) AutoUpdateManager.MoveFolderInPackage(this.Target, TrimPackageNameFromVirtualPathAndMakeRelative(this.Target, selectedItem.FileManagerPath), destinationRelativePath); else AutoUpdateManager.MoveFileInPackage(this.Target, TrimPackageNameFromVirtualPathAndMakeRelative(this.Target, selectedItem.FileManagerPath), Path.GetFileName(selectedItem.PhysicalPath), destinationRelativePath, Path.GetFileName(selectedItem.PhysicalPath)); } break; } }
protected void wcFileManager_FileUploading(object sender, IZ.WebFileManager.UploadFileCancelEventArgs e) { }
protected void wcFileManager_SelectedItemsActionComplete(object sender, IZ.WebFileManager.SelectedItemsActionEventArgs e) { }
protected void wcFileManager_ItemRenamed(object sender, IZ.WebFileManager.RenameEventArgs e) { }
public static void CreateFeature(IGeometry pGeometry, IActiveView pActiveView, IFeatureLayer pFeatureLayer, bool IsClearSelection) { double num; double num1; Exception exception; if (pGeometry != null && !pGeometry.IsEmpty) { IEnvelope envelope = pGeometry.Envelope; envelope.Expand(10, 10, false); try { pGeometry.SpatialReference = pActiveView.FocusMap.SpatialReference; int num2 = pFeatureLayer.FeatureClass.FindField(pFeatureLayer.FeatureClass.ShapeFieldName); IGeometryDef geometryDef = pFeatureLayer.FeatureClass.Fields.Field[num2].GeometryDef; if (geometryDef.HasZ) { ((IZAware)pGeometry).ZAware = true; if (pGeometry is IZ) { IZ igeometry0 = (IZ)pGeometry; geometryDef.SpatialReference.GetZDomain(out num, out num1); igeometry0.SetConstantZ(num); } else if (pGeometry is IPoint) { geometryDef.SpatialReference.GetZDomain(out num, out num1); (pGeometry as IPoint).Z = num; } } if (geometryDef.HasM) { ((IMAware)pGeometry).MAware = true; } IWorkspaceEdit workspace = (IWorkspaceEdit)((IDataset)pFeatureLayer.FeatureClass).Workspace; workspace.StartEditOperation(); IFeature feature = pFeatureLayer.FeatureClass.CreateFeature(); feature.Shape = pGeometry; try { ((IRowSubtypes)feature).InitDefaultValues(); } catch (Exception exception1) { exception = exception1; Logger.Current.Error(exception.Message); } if (Editor.CurrentEditTemplate != null) { Editor.CurrentEditTemplate.SetFeatureValue(feature); } EditorEvent.NewRow(feature); feature.Store(); workspace.StopEditOperation(); EditorEvent.AfterNewRow(feature); if (IsClearSelection) { if (pActiveView.FocusMap.SelectionCount > 0) { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); pActiveView.FocusMap.ClearSelection(); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); } } pActiveView.FocusMap.SelectFeature(pFeatureLayer, feature); if (pGeometry.GeometryType != esriGeometryType.esriGeometryPoint) { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, envelope); } else { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, envelope); } if (pFeatureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint) { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, envelope); } } catch (COMException cOMException1) { COMException cOMException = cOMException1; if (cOMException.ErrorCode != -2147220936) { MessageBox.Show(cOMException.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Hand); } else { MessageBox.Show("几何坐标超出边界!", "", MessageBoxButtons.OK, MessageBoxIcon.Hand); } if (pGeometry.GeometryType != esriGeometryType.esriGeometryPoint) { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, envelope); } else { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, null); } Logger.Current.Error("", cOMException, null); } catch (Exception exception2) { exception = exception2; Logger.Current.Error("", exception, null); if (pGeometry.GeometryType != esriGeometryType.esriGeometryPoint) { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, envelope); } else { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, null); } MessageBox.Show(exception.Message); } } }
protected void wcFileManager_ItemRenaming(object sender, IZ.WebFileManager.RenameCancelEventArgs e) { string relativeDirectory = Path.GetDirectoryName(TrimPackageNameFromVirtualPathAndMakeRelative(this.Target, e.FileManagerItem.FileManagerPath)); AutoUpdateManager.RenameFileInPackage(this.Target, relativeDirectory, Path.GetFileName(e.FileManagerItem.PhysicalPath), e.NewName); }
///<summary>在地图上绘制指定颜色的图形</summary> ///<param name="scene">地图</param> ///<param name="geometry">feature 的shape</param> ///<param name="rgbColor">颜色</param> ///<param name="outlineRgbColor">边框颜色</param> ///<param name="OffsetZs">Z偏值</param> /// ///<remarks>Calling this function will not automatically make the graphics appear in the map area. Refresh the map area after after calling this function with Methods like IActiveView.Refresh or IActiveView.PartialRefresh.</remarks> internal static IElement AddGraphicToScene(IScene scene, ESRI.ArcGIS.Geometry.IGeometry geometry, ESRI.ArcGIS.Display.IRgbColor rgbColor, ESRI.ArcGIS.Display.IRgbColor outlineRgbColor, double OffsetZs) { //ESRI.ArcGIS.Carto.IGraphicsContainer graphicsContainer = (ESRI.ArcGIS.Carto.IGraphicsContainer)map; //IGraphicsContainer接口能删除 IGraphicsContainer3D graphicsContainer3D = (IGraphicsContainer3D)scene.BasicGraphicsLayer; ESRI.ArcGIS.Carto.IElement element = null; if ((geometry.GeometryType) == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint) { IPoint point = (Point)geometry; try { double X = point.X; double Y = point.Y; } catch { return(null); } point = GeometryUtilities.ConstructPoint3D(point, OffsetZs); // Marker symbols ESRI.ArcGIS.Display.ISimpleMarkerSymbol simpleMarkerSymbol = new ESRI.ArcGIS.Display.SimpleMarkerSymbolClass(); simpleMarkerSymbol.Color = rgbColor; simpleMarkerSymbol.Outline = true; simpleMarkerSymbol.OutlineColor = rgbColor; simpleMarkerSymbol.Size = 12; simpleMarkerSymbol.Style = ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSCircle; ESRI.ArcGIS.Carto.IMarkerElement markerElement = new ESRI.ArcGIS.Carto.MarkerElementClass(); markerElement.Symbol = simpleMarkerSymbol; element = (ESRI.ArcGIS.Carto.IElement)markerElement; // Explicit Cast if (!(element == null)) { element.Geometry = point; graphicsContainer3D.AddElement(element); } } else if ((geometry.GeometryType) == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline) { // Marker symbols ESRI.ArcGIS.Display.ISimpleLineSymbol simpleLineSymbol = new ESRI.ArcGIS.Display.SimpleLineSymbolClass(); simpleLineSymbol.Color = rgbColor; simpleLineSymbol.Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; simpleLineSymbol.Width = 1; ESRI.ArcGIS.Carto.ILineElement lineElement = new ESRI.ArcGIS.Carto.LineElementClass(); lineElement.Symbol = simpleLineSymbol; element = (ESRI.ArcGIS.Carto.IElement)lineElement; // Explicit Cast if (!(element == null)) { element.Geometry = geometry; graphicsContainer3D.AddElement(element); } } else if ((geometry.GeometryType) == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) { IZ iz = (IZ)geometry; iz.OffsetZs(OffsetZs);//z值向上偏移 // Polygon elements ESRI.ArcGIS.Display.ISimpleFillSymbol simpleFillSymbol = new ESRI.ArcGIS.Display.SimpleFillSymbolClass(); simpleFillSymbol.Color = rgbColor; simpleFillSymbol.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSForwardDiagonal; ESRI.ArcGIS.Carto.IFillShapeElement fillShapeElement = new ESRI.ArcGIS.Carto.PolygonElementClass(); fillShapeElement.Symbol = simpleFillSymbol; element = (ESRI.ArcGIS.Carto.IElement)fillShapeElement; // Explicit Cast if (!(element == null)) { element.Geometry = geometry; graphicsContainer3D.AddElement(element); } } return(element); }
//合并要素 private void UnionFeatures(IEnumFeature selectedFeatures, IFeature pMergeFeature) { try { IFeature feature = null; object missing = Type.Missing; selectedFeatures.Reset(); feature = selectedFeatures.Next(); if (feature == null) { return; } IFeatureClass featureClass = feature.Class as IFeatureClass; switch (featureClass.ShapeType) { case esriGeometryType.esriGeometryPolyline: case esriGeometryType.esriGeometryPolygon: break; default: MessageBox.Show("请选择线或者面要素", "提示"); return; } IGeometryCollection geometries = new GeometryBagClass(); IDataset dataset = featureClass as IDataset; IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit; while (feature != null) { if (!feature.ShapeCopy.IsEmpty) { IGeometry pGeometry = feature.ShapeCopy; IGeometryCollection pGeometryCollection = pGeometry as IGeometryCollection; int geomCount = pGeometryCollection.GeometryCount; if (geomCount > 1) { for (int k = 0; k < geomCount; k++) { IFeature newFeature = (feature.Class as IFeatureClass).CreateFeature(); IFeatureEdit featureEdit = feature as IFeatureEdit; featureEdit.SplitAttributes(newFeature); IGeometry newGeom = pGeometryCollection.Geometry[k]; if (feature.ShapeCopy.GeometryType == esriGeometryType.esriGeometryPolygon) { IGeometryCollection polyGonC = new PolygonClass(); polyGonC.AddGeometry(newGeom as IGeometry); IGeometry pGeoNew2 = polyGonC as IGeometry; pGeoNew2.SpatialReference = feature.ShapeCopy.SpatialReference; int index = feature.Fields.FindField("Shape"); IGeometryDef pGeometryDef = pGeometryDef = feature.Fields.get_Field(index).GeometryDef as IGeometryDef; if (pGeometryDef.HasZ) { IZAware pZAware = (IZAware)pGeoNew2; pZAware.ZAware = true; IZ iz1 = (IZ)pGeoNew2; iz1.SetConstantZ(0); //将Z值设置为0 } else { IZAware pZAware = (IZAware)pGeoNew2; pZAware.ZAware = false; } if (pGeometryDef.HasM) { IMAware pMAware = (IMAware)pGeoNew2; pMAware.MAware = true; } else { IMAware pMAware = (IMAware)pGeoNew2; pMAware.MAware = false; } newFeature.Shape = pGeoNew2; } if (feature.ShapeCopy.GeometryType == esriGeometryType.esriGeometryPolyline) { IGeometryCollection polyGonC = new PolylineClass(); polyGonC.AddGeometry(newGeom as IGeometry); IGeometry pGeoNew2 = polyGonC as IGeometry; pGeoNew2.SpatialReference = feature.ShapeCopy.SpatialReference; int index = feature.Fields.FindField("Shape"); IGeometryDef pGeometryDef = pGeometryDef = feature.Fields.get_Field(index).GeometryDef as IGeometryDef; if (pGeometryDef.HasZ) { IZAware pZAware = (IZAware)pGeoNew2; pZAware.ZAware = true; IZ iz1 = (IZ)pGeoNew2; iz1.SetConstantZ(0); //将Z值设置为0 } else { IZAware pZAware = (IZAware)pGeoNew2; pZAware.ZAware = false; } if (pGeometryDef.HasM) { IMAware pMAware = (IMAware)pGeoNew2; pMAware.MAware = true; } else { IMAware pMAware = (IMAware)pGeoNew2; pMAware.MAware = false; } newFeature.Shape = pGeoNew2; } newFeature.Store(); } feature.Delete(); } } feature = selectedFeatures.Next(); } workspaceEdit.StopEditOperation(); selectedFeatures.Reset(); //如果没有IWorkspaceEdit则无法进行撤销重做操作 } catch (Exception ex) { //SysLogHelper.WriteOperationLog("要素合并错误", ex.Source, "数据编辑"); MessageBox.Show(ex.Message); } }
protected void wcFileManager_NewFolderCreating(object sender, IZ.WebFileManager.NewFolderCancelEventArgs e) { }
public DaneWalkaDoTabel GetDataToTable() { var list = new List <object> { Srednica, SRC, Dlugosc, DLC, MaterialPn, GestoscMaterialu, Stopnie, S, O, MPO, MPF, MW, TPF, DSR, SRPF, DLPF, QRG, QMT, QFN, QLRG, QLMT }; var atname = new List <string> { "Średnica [mm]", "Średnica PF [mm]", "Długość [mm]", "Długość PF [mm]", "Materiał", "Gęstość materiału [kg/m3]", nameof(Stopnie), "S ", "O [%]", "mPO [kg]", "mPF [kg]", "mW [kg]", "TPF [μm]", "dśr [mm]", "SRPF [mm]", "DLPF [mm]", "Qzgr [mm]", "Qkszt [mm]", "Qwyk [mm]", "QPLzgr [mm]", "QPKksz [mm]" }; var stopienWalu = new List <int>(); for (int i = 0; i < Stopnie; i++) { stopienWalu.Add(i + 1); } var listList = new List <object[]> { stopienWalu.Cast <object>().ToArray(), DlugoscStopnia.Cast <object>().ToArray(), SrednicaStopnia.Cast <object>().ToArray(), KlasaTolerancji.Cast <object>().ToArray(), TPO.Cast <object>().ToArray(), KO.Cast <object>().ToArray(), IZ.Cast <object>().ToArray(), DFN.Cast <object>().ToArray(), DMT.Cast <object>().ToArray(), DRG.Cast <object>().ToArray(), APMAX.Cast <object>().ToArray() }; var listname = new List <string> { "Stopień wału", "Długość stopnia [mm]", "Średnica stopnia [mm]", "Klasa Tolerancji", "TPO [μm]", "Ko", nameof(IZ), "Di Wyk [mm]", "Di Kszt [mm]", "Di Zgr [mm]", "apmax [mm]" }; var naddatki = new List <List <object> > { new List <object> { "Wykańczający", "Kształtujący", "Zgrubny" }, new List <object> { QFND, QMTD, QRGD }, new List <object> { QFN, QMT, QRG } }; var naddatkiNames = new List <string> { "Rodzaj naddatku", "Naddatki dobrane [mm]", "Naddatki do obliczeń [mm]" }; return(new DaneWalkaDoTabel { AtributeValue = list, ListValue = listList, AtributeName = atname, ListName = listname, NaddatkiValues = naddatki, NaddatkiNames = naddatkiNames, ImageWalek = Image }); }
public A0( IZ z ) { Z = z; }
/// <summary> /// 创建地理要素 /// </summary> /// <param name="pGeom"></param> /// <param name="pMap"></param> /// <param name="pCurrentLayer"></param> public static void CreateFeature(IGeometry pGeom, IMap pMap, IFeatureClass pFeatureClass) { if (pGeom != null) { IDataset pDataset; IWorkspaceEdit pWorkspaceEdit; if (pFeatureClass == null) { return; } pDataset = (IDataset)pFeatureClass; pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace; int index = pFeatureClass.FindField(pFeatureClass.ShapeFieldName); IGeometryDef pGD = pFeatureClass.Fields.get_Field(index).GeometryDef; if (pGD.HasZ) { IZAware pZA = (IZAware)pGeom; pZA.ZAware = true; IZ pZ = pGeom as IZ; double zmin = -1000, zmax = 1000; if (pGD.SpatialReference.HasZPrecision()) { pGD.SpatialReference.GetZDomain(out zmin, out zmax); } if (pZ != null) { //pZ.SetConstantZ(zmin); pZ.SetConstantZ(0); } else { IPoint p = (pGeom as IPoint); if (p != null) { if (p.Z.ToString() == "非数字") { //p.Z = zmin; p.Z = 0; } } } } if (pGD.HasM) { IMAware pMA = (IMAware)pGeom; pMA.MAware = true; } if (!pWorkspaceEdit.IsBeingEdited()) { pWorkspaceEdit.StartEditing(true); pWorkspaceEdit.StartEditOperation(); } IFeature pFeature; pFeature = pFeatureClass.CreateFeature(); try { pFeature.Shape = pGeom; pFeature.Store(); } catch (System.Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } if (pWorkspaceEdit.IsBeingEdited()) { pWorkspaceEdit.StopEditOperation(); pWorkspaceEdit.StopEditing(true); } pMap.ClearSelection(); //清除所有选择 } }