Ejemplo n.º 1
0
        //public override bool Check(ref ICheckResult ppResult)
        //{
        //    return true;

        //    // 将拓扑图层的别名转换为真实名称
        //    InitTopoLayerArray();

        //    CTopoConstruct topoObj = new CTopoConstruct();

        //    // 初始化
        //    string strTopoName = "" + m_strID + "_Topology";

        //    if (!topoObj.Init(ref m_psRuleParas, strTopoName, m_pSonEngineWks))
        //    {
        //        return false;
        //    }

        //    // 构建拓扑
        //    bool state = topoObj.ConstructTopo();
        //    if (state != true)
        //    {
        //        return state;
        //    }

        //    ppResult = null;

        //    return true;
        //}



        // 解析拓扑结构里面的参数
        private bool ParseTopoPara(string strTopoPara, RuleExpression.LRTopoParas psRulePara)
        {
            if (strTopoPara == "")
            {
                return(false);
            }
            string para_str = strTopoPara;

            m_psRuleParas.arraySeledLayers = new List <string>();
            m_psRuleParas.arrayOrigLayers  = new List <string>();

            string para_tmp1, para_tmp2, para_tmp3;

            string[] strList = para_str.Split('#');
            para_tmp1 = strList[0];
            para_tmp2 = strList[1];
            para_tmp3 = strList[2];

            int j = 0;

            string[] strResult = para_tmp1.Split('|');
            m_psRuleParas.strTopoName     = strResult[j++]; //拓扑名称
            m_psRuleParas.strStandardName = strResult[j++]; //标准名称
            m_psRuleParas.strSourceLayer  = strResult[j];   //待检查图层,即目标图层


            string[] strResult1 = para_tmp2.Split('|');
            for (j = 0; j < strResult1.Length; j++)
            {
                m_psRuleParas.arrayOrigLayers.Add(strResult1[j]);
            }

            string[] strResult2 = para_tmp3.Split('|');
            for (j = 0; j < strResult2.Length; j++)
            {
                if (strResult2[j] != "")
                {
                    m_psRuleParas.arraySeledLayers.Add(strResult2[j]);
                }
            }


            return(true);
        }
Ejemplo n.º 2
0
        public override void SetParamters(byte[] objParamters)
        {
            try
            {
                BinaryReader pParameter    = new BinaryReader(new MemoryStream(objParamters));
                BinaryReader pBinaryReader = pParameter;

                m_psRuleParas = new RuleExpression.LRTopoParas();
                pBinaryReader.BaseStream.Position = 0;

                int nStrSize   = pParameter.ReadInt32(); // 字符串总长度
                int origT_size = pParameter.ReadInt32(); // Layer : 原始图层几何类型总长度
                int selT_size  = pParameter.ReadInt32(); // Layer : 选中图层几何类型
                int rank_size  = pParameter.ReadInt32(); // Rank : 图层的优先级
                int rule_count = pParameter.ReadInt32(); // 规则结构体的个数

                List <int> rule_size = new List <int>(); // 每个规则结构体的长度

                for (int i = 0; i < rule_count; i++)
                {
                    int nRuleSize = pParameter.ReadInt32();
                    rule_size.Add(nRuleSize);
                }

                // LRTopoParas的参数
                m_psRuleParas.dTolerance = pParameter.ReadDouble(); //	容差

                //解析字符串
                Byte[] bb = new byte[nStrSize];
                pParameter.Read(bb, 0, nStrSize);
                string para_str = Encoding.Default.GetString(bb);
                para_str.Trim();

                // 解析字符串
                ParseTopoPara(para_str, m_psRuleParas);


                // Layer : 原始图层几何类型
                m_psRuleParas.arrayOrigGeoT = new List <int>();
                for (int k = 0; k < origT_size / 4; k++)
                {
                    int orig_geoT = pParameter.ReadInt32();
                    m_psRuleParas.arrayOrigGeoT.Add(orig_geoT);
                }

                int j = 0;

                // Layer : 选中图层几何类型
                m_psRuleParas.arraySeledGeoT = new List <int>();
                for (j = 0; j < (selT_size / 4); j++)
                {
                    int sel_geoT = pParameter.ReadInt32();
                    m_psRuleParas.arraySeledGeoT.Add(sel_geoT);
                }
                // Rank : 图层的优先级
                m_psRuleParas.arrayRanks = new List <int>();
                for (j = 0; j < (rank_size / 4); j++)
                {
                    int rank = pParameter.ReadInt32();
                    m_psRuleParas.arrayRanks.Add(rank);
                }

                // ---------------------------规则------------------------------------
                m_psRuleParas.arrayRules = new List <RuleExpression.LRTopoRule>();
                for (j = 0; j < rule_count; j++)
                {
                    int nRuleSize = rule_size[j];

                    RuleExpression.LRTopoRule pRule = new RuleExpression.LRTopoRule();
                    pRule.lPicID      = pParameter.ReadInt32();                    // 规则描述图片ID
                    pRule.nGeoTSrc    = pParameter.ReadInt32();                    // 源图层几何类型
                    pRule.nGeoTTarget = pParameter.ReadInt32();                    // 目标图标几何类型
                    pRule.nRankSrc    = pParameter.ReadInt32();                    // 源图层Rank
                    pRule.nRankTarget = pParameter.ReadInt32();                    // 目标图标Rank
                    pRule.bShowError  = Convert.ToBoolean(pParameter.ReadInt32()); // 是否显示错误

                    //解析字符串
                    Byte[] bb1 = new byte[nRuleSize - sizeof(int) * 6];
                    pParameter.Read(bb1, 0, nRuleSize - sizeof(int) * 6);
                    string para_str1 = Encoding.Default.GetString(bb1);
                    para_str1.Trim();

                    string[] strResult1 = para_str1.Split('|');

                    int k = 0;

                    pRule.strSourceLayerName = strResult1[k++];
                    pRule.strTopoRuleName    = strResult1[k++];
                    pRule.strTargetLayerName = strResult1[k++];
                    pRule.strRuleDesc        = strResult1[k++];
                    pRule.strRuleAliasName   = strResult1[k];

                    // 插入规则数组
                    m_psRuleParas.arrayRules.Add(pRule);
                }

                pParameter = pBinaryReader;

                this.m_InstanceName = m_psRuleParas.arrayRules[0].strRuleAliasName;
            }
            catch
            {
            }
        }
Ejemplo n.º 3
0
        public override void SetParamters(byte[] objParamters)
        {
            try
            {
                BinaryReader pParameter = new BinaryReader(new MemoryStream(objParamters));
                BinaryReader pBinaryReader = pParameter;

                m_psRuleParas = new RuleExpression.LRTopoParas();
                pBinaryReader.BaseStream.Position = 0;

                int nStrSize = pParameter.ReadInt32(); // �ַ����ܳ���
                int origT_size = pParameter.ReadInt32(); // Layer : ԭʼͼ�㼸�������ܳ���
                int selT_size = pParameter.ReadInt32(); // Layer : ѡ��ͼ�㼸������
                int rank_size = pParameter.ReadInt32(); // Rank : ͼ������ȼ�
                int rule_count = pParameter.ReadInt32(); // ����ṹ��ĸ���

                List<int> rule_size = new List<int>(); // ÿ������ṹ��ij���

                for (int i = 0; i < rule_count; i++)
                {
                    int nRuleSize = pParameter.ReadInt32();
                    rule_size.Add(nRuleSize);
                }

                // LRTopoParas�IJ���
                m_psRuleParas.dTolerance = pParameter.ReadDouble(); //	�ݲ�

                //�����ַ���
                Byte[] bb = new byte[nStrSize];
                pParameter.Read(bb, 0, nStrSize);
                string para_str = Encoding.Default.GetString(bb);
                para_str.Trim();

                // �����ַ���
                ParseTopoPara(para_str, m_psRuleParas);

                // Layer : ԭʼͼ�㼸������
                m_psRuleParas.arrayOrigGeoT = new List<int>();
                for (int k = 0; k < origT_size / 4; k++)
                {
                    int orig_geoT = pParameter.ReadInt32();
                    m_psRuleParas.arrayOrigGeoT.Add(orig_geoT);
                }

                int j = 0;

                // Layer : ѡ��ͼ�㼸������
                m_psRuleParas.arraySeledGeoT = new List<int>();
                for (j = 0; j < (selT_size / 4); j++)
                {
                    int sel_geoT = pParameter.ReadInt32();
                    m_psRuleParas.arraySeledGeoT.Add(sel_geoT);
                }
                // Rank : ͼ������ȼ�
                m_psRuleParas.arrayRanks = new List<int>();
                for (j = 0; j < (rank_size / 4); j++)
                {
                    int rank = pParameter.ReadInt32();
                    m_psRuleParas.arrayRanks.Add(rank);
                }

                // ---------------------------����------------------------------------
                m_psRuleParas.arrayRules = new List<RuleExpression.LRTopoRule>();
                for (j = 0; j < rule_count; j++)
                {
                    int nRuleSize = rule_size[j];

                    RuleExpression.LRTopoRule pRule = new RuleExpression.LRTopoRule();
                    pRule.lPicID = pParameter.ReadInt32(); // ��������ͼƬID
                    pRule.nGeoTSrc = pParameter.ReadInt32(); // Դͼ�㼸������
                    pRule.nGeoTTarget = pParameter.ReadInt32(); // Ŀ��ͼ�꼸������
                    pRule.nRankSrc = pParameter.ReadInt32(); // Դͼ��Rank
                    pRule.nRankTarget = pParameter.ReadInt32(); // Ŀ��ͼ��Rank
                    pRule.bShowError = Convert.ToBoolean(pParameter.ReadInt32()); // �Ƿ���ʾ����

                    //�����ַ���
                    Byte[] bb1 = new byte[nRuleSize - sizeof(int) * 6];
                    pParameter.Read(bb1, 0, nRuleSize - sizeof(int) * 6);
                    string para_str1 = Encoding.Default.GetString(bb1);
                    para_str1.Trim();

                    string[] strResult1 = para_str1.Split('|');

                    int k = 0;

                    pRule.strSourceLayerName = strResult1[k++];
                    pRule.strTopoRuleName = strResult1[k++];
                    pRule.strTargetLayerName = strResult1[k++];
                    pRule.strRuleDesc = strResult1[k++];
                    pRule.strRuleAliasName = strResult1[k];

                    // �����������
                    m_psRuleParas.arrayRules.Add(pRule);
                }

                pParameter = pBinaryReader;

                this.m_InstanceName = m_psRuleParas.arrayRules[0].strRuleAliasName;
            }
            catch
            {
            }
        }