private ISTGeometry ConvertDBObject(AcadObject pAcadObject) { ISTPointCollection pSTPointCollection = new STPolygonClass(); AcadLWPolyline Adlwp = (AcadLWPolyline)pAcadObject; double[] AdlwpPoint = (double[])Adlwp.Coordinates; int PointCount = AdlwpPoint.Length / 2; for (int j = 0; j < PointCount - 1; j++) { ISTPoint fromPoint = new STPointClass(); fromPoint.X = AdlwpPoint[j * 2]; fromPoint.Y = AdlwpPoint[j * 2 + 1]; ISTPoint toPoint = new STPointClass(); toPoint.X = AdlwpPoint[j * 2 + 2]; toPoint.Y = AdlwpPoint[j * 2 + 3]; if (Adlwp.GetBulge(j) != 0) //添加弧线转折现处理代码 { double Angle = Math.Atan(Adlwp.GetBulge(j)) * 4; string url = HR.Utility.CommonVariables.GetAppSetString("ConvertArcToPolyline"); string data = string.Format("Angle={0}&FromPointX={1}&FromPointY={2}&ToPointX={3}&ToPointY={4}&f=json" , Angle, fromPoint.X, fromPoint.Y, toPoint.X, toPoint.Y); string Request = PostData(url, data); if (Request.Contains("error")) { throw new Exception("调用曲线转折线服务异常"); } XmlNode pPointNode = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(Request); string[] XYs = pPointNode.FirstChild.InnerText.TrimEnd().Split(';'); foreach (string XY in XYs) { string[] pXY = XY.Split(','); ISTPoint pPoint = new STPointClass(); try { pPoint.X = double.Parse(pXY[0]); pPoint.Y = double.Parse(pXY[1]); pSTPointCollection.AddPoint(pPoint); } catch { continue; } } } else { pSTPointCollection.AddPoint(fromPoint); } if (j == PointCount - 2) { pSTPointCollection.AddPoint(toPoint); } } ISTPoint FPoint = new STPointClass(); FPoint.X = AdlwpPoint[0]; FPoint.Y = AdlwpPoint[1]; pSTPointCollection.AddPoint(FPoint); return(pSTPointCollection); }
private void BtnTX_Click(object sender, EventArgs e) { AcadDocument AcadDoc = AcadApp.ActiveDocument; AcadObject pSelectLineobj = pSelectLineobj = GetHX(); if (pSelectLineobj == null) { return; } try { AcadLWPolyline Adlwp = (AcadLWPolyline)pSelectLineobj; double[] AdlwpPoint = (double[])Adlwp.Coordinates; int PointCount = AdlwpPoint.Length / 2; superGridControlCoords.PrimaryGrid.Rows.Clear(); // ISTPoint[] pSTPoints = new ISTPoint[PointCount]; for (int j = 0; j < PointCount; j++) { ISTPoint pSTPoint = new STPointClass() { X = AdlwpPoint[j * 2], Y = AdlwpPoint[j * 2 + 1] }; superGridControlCoords.PrimaryGrid.Rows.Add(new DevComponents.DotNetBar.SuperGrid.GridRow( new object[] { j + 1, Math.Round(AdlwpPoint[j * 2 + 1], 3).ToString("0.000"), Math.Round(AdlwpPoint[j * 2], 3).ToString("0.000") }) { Tag = pSTPoint }); } superGridControlCoords.Tag = Adlwp; TxbTXMJ.Text = Adlwp.Area.ToString("0.00"); } finally { } }
public IXMRK GetXMRK() { if (m_XMRK == null) { m_XMRK = new XMRKClass(); } //添加获取属性信息代码 if (GeoChange)//如果重新设置了图形 { AcadObject pAcadObject = superGridControlCoords.Tag as AcadObject; if (m_XMRK.ID == -1 && pAcadObject == null) { throw new Exception("未获取入库图形"); } m_XMRK.STGeometry = ConvertDBObject(pAcadObject); //m_XMRK.STGeometry.SRID = 300000; //if (!m_XMRK.STGeometry.IsSimplify()) //{ m_XMRK.STGeometry = m_XMRK.STGeometry.Simplify(); // m_XMRK.CADPath= //} ISTPointCollection pSTPointCollection = new STPointCollectionClass(); double[] AdlwpPoint = (double[])(pAcadObject as AcadLWPolyline).Coordinates; int PointCount = AdlwpPoint.Length / 2; for (int j = 0; j < PointCount; j++) { ISTPoint pSTPoint = new STPointClass() { X = AdlwpPoint[j * 2], Y = AdlwpPoint[j * 2 + 1] }; pSTPointCollection.AddPoint(pSTPoint); } m_XMRK.SoucePoints = pSTPointCollection; } return(m_XMRK); }