예제 #1
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
            {
            }
        }
예제 #2
0
파일: RuleTopo.cs 프로젝트: hy1314200/HyDM
        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
            {
            }
        }