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

                }

            }
        }
Exemple #2
0
 /// <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;
 }
Exemple #3
0
        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]);
                }
            }
        }