/// <summary> /// 写入多边形线节点(非引用线图层) /// </summary> /// <param name="pVCTFile">VCT文件对象</param> public void WritePolygonLineNodes(VCTFile pVCTFile) { if (this.m_pOleDbConnection != null && m_pOleDbConnection.State == ConnectionState.Open) { LineNodeExTable pLineNodeExTable = new LineNodeExTable(m_pOleDbConnection); //只写入正向线节点 string strWhere = pLineNodeExTable.FieldName_IsFromLine + "=-1 And " + pLineNodeExTable.FieldName_IsReverse + "=-1 And " + pLineNodeExTable.FieldName_EntityID + "<>0"; //按标识码、在面的边界线集合中的索引排序 string strLineNodeExOrderBy = pLineNodeExTable.FieldName_PolygonID + "," + pLineNodeExTable.FieldName_LineIndex; DataTable dataTable = pLineNodeExTable.GetRecords(strWhere, "", strLineNodeExOrderBy); LineNodeEx lineNode = null; LineNodeEx lineNodeCurrent = null; LineNodeEx lineNodeUp = null; //for (int i = 0; i < dataTable.Rows.Count; i++) while (dataTable.Rows.Count > 0) { for (int i = 0; i < dataTable.Rows.Count; i++) { lineNodeCurrent = new LineNodeEx(); //LineNode lineNodeTemp = lineNodeCurrent as LineNode; pLineNodeExTable.GetLineNodeByDataRow(dataTable.Rows[i], ref lineNodeCurrent, false); if (lineNode == null) { lineNode = lineNodeCurrent; } else { //判断当前线节点与上一线节点是否属于同一个面 if (lineNodeCurrent.PolygonID != lineNodeUp.PolygonID) { pVCTFile.WritePolygonLineNode(lineNode); lineNode = lineNodeCurrent; } else { if (lineNodeCurrent.EntityID == lineNode.EntityID) { lineNode.SegmentNodes.AddRange(lineNodeCurrent.SegmentNodes); } else { pVCTFile.WritePolygonLineNode(lineNode); lineNode = lineNodeCurrent; } } } lineNodeUp = lineNodeCurrent; } if (dataTable.Rows.Count < pLineNodeExTable.MaxRecordCount) break; dataTable = pLineNodeExTable.GetNextRecords(); } if (lineNode != null) pVCTFile.WritePolygonLineNode(lineNode); } }