Exemple #1
0
        /// <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);

            }
        }