public void testGetClassObjDestroy() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj newClass = layer.getClass(0); classObj reference = layer.getClass(0); assert(newClass.refcount == 3, "testGetClassObjDestroy precondition"); map = null; layer = null; newClass = null; gc(); assert(reference.refcount == 2, "testGetClassObjDestroy"); }
/// <summary> /// Initialize the default settings of a newly created labelObj /// </summary> /// <param name="layer">The parent layer object.</param> public static void InitializeDefaultLabel(layerObj layer) { labelObj label; if (layer.getClass(0).numlabels == 0) { label = new labelObj(); layer.getClass(0).addLabel(label); } label = layer.getClass(0).getLabel(0); SetDefaultLabel(label, layer.map); }
private static bool IsLayerQueryable(layerObj layer) { if ( layer.type == MS_LAYER_TYPE.MS_LAYER_TILEINDEX ) return false; if(layer.template != null && layer.template.Length > 0) return true; for(int i=0; i<layer.numclasses; i++) { if(layer.getClass(i).template != null && layer.getClass(i).template.Length > 0) return true; } return false; }
/// <summary> /// Have the editor to update the theme on the layer object. /// </summary> public void UpdateValues() { if (newLayer != null) { // remove the auto style from this layer layer.styleitem = null; while (layer.numclasses > 0) { layer.removeClass(layer.numclasses - 1); } for (int i = 0; i < newLayer.numclasses; i++) { classObj classobj = newLayer.getClass(i).clone(); // bindings are not supported with sample maps for (int s = 0; s < classobj.numstyles; s++) { StyleBindingController.RemoveAllBindings(classobj.getStyle(s)); } for (int l = 0; l < classobj.numlabels; l++) { LabelBindingController.RemoveAllBindings(classobj.getLabel(l)); } layer.insertClass(classobj, -1); } if (target != null) { target.RaisePropertyChanged(this); } } }
public void testGetClassObj() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj newClass = layer.getClass(0); map = null; layer = null; gc(); assertNotNull(newClass.layer, "testGetClassObj"); assert(newClass.refcount == 2, "testGetClassObj refcount"); }
//for example:use layer.clone() public SymbolSelectorDialog(layerObj layer) { InitializeComponent(); if (layer != null) { m_pCurrentLayer = layer; m_pCurrentClass = layer.getClass(0); m_pEditingClass = m_pCurrentClass.clone(); m_LayerType = layer.type; } }
public void testGetStyleObj() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj classobj = layer.getClass(0); styleObj style = classobj.getStyle(0); map = null; layer = null; classobj = null; gc(); assert(style.refcount == 2, "testGetStyleObj"); }
private static bool IsLayerQueryable(layerObj layer) { if (layer.type == MS_LAYER_TYPE.MS_LAYER_TILEINDEX) { return(false); } if (layer.template != null && layer.template.Length > 0) { return(true); } for (int i = 0; i < layer.numclasses; i++) { if (layer.getClass(i).template != null && layer.getClass(i).template.Length > 0) { return(true); } } return(false); }
public void testClassObjDestroy() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj newClass = new classObj(layer); classObj reference = layer.getClass(layer.numclasses - 1); assert(newClass.refcount == 3, "testClassObjDestroy precondition"); newClass.Dispose(); // force the destruction for Mono on Windows because of the constructor overload map = null; layer = null; newClass = null; gc(); assert(reference.refcount == 2, "testClassObjDestroy"); }
public void testGetStyleObjDestroy() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj classobj = layer.getClass(0); styleObj style = classobj.getStyle(0); styleObj reference = classobj.getStyle(0); assert(style.refcount == 3, "testGetStyleObjDestroy precondition"); map = null; layer = null; classobj = null; style = null; gc(); assert(reference.refcount == 2, "testGetStyleObjDestroy"); }
public void testRemoveStyleObj() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj classobj = layer.getClass(0); styleObj newStyle = new styleObj(null); classobj.insertStyle(newStyle, 0); classobj.removeStyle(0); map = null; layer = null; classobj = null; gc(); assert(newStyle.refcount == 1, "testRemoveStyleObj"); }
public void testInsertStyleObj() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj classobj = layer.getClass(0); styleObj newStyle = new styleObj(null); classobj.insertStyle(newStyle, -1); assert(newStyle.refcount == 2, "testInsertStyleObj precondition"); map = null; layer = null; classobj = null; gc(); assert(newStyle.refcount == 2, "testInsertStyleObj"); }
public void testStyleObjDestroy() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj classobj = layer.getClass(0); styleObj newStyle = new styleObj(classobj); styleObj reference = classobj.getStyle(classobj.numstyles - 1); assert(newStyle.refcount == 3, "testStyleObjDestroy"); newStyle.Dispose(); // force the destruction for Mono on Windows because of the constructor overload map = null; layer = null; classobj = null; newStyle = null; gc(); assert(reference.refcount == 2, "testStyleObjDestroy"); }
public static void ExpandFontStyles() { string symbolSetFileContents = File.ReadAllText(symbolsetFileName); string fontSetFileContents = File.ReadAllText(fontsetFileName); StringBuilder newSymbols = new StringBuilder(); StringBuilder newFonts = new StringBuilder(); for (int i = 0; i < map.numlayers; i++) { layerObj layer = map.getLayer(i); if (MapUtils.HasMetadata(layer, "character-count")) { string charcount = layer.getMetaData("character-count"); int num; if (layer.numclasses == 1 && charcount != null && int.TryParse(charcount, out num)) { classObj classobj = layer.getClass(0); if (!fontSetFileContents.Contains(classobj.name)) { throw new Exception("Invalid font reference in mmstyles.map: " + classobj.name + ". The fontset file should contain an entry for this font name."); } for (int c = 33; c < 33 + num; c++) { string symbolname = classobj.name + "-" + c.ToString(); if (!symbolSetFileContents.Contains(symbolname)) { symbolObj sym = new symbolObj(symbolname, null); sym.character = "&#" + c.ToString() + ";"; sym.antialias = mapscript.MS_TRUE; sym.type = (int)MS_SYMBOL_TYPE.MS_SYMBOL_TRUETYPE; sym.font = classobj.name; sym.inmapfile = 0; map.symbolset.appendSymbol(sym); newSymbols.Append(String.Format("SYMBOL{0} NAME \"{1}\"{0} TYPE TRUETYPE{0} ANTIALIAS TRUE{0} CHARACTER \"{2}\"{0} FONT \"{3}\"{0}END{0}", Environment.NewLine, symbolname, sym.character, sym.font)); } if (c > 33) { // the first class is already inserted classObj class2 = classobj.clone(); class2.name = symbolname; styleObj style2 = class2.getStyle(0); style2.setSymbolByName(map, symbolname); layer.insertClass(class2, -1); } else { styleObj style2 = classobj.getStyle(0); style2.setSymbolByName(map, symbolname); } } if (!classobj.name.EndsWith("-33")) { classobj.name += "-33"; } } layer.removeMetaData("character-count"); } } if (newSymbols.Length > 0) { // writing the new symbols to the symbolset file int lastpos = symbolSetFileContents.LastIndexOf("END", StringComparison.InvariantCultureIgnoreCase); symbolSetFileContents = symbolSetFileContents.Substring(0, lastpos) + newSymbols.ToString() + "END"; File.WriteAllText(symbolsetFileName, symbolSetFileContents); } if (newFonts.Length > 0) { // writing the new fonts to the fontset file File.WriteAllText(fontsetFileName, fontSetFileContents + newFonts.ToString()); } }
/// <summary> /// Validating event handler of the scintillaControlSymbolset control. /// </summary> /// <param name="sender">The source object of this event.</param> /// <param name="layer">The selected layer.</param> private void scintillaControlSymbolset_Validating(object sender, CancelEventArgs e) { if (symbolsetChanged) { // validating string fileName = Path.GetTempFileName(); try { File.WriteAllText(fileName, scintillaControlSymbolset.Text); // test whether we can parse the symbolset symbolSetObj s = new symbolSetObj(fileName); // make sure we have all symbol references Hashtable symbolNames = new Hashtable(); for (int i = 0; i < s.numsymbols; i++) { string symbolName = s.getSymbol(i).name; if (symbolName != null && !symbolNames.ContainsKey(symbolName)) { symbolNames.Add(symbolName, symbolName); } } mapObj map = StyleLibrary.Styles; s = map.symbolset; for (int i = 0; i < s.numsymbols; i++) { symbolObj sym = s.getSymbol(i); string symbolName = sym.name; if (symbolName != null && sym.inmapfile == mapscript.MS_TRUE && !symbolNames.ContainsKey(symbolName)) { symbolNames.Add(symbolName, symbolName); } } for (int i = 0; i < map.numlayers; i++) { layerObj layer = map.getLayer(i); for (int j = 0; j < layer.numclasses; j++) { classObj classobj = layer.getClass(j); for (int k = 0; k < classobj.numstyles; k++) { string symbolName = classobj.getStyle(k).symbolname; if (symbolName != null && !symbolNames.ContainsKey(symbolName)) { throw new Exception("Symbol name '" + symbolName + "' is missing from the symbolset file!"); } } } } } catch (Exception ex) { if (MessageBox.Show(ex.Message + "\n\rPress OK to correct the errors or Cancel to ignore the changes!", "MapManager", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) == DialogResult.OK) { e.Cancel = true; } else { LoadSymbolset(); } return; } finally { if (File.Exists(fileName)) { File.Delete(fileName); } } // validation ok, ask whether to save or not DialogResult res = MessageBox.Show("Do you wish to save the modifications of the symbolset?", "MapManager", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (res == DialogResult.Yes) { SaveSymbolset(); // the symbolset has changed, need to reload view timerRefresh.Enabled = true; } else if (res == DialogResult.No) { LoadSymbolset(); } else if (res == DialogResult.Cancel) { e.Cancel = true; } } }
/// <summary> /// Create the theme according to the individual values of the layer contents /// </summary> private MapObjectHolder CreateLayerTheme() { if (layer == null) { return(null); } mapObj map = target.GetParent(); // create a new map object mapObj newMap = new mapObj(null); newMap.units = MS_UNITS.MS_PIXELS; map.selectOutputFormat(map.imagetype); // copy symbolset for (int s = 1; s < map.symbolset.numsymbols; s++) { symbolObj origsym = map.symbolset.getSymbol(s); newMap.symbolset.appendSymbol(MapUtils.CloneSymbol(origsym)); } // copy the fontset string key = null; while ((key = map.fontset.fonts.nextKey(key)) != null) { newMap.fontset.fonts.set(key, map.fontset.fonts.get(key, "")); } newLayer = new layerObj(newMap); newLayer.type = layer.type; newLayer.status = mapscript.MS_ON; newLayer.connectiontype = MS_CONNECTION_TYPE.MS_INLINE; // add the classObj and styles classObj classobj; if (checkBoxKeepStyles.Checked) { classobj = layer.getClass(0).clone(); classobj.setExpression(""); // remove expression to have the class shown // bindings are not supported with sample maps for (int s = 0; s < classobj.numstyles; s++) { StyleBindingController.RemoveAllBindings(classobj.getStyle(s)); } for (int l = 0; l < classobj.numlabels; l++) { LabelBindingController.RemoveAllBindings(classobj.getLabel(l)); } newLayer.insertClass(classobj, -1); } else { classobj = new classObj(newLayer); classobj.name = MapUtils.GetClassName(newLayer); styleObj style = new styleObj(classobj); style.size = 8; // set default size (#4339) if (layer.type == MS_LAYER_TYPE.MS_LAYER_POINT) { // initialize with the default marker if specified in the symbol file for point symbols symbolObj symbol; for (int s = 0; s < map.symbolset.numsymbols; s++) { symbol = map.symbolset.getSymbol(s); if (symbol.name == "default-marker") { style.symbol = s; style.symbolname = "default-marker"; break; } } } MapUtils.SetDefaultColor(layer.type, style); } SortedDictionary <string, string> items = new SortedDictionary <string, string>(); int i = 0; shapeObj shape; layer.open(); layer.whichShapes(layer.getExtent()); if (checkBoxClassItem.Checked) { layer.classitem = comboBoxColumns.SelectedItem.ToString(); } while ((shape = layer.nextShape()) != null) { string value = shape.getValue(comboBoxColumns.SelectedIndex); if (checkBoxZero.Checked && (value == "" || value == "")) { continue; } if (!items.ContainsValue(value)) { if (i == 100) { if (MessageBox.Show("The number of the individual values is greater than 100 would you like to continue?", "MapManager", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.Cancel) { break; } } items.Add(value, value); ++i; } } if (layer.getResults() == null) { layer.close(); // close only is no query results } i = 0; foreach (string value in items.Keys) { double percent = ((double)(i + 1)) / items.Count * 100; // creating the corresponding class object if (i > 0) { classobj = classobj.clone(); // bindings are not supported with sample maps for (int s = 0; s < classobj.numstyles; s++) { StyleBindingController.RemoveAllBindings(classobj.getStyle(s)); } for (int l = 0; l < classobj.numlabels; l++) { LabelBindingController.RemoveAllBindings(classobj.getLabel(l)); } newLayer.insertClass(classobj, -1); } classobj.name = value; if (checkBoxClassItem.Checked) { classobj.setExpression(value); } else { classobj.setExpression("('[" + comboBoxColumns.SelectedItem + "]' = '" + value + "')"); } for (int j = 0; j < classobj.numstyles; j++) { styleObj style = classobj.getStyle(j); style.color = colorRampPickerColor.GetMapColorAtValue(percent); style.outlinecolor = colorRampPickerOutlineColor.GetMapColorAtValue(percent); style.backgroundcolor = colorRampPickerBackgroundColor.GetMapColorAtValue(percent); if (checkBoxFirstOnly.Checked) { break; } } ++i; } return(new MapObjectHolder(newLayer, new MapObjectHolder(newMap, null))); }
private void UpdateStyleList() { string selectedName = style.symbolname; if (listView.SelectedItems.Count > 0) { selectedName = listView.SelectedItems[0].Text; } // populate the style listview listView.Items.Clear(); imageList.Images.Clear(); ListViewItem selected = null; if (comboBoxCategory.Text != "") { // Create "no symbol" entry styleObj nosymbolstyle = new styleObj(null); MapUtils.SetDefaultColor(layer.type, nosymbolstyle); ListViewItem nosymbolitem = AddListItem(nosymbolstyle, layer, "Default"); if (selectedName == null) { selected = nosymbolitem; } if (comboBoxCategory.Text == "Inline Symbols") { for (int i = 0; i < map.symbolset.numsymbols; i++) { symbolObj symbol = map.symbolset.getSymbol(i); if (symbol.inmapfile == mapscript.MS_TRUE && !StyleLibrary.HasSymbol(symbol.name)) { styleObj libstyle = new styleObj(null); //if (symbol.type == (int)MS_SYMBOL_TYPE.MS_SYMBOL_PATTERNMAP) // MapUtils.SetDefaultColor(MS_LAYER_TYPE.MS_LAYER_LINE, libstyle); //else MapUtils.SetDefaultColor(layer.type, libstyle); libstyle.setSymbolByName(map, symbol.name); libstyle.size = 8; MS_LAYER_TYPE type = layer.type; try { //STEPH: change layer passed to the list view to be consistent with the other symbol categories //so that it uses a point layer to display the style in the list layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; ListViewItem item = AddListItem(libstyle, layer, symbol.name); if (selectedName == item.Text) { selected = item; } } finally { layer.type = type; } } } } else { // collect all fonts specified in the fontset file Hashtable fonts = new Hashtable(); string key = null; while ((key = map.fontset.fonts.nextKey(key)) != null) { fonts.Add(key, key); } mapObj styles = StyleLibrary.Styles; layerObj stylelayer = styles.getLayerByName(comboBoxCategory.Text); for (int i = 0; i < stylelayer.numclasses; i++) { classObj classobj = stylelayer.getClass(i); int symbolIndex = classobj.getStyle(0).symbol; if (symbolIndex >= 0) { string font = styles.symbolset.getSymbol(symbolIndex).font; if (font != null && !fonts.ContainsKey(font)) { continue; // this font cannot be found in fontset } } ListViewItem item = AddListItem(classobj.getStyle(0), stylelayer, classobj.name); if (selectedName == item.Text) { selected = item; } } } } if (selected != null) { selected.Selected = true; selected.EnsureVisible(); } }
/// <summary> /// Refresh the controls according to the underlying object. /// </summary> public void RefreshView() { listView.Items.Clear(); if (map != null) { // setting up the icon background colors createLegendIcon // will take over the legend imagecolor setting from the map object int red = map.legend.imagecolor.red; int green = map.legend.imagecolor.green; int blue = map.legend.imagecolor.blue; map.legend.imagecolor.red = this.BackColor.R; map.legend.imagecolor.green = this.BackColor.G; map.legend.imagecolor.blue = this.BackColor.B; listView.BackColor = this.BackColor; using (outputFormatObj format = map.outputformat) { string imageType = null; if ((format.renderer != mapscript.MS_RENDER_WITH_GD && format.renderer != mapscript.MS_RENDER_WITH_AGG) || string.Compare(format.mimetype.Trim(), "image/vnd.wap.wbmp", true) == 0 || string.Compare(format.mimetype.Trim(), "image/tiff", true) == 0 || string.Compare(format.mimetype.Trim(), "image/jpeg", true) == 0) { // falling back to the png type in case of the esoteric or bad looking types imageType = map.imagetype; map.selectOutputFormat("png24"); } imageList.Images.Clear(); imageList.ImageSize = new Size(30, 20); try { for (int i = 0; i < map.numlayers; i++) { layerObj layer = map.getLayer(i); if (layer.status != mapscript.MS_OFF) { resultObj res; shapeObj feature; using (resultCacheObj results = layer.getResults()) { if (results != null && results.numresults > 0) { // creating the icon for this layer using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image = def_class.createLegendIcon(map, layer, 30, 20)) { // drawing the class icons layer.getClass(0).drawLegendIcon(map, layer, 20, 10, image, 5, 5); byte[] img = image.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { imageList.Images.Add(Image.FromStream(ms)); } } } // extracting the features found for (int j = 0; j < results.numresults; j++) { res = results.getResult(j); feature = layer.getShape(res); if (feature != null) { ListViewItem item = new ListViewItem(layer.name, imageList.Images.Count - 1); item.SubItems.Add(feature.index.ToString()); item.SubItems.Add(MapUtils.GetShapeTypeName((MS_SHAPE_TYPE)feature.type)); listView.Items.Add(item); StringBuilder s = new StringBuilder(""); s.AppendLine("Feature Properties:"); for (int k = 0; k < layer.numitems; k++) { s.Append(layer.getItem(k)); s.Append(" = "); s.AppendLine(feature.getValue(k)); } item.Tag = s.ToString(); } } } } } } } finally { // switch back to the original type if (imageType != null) { map.selectOutputFormat(imageType); } // restoring the original legend backgroundcolor map.legend.imagecolor.red = red; map.legend.imagecolor.green = green; map.legend.imagecolor.blue = blue; } listView.SmallImageList = imageList; } if (listView.Items.Count > 0) { listView.Items[0].Selected = true; } else { richTextBox.Text = ""; } } }
/// <summary> /// Refresh the controls according to the underlying object. /// </summary> public void RefreshView() { if (style == null) { return; } //STEPH: set first load flag to make sure values are not updated by listView_SelectedIndexChanged event firstLoad = true; checkBoxAntialias.Checked = (style.antialias == mapscript.MS_TRUE); if (style.size < 0) // set default size (#4339) { textBoxSize.Text = "8"; } else { textBoxSize.Text = style.size.ToString(); } styleBindingControllerSize.InitializeBinding(target); textBoxMinSize.Text = style.minsize.ToString(); textBoxMaxSize.Text = style.maxsize.ToString(); textBoxWidth.Text = style.width.ToString(); styleBindingControllerWidth.InitializeBinding(target); textBoxAngle.Text = style.angle.ToString(); styleBindingControllerAngle.InitializeBinding(target); textBoxMinWidth.Text = style.minwidth.ToString(); textBoxMaxWidth.Text = style.maxwidth.ToString(); textBoxOffsetX.Text = style.offsetx.ToString(); textBoxOffsetY.Text = style.offsety.ToString(); this.colorPickerColor.SetColor(style.color); styleBindingControllerColor.InitializeBinding(target); this.colorPickerBackColor.SetColor(style.backgroundcolor); this.colorPickerOutlineColor.SetColor(style.outlinecolor); styleBindingControllerOutlineColor.InitializeBinding(target); trackBarOpacity.Value = style.opacity; labelOpacityPercent.Text = trackBarOpacity.Value + "%"; checkBoxAutoAngle.Checked = (style.autoangle == mapscript.MS_TRUE); comboBoxGeomTransform.Items.Clear(); if (isLabelStyle) { comboBoxGeomTransform.Items.AddRange(new string[] { "labelpnt", "labelpoly" }); } else { comboBoxGeomTransform.Items.AddRange(new string[] { "start", "end", "vertices", "bbox", "centroid" }); } comboBoxGeomTransform.Text = style.getGeomTransform(); textBoxGap.Text = style.gap.ToString(); textBoxPattern.Text = GetPattenString(style.pattern); if (style.minscaledenom >= 0) { textBoxMinZoom.Text = style.minscaledenom.ToString(); } else { textBoxMinZoom.Text = ""; } if (style.maxscaledenom >= 0) { textBoxMaxZoom.Text = style.maxscaledenom.ToString(); } else { textBoxMaxZoom.Text = ""; } // populate the category combo mapObj styles = StyleLibrary.Styles; string selectedCategory = null; bool isStyleSelected = false; for (int i = styles.numlayers - 1; i > -1; i--) { layerObj stylelayer = styles.getLayer(i); if (isLabelStyle) { // for label styles add polygon and point categories if (stylelayer.type == MS_LAYER_TYPE.MS_LAYER_POLYGON || stylelayer.type == MS_LAYER_TYPE.MS_LAYER_POINT) { comboBoxCategory.Items.Add(stylelayer.name); } if (selectedCategory == null && ((stylelayer.type == MS_LAYER_TYPE.MS_LAYER_POLYGON && style.getGeomTransform().Contains("labelpoly")) || (stylelayer.type == MS_LAYER_TYPE.MS_LAYER_POINT && style.getGeomTransform().Contains("labelpnt")))) { selectedCategory = stylelayer.name; // for label style select default } } else if ((layer.type == MS_LAYER_TYPE.MS_LAYER_POLYGON || layer.type == MS_LAYER_TYPE.MS_LAYER_CIRCLE) && (stylelayer.type == MS_LAYER_TYPE.MS_LAYER_POLYGON || stylelayer.type == MS_LAYER_TYPE.MS_LAYER_LINE)) { comboBoxCategory.Items.Add(stylelayer.name); if (selectedCategory == null) { selectedCategory = stylelayer.name; // for polygon layers select default } } else if (layer.type == MS_LAYER_TYPE.MS_LAYER_LINE && stylelayer.type == MS_LAYER_TYPE.MS_LAYER_LINE) { comboBoxCategory.Items.Add(stylelayer.name); if (selectedCategory == null) { selectedCategory = stylelayer.name; // for line layers select default } } else if (stylelayer.type == MS_LAYER_TYPE.MS_LAYER_POINT) { comboBoxCategory.Items.Add(stylelayer.name); if (selectedCategory == null) { selectedCategory = stylelayer.name; // for point layers select default } } // select the style if (style.symbolname != null) { for (int c = 0; c < stylelayer.numclasses; c++) { classObj styleclass = stylelayer.getClass(c); styleObj libstyle = styleclass.getStyle(0); if (style.symbolname == libstyle.symbolname) { selectedCategory = stylelayer.name; isStyleSelected = true; break; } } } } // check if we have inline symbols added to the map file bool inlineAdded = false; for (int i = 0; i < map.symbolset.numsymbols; i++) { symbolObj symbol = map.symbolset.getSymbol(i); if (symbol.inmapfile == mapscript.MS_TRUE && !StyleLibrary.HasSymbol(symbol.name)) { if (!inlineAdded) { comboBoxCategory.Items.Add("Inline Symbols"); inlineAdded = true; } if (!isStyleSelected && style.symbolname == symbol.name) { selectedCategory = "Inline Symbols"; } } } if (selectedCategory != null) { comboBoxCategory.SelectedItem = selectedCategory; } else if (comboBoxCategory.Items.Count > 0) { comboBoxCategory.SelectedIndex = 0; } SetDirty(false); }
/// <summary> /// get eachof the contents of classobj in the layerobj /// </summary> /// <param name="layer"></param> private void GetClassOfLayer(layerObj layer) { if (layer == null) return; int iCount = layer.numclasses; dataGridViewClass.AllowUserToAddRows = false; if (dataGridViewClass.Rows.Count > 0) dataGridViewClass.Rows.Clear(); for (int i = 0; i < iCount; i++) { classObj pClass = layer.getClass(i); imageObj pSymbolImage = pClass.createLegendIcon(m_pLayer.map, m_pEditLayer, 90, 20); byte[] buffer = pSymbolImage.getBytes(); System.IO.MemoryStream ms = new System.IO.MemoryStream(); ms.Write(buffer, 0, buffer.Length); Image pBitMap = Image.FromStream(ms); ms.Dispose(); pSymbolImage.Dispose(); object[] pMetaRow = new object[4]; pMetaRow[0] = pClass.name; pMetaRow[1] = pClass.getExpressionString(); pMetaRow[2] = pBitMap; //indecate if there is a label obj if (pClass.label != null) pMetaRow[3] = "YES"; else pMetaRow[3] = "NO"; dataGridViewClass.Rows.Add(pMetaRow); pClass.Dispose(); } }
/// <summary> /// Create the theme according to the individual values of the layer contents /// </summary> private MapObjectHolder CreateLayerTheme() { if (layer == null) { return(null); } int index; for (index = 0; index < fieldName.Length; index++) { if (fieldName[index] == comboBoxColumns.Text) { break; } } if (index == fieldName.Length) { return(null); } NumberFormatInfo ni = new NumberFormatInfo(); ni.NumberDecimalSeparator = "."; mapObj map = target.GetParent(); // create a new map object mapObj newMap = new mapObj(null); newMap.units = MS_UNITS.MS_PIXELS; map.selectOutputFormat(map.imagetype); // copy symbolset for (int s = 1; s < map.symbolset.numsymbols; s++) { symbolObj origsym = map.symbolset.getSymbol(s); newMap.symbolset.appendSymbol(MapUtils.CloneSymbol(origsym)); } // copy the fontset string key = null; while ((key = map.fontset.fonts.nextKey(key)) != null) { newMap.fontset.fonts.set(key, map.fontset.fonts.get(key, "")); } newLayer = new layerObj(newMap); newLayer.type = layer.type; newLayer.status = mapscript.MS_ON; newLayer.connectiontype = MS_CONNECTION_TYPE.MS_INLINE; // add the classObj and styles classObj classobj; if (checkBoxKeepStyles.Checked) { classobj = layer.getClass(0).clone(); classobj.setExpression(""); // remove expression to have the class shown // bindings are not supported with sample maps for (int s = 0; s < classobj.numstyles; s++) { StyleBindingController.RemoveAllBindings(classobj.getStyle(s)); } for (int l = 0; l < classobj.numlabels; l++) { LabelBindingController.RemoveAllBindings(classobj.getLabel(l)); } newLayer.insertClass(classobj, -1); } else { classobj = new classObj(newLayer); classobj.name = MapUtils.GetClassName(newLayer); styleObj style = new styleObj(classobj); style.size = 8; // set default size (#4339) if (layer.type == MS_LAYER_TYPE.MS_LAYER_POINT) { // initialize with the default marker if specified in the symbol file for point symbols symbolObj symbol; for (int s = 0; s < map.symbolset.numsymbols; s++) { symbol = map.symbolset.getSymbol(s); if (symbol.name == "default-marker") { style.symbol = s; style.symbolname = "default-marker"; break; } } } MapUtils.SetDefaultColor(layer.type, style); } // calculate breaks int classes = (int)numericUpDownClasses.Value; double[] breaks = null; if (comboBoxMode.SelectedIndex == 0) { breaks = CalculateEqualInterval(classes, index); } if (breaks == null) { return(null); } for (int i = 0; i < classes; i++) { double percent = ((double)(i + 1)) / classes * 100; // creating the corresponding class object if (i > 0) { classobj = classobj.clone(); // bindings are not supported with sample maps for (int s = 0; s < classobj.numstyles; s++) { StyleBindingController.RemoveAllBindings(classobj.getStyle(s)); } for (int l = 0; l < classobj.numlabels; l++) { LabelBindingController.RemoveAllBindings(classobj.getLabel(l)); } newLayer.insertClass(classobj, -1); } classobj.name = breaks[i].ToString(ni) + " - " + breaks[i + 1].ToString(ni); classobj.setExpression("(([" + comboBoxColumns.SelectedItem + "] >= " + breaks[i].ToString(ni) + ") && ([" + comboBoxColumns.SelectedItem + "] <= " + breaks[i + 1].ToString(ni) + "))"); for (int j = 0; j < classobj.numstyles; j++) { styleObj style = classobj.getStyle(j); style.color = colorRampPickerColor.GetMapColorAtValue(percent); style.outlinecolor = colorRampPickerOutlineColor.GetMapColorAtValue(percent); style.backgroundcolor = colorRampPickerBackgroundColor.GetMapColorAtValue(percent); if (checkBoxFirstOnly.Checked) { break; } } } return(new MapObjectHolder(newLayer, new MapObjectHolder(newMap, null))); }
/// <summary> /// Export a legend image with specific requirements (bug 1015) /// </summary> /// <param name="map">The map object</param> /// <param name="width">The desired legend width</param> /// <param name="height">The desired legend height</param> /// <returns></returns> public static byte[] ExportLegend(mapObj map) { int width = 10; int height = 10; Bitmap bmp = null; Graphics g = null; for (int phase = 0; phase < 2; phase++) { if (phase == 0) { bmp = new Bitmap(100, 100, System.Drawing.Imaging.PixelFormat.Format24bppRgb); } else { bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); } g = Graphics.FromImage(bmp); Stack groupPositions = new Stack(); // for storing the group text positions Font legendFont = new Font("MS Sans Sherif", 8); // set default font g.Clear(Color.White); // clear the background int xPos = 5; // padding int yPos = 5; int xOffset = 24; // legend indent in pixels int yOffset = 18; // item height in pixels // force the recalculation of the current scale map.setExtent(map.extent.minx, map.extent.miny, map.extent.maxx, map.extent.maxy); // start drawing the legend in reverse layer order using (intarray ar = map.getLayersDrawingOrder()) { for (int i = map.numlayers - 1; i >= 0; i--) { layerObj layer = map.getLayer(ar.getitem(i)); if (layer.name == "__embed__scalebar" || layer.name == "__embed__legend" || layer.status == mapscript.MS_OFF || layer.name.StartsWith("~")) { continue; } if (map.scaledenom > 0) { if (layer.maxscaledenom > 0 && map.scaledenom > layer.maxscaledenom) { continue; } if (layer.minscaledenom > 0 && map.scaledenom <= layer.minscaledenom) { continue; } } if (layer.maxscaledenom <= 0 && layer.minscaledenom <= 0) { if (layer.maxgeowidth > 0 && ((map.extent.maxx - map.extent.minx) > layer.maxgeowidth)) { continue; } if (layer.mingeowidth > 0 && ((map.extent.maxx - map.extent.minx) < layer.mingeowidth)) { continue; } } // draw raster or WMS layers if (layer.type == MS_LAYER_TYPE.MS_LAYER_RASTER) { if (phase == 1) { g.DrawIcon(global::MapLibrary.Properties.Resources.raster, xPos, yPos); g.DrawString(layer.name, legendFont, Brushes.Black, xPos + 30, yPos + 2); } SizeF size = g.MeasureString(layer.name, legendFont); if (xPos + 30 + size.Width + 5 > width) { width = Convert.ToInt32(xPos + 30 + size.Width + 5); } yPos += yOffset; continue; } int numClasses = 0; Image legendImage = null; string legendText = null; for (int j = 0; j < layer.numclasses; j++) { classObj layerclass = layer.getClass(j); if (layerclass.name == "EntireSelection" || layerclass.name == "CurrentSelection") { continue; } if (layerclass.status == mapscript.MS_OFF) { continue; } if (map.scaledenom > 0) { /* verify class scale here */ if (layerclass.maxscaledenom > 0 && (map.scaledenom > layerclass.maxscaledenom)) { continue; } if (layerclass.minscaledenom > 0 && (map.scaledenom <= layerclass.minscaledenom)) { continue; } } if (numClasses == 1) { // draw subclasses xPos += xOffset; if (phase == 1) { // drawing the first class item (same as the layer) g.DrawImage(legendImage, xPos, yPos); g.DrawString(legendText, legendFont, Brushes.Black, xPos + 30, yPos + 2); } SizeF size = g.MeasureString(legendText, legendFont); if (xPos + 30 + size.Width + 5 > width) { width = Convert.ToInt32(xPos + 30 + size.Width + 5); } yPos += yOffset; } ++numClasses; // number of visible classes // creating the treeicons using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image = def_class.createLegendIcon(map, layer, 30, 20)) { // drawing the class icons layerclass.drawLegendIcon(map, layer, 20, 10, image, 5, 5); byte[] img = image.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { legendImage = Image.FromStream(ms); legendText = layerclass.name; if (phase == 1) { g.DrawImage(legendImage, xPos, yPos); } if (numClasses > 1) { // draw the class item if (phase == 1) { g.DrawString(layerclass.name, legendFont, Brushes.Black, xPos + 30, yPos + 3); } SizeF size = g.MeasureString(layerclass.name, legendFont); if (xPos + 30 + size.Width + 5 > width) { width = Convert.ToInt32(xPos + 30 + size.Width + 5); } } else { // draw the layer item if (phase == 1) { g.DrawString(layer.name, legendFont, Brushes.Black, xPos + 30, yPos + 3); } SizeF size = g.MeasureString(layer.name, legendFont); if (xPos + 30 + size.Width + 5 > width) { width = Convert.ToInt32(xPos + 30 + size.Width + 5); } if (string.Compare(layer.styleitem, "AUTO", true) == 0) { yPos += yOffset; break; } } } } } yPos += yOffset; } if (numClasses > 1) { xPos -= xOffset; } } } height = yPos + 5; } g.Flush(); MemoryStream ms2 = new MemoryStream(); bmp.Save(ms2, System.Drawing.Imaging.ImageFormat.Png); return(ms2.ToArray()); }
private void AddLayerClassNode(layerObj layer, TreeNode layernode) { if ((layer == null) || (layernode == null)) return; int iClassCount = layer.numclasses; for (int i = 0; i < iClassCount; i++) { classObj pClass = layer.getClass(i); imageObj pSymbolImage = pClass.createLegendIcon(m_pMap, layer, 16, 16); byte[] buffer = pSymbolImage.getBytes(); System.IO.MemoryStream ms = new System.IO.MemoryStream(); ms.Write(buffer, 0, buffer.Length); imageListLeg.Images.Add(Image.FromStream(ms)); ms.Dispose(); pSymbolImage.Dispose(); int iIndex = imageListLeg.Images.Count - 1; TreeNode subNode2 = new TreeNode("", iIndex, iIndex); layernode.Nodes.Add(subNode2); } }