/// <summary> /// 写入多边形节点 /// </summary> /// <param name="pVCTFile">VCT文件对象</param> public void WritePolygonNodes(VCTFile pVCTFile) { if (this.m_pOleDbConnection != null && m_pOleDbConnection.State == ConnectionState.Open) { PolygonNodeTable pPolygonNodeTable = new PolygonNodeTable(m_pOleDbConnection); LineNodeExTable pLineNodeExTable = new LineNodeExTable(m_pOleDbConnection); //按面标识码 string strPolygonNodeOrderBy = pPolygonNodeTable.FieldName_EntityID; DataTable dataTablePolygon = pPolygonNodeTable.GetRecords("", "", strPolygonNodeOrderBy); //按面标识码、在面的边界线集合中的索引排序 string strLineNodeExOrderBy = pLineNodeExTable.FieldName_PolygonID + "," + pLineNodeExTable.FieldName_LineIndex; DataTable dataTableLine = pLineNodeExTable.GetRecords(pLineNodeExTable.FieldName_PolygonID + ",-" + pLineNodeExTable.FieldName_EntityID + "*" + pLineNodeExTable.FieldName_IsReverse, "", "", strLineNodeExOrderBy); PolygonNodeSimple polygonNode = null; //LineNodeEx lineNode = null; //LineNodeEx lineNodeUp = null; int nPolygonID = -1; int nEntityID = -1; int nEntityIDUp = -1; int j = 0; while (dataTablePolygon.Rows.Count > 0) { for (int i = 0; i < dataTablePolygon.Rows.Count; i++) { polygonNode = new PolygonNodeSimple(); pPolygonNodeTable.GetEntityNodeByDataRow(dataTablePolygon.Rows[i], ref polygonNode); while (dataTableLine.Rows.Count > 0) { for (; j < dataTableLine.Rows.Count; j++) { //lineNodeUp = null; //lineNode = new LineNodeEx(); //pLineNodeExTable.GetLineNodeByDataRow(dataTableLine.Rows[j], ref lineNode, false); nPolygonID = Convert.ToInt32(dataTableLine.Rows[j][0]); nEntityID = Convert.ToInt32(dataTableLine.Rows[j][1]); if (nPolygonID == polygonNode.EntityID) { if (nEntityIDUp != -1) { if (nEntityIDUp == nEntityID) { continue; } } polygonNode.LineNodes.Add(nEntityID); } else { break; } nEntityIDUp = nEntityID; } if (j == dataTableLine.Rows.Count) { if (dataTableLine.Rows.Count < pLineNodeExTable.MaxRecordCount) break; dataTableLine = pLineNodeExTable.GetNextRecords(); j = 0; } else break; } pVCTFile.WritePolygonNode(polygonNode); } if (dataTablePolygon.Rows.Count < pPolygonNodeTable.MaxRecordCount) break; dataTablePolygon = pPolygonNodeTable.GetNextRecords(); } } }
/// <summary> /// д��VCT��ʵ��ڵ� /// </summary> /// <param name="polygonNode">VCT��ʵ��ڵ�</param> public bool WritePolygonNode(PolygonNodeSimple polygonNode) { if (this.m_streamWriter != null && this.m_streamWriter.StreamWriterTemp != null) { if (this.m_bFoundPolygonBegin == false) { if (this.m_bFoundLineBegin == false) { if (this.m_bFoundPointBegin == false) { this.m_streamWriter.WriteLine("PointBegin"); this.m_bFoundPointBegin = true; } this.m_streamWriter.WriteLine("PointEnd"); this.m_streamWriter.WriteLine("LineBegin"); this.m_bFoundLineBegin = true; } this.m_streamWriter.StreamWriterTemp.WriteLine("LineEnd"); this.m_streamWriter.StreamWriterTemp.WriteLine("PolygonBegin"); this.m_bFoundPolygonBegin = true; } this.m_streamWriter.StreamWriterTemp.WriteLine(polygonNode); this.m_streamWriter.StreamWriterTemp.Flush(); return true; } return false; }
public void GetEntityNodeByDataRow(DataRow dataRow, ref PolygonNodeSimple polygonNode) { if (dataRow != null) { if (polygonNode != null) { EntityNode entityNode = polygonNode as EntityNode; base.GetEntityNodeByDataRow(dataRow, ref entityNode); polygonNode.PolygonType = dataRow[FieldName_PolygonType] == System.DBNull.Value ? -1 : Convert.ToInt32(dataRow[FieldName_PolygonType]); double dX = dataRow[FieldName_X] == System.DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_X]); double dY = dataRow[FieldName_Y] == System.DBNull.Value ? 0.0 : Convert.ToDouble(dataRow[FieldName_Y]); PointInfoNode pointInfoNode = new PointInfoNode(dX, dY); polygonNode.LablePointInfoNode = pointInfoNode; polygonNode.LineNodes = new System.Collections.Generic.List<int>(); //polygonNode.ComposeType = dataRow[FieldName_ComposeType] == null ? -1 : Convert.ToInt32(dataRow[FieldName_ComposeType]); } } }