/// <summary> /// Update the preview according to the changes /// </summary> private void UpdatePreview() { if (style != null && enablePreview) { styleObj pstyle = style.clone(); Update(pstyle); classObj styleclass = new classObj(null); styleclass.insertStyle(pstyle, -1); using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon( map, layer, pictureBoxPreview.Width, pictureBoxPreview.Height)) { styleclass.drawLegendIcon(map, layer, pictureBoxPreview.Width - 10, pictureBoxPreview.Height - 10, image2, 4, 4); byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { pictureBoxPreview.Image = Image.FromStream(ms); } } } } else { pictureBoxPreview.Image = null; } }
/// <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); } } }
/// <summary> /// Update the list item according to a modified style /// </summary> /// <param name="index">the index of the lit item</param> /// <param name="style">the style object</param> private void UpdateStyleInList(int index) { layerObj layer; if (target.GetParent().GetType() == typeof(scalebarObj)) { layer = new layerObj(null); } else { layer = target.GetParent().GetParent(); } ListViewItem item = listViewStyles.Items[index]; styleObj style = (styleObj)item.Tag; classObj styleclass = new classObj(null); styleclass.insertStyle(style, -1); // creating the list icon using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon(map, layer, 30, 20)) { MS_LAYER_TYPE type = layer.type; try { // modify the layer type in certain cases for drawing correct images string geomtransform = style.getGeomTransform().ToLower(); if (geomtransform != null) { if (geomtransform.Contains("labelpoly")) { layer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON; } else if (geomtransform.Contains("labelpnt")) { layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; } } styleclass.drawLegendIcon(map, layer, 20, 10, image2, 5, 5); } finally { layer.type = type; } byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { imageList.Images[item.ImageIndex] = Image.FromStream(ms); } item.SubItems[1].Text = style.size.ToString(); item.SubItems[2].Text = style.width.ToString(); item.SubItems[3].Text = style.symbolname; } } }
private void buttonOK_Click(object sender, EventArgs e) { if(m_pCurrentLayer != null) { classObj pClass = new classObj(m_pCurrentLayer); if (textBoxClassName.Text.Trim().Length > 0) pClass.name = textBoxClassName.Text; if (textBoxGroup.Text.Trim().Length > 0) pClass.group = textBoxGroup.Text; if (textBoxExpression.Text.Trim().Length > 0) pClass.setExpression(textBoxExpression.Text); } else if (m_pCurrentClass != null) { if (textBoxClassName.Text.Trim().Length > 0) m_pCurrentClass.name = textBoxClassName.Text; else m_pCurrentClass.name = null; if (textBoxGroup.Text.Trim().Length > 0) m_pCurrentClass.group = textBoxGroup.Text; else m_pCurrentClass.group = null; if (textBoxExpression.Text.Trim().Length > 0) m_pCurrentClass.setExpression(textBoxExpression.Text); else m_pCurrentClass.setExpression(null); } this.DialogResult = DialogResult.Yes; this.Close(); }
internal static HandleRef getCPtrAndSetReference(classObj obj, object parent) { if (obj != null) { obj.swigParentRef = parent; return obj.swigCPtr; } else { return new HandleRef(null, IntPtr.Zero); } }
/// <summary> /// Create a new classObj with random color setting added to the parent layer. /// </summary> /// <param name="layer">The parent layer object.</param> public static void CreateRandomClass(layerObj layer) { using (classObj newclass = new classObj(layer)) { newclass.name = GetClassName(layer); newclass.template = "query.html"; styleObj style = new styleObj(newclass); style.size = 8; // set default size (#4339) SetDefaultColor(layer.type, style); } }
//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 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"); }
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"); }
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"); }
internal static HandleRef getCPtrAndDisown(classObj obj, object parent) { if (obj != null) { obj.swigCMemOwn = false; obj.swigParentRef = parent; return obj.swigCPtr; } else { return new HandleRef(null, IntPtr.Zero); } }
public void testRemoveClassObj() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj newClass = new classObj(null); layer.insertClass(newClass, 0); layer.removeClass(0); map = null; layer = null; gc(); assert(newClass.refcount == 1, "testRemoveClassObj"); }
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 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 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 void testInsertClassObj() { mapObj map = new mapObj(mapfile); layerObj layer = map.getLayer(1); classObj newClass = new classObj(null); layer.insertClass(newClass, -1); assertNotNull(newClass.layer, "testInsertClassObj precondition"); map = null; layer = null; gc(); assertNotNull(newClass.layer, "testInsertClassObj"); assert(newClass.refcount == 2, "testInsertClassObj refcount"); }
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 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"); }
private ListViewItem AddListItem(styleObj classStyle, layerObj layer, string name) { ListViewItem item = null; classObj styleclass = new classObj(null); styleclass.insertStyle(classStyle, -1); mapObj map2 = map; if (layer.map != null) { map2 = layer.map; } // creating the listicons using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon( map2, layer, imageList.ImageSize.Width, imageList.ImageSize.Height)) { MS_LAYER_TYPE type = layer.type; try { //SETPH: actually we should not modify the type of the style(point line polygon) for the style category list, only for the preview //// modify the layer type in certain cases for drawing correct images //if (comboBoxGeomTransform.Text.ToLower().Contains("labelpoly")) //layer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON; //else if (comboBoxGeomTransform.Text.ToLower().Contains("labelpnt")) //layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; styleclass.drawLegendIcon(map2, layer, 44, 44, image2, 2, 2); } finally { layer.type = type; } byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { imageList.Images.Add(Image.FromStream(ms)); } // add new item item = new ListViewItem(name, imageList.Images.Count - 1); item.ToolTipText = name; item.Tag = classStyle; listView.Items.Add(item); } } return(item); }
public LabelEditorDialog(classObj inClass, mapObj map) : this(inClass) { m_pMap = map; if(m_pMap != null) { //add all the font int fontlist to the combox hashTableObj pFontList = m_pMap.fontset.fonts; string value = pFontList.nextKey(null); while(value != null) { comboBoxFont.Items.Add(value); value = pFontList.nextKey(value); } } }
/// <summary> /// EditProperties Event handler for the layerControlStyles object. /// </summary> /// <param name="sender">The source object of this event.</param> /// <param name="e">Event parameters.</param> private void layerControlStyles_EditProperties(object sender, MapObjectHolder target) { try { MapPropertyEditorForm mapPropertyEditor; if (target.GetType() == typeof(classObj)) { classObj classobj = target; if (classobj.numstyles <= 0) { // adding an empty style to this class styleObj style = new styleObj(classobj); } mapPropertyEditor = new MapPropertyEditorForm( new MapObjectHolder(classobj.getStyle(0), target), new StyleLibraryPropertyEditor()); } else if (target.GetType() == typeof(styleObj)) { mapPropertyEditor = new MapPropertyEditorForm(target, new StyleLibraryPropertyEditor()); } else { return; } propertyChanged = false; target.PropertyChanged += new EventHandler(target_PropertyChanged); mapPropertyEditor.ShowDialog(this); if (propertyChanged) { layerControlStyles.RefreshView(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "MapManager", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
/// <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> /// Adding a new labelObj to the corresponding classObj. /// </summary> /// <param name="nodes">The TreeNodeCollection of the parent object</param> /// <param name="labelHolder">Wrapper class containing the labelObj and the parent object</param> /// <param name="imageList">The image list where the label image should be stored.</param> /// <param name="index">The current index of the label object.</param> private void AddLabelNode(TreeNodeCollection nodes, MapObjectHolder labelHolder, ImageList imageList, int index) { layerObj layer = labelHolder.GetParent().GetParent(); classObj layerclass = labelHolder.GetParent(); labelObj classLabel = labelHolder; classObj labelclass = new classObj(null); labelclass.name = MapUtils.GetClassName(layer); labelclass.addLabel(classLabel); // creating the treeicons using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon( map, layer, legendIconSize.Width, legendIconSize.Height)) { MS_LAYER_TYPE layertype = layer.type; layer.type = MS_LAYER_TYPE.MS_LAYER_ANNOTATION; labelclass.drawLegendIcon(map, layer, legendDrawingSize.Width, legendDrawingSize.Height, image2, LegendIconPadding.Left, LegendIconPadding.Top); layer.type = layertype; byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { imageList.Images.Add(Image.FromStream(ms)); } TreeNode labelNode = new TreeNode("Label (" + index + ")", imageList.Images.Count - 1, imageList.Images.Count - 1); labelNode.Tag = labelHolder; labelNode.Checked = true; nodes.Add(labelNode); } } }
/// <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))); }
/// <summary> /// Update the Sample image according to the selected element /// </summary> /// <param name="target">Selected element</param> private void UpdateSample(MapObjectHolder target) { layerObj layer = null; mapObj map = null; classObj classobj = null; if (target.GetType() == typeof(layerObj)) { layer = target; map = layer.map; classobj = layer.getClass(0); } else if (target.GetType() == typeof(classObj)) { classobj = target; if (classobj != null) { layer = classobj.layer; } if (layer != null) { map = layer.map; } } if (map == null || layer == null || classobj == null) { pictureBoxSample.Image = null; return; } styleObj style = classobj.getStyle(0); double size = style.size; // collect all fonts specified in the fontset file Hashtable fonts = new Hashtable(); string key = null; while ((key = this.map.fontset.fonts.nextKey(key)) != null) { fonts.Add(key, key); } textBoxInfo.Text = ""; if (style.symbol >= 0) { string font = ((mapObj)StyleLibrary.Styles).symbolset.getSymbol(style.symbol).font; if (font != null && !fonts.ContainsKey(font)) { textBoxInfo.Text = "WARNING: The fontset of the map doesn't contain " + font + " font. This symbol will not be selectable on the map."; } } if (layer.type == MS_LAYER_TYPE.MS_LAYER_POINT) { // apply magnification for point styles style.size = size * trackBarMagnify.Value / 4; } try { using (classObj def_class = new classObj(null)) // for drawing legend image { using (imageObj image2 = def_class.createLegendIcon(map, layer, pictureBoxSample.Width, pictureBoxSample.Height)) { classobj.drawLegendIcon(map, layer, pictureBoxSample.Width, pictureBoxSample.Height, image2, 5, 5); byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { pictureBoxSample.Image = Image.FromStream(ms); } } } } finally { style.size = size; } }
/// <summary> /// Update the Sample image according to the selected element /// </summary> /// <param name="target">Selected element</param> private void UpdateSample(MapObjectHolder target) { layerObj layer = null; mapObj map = null; classObj classobj = null; if (target.GetType() == typeof(layerObj)) { layer = target; map = layer.map; classobj = layer.getClass(0); } else if (target.GetType() == typeof(classObj)) { classobj = target; if (classobj != null) layer = classobj.layer; if (layer != null) map = layer.map; } if (map == null || layer == null || classobj == null) { pictureBoxSample.Image = null; return; } styleObj style = classobj.getStyle(0); double size = style.size; // collect all fonts specified in the fontset file Hashtable fonts = new Hashtable(); string key = null; while ((key = this.map.fontset.fonts.nextKey(key)) != null) fonts.Add(key, key); textBoxInfo.Text = ""; if (style.symbol >= 0) { string font = ((mapObj)StyleLibrary.Styles).symbolset.getSymbol(style.symbol).font; if (font != null && !fonts.ContainsKey(font)) { textBoxInfo.Text = "WARNING: The fontset of the map doesn't contain " + font + " font. This symbol will not be selectable on the map."; } } if (layer.type == MS_LAYER_TYPE.MS_LAYER_POINT) { // apply magnification for point styles style.size = size * trackBarMagnify.Value / 4; } try { using (classObj def_class = new classObj(null)) // for drawing legend image { using (imageObj image2 = def_class.createLegendIcon(map, layer, pictureBoxSample.Width, pictureBoxSample.Height)) { classobj.drawLegendIcon(map, layer, pictureBoxSample.Width, pictureBoxSample.Height, image2, 5, 5); byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { pictureBoxSample.Image = Image.FromStream(ms); } } } } finally { style.size = size; } }
/// <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); }
public FormClassSet(classObj inClass) { InitializeComponent(); m_pMcClass = inClass; }
/// <summary> /// check if the input classobj has a style parameter /// a class must have a style item /// </summary> /// <param name="inClass"></param> private void CheckClass(classObj inClass) { if (inClass == null) return; if(inClass.numstyles == 0) { //stle } }
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(); } }
private void UpdatePreview() { if (style != null && enablePreview) { styleObj pstyle = style.clone(); Update(pstyle); // apply current settings (opacity) to colors colorPickerColor.SetColor(pstyle.color); colorPickerBackColor.SetColor(pstyle.backgroundcolor); colorPickerOutlineColor.SetColor(pstyle.outlinecolor); // select the proper map containing symbols mapObj stylemap = map; if (listView.SelectedItems.Count > 0 && listView.SelectedItems[0].Text != "Default") { if (comboBoxCategory.Text != "Inline Symbols") { stylemap = StyleLibrary.Styles; } styleObj classStyle = (styleObj)listView.SelectedItems[0].Tag; pstyle.setSymbolByName(stylemap, classStyle.symbolname); } else { pstyle.symbol = 0; pstyle.symbolname = null; } classObj styleclass = new classObj(null); styleclass.insertStyle(pstyle, -1); using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon( stylemap, layer, pictureBoxSample.Width, pictureBoxSample.Height)) { MS_LAYER_TYPE type = layer.type; try { // modify the layer type in certain cases for drawing correct images if (comboBoxGeomTransform.Text.ToLower().Contains("labelpoly")) { layer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON; } else if (comboBoxGeomTransform.Text.ToLower().Contains("labelpnt") || comboBoxGeomTransform.Text.ToLower().Contains("centroid")) { layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; } styleclass.drawLegendIcon(stylemap, layer, pictureBoxSample.Width - 10, pictureBoxSample.Height - 10, image2, 4, 4); } finally { layer.type = type; } byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { pictureBoxSample.Image = Image.FromStream(ms); } } } } }
/// <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> /// Creating a sample (preview) based on a classObj, styleObj or labelObj. /// </summary> /// <param name="original">The wrapper holding the original object.</param> private void CreateSampleMap(MapObjectHolder original) { MapObjectHolder originalMap = null; MapObjectHolder originalLayer = null; MapObjectHolder originalClass = null; // create a sample map to render a preview of the given object if (original.GetType() == typeof(classObj)) { // tracking down the whole object tree originalLayer = original.GetParent(); if (originalLayer != null) originalMap = originalLayer.GetParent(); // creating a new compatible map object if (originalMap != null) { layerObj layer = InitializeDefaultLayer(originalMap, originalLayer); layer.insertClass(((classObj)original).clone(), -1); // bindings are not supported with sample maps classObj classobj = layer.getClass(0); for (int i = 0; i < classobj.numstyles; i++) StyleBindingController.RemoveAllBindings(classobj.getStyle(i)); for (int i = 0; i < classobj.numlabels; i++) LabelBindingController.RemoveAllBindings(classobj.getLabel(i)); classobj.setText("Sample text"); classobj.setExpression(""); // remove expression to have the class shown this.target = new MapObjectHolder(classobj, original.GetParent()); } } else if (original.GetType() == typeof(styleObj)) { // tracking down the whole object tree if (original.GetParent().GetType() == typeof(labelObj)) originalClass = original.GetParent().GetParent(); else originalClass = original.GetParent(); if (originalClass != null) originalLayer = originalClass.GetParent(); if (originalLayer != null) originalMap = originalLayer.GetParent(); // creating a new compatible map object if (originalMap != null) { layerObj layer = InitializeDefaultLayer(originalMap, originalLayer); classObj classobj = new classObj(layer); classobj.name = MapUtils.GetClassName(layer); styleObj style; if (original.GetParent().GetType() == typeof(labelObj)) { classobj.addLabel(new labelObj()); labelObj label = classobj.getLabel(classobj.numlabels - 1); MapUtils.SetDefaultLabel(label, layer.map); label.insertStyle(((styleObj)original).clone(), -1); style = label.getStyle(0); } else { classobj.insertStyle(((styleObj)original).clone(), -1); style = classobj.getStyle(0); } // bindings are not supported with sample maps StyleBindingController.RemoveAllBindings(style); classobj.setText("Sample text"); this.target = new MapObjectHolder(style, original.GetParent()); } } else if (original.GetType() == typeof(labelObj)) { // tracking down the whole object tree originalClass = original.GetParent(); if (originalClass != null) { if (originalClass.GetType() == typeof(classObj)) { originalLayer = originalClass.GetParent(); if (originalLayer != null) originalMap = originalLayer.GetParent(); } else if (originalClass.GetType() == typeof(scalebarObj)) { originalMap = originalClass.GetParent(); } } // creating a new compatible map object if (originalMap != null) { layerObj layer = InitializeDefaultLayer(originalMap, originalLayer); classObj classobj = new classObj(layer); classobj.name = MapUtils.GetClassName(layer); labelObj label = new labelObj(); if (originalClass.GetType() == typeof(classObj)) { // copy settings label.updateFromString(((labelObj)original).convertToString()); } classobj.addLabel(label); this.target = new MapObjectHolder(layer.getClass(0).getLabel(0), original.GetParent()); } } else throw new Exception("Invalid target type: " + original.GetType()); }
private void UpdatePreview() { if (style != null && enablePreview) { styleObj pstyle = style.clone(); Update(pstyle); // apply current settings (opacity) to colors colorPickerColor.SetColor(pstyle.color); colorPickerBackColor.SetColor(pstyle.backgroundcolor); colorPickerOutlineColor.SetColor(pstyle.outlinecolor); // select the proper map containing symbols mapObj stylemap = map; if (listView.SelectedItems.Count > 0 && listView.SelectedItems[0].Text != "Default") { if (comboBoxCategory.Text != "Inline Symbols") stylemap = StyleLibrary.Styles; styleObj classStyle = (styleObj)listView.SelectedItems[0].Tag; pstyle.setSymbolByName(stylemap, classStyle.symbolname); } else { pstyle.symbol = 0; pstyle.symbolname = null; } classObj styleclass = new classObj(null); styleclass.insertStyle(pstyle, -1); using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon( stylemap, layer, pictureBoxSample.Width, pictureBoxSample.Height)) { MS_LAYER_TYPE type = layer.type; try { // modify the layer type in certain cases for drawing correct images if (comboBoxGeomTransform.Text.ToLower().Contains("labelpoly")) layer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON; else if (comboBoxGeomTransform.Text.ToLower().Contains("labelpnt") || comboBoxGeomTransform.Text.ToLower().Contains("centroid")) layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; styleclass.drawLegendIcon(stylemap, layer, pictureBoxSample.Width - 10, pictureBoxSample.Height - 10, image2, 4, 4); } finally { layer.type = type; } byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { pictureBoxSample.Image = Image.FromStream(ms); } } } } }
/// <summary> /// Adding a new classObj to the corresponding layerObj. /// </summary> /// <param name="nodes">The TreeNodeCollection of the parent object</param> /// <param name="classHolder">Wrapper class containing the classObj and the parent object</param> /// /// <param name="showRoot">A flag indicating whether the root object should be displayed or not.</param> private void AddClassNode(TreeNodeCollection nodes, MapObjectHolder classHolder, ImageList imageList) { layerObj layer = classHolder.GetParent(); classObj layerclass = classHolder; // creating the treeicons using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image = def_class.createLegendIcon( map, layer, legendIconSize.Width, legendIconSize.Height)) { // drawing the class icons layerclass.drawLegendIcon(map, layer, legendDrawingSize.Width, legendDrawingSize.Height, image, LegendIconPadding.Left, LegendIconPadding.Top); byte[] img = image.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { imageList.Images.Add(Image.FromStream(ms)); } if (!showClasses || string.Compare(layer.styleitem, "AUTO", true) == 0) return; TreeNode classNode = null; if (layer.numclasses > 1 || (layer.numclasses == 1 && target.GetType() == typeof(layerObj) && showRootObject == false)) // classes should always be shown if the layer is not shown (#7118) { classNode = new TreeNode(layerclass.name, imageList.Images.Count - 1, imageList.Images.Count - 1); classNode.Tag = classHolder; classNode.Checked = (layerclass.status != mapscript.MS_OFF); nodes.Add(classNode); nodes = classNode.Nodes; } // drawing the style icons if (showStyles) { for (int k = 0; k < layerclass.numstyles; k++) { styleObj classStyle = layerclass.getStyle(k); if (layerclass.numstyles > 1) { AddStyleNode(nodes, new MapObjectHolder(classStyle, classHolder), imageList); } } } // drawing the labels icons if (showLabels) { for (int l = 0; l < layerclass.numlabels; l++) { labelObj classLabel = layerclass.getLabel(l); if (layerclass.numlabels > 1) { AddLabelNode(nodes, new MapObjectHolder(classLabel, classHolder), imageList, l); } } } } } }
/// <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()); 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; 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)); }
//���һ����ͼ�㵽mapfile public bool addLayer(string dataPath) { if (_Map == null) { if (ErrorOccured != null) ErrorOccured(null, new MSErrorEventArgs("û�д�mapfile")); return false; } layerObj pLayer = new layerObj(_Map); pLayer.status = 1; string strName = Path.GetFileNameWithoutExtension(dataPath); pLayer.name = strName; pLayer.group = strName; string strExt = Path.GetExtension(dataPath).ToLower(); //wanliyun:2009.05.06 //add the mapinfo tab format support if ((strExt == ".shp") || (strExt == ".tab")) { IFeatureClass pFc = null; if (strExt == ".shp") { IWorkspaceFactory pWsf = new ShapefileWorkspaceFactory(); IFeatureWorkspace pFws = pWsf.OpenFromFile(dataPath, 0) as IFeatureWorkspace; pFc = pFws.OpenFeatureClass(strName); pLayer.connectiontype = MS_CONNECTION_TYPE.MS_SHAPEFILE; pLayer.data = dataPath; } else if (strExt == ".tab") { IWorkspaceFactory pWsf = new OgrWorkspaceFactory(); IFeatureWorkspace pFws = pWsf.OpenFromFile(dataPath, 0) as IFeatureWorkspace; pFc = pFws.OpenFeatureClass(strName); pLayer.connectiontype = MS_CONNECTION_TYPE.MS_OGR; pLayer.connection = dataPath; } IEnvelope pEnvelope = ((IGeoDataset)pFc).Extent; if (_Map.numlayers == 1) { _Map.extent.minx = pEnvelope.XMin; _Map.extent.miny = pEnvelope.YMin; _Map.extent.maxx = pEnvelope.XMax; _Map.extent.maxy = pEnvelope.YMax; } else { //if the layer extents lager than the map extents //reset the map extents if (pEnvelope.XMin < _Map.extent.minx) _Map.extent.minx = pEnvelope.XMin; if (pEnvelope.YMin < _Map.extent.miny) _Map.extent.miny = pEnvelope.YMin; if (pEnvelope.XMax > _Map.extent.maxx) _Map.extent.maxx = pEnvelope.XMax; if (pEnvelope.YMax > _Map.extent.maxy) _Map.extent.maxy = pEnvelope.YMax; } //rerecord the max extents m_MapMinx = _Map.extent.minx; m_MapMiny = _Map.extent.miny; m_MapMaxx = _Map.extent.maxx; m_MapMaxy = _Map.extent.maxy; classObj myClass = new classObj(pLayer); myClass.name = "random"; styleObj myStyle = new styleObj(myClass); Color pRandomColor = GetRandomColor(); myStyle.color.red = pRandomColor.R; myStyle.color.green = pRandomColor.G; myStyle.color.blue = pRandomColor.B; myStyle.opacity = 0; fmapGeometryType pGeomType = pFc.ShapeType; if ((pGeomType == fmapGeometryType.Point) || (pGeomType == fmapGeometryType.Point25D) || (pGeomType == fmapGeometryType.MultiPoint) || (pGeomType == fmapGeometryType.MultiPoint25D)) { pLayer.type = MS_LAYER_TYPE.MS_LAYER_POINT; } else if ((pGeomType == fmapGeometryType.LineString) || (pGeomType == fmapGeometryType.LineString) || (pGeomType == fmapGeometryType.MultiLineString) || (pGeomType == fmapGeometryType.MultiLineString25D)) { pLayer.type = MS_LAYER_TYPE.MS_LAYER_LINE; } else if ((pGeomType == fmapGeometryType.Polygon) || (pGeomType == fmapGeometryType.Polygon25D) || (pGeomType == fmapGeometryType.MultiPolygon) || (pGeomType == fmapGeometryType.MultiPolygon25D)) { pRandomColor = GetRandomColor(); myStyle.outlinecolor.red = pRandomColor.R; myStyle.outlinecolor.green = pRandomColor.G; myStyle.outlinecolor.blue = pRandomColor.B; pLayer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON; } else { pLayer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON; } if (pFc != null) pFc.Dispose(); } else if ((strExt == ".tif") || (strExt == ".img")) { pLayer.data = dataPath; pLayer.connectiontype = MS_CONNECTION_TYPE.MS_RASTER; pLayer.type = MS_LAYER_TYPE.MS_LAYER_RASTER; } else return false; if (OnLayerChanged != null) OnLayerChanged(null, new LayerChangedEventArgs(pLayer.index,strName, true)); RecordLayersState(); //Console.WriteLine(_Map.numlayers.ToString()); return true; }
/// <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(); }
/// <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()); }
public static void Main(string[] args) { if (args.Length < 2) usage(); // creating a new map from scratch mapObj map = new mapObj(null); // adding a layer layerObj layer = new layerObj(map); layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; layer.status = mapscript.MS_ON; layer.connectiontype = MS_CONNECTION_TYPE.MS_INLINE; // define the attribute names from the inline layer layer.addProcessing("ITEMS=attribute1,attribute2,attribute3"); // define the class classObj classobj = new classObj(layer); classobj.template = "query"; // making the layer queryable // setting up the text based on multiple attributes classobj.setText("('Shape:' + '[attribute1]' + ' Color:' + '[attribute2]' + ' Size:' + '[attribute3]')"); // define the label classobj.label.outlinecolor = new colorObj(255, 255, 255, 0); classobj.label.force = mapscript.MS_TRUE; classobj.label.size = (double)MS_BITMAP_FONT_SIZES.MS_MEDIUM; classobj.label.position = (int)MS_POSITIONS_ENUM.MS_LC; classobj.label.wrap = ' '; // set up attribute binding classobj.label.setBinding((int)MS_LABEL_BINDING_ENUM.MS_LABEL_BINDING_COLOR, "attribute2"); // define the style styleObj style = new styleObj(classobj); style.color = new colorObj(0, 255, 255, 0); style.setBinding((int)MS_STYLE_BINDING_ENUM.MS_STYLE_BINDING_COLOR, "attribute2"); style.setBinding((int)MS_STYLE_BINDING_ENUM.MS_STYLE_BINDING_SIZE, "attribute3"); Random rand = new Random((int)DateTime.Now.ToFileTime()); ; // creating the shapes for (int i = 0; i < 10; i++) { shapeObj shape = new shapeObj((int)MS_SHAPE_TYPE.MS_SHAPE_POINT); // setting the shape attributes shape.initValues(4); shape.setValue(0, Convert.ToString(i)); shape.setValue(1, new colorObj(rand.Next(255), rand.Next(255), rand.Next(255), 0).toHex()); shape.setValue(2, Convert.ToString(rand.Next(25) + 5)); lineObj line = new lineObj(); line.add(new pointObj(rand.Next(400) + 25, rand.Next(400) + 25, 0, 0)); shape.add(line); layer.addFeature(shape); } map.width = 500; map.height = 500; map.setExtent(0,0,450,450); map.selectOutputFormat(args[0]); imageObj image = map.draw(); image.save(args[1], map); //perform a query layer.queryByRect(map, new rectObj(0, 0, 450, 450, 0)); resultObj res; shapeObj feature; using (resultCacheObj results = layer.getResults()) { if (results != null && results.numresults > 0) { // extracting the features found layer.open(); for (int j = 0; j < results.numresults; j++) { res = results.getResult(j); feature = layer.getShape(res); if (feature != null) { Console.WriteLine(" Feature: shapeindex=" + res.shapeindex + " tileindex=" + res.tileindex); for (int k = 0; k < layer.numitems; k++) { Console.Write(" " + layer.getItem(k)); Console.Write(" = "); Console.Write(feature.getValue(k)); Console.WriteLine(); } } } layer.close(); } } }
/// <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; } } }
public LabelEditorDialog(classObj inClass) { InitializeComponent(); m_pLabel = inClass.label; m_pClass = inClass; }
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> /// 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)); }
private ListViewItem AddListItem(styleObj classStyle, layerObj layer, string name) { ListViewItem item = null; classObj styleclass = new classObj(null); styleclass.insertStyle(classStyle, -1); mapObj map2 = map; if (layer.map != null) map2 = layer.map; // creating the listicons using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon( map2, layer, imageList.ImageSize.Width, imageList.ImageSize.Height)) { MS_LAYER_TYPE type = layer.type; try { //SETPH: actually we should not modify the type of the style(point line polygon) for the style category list, only for the preview //// modify the layer type in certain cases for drawing correct images //if (comboBoxGeomTransform.Text.ToLower().Contains("labelpoly")) //layer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON; //else if (comboBoxGeomTransform.Text.ToLower().Contains("labelpnt")) //layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; styleclass.drawLegendIcon(map2, layer, 44, 44, image2, 2, 2); } finally { layer.type = type; } byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { imageList.Images.Add(Image.FromStream(ms)); } // add new item item = new ListViewItem(name, imageList.Images.Count - 1); item.ToolTipText = name; item.Tag = classStyle; listView.Items.Add(item); } } return item; }
public static void Main(string[] args) { if (args.Length < 2) { usage(); } // creating a new map from scratch mapObj map = new mapObj(null); // adding a layer layerObj layer = new layerObj(map); layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; layer.status = mapscript.MS_ON; layer.connectiontype = MS_CONNECTION_TYPE.MS_INLINE; // define the attribute names from the inline layer layer.addProcessing("ITEMS=attribute1,attribute2,attribute3"); // define the class classObj classobj = new classObj(layer); classobj.template = "query"; // making the layer queryable // setting up the text based on multiple attributes classobj.setText("('Shape:' + '[attribute1]' + ' Color:' + '[attribute2]' + ' Size:' + '[attribute3]')"); // define the label classobj.label.outlinecolor = new colorObj(255, 255, 255, 0); classobj.label.force = mapscript.MS_TRUE; classobj.label.size = (double)MS_BITMAP_FONT_SIZES.MS_MEDIUM; classobj.label.position = (int)MS_POSITIONS_ENUM.MS_LC; classobj.label.wrap = ' '; // set up attribute binding classobj.label.setBinding((int)MS_LABEL_BINDING_ENUM.MS_LABEL_BINDING_COLOR, "attribute2"); // define the style styleObj style = new styleObj(classobj); style.color = new colorObj(0, 255, 255, 0); style.setBinding((int)MS_STYLE_BINDING_ENUM.MS_STYLE_BINDING_COLOR, "attribute2"); style.setBinding((int)MS_STYLE_BINDING_ENUM.MS_STYLE_BINDING_SIZE, "attribute3"); Random rand = new Random((int)DateTime.Now.ToFileTime());; // creating the shapes for (int i = 0; i < 10; i++) { shapeObj shape = new shapeObj((int)MS_SHAPE_TYPE.MS_SHAPE_POINT); // setting the shape attributes shape.initValues(4); shape.setValue(0, Convert.ToString(i)); shape.setValue(1, new colorObj(rand.Next(255), rand.Next(255), rand.Next(255), 0).toHex()); shape.setValue(2, Convert.ToString(rand.Next(25) + 5)); lineObj line = new lineObj(); line.add(new pointObj(rand.Next(400) + 25, rand.Next(400) + 25, 0, 0)); shape.add(line); layer.addFeature(shape); } map.width = 500; map.height = 500; map.setExtent(0, 0, 450, 450); map.selectOutputFormat(args[0]); imageObj image = map.draw(); image.save(args[1], map); //perform a query layer.queryByRect(map, new rectObj(0, 0, 450, 450, 0)); resultObj res; shapeObj feature; using (resultCacheObj results = layer.getResults()) { if (results != null && results.numresults > 0) { // extracting the features found layer.open(); for (int j = 0; j < results.numresults; j++) { res = results.getResult(j); feature = layer.getShape(res); if (feature != null) { Console.WriteLine(" Feature: shapeindex=" + res.shapeindex + " tileindex=" + res.tileindex); for (int k = 0; k < layer.numitems; k++) { Console.Write(" " + layer.getItem(k)); Console.Write(" = "); Console.Write(feature.getValue(k)); Console.WriteLine(); } } } layer.close(); } } }
public NewClassForm(classObj msClass, IEnumerator uniqueEnum) { InitializeComponent(); m_pCurrentClass = msClass; m_pUniqueValues = uniqueEnum; }
public void testClassObj() { mapObj map=new mapObj(mapfile); layerObj layer=map.getLayer(1); classObj newClass=new classObj(layer); map=null; layer=null; gc(); assertNotNull(newClass.layer, "testClassObj"); assert(newClass.refcount == 2, "testClassObj refcount"); }
public void testRemoveClassObj() { mapObj map=new mapObj(mapfile); layerObj layer=map.getLayer(1); classObj newClass=new classObj(null); layer.insertClass(newClass,0); layer.removeClass(0); map=null; layer=null; gc(); assert(newClass.refcount == 1, "testRemoveClassObj"); }
/// <summary> /// Constructs a new MapPropertyEditorForm object. /// </summary> /// <param name="target">The target object to be edited.</param> /// <param name="editor">The editor to be used.</param> public MapPropertyEditorForm(MapObjectHolder target, IPropertyEditor editor) { InitializeComponent(); this.SuspendLayout(); if (target.GetType() == typeof(mapObj)) { if (editor == null) { editor = new MapPropertyEditor(); ((MapPropertyEditor)editor).HelpRequested += new HelpEventHandler(mapPropertyEditor_HelpRequested); } this.Text = "Map Properties"; mapObj map = (mapObj)target; if (map.name != "") { this.Text += " (" + map.name + ")"; } this.editor = editor; } else if (target.GetType() == typeof(layerObj)) { if (editor == null) { editor = new LayerPropertyEditor(); ((LayerPropertyEditor)editor).HelpRequested += new HelpEventHandler(mapPropertyEditor_HelpRequested); } this.Text = "Layer Properties"; layerObj layer = (layerObj)target; if (layer.name != "") { this.Text += " (" + layer.name + ")"; } this.editor = editor; } else if (target.GetType() == typeof(classObj)) { if (editor == null) { editor = new ClassPropertyEditor(); ((ClassPropertyEditor)editor).HelpRequested += new HelpEventHandler(mapPropertyEditor_HelpRequested); } this.Text = "Class Properties"; classObj classObject = (classObj)target; StringBuilder scaledomain = new StringBuilder(""); if (classObject.minscaledenom >= 0) { if (classObject.maxscaledenom >= 0) { scaledomain.Append(" 1:" + classObject.minscaledenom.ToString("#,#", CultureInfo.InvariantCulture)); } else { scaledomain.Append(" from 1:" + classObject.minscaledenom.ToString("#,#", CultureInfo.InvariantCulture)); } } if (classObject.maxscaledenom >= 0) { scaledomain.Append(" to 1:" + classObject.maxscaledenom.ToString("#,#", CultureInfo.InvariantCulture)); } if (classObject.name != "") { this.Text += " (" + classObject.name + scaledomain + ")"; } this.editor = editor; } else if (target.GetType() == typeof(styleObj)) { if (editor == null) { editor = new StylePropertyEditor(); ((StylePropertyEditor)editor).HelpRequested += new HelpEventHandler(mapPropertyEditor_HelpRequested); } this.Text = "Style Properties"; this.editor = editor; } else if (target.GetType() == typeof(labelObj)) { if (editor == null) { editor = new LabelPropertyEditor(); ((LabelPropertyEditor)editor).HelpRequested += new HelpEventHandler(mapPropertyEditor_HelpRequested); } this.Text = "Label Properties"; this.editor = editor; } else if (target.GetType() == typeof(scalebarObj)) { if (editor == null) { editor = new ScalebarPropertyEditor(); ((ScalebarPropertyEditor)editor).HelpRequested += new HelpEventHandler(mapPropertyEditor_HelpRequested); } this.Text = "Scalebar Properties"; this.editor = editor; } else if (target.GetType() == typeof(queryMapObj)) { if (editor == null) { editor = new QueryMapPropertyEditor(); ((QueryMapPropertyEditor)editor).HelpRequested += new HelpEventHandler(mapPropertyEditor_HelpRequested); } this.Text = "Query Map Properties"; this.editor = editor; } else { throw new Exception("No editor have been implemented for this item"); } if (this.editor != null) { Control c = (Control)this.editor; c.Location = new System.Drawing.Point(3, 4); c.TabIndex = 0; editor.Target = target; this.Controls.Add(c); target.PropertyChanging += new EventHandler(target_PropertyChanging); editor.EditProperties += new EditPropertiesEventHandler(editor_EditProperties); buttonOK.Top = c.Bottom + 8; buttonCancel.Top = c.Bottom + 8; buttonApply.Top = c.Bottom + 8; } UpdateButtonState(); this.ResumeLayout(false); }
/// <summary> /// Click event handler of the addLayerToolStripMenuItem control /// </summary> /// <param name="sender">The source object of this event.</param> /// <param name="e">The event parameters.</param> private void addLayerToolStripMenuItem_Click(object sender, EventArgs e) { if (target == null) return; if (target.GetType() != typeof(mapObj)) return; TreeNode source = CurrentTree.SelectedNode; if (source != null && source.Tag != null) RaiseItemSelect((MapObjectHolder)source.Tag); layerObj layer; classObj classobj; styleObj style; if (IsStyleLibraryControl) { AddStyleCategoryForm form = new AddStyleCategoryForm(MapUtils.GetUniqueLayerName(map, "New Category", 0)); if (form.ShowDialog(this) == DialogResult.OK) { if (form.CategoryType != "(Empty Category)") { layer = CreateNewLayer(); layer.connectiontype = MS_CONNECTION_TYPE.MS_INLINE; layer.template = "query.html"; layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; layer.name = MapUtils.GetUniqueLayerName(map, form.CategoryName, 0); classobj = new classObj(layer); classobj.name = form.CategoryName; style = new styleObj(classobj); layer.setMetaData("character-count", form.CharCount.ToString()); MapUtils.SetDefaultColor(layer.type, style); style.width = 1; style.size = 24; // create all symbols StyleLibrary.ExpandFontStyles(); this.selected = new MapObjectHolder(layer, target); RefreshView(); if (target != null) target.RaisePropertyChanged(this); return; } } else return; } layer = CreateNewLayer(); layer.connectiontype = MS_CONNECTION_TYPE.MS_INLINE; layer.template = "query.html"; layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; if (!IsStyleLibraryControl) layer.name = MapUtils.GetUniqueLayerName(map, "New Layer", 0); classobj = new classObj(layer); classobj.name = MapUtils.GetClassName(layer); style = new styleObj(classobj); // initialize with the default marker if specified in the symbol file for point symbols symbolObj symbol; for (int i = 0; i < map.symbolset.numsymbols; i++) { symbol = map.symbolset.getSymbol(i); if (symbol.name == "default-marker") { layer.getClass(0).getStyle(0).symbol = i; layer.getClass(0).getStyle(0).symbolname = "default-marker"; break; } } MapUtils.SetDefaultColor(layer.type, style); style.width = 1; style.size = 8; // set default size (#4339) this.selected = new MapObjectHolder(layer, target); RefreshView(); if (target != null) target.RaisePropertyChanged(this); }
public void testInsertClassObj() { mapObj map=new mapObj(mapfile); layerObj layer=map.getLayer(1); classObj newClass=new classObj(null); layer.insertClass(newClass,-1); assertNotNull(newClass.layer, "testInsertClassObj precondition"); map=null; layer=null; gc(); assertNotNull(newClass.layer, "testInsertClassObj"); assert(newClass.refcount == 2, "testInsertClassObj refcount"); }
/// <summary> /// Adding a new styleObj to the corresponding classObj. /// </summary> /// <param name="nodes">The TreeNodeCollection of the parent object</param> /// <param name="styleHolder">Wrapper class containing the styleObj and the parent object</param> /// /// <param name="showRoot">A flag indicating whether the root object should be displayed or not.</param> private void AddStyleNode(TreeNodeCollection nodes, MapObjectHolder styleHolder, ImageList imageList) { layerObj layer = styleHolder.GetParent().GetParent(); classObj layerclass = styleHolder.GetParent(); styleObj classStyle = styleHolder; classObj styleclass = new classObj(null); styleclass.name = MapUtils.GetClassName(layer); styleclass.insertStyle(classStyle, -1); // creating the treeicons using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon( map, layer, legendIconSize.Width, legendIconSize.Height)) { styleclass.drawLegendIcon(map, layer, legendDrawingSize.Width, legendDrawingSize.Height, image2, LegendIconPadding.Left, LegendIconPadding.Top); byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { imageList.Images.Add(Image.FromStream(ms)); } TreeNode styleNode = new TreeNode("Style (" + nodes.Count + ")", imageList.Images.Count - 1, imageList.Images.Count - 1); styleNode.Tag = styleHolder; styleNode.Checked = true; nodes.Add(styleNode); } } }
public void testInsertClassObjDestroy() { mapObj map=new mapObj(mapfile); layerObj layer=map.getLayer(1); classObj newClass=new classObj(null); layer.insertClass(newClass,0); classObj reference = layer.getClass(0); assert(newClass.refcount == 3, "testInsertClassObjDestroy 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, "testInsertClassObjDestroy"); }
/// <summary> /// Click event handler of the addClassToolStripMenuItem control /// </summary> /// <param name="sender">The source object of this event.</param> /// <param name="e">The event parameters.</param> private void addClassToolStripMenuItem_Click(object sender, EventArgs e) { MapObjectHolder selected = (MapObjectHolder)CurrentTree.SelectedNode.Tag; RaiseItemSelect(selected); layerObj layer = selected; classObj classobj = new classObj(layer); classobj.name = MapUtils.GetClassName(layer); styleObj style = new styleObj(classobj); //STEPH: set default colour to be consistent with adding new style MapUtils.SetDefaultColor(layer.type, style); if (layer.type == MS_LAYER_TYPE.MS_LAYER_POINT) { style.symbolname = "default-marker"; style.size = 8; } this.selected = new MapObjectHolder(classobj, selected); RefreshView(); if (target != null) target.RaisePropertyChanged(this); }
/// <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> /// Update the list item according to a modified style /// </summary> /// <param name="index">the index of the lit item</param> /// <param name="style">the style object</param> private void UpdateStyleInList(int index) { layerObj layer; if (target.GetParent().GetType() == typeof(scalebarObj)) layer = new layerObj(null); else layer = target.GetParent().GetParent(); ListViewItem item = listViewStyles.Items[index]; styleObj style = (styleObj)item.Tag; classObj styleclass = new classObj(null); styleclass.insertStyle(style, -1); // creating the list icon using (classObj def_class = new classObj(null)) // for drawing legend images { using (imageObj image2 = def_class.createLegendIcon(map, layer, 30, 20)) { MS_LAYER_TYPE type = layer.type; try { // modify the layer type in certain cases for drawing correct images string geomtransform = style.getGeomTransform().ToLower(); if (geomtransform != null) { if (geomtransform.Contains("labelpoly")) layer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON; else if (geomtransform.Contains("labelpnt")) layer.type = MS_LAYER_TYPE.MS_LAYER_POINT; } styleclass.drawLegendIcon(map, layer, 20, 10, image2, 5, 5); } finally { layer.type = type; } byte[] img = image2.getBytes(); using (MemoryStream ms = new MemoryStream(img)) { imageList.Images[item.ImageIndex] = Image.FromStream(ms); } item.SubItems[1].Text = style.size.ToString(); item.SubItems[2].Text = style.width.ToString(); item.SubItems[3].Text = style.symbolname; } } }