public InverseDirectionDLG(IEditProperties2 EditorProperties) { InitializeComponent(); m_ToolTip1 = new System.Windows.Forms.ToolTip(); m_EditorProperties = EditorProperties; Utilities Utils = new Utilities(); string sDesktopVers = Utils.GetDesktopVersionFromRegistry(); if (sDesktopVers.Trim() == "") { sDesktopVers = "Desktop10.1"; } else { sDesktopVers = "Desktop" + sDesktopVers; } string sValues = Utils.ReadFromRegistry(RegistryHive.CurrentUser, "Software\\ESRI\\" + sDesktopVers + "\\ArcMap\\Cadastral", "AddIn.FabricQualityControl_InverseDirection"); IAngularConverter pAngConv = new AngularConverterClass(); if (m_EditorProperties != null) { esriDirectionUnits pUnits = m_EditorProperties.DirectionUnits; string sAngleUnits = pUnits.ToString(); sAngleUnits = sAngleUnits.Replace("esriDU", ""); sAngleUnits = sAngleUnits.Replace("Minutes", " Minutes "); sAngleUnits = sAngleUnits.Replace("Decimal", "Decimal "); this.lblAngleUnits.Text = sAngleUnits; } if (sValues.Trim() == "") { sValues = "False,0.000000,True,True,180,True,0.3,True"; } string[] Values = sValues.Split(','); try { string sTxt1 = Values[1]; if (m_EditorProperties != null) { int iPrec = m_EditorProperties.AngularUnitPrecision; pAngConv.SetString(Values[1], esriDirectionType.esriDTNorthAzimuth, esriDirectionUnits.esriDUDecimalDegrees); //registry always stores in DD sTxt1 = pAngConv.GetString(esriDirectionType.esriDTNorthAzimuth, m_EditorProperties.DirectionUnits, m_EditorProperties.AngularUnitPrecision); } this.optManualEnteredDirnOffset.Checked = (Values[0].Trim() == "True"); this.txtDirectionOffset.Text = sTxt1; this.optComputeDirnOffset.Checked = (Values[2].Trim() == "True"); this.chkDirectionDifference.Checked = (Values[3].Trim() == "True"); this.txtDirectionDifference.Text = Values[4]; this.chkSubtendedDistance.Checked = (Values[5].Trim() == "True"); this.txtSubtendedDist.Text = Values[6]; this.chkReportResults.Checked = (Values[7].Trim() == "True"); } catch { } }
public InverseDirectionDLG(IEditProperties2 EditorProperties) { InitializeComponent(); m_ToolTip1 = new System.Windows.Forms.ToolTip(); m_EditorProperties = EditorProperties; Utilities Utils = new Utilities(); string sDesktopVers = Utils.GetDesktopVersionFromRegistry(); if (sDesktopVers.Trim() == "") sDesktopVers = "Desktop10.1"; else sDesktopVers = "Desktop" + sDesktopVers; string sValues = Utils.ReadFromRegistry(RegistryHive.CurrentUser, "Software\\ESRI\\" + sDesktopVers + "\\ArcMap\\Cadastral", "AddIn.FabricQualityControl_InverseDirection"); IAngularConverter pAngConv = new AngularConverterClass(); if (m_EditorProperties != null) { esriDirectionUnits pUnits = m_EditorProperties.DirectionUnits; string sAngleUnits = pUnits.ToString(); sAngleUnits = sAngleUnits.Replace("esriDU", ""); sAngleUnits = sAngleUnits.Replace("Minutes", " Minutes "); sAngleUnits = sAngleUnits.Replace("Decimal", "Decimal "); this.lblAngleUnits.Text = sAngleUnits; } if (sValues.Trim() == "") sValues = "False,0.000000,True,True,180,True,0.3,True"; string[] Values = sValues.Split(','); try { string sTxt1 = Values[1]; if (m_EditorProperties != null) { int iPrec = m_EditorProperties.AngularUnitPrecision; pAngConv.SetString(Values[1], esriDirectionType.esriDTNorthAzimuth, esriDirectionUnits.esriDUDecimalDegrees); //registry always stores in DD sTxt1 = pAngConv.GetString(esriDirectionType.esriDTNorthAzimuth, m_EditorProperties.DirectionUnits, m_EditorProperties.AngularUnitPrecision); } this.optManualEnteredDirnOffset.Checked = (Values[0].Trim() == "True"); this.txtDirectionOffset.Text = sTxt1; this.optComputeDirnOffset.Checked = (Values[2].Trim() == "True"); this.chkDirectionDifference.Checked = (Values[3].Trim() == "True"); this.txtDirectionDifference.Text = Values[4]; this.chkSubtendedDistance.Checked = (Values[5].Trim() == "True"); this.txtSubtendedDist.Text = Values[6]; this.chkReportResults.Checked = (Values[7].Trim() == "True"); } catch { } }
object OnGridCellEdit(ref int row, ref int col, ref object inValue) { string m_sFieldName = m_ParcelEditHelperExt.FieldName; bool m_bRecordFieldName = m_ParcelEditHelperExt.RecordToField; object OutValue = inValue; if (col == 2 && m_bRecordFieldName)//this is the bearing field { IParcelConstruction pTrav = (IParcelConstruction)m_pParcEditorMan.ParcelConstruction; IGSLine pGSLine = null; bool IsCompleteLine = (pTrav.GetLine(row, ref pGSLine)); //true means it's a complete line //false means it's a partial line //note that the type of the inValue must be honoured when returning the value from this function, in this case we are rebuilding the string for the same value, unaltered. //however the other relevant work done is to set the record field to the same value to capture what was entered prior to resequencing and potential bearing changes. //this happens either for a complete line or a partial one //The logic could be changed to be more conservative and only capture the record for a partial line (IsCompleteLine==false), since that would only record the first time it's cogo'd, //compared to this code that records edits of completed lines *as well as* partial lines IAngularConverter pAngConv = new AngularConverterClass(); string sBear = Convert.ToString(inValue); sBear = sBear.Replace("°", "-"); sBear = sBear.Replace("'", "-"); sBear = sBear.Replace("\"", ""); if (!pAngConv.SetString(sBear, esriDirectionType.esriDTQuadrantBearing, esriDirectionUnits.esriDUDegreesMinutesSeconds)) //TODO: base this on Plan properties { return(OutValue); } double brgRecord = pAngConv.GetAngle(esriDirectionType.esriDTNorthAzimuth, esriDirectionUnits.esriDUDecimalDegrees); sBear = pAngConv.GetString(esriDirectionType.esriDTQuadrantBearing, esriDirectionUnits.esriDUDegreesMinutesSeconds, 0); IParcelConstruction4 pTrav4 = pTrav as IParcelConstruction4; pTrav4.UpdateGridFromGSLines(true, false); sBear = sBear.Replace(" ", ""); sBear = sBear.Insert(sBear.Length - 1, "\""); int i = sBear.LastIndexOf('-'); sBear = sBear.Insert(i, "'"); i = sBear.IndexOf('-'); sBear = sBear.Insert(i, "°"); sBear = sBear.Replace("-", ""); IGSAttributes pLineAtts = (IGSAttributes)pGSLine; pLineAtts.SetProperty(m_sFieldName, sBear); return(sBear); //note that the type of the inValue must be honoured when returning the value from this function. } return(OutValue); }
private void button1_Click(object sender, EventArgs e) { //write the key Utilities Utils = new Utilities(); string sDesktopVers = Utils.GetDesktopVersionFromRegistry(); if (sDesktopVers.Trim() == "") { sDesktopVers = "Desktop10.1"; } else { sDesktopVers = "Desktop" + sDesktopVers; } string sBool0 = this.optManualEnteredDirnOffset.Checked.ToString(); string sTxt1 = this.txtDirectionOffset.Text; IAngularConverter pAngConv = new AngularConverterClass(); if (!pAngConv.SetString(sTxt1, esriDirectionType.esriDTNorthAzimuth, m_EditorProperties.DirectionUnits)) { sTxt1 = "0"; } else { sTxt1 = pAngConv.GetString(esriDirectionType.esriDTNorthAzimuth, esriDirectionUnits.esriDUDecimalDegrees, 6);//always write as decimal deg } string sBool2 = this.optComputeDirnOffset.Checked.ToString(); string sBool3 = this.chkDirectionDifference.Checked.ToString(); string sTxt4 = this.txtDirectionDifference.Text; string sBool5 = this.chkSubtendedDistance.Checked.ToString(); string sTxt6 = this.txtSubtendedDist.Text; string sBool7 = this.chkReportResults.Checked.ToString(); Utils.WriteToRegistry(RegistryHive.CurrentUser, "Software\\ESRI\\" + sDesktopVers + "\\ArcMap\\Cadastral", "AddIn.FabricQualityControl_InverseDirection", sBool0 + "," + sTxt1 + "," + sBool2 + "," + sBool3 + "," + sTxt4 + "," + sBool5 + "," + sTxt6 + "," + sBool7); }
private void button1_Click(object sender, EventArgs e) { //write the key Utilities Utils = new Utilities(); string sDesktopVers = Utils.GetDesktopVersionFromRegistry(); if (sDesktopVers.Trim() == "") sDesktopVers = "Desktop10.1"; else sDesktopVers = "Desktop" + sDesktopVers; string sBool0 = this.optManualEnteredDirnOffset.Checked.ToString(); string sTxt1 = this.txtDirectionOffset.Text; IAngularConverter pAngConv = new AngularConverterClass(); if (!pAngConv.SetString(sTxt1, esriDirectionType.esriDTNorthAzimuth, m_EditorProperties.DirectionUnits)) sTxt1 = "0"; else sTxt1 = pAngConv.GetString(esriDirectionType.esriDTNorthAzimuth, esriDirectionUnits.esriDUDecimalDegrees, 6);//always write as decimal deg string sBool2 = this.optComputeDirnOffset.Checked.ToString(); string sBool3 = this.chkDirectionDifference.Checked.ToString(); string sTxt4 = this.txtDirectionDifference.Text; string sBool5 = this.chkSubtendedDistance.Checked.ToString(); string sTxt6 = this.txtSubtendedDist.Text; string sBool7 = this.chkReportResults.Checked.ToString(); Utils.WriteToRegistry(RegistryHive.CurrentUser, "Software\\ESRI\\" + sDesktopVers + "\\ArcMap\\Cadastral", "AddIn.FabricQualityControl_InverseDirection", sBool0 + "," + sTxt1 + "," + sBool2 + "," + sBool3 + "," + sTxt4 + "," + sBool5 + "," + sTxt6 + "," + sBool7); }
private double AnglularDefaultUnitsToRadians(string inUnits) { try { IAngularConverter pAngularConverter = new AngularConverterClass(); pAngularConverter.SetString(inUnits,m_pEditProp2.DirectionType,m_pEditProp2.DirectionUnits); return pAngularConverter.GetAngle(esriDirectionType.esriDTPolar,esriDirectionUnits.esriDURadians); } catch { return double.NaN; } }
protected override void OnClick() { IEditor pEd = (IEditor)ArcMap.Editor; IEditor2 pEd2 = (IEditor2)ArcMap.Editor; IEditProperties pEdProps1 = pEd as IEditProperties; IEditProperties2 pEdProps2 = pEd as IEditProperties2; IEditSketch2 pSketch2 = ArcMap.Editor as IEditSketch2; ISegmentCollection pSegColl = pSketch2.Geometry as ISegmentCollection; double dLineDirection = 0; ISketchTool sketchTool = ArcMap.Application.CurrentTool.Command as ISketchTool; if (sketchTool.Constraint == esriSketchConstraint.esriConstraintAngle) { dLineDirection = sketchTool.AngleConstraint; } else { ILine pRubberBandLine = new LineClass(); pRubberBandLine.PutCoords(pSketch2.LastPoint, pEd2.Location); dLineDirection = pRubberBandLine.Angle; } IAngularConverter pAngConv = new AngularConverterClass(); pAngConv.SetAngle(dLineDirection, esriDirectionType.esriDTPolar, esriDirectionUnits.esriDURadians); int iSegCnt = pSegColl.SegmentCount; dlgSpiralParameters SpiralEntryDialog = new dlgSpiralParameters(); string sBearing = pAngConv.GetString(pEdProps2.DirectionType, pEdProps2.DirectionUnits, pEdProps2.AngularUnitPrecision); SpiralEntryDialog.txtDirection.Text = sBearing; //Display the dialog DialogResult pDialogResult = SpiralEntryDialog.ShowDialog(); esriCurveDensifyMethod DensifyMethod = esriCurveDensifyMethod.esriCurveDensifyByAngle; //default double dDensifyParameter = 2 * Math.PI / 180; //2 degrees //default if (SpiralEntryDialog.optCustomDensification.Checked) { DensifyMethod = (esriCurveDensifyMethod)SpiralEntryDialog.cboDensificationType.SelectedIndex; if (DensifyMethod == esriCurveDensifyMethod.esriCurveDensifyByAngle) { dDensifyParameter = Convert.ToDouble(SpiralEntryDialog.numAngleDensification.Value) * Math.PI / 180; } else { if (!Double.TryParse(SpiralEntryDialog.txtDensifyValue.Text, out dDensifyParameter)) { dDensifyParameter = 2; } } } if (pDialogResult != DialogResult.OK) { return; } if (SpiralEntryDialog.txtStartRadius.Text.ToLower().Trim() == "infinity" && SpiralEntryDialog.txtEndRadius.Text.ToLower().Trim() == "infinity") { return; } double dSpiralRadius1 = Double.MaxValue; //default to infinity double dFromCurvature = 0; if (SpiralEntryDialog.txtStartRadius.Text.ToLower() != "infinity") { if (Double.TryParse(SpiralEntryDialog.txtStartRadius.Text, out dSpiralRadius1)) { dFromCurvature = 1 / dSpiralRadius1; } else { return; } } double dSpiralRadius2 = Double.MaxValue; //default to infinity double dToCurvature = 0; if (SpiralEntryDialog.txtEndRadius.Text.ToLower() != "infinity") { if (Double.TryParse(SpiralEntryDialog.txtEndRadius.Text, out dSpiralRadius2)) { dToCurvature = 1 / dSpiralRadius2; } else { return; } } bool bIsCCW = (dSpiralRadius1 > dSpiralRadius2) ? SpiralEntryDialog.optRight.Checked : SpiralEntryDialog.optLeft.Checked; bool bSpecialCaseCircularArc = (dSpiralRadius1 == dSpiralRadius2); if (!pAngConv.SetString(SpiralEntryDialog.txtDirection.Text, pEdProps2.DirectionType, pEdProps2.DirectionUnits)) { return; } double dNorthAzimuthRadians = pAngConv.GetAngle(esriDirectionType.esriDTNorthAzimuth, esriDirectionUnits.esriDURadians); IVector3D pVec = new Vector3DClass(); pVec.PolarSet(dNorthAzimuthRadians, 0, 500); IPoint pTangentPoint = new PointClass(); pTangentPoint.PutCoords(pSketch2.LastPoint.X + pVec.XComponent, pSketch2.LastPoint.Y + pVec.YComponent); //double dStreamingTol = pEdProps1.StreamTolerance; //if (dStreamingTol == 0) // dStreamingTol = 0.001 * 5000; //metric //double dSpiralOffsetGeometryPrecision = 0.001 * 250; //metric 0.25 m IPolyline6 theSpiralPolyLine = null; double dExitTangent = 0; if (SpiralEntryDialog.cboPathLengthParameter.SelectedIndex == 0) { double dSpiralArcLength; if (!Double.TryParse(SpiralEntryDialog.txtPathLengthParameter.Text, out dSpiralArcLength)) { return; } if (bSpecialCaseCircularArc) { ILine pInTangentLine = new LineClass(); pInTangentLine.PutCoords(pSketch2.LastPoint, pTangentPoint); ISegment pTangentSegment = (ISegment)pInTangentLine; IConstructCircularArc2 pCircArcConstr = new ESRI.ArcGIS.Geometry.CircularArcClass() as IConstructCircularArc2; pCircArcConstr.ConstructTangentRadiusArc(pTangentSegment, false, bIsCCW, dSpiralRadius1, dSpiralArcLength); ICircularArc pArcSegment = pCircArcConstr as ICircularArc; //Get chord Line from tangent curve constructor ILine pChordLine = new LineClass(); pChordLine.PutCoords(pArcSegment.FromPoint, pArcSegment.ToPoint); double dPolarRadians = pChordLine.Angle; //to get the chord azimuth pCircArcConstr.ConstructBearingRadiusArc(pSketch2.LastPoint, dPolarRadians, bIsCCW, dSpiralRadius1, dSpiralArcLength); dExitTangent = pArcSegment.ToAngle + Math.PI / 2; ISegmentCollection segCollection = new PolylineClass() as ISegmentCollection; object obj = Type.Missing; segCollection.AddSegment((ISegment)pArcSegment, ref obj, ref obj); theSpiralPolyLine = segCollection as IPolyline6; } else { theSpiralPolyLine = ConstructSpiralbyLength(pSketch2.LastPoint, pTangentPoint, dFromCurvature, dToCurvature, bIsCCW, dSpiralArcLength, DensifyMethod, dDensifyParameter, out dExitTangent); } } if (SpiralEntryDialog.cboPathLengthParameter.SelectedIndex == 1) { if (!pAngConv.SetString(SpiralEntryDialog.txtPathLengthParameter.Text, esriDirectionType.esriDTPolar, pEdProps2.DirectionUnits)) { return; } double dSpiralDeltaAngle = pAngConv.GetAngle(esriDirectionType.esriDTPolar, esriDirectionUnits.esriDURadians); if (bSpecialCaseCircularArc) { ILine pInTangentLine = new LineClass(); pInTangentLine.PutCoords(pSketch2.LastPoint, pTangentPoint); ISegment pTangentSegment = (ISegment)pInTangentLine; IConstructCircularArc2 pCircArcConstr = new ESRI.ArcGIS.Geometry.CircularArcClass() as IConstructCircularArc2; pCircArcConstr.ConstructTangentRadiusAngle(pTangentSegment, false, bIsCCW, dSpiralRadius1, dSpiralDeltaAngle); ICircularArc pArcSegment = pCircArcConstr as ICircularArc; //Get chord Line from tangent curve constructor ILine pChordLine = new LineClass(); pChordLine.PutCoords(pArcSegment.FromPoint, pArcSegment.ToPoint); double dPolarRadians = pChordLine.Angle; //to get the chord azimuth pCircArcConstr.ConstructBearingRadiusAngle(pSketch2.LastPoint, dPolarRadians, bIsCCW, dSpiralRadius1, dSpiralDeltaAngle); dExitTangent = pArcSegment.ToAngle + Math.PI / 2; ISegmentCollection segCollection = new PolylineClass() as ISegmentCollection; object obj = Type.Missing; segCollection.AddSegment((ISegment)pArcSegment, ref obj, ref obj); theSpiralPolyLine = segCollection as IPolyline6; } else { theSpiralPolyLine = ConstructSpiralbyDeltaAngle(pSketch2.LastPoint, pTangentPoint, dFromCurvature, dToCurvature, bIsCCW, dSpiralDeltaAngle, DensifyMethod, dDensifyParameter, out dExitTangent); } } if (theSpiralPolyLine == null) { MessageBox.Show("A spiral could not be created with the entered parameters."); return; } ISegmentCollection pSpiralSegCollection = theSpiralPolyLine as ISegmentCollection; //Start a sketch operation and insert the new envelope into the sketch ISketchOperation2 sketchOp = new SketchOperationClass(); sketchOp.Start(ArcMap.Editor); sketchOp.MenuString = "Add Spiral"; pSegColl.AddSegmentCollection(pSpiralSegCollection); IGeometry geom = pSegColl as IGeometry; pSketch2.Geometry = geom; //set the angle constraint to the exit tangent of the spiral sketchTool.Constraint = esriSketchConstraint.esriConstraintAngle; sketchTool.AngleConstraint = dExitTangent; sketchOp.Finish(ArcMap.Document.ActiveView.Extent, esriSketchOperationType.esriSketchOperationGeneral, null); }