Beispiel #1
0
        public NewLabelDefForm(string paperDefinitionsRootFolder, string labelDefinitionsRootFolder, LabelDef labeldefToLoad)
            : this(paperDefinitionsRootFolder, labelDefinitionsRootFolder)
        {
            mode = Mode.edit;
            this.labeldeftoLoad = labeldefToLoad;
            idtxt.Text          = labeldeftoLoad.ID;
            idtxt.Enabled       = false;

            DPIXtxt.Text      = labeldeftoLoad.coordinateSystem.dpiFactor.X.ToString();
            DPIYtxt.Text      = labeldeftoLoad.coordinateSystem.dpiFactor.Y.ToString();
            unitcombo.Enabled = false;
            DPIXtxt.Enabled   = false;
            DPIYtxt.Enabled   = false;

            foreach (LabelDef.PaperType papertype in labeldeftoLoad.PaperTypes)
            {
                if (availablepapertypelist.Items.Contains(papertype.ID))
                {
                    availablepapertypelist.SelectedItem = papertype.ID;
                    addpapertypebtn_Click(null, null);
                    if (papertype.Default)
                    {
                        setAsDefault = papertype.ID;
                    }
                }
                else
                {
                    MessageBox.Show("Paper ID " + papertype.ID + " is supported but was not found.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
            if (usedpapertypelist.Items.Count < 1)
            {
                Okbtn.Enabled = false;
            }
        }
Beispiel #2
0
 public void Dispose()
 {
     if (_canvas != null)
     {
         if (_canvas.LayerContainer.VectorHost != null)
         {
             IMap map = (_canvas.LayerContainer.VectorHost as IVectorHostLayer).Map as IMap;
             if (map != null && map.LayerContainer != null)
             {
                 map.LayerContainer.Remove(_layer);
             }
         }
         _canvas = null;
     }
     if (_mapRuntime != null)
     {
         _mapRuntime = null;
     }
     if (_datasource != null)
     {
         _datasource.Dispose();
         _datasource = null;
     }
     if (_labeldef != null)
     {
         _labeldef.Dispose();
         _labeldef = null;
     }
     if (_layer != null)
     {
         _layer.Dispose();
         _layer = null;
     }
     OID = 0;
 }
Beispiel #3
0
        /// <summary>
        /// 设置标注和矢量的绘制风格
        /// </summary>
        /// <param name="lyr"></param>
        /// <param name="shpFname"></param>
        private void TryApplyStyle(AgileMap.ILayer lyr, string shpFname)
        {
            string mcdfname = Path.ChangeExtension(shpFname, ".mcd");

            if (!File.Exists(mcdfname))
            {
                return;
            }
            XDocument doc    = XDocument.Load(mcdfname);
            var       result = doc.Element("Map").Element("Layers").Elements();

            if (result == null)
            {
                return;
            }
            LabelDef         labelDef      = null;
            IFeatureRenderer featureRender = null;

            GetFeatureRenderFromMcd(doc, out labelDef, out featureRender);
            if (labelDef != null)
            {
                (lyr as CodeCell.AgileMap.Core.IFeatureLayer).LabelDef = labelDef;
            }
            if (featureRender != null)
            {
                (lyr as CodeCell.AgileMap.Core.IFeatureLayer).Renderer = featureRender;
            }
        }
        private static ILabelDef GetLabelDef(string dataName, IFeatureLayer layer)
        {
            string[] fields  = (layer.Class as IFeatureClass).FieldNames;
            string   lbField = GetLabelFieldName(fields);
            LabelDef def     = new LabelDef(lbField, fields);

            def.LabelFont      = new Font("宋体", 9);
            def.EnableLabeling = !string.IsNullOrEmpty(lbField);
            def.MaskColor      = Color.FromArgb(192, 192, 255);
            def.EnableLabeling = false;
            return(def);
        }
        private static void GetFeatureRenderFromMcd(XDocument doc, out LabelDef labelDef, out IFeatureRenderer featureRender)
        {
            labelDef      = null;
            featureRender = null;
            try
            {
                var result = doc.Element("Map").Element("Layers");
                if (result == null)
                {
                    return;
                }
                var layerXmls = result.Elements("Layer");
                if (layerXmls == null || layerXmls.Count() == 0)
                {
                    return;
                }
                var layerXml = layerXmls.First();

                var labelXmls = layerXml.Elements("LabelDef");
                if (labelXmls != null && labelXmls.Count() != 0)
                {
                    XElement labelXml = labelXmls.First();
                    labelDef = LabelDef.FromXElement(labelXml);
                }

                var renderXmls = layerXml.Elements("Renderer");
                if (renderXmls != null && renderXmls.Count() != 0)
                {
                    XElement   renderXml     = renderXmls.First();
                    XAttribute renderTypeAtt = renderXml.Attribute("type");
                    if (renderTypeAtt != null)
                    {
                        string renderType = renderTypeAtt.Value;
                        if (renderType == "CodeCell.AgileMap.Core.dll,CodeCell.AgileMap.Core.SimpleFeatureRenderer")
                        {
                            featureRender = SimpleFeatureRenderer.FromXElement(renderXml);
                        }
                        else if (renderType == "CodeCell.AgileMap.Core.dll,CodeCell.AgileMap.Core.SimpleTwoStepFeatureRenderer")
                        {
                            featureRender = SimpleTwoStepFeatureRenderer.FromXElement(renderXml);
                        }
                        else if (renderType == "CodeCell.AgileMap.Core.dll,CodeCell.AgileMap.Core.UniqueFeatureRenderer")
                        {
                            featureRender = UniqueFeatureRenderer.FromXElement(renderXml);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Beispiel #6
0
        private void SetLabel(CodeCell.AgileMap.Core.IFeatureLayer fetLayer)
        {
            LabelDef df = fetLayer.LabelDef as LabelDef;

            if (df == null)
            {
                return;
            }
            df.EnableLabeling = true;
            df.ForeColor      = Color.Red;
            df.Fieldname      = "name";
            _labeldef         = df;
        }
 private static void TryApplyStyle(CodeCell.AgileMap.Core.IFeatureLayer fetLayer, string dataTypeId)
 {
     //根据文件类型应用显示方案
     string[] mcdfnames = Directory.GetFiles(Path.GetDirectoryName(MicapsFileProcessor.DATATYPE_CONFIG_DIR), "*.mcd");
     //应用默认方案
     if (mcdfnames == null || mcdfnames.Length < 1)
     {
         SimpleMarkerSymbol sym = new SimpleMarkerSymbol(masSimpleMarkerStyle.Circle);
         sym.Size          = new System.Drawing.Size(3, 3);
         fetLayer.Renderer = new SimpleFeatureRenderer(sym);
         return;
     }
     else
     {
         string fname = null;
         foreach (string item in mcdfnames)
         {
             if (dataTypeId == Path.GetFileNameWithoutExtension(item))
             {
                 fname = item;
                 break;
             }
         }
         if (fname != null)
         {
             XDocument doc    = XDocument.Load(fname);
             var       result = doc.Element("Map").Element("Layers").Elements();
             if (result == null)
             {
                 return;
             }
             LabelDef         labelDef      = null;
             IFeatureRenderer featureRender = null;
             GetFeatureRenderFromMcd(doc, out labelDef, out featureRender);
             if (labelDef != null)
             {
                 fetLayer.LabelDef = labelDef;
             }
             if (featureRender != null)
             {
                 fetLayer.Renderer = featureRender;
             }
         }
     }
 }
Beispiel #8
0
        /// <summary>
        /// Handles label definitions
        /// [LBL, ARG*]
        /// assumes first word is a label
        /// </summary>
        LabelDef ParseLabel()
        {
            tokenNum = 1;
            var def       = new LabelDef();
            var signature = new List <string>();
            var args      = new List <string>();

            def.identifier = words[0];
            def.returnType = Tokens.NIL;

            if (words.Length == 1)
            {
                // this label has no parameters (signature)
                def.signature  = new string[0];
                def.identifier = def.identifier.Substring(0, words[0].Length - 1);
                return(def);
            }

            bool open             = false;
            bool variable         = false;
            var  expressionBuffer = new StringBuilder();

            for (int i = 1; i < words.Length; i++)
            {
                tokenNum++;
                string word = words[i].Trim();

                if (word[word.Length - 1] == Tokens.DEF_MARKER)
                {
                    // remove ':'
                    word = word.Substring(0, word.Length - 1);
                }

                if (word == Tokens.RET)
                {
                    // next token must be a return type
                    i++;
                    word = words[i].Trim();
                    word = word.Substring(0, word.Length - 1);

                    if (Tokens.ValidType(word))
                    {
                        def.returnType = word;
                    }
                    else
                    {
                        throw new SyntaxError("Valid return type", word);
                    }
                    continue;
                }

                if (word[0] == Tokens.OPEN_PAREN)
                {
                    // open parenthesis [(arg]
                    word = word.Substring(1);
                    open = true;
                }

                if (word[word.Length - 1] == Tokens.CLOSE_PAREN)
                {
                    // close parenthesis and store literal [arg)]
                    word = word.Substring(0, word.Length - 1);
                    args.Add(word);
                    open = false;
                    continue;
                }

                if (open)
                {
                    string tmp = word[word.Length - 1] == ',' ? word.Substring(0, word.Length - 1) : word;
                    // parentheses are open store value
                    if (variable)
                    {
                        args.Add(tmp);
                    }
                    else
                    {
                        signature.Add(tmp);
                    }
                    variable = !variable;
                }
                else
                {
                    // if we have reached this point with no parenthesis this must
                    // be a label with an inline definition
                    // [label: (<arg>*) <expression>] | [label: <expression>]
                    expressionBuffer.Append(word);
                    expressionBuffer.Append(Tokens.SEPARATOR);
                }
            }
            def.signature = signature.ToArray();
            def.args      = args.ToArray();
            tokenNum      = 0;

            if (expressionBuffer.Length > 0)
            {
                // this label has an inline definition
                labelBodyBuffer.Add(expressionBuffer.ToString());
                // this will trigger the NonExpressionParser to close the block
                def.inline = true;
            }

            return(def);
        }
Beispiel #9
0
        /// <summary>
        /// Handles label definitions and comments
        /// </summary>
        /// <returns></returns>
        bool ParseNonExecutable()
        {
            // split line into words
            words = line.Split(Tokens.SEPARATOR);
            string first = words[0].Trim();

            // statement is documentation for the next open block
            if (first.Length > 1 && first.Substring(0, 2) == Tokens.DOC)
            {
                labelDocBuffer.Add(line.Substring(2).Trim());
                return(true);
            }

            // line is just a comment
            if (first[0] == Tokens.COMMENT)
            {
                return(true);
            }

            if (first == Tokens.SECTION_DEF)
            {
                // this defines a section
                // 'section' <identifier> ':'
                preprocessor.ParsePreprocessorExp(Tokens.PREPROCESSOR_DEF + line.Split(Tokens.DEF_MARKER)[0]);
                return(true);
            }

            if (first == Tokens.SECTION_END)
            {
                preprocessor.ParsePreprocessorExp(Tokens.PREPROCESSOR_DEF + first);
                return(true);
            }

            if (!isLabelOpen && line.Contains(Tokens.DEF) && Tokens.ValidType(first))
            {
                // this defines a variable
                // <type> <identifier> ':' <arg>
                string[] tokens = line.Split(Tokens.DEF_MARKER);

                if (tokens.Length < 2)
                {
                    throw new SyntaxError("Variable definition", "<nil>");
                }

                // force type unless type is <var>
                string typeCast = first == Tokens.VAR ? "" : first;

                // get variable data
                MetaSymbol arg = ParseArguments(tokens[1].Split(Tokens.SEPARATOR), typeCast, strictType: true)[0];

                string varId = words[1];

                // remove ':' from variable name if it exists
                varId = varId[varId.Length - 1] == Tokens.DEF_MARKER ? varId.Substring(0, varId.Length - 1) : varId;
                Push(varId, arg);
                return(true);
            }

            if (!isLabelOpen && line.Contains(Tokens.DEF))
            {
                // this is a label definition
                if (isLabelOpen)
                {
                    // there was another label opened, close it
                    CloseBlock();
                }

                // parse the label and keep a reference to the result
                isLabelOpen = true;
                openLabel   = ParseLabel();

                if (openLabel.inline)
                {
                    // this is an inline block and should be closed
                    CloseBlock();
                    isLabelOpen = false;
                }

                return(true);
            }

            if (first == Tokens.END)
            {
                // close this label
                CloseBlock();
                isLabelOpen = false;
                return(true);
            }

            if (isLabelOpen)
            {
                // label is currently open, append new lines to its buffer
                //labelBodyBuffer.Add(preprocessor.Compile(words));
                labelBodyBuffer.Add(line);
                return(true);
            }

            // this statement is not a special block
            return(false);
        }
Beispiel #10
0
        //Main Functions
        private void Okbtn_Click(object sender, EventArgs e)
        {
            if (CheckInput())
            {
                setDefaultLabel();
                if (mode == Mode.create)
                {
                    newLabelDef    = new LabelDef();
                    newLabelDef.ID = idtxt.Text;
                    newLabelDef.coordinateSystem = new CoordinateSystem(Convert.ToUInt32(DPIXtxt.Text), Convert.ToUInt32(DPIYtxt.Text), unitcombo.SelectedItem.ToString());

                    List <LabelDef.PaperType> tempPaperTypeList = new List <LabelDef.PaperType>();
                    foreach (ACA.LabelX.Paper.PaperDef tempPaperDef in PaperTypeList.Values)
                    {
                        if (usedpapertypelist.Items.Contains(tempPaperDef.ID))
                        {
                            LabelDef.PaperType tempPaperType = new LabelDef.PaperType();
                            tempPaperType.ID = tempPaperDef.ID;
                            if (tempPaperDef.ID.Equals(setAsDefault))
                            {
                                tempPaperType.Default = true;
                            }
                            else
                            {
                                tempPaperType.Default = false;
                            }

                            tempPaperTypeList.Add(tempPaperType);
                        }
                    }
                    newLabelDef.PaperTypes = tempPaperTypeList;
                    saveLabelDefTo(labelDefinitionsRootFolder + @"\" + newLabelDef.ID + ".xml");
                    LabelName    = newLabelDef.ID;
                    DialogResult = DialogResult.OK;
                }
                else if (mode == Mode.edit)
                {
                    lock (ACA.LabelX.GlobalDataStore.LockClass)
                    {
                        setDefaultLabel();
                        string      path   = labelDefinitionsRootFolder + @"\" + labeldeftoLoad.ID + ".xml";
                        XmlDocument theDoc = new XmlDocument();
                        theDoc.Load(path);

                        XmlNode validpapertypes = theDoc.SelectSingleNode("/labeldef/validpapertypes");
                        validpapertypes.RemoveAll();
                        foreach (string papertype in usedpapertypelist.Items)
                        {
                            XmlElement paper = theDoc.CreateElement("paper");
                            paper.SetAttribute("type", papertype);
                            if (setAsDefault.Equals(papertype, StringComparison.OrdinalIgnoreCase))
                            {
                                paper.SetAttribute("default", "true");
                            }
                            else
                            {
                                paper.SetAttribute("default", "false");
                            }

                            validpapertypes.AppendChild(paper);
                        }


                        int  teller = 0;
                        bool succes = false;
                        while ((teller < 5) && (succes == false))
                        {
                            theDoc.Save(path);
                            Thread.Sleep(2000);
                            succes = true;
                            teller++;
                        }

                        if (!succes)
                        {
                            MessageBox.Show("Error while saving file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    DialogResult = DialogResult.OK;
                    LabelName    = idtxt.Text;
                }
                this.Close();
            }
            else
            {
                MessageBox.Show(GetString("INVALIDINPUTERROR"), GetString("INVALIDINPUTERRORTITLE"), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }