Click here to Skip to main content
15,891,629 members
Articles / Programming Languages / C#

Drawing Component to build GIS and CAM applications

Rate me:
Please Sign up or sign in to vote.
4.72/5 (14 votes)
21 Nov 20055 min read 107.9K   8K   123  
An object oriented drawing component for building GIS and CAM applications with multiple views of geometrical model, multiple resolution handling, layers, optimized graphics and more.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using VisiBlocks;
using WorkSpace;
using System.Data.OleDb;

//using VisiWebLogic;

namespace VisiDataWs
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.MainMenu mainMenu1;
		private System.Windows.Forms.MenuItem menuItem1;
		private System.Windows.Forms.MenuItem menuItem2;
		private System.Windows.Forms.MenuItem menuItem3;
		private System.Windows.Forms.MenuItem menuItem4;
		private System.Windows.Forms.ImageList imageList1;
		private System.Windows.Forms.ToolBarButton toolBarButton1;
		private System.Windows.Forms.ToolBarButton toolBarButton2;
		private System.Windows.Forms.ToolBarButton toolBarButton3;
	//	private System.Windows.Forms.ToolBarButton toolBarButton4;
	//	private System.Windows.Forms.ToolBarButton toolBarButton5;
		private System.Windows.Forms.ImageList imageList2;
		
		private System.ComponentModel.IContainer components;
		private System.Windows.Forms.MenuItem menuItem7;
		private System.Windows.Forms.MenuItem menuItem8;
		private System.Windows.Forms.StatusBar statusBar1;
		private System.Windows.Forms.MenuItem menuItem10;
		private System.Windows.Forms.Panel panel1;
		private WorkSpace.WorkSpaceControl workSpaceControl2;
		private System.Windows.Forms.MenuItem menuItem11;
		private System.Windows.Forms.MenuItem menuItem12;
		private System.Windows.Forms.MenuItem menuItem13;
		string m_config_file = "c:/Temp/workspace.wsc";
		private System.Windows.Forms.MenuItem menuItem15;
	
		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();
			workSpaceControl2.ToolBars.ImageList = this.imageList1;
			//
			// TODO: Add any constructor code after InitializeComponent call
			//

			workSpaceControl2.ToolBars.Buttons.Add(toolBarButton1);
			toolBarButton1.Tag = typeof(VisiBlocks.VisiChartView).ToString();
			
			workSpaceControl2.ToolBars.Buttons.Add(toolBarButton2);
			toolBarButton2.Tag = typeof(VisiBlocks.VisiDataGridView).ToString();

			workSpaceControl2.ToolBars.Buttons.Add(toolBarButton3);
			toolBarButton3.Tag = typeof(VisiBlocks.VisiGisView).ToString();

			workSpaceControl2.addConfigControl("description",new RichTextBox());
			workSpaceControl2.WSManager.Factory = new VisiViewFactory();
				
			WsProgressBar.Instance.setStatusBar(this.statusBar1);
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
			this.mainMenu1 = new System.Windows.Forms.MainMenu();
			this.menuItem1 = new System.Windows.Forms.MenuItem();
			this.menuItem11 = new System.Windows.Forms.MenuItem();
			this.menuItem10 = new System.Windows.Forms.MenuItem();
			this.menuItem2 = new System.Windows.Forms.MenuItem();
			this.menuItem3 = new System.Windows.Forms.MenuItem();
			this.menuItem4 = new System.Windows.Forms.MenuItem();
			this.menuItem7 = new System.Windows.Forms.MenuItem();
			this.menuItem8 = new System.Windows.Forms.MenuItem();
			this.menuItem12 = new System.Windows.Forms.MenuItem();
			this.menuItem13 = new System.Windows.Forms.MenuItem();
			this.menuItem15 = new System.Windows.Forms.MenuItem();
			this.imageList1 = new System.Windows.Forms.ImageList(this.components);
			this.toolBarButton1 = new System.Windows.Forms.ToolBarButton();
			this.toolBarButton2 = new System.Windows.Forms.ToolBarButton();
			this.toolBarButton3 = new System.Windows.Forms.ToolBarButton();
			this.imageList2 = new System.Windows.Forms.ImageList(this.components);
			this.statusBar1 = new System.Windows.Forms.StatusBar();
			this.panel1 = new System.Windows.Forms.Panel();
			this.workSpaceControl2 = new WorkSpace.WorkSpaceControl();
			this.panel1.SuspendLayout();
			this.SuspendLayout();
			// 
			// mainMenu1
			// 
			this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem1,
																					  this.menuItem2,
																					  this.menuItem7,
																					  this.menuItem15});
			// 
			// menuItem1
			// 
			this.menuItem1.Index = 0;
			this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem11,
																					  this.menuItem10});
			this.menuItem1.Text = "File";
			// 
			// menuItem11
			// 
			this.menuItem11.Index = 0;
			this.menuItem11.Text = "New";
			this.menuItem11.Click += new System.EventHandler(this.menuItem11_Click);
			// 
			// menuItem10
			// 
			this.menuItem10.Index = 1;
			this.menuItem10.Text = "Exit";
			this.menuItem10.Click += new System.EventHandler(this.menuItem10_Click);
			// 
			// menuItem2
			// 
			this.menuItem2.Index = 1;
			this.menuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem3,
																					  this.menuItem4});
			this.menuItem2.Text = "Window";
			// 
			// menuItem3
			// 
			this.menuItem3.Index = 0;
			this.menuItem3.Text = "Split Horizontal";
			this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
			// 
			// menuItem4
			// 
			this.menuItem4.Index = 1;
			this.menuItem4.Text = "Split Vertical";
			this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click);
			// 
			// menuItem7
			// 
			this.menuItem7.Index = 2;
			this.menuItem7.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem8,
																					  this.menuItem12,
																					  this.menuItem13});
			this.menuItem7.Text = "Config";
			// 
			// menuItem8
			// 
			this.menuItem8.Index = 0;
			this.menuItem8.Text = "Save";
			this.menuItem8.Click += new System.EventHandler(this.menuItem8_Click);
			// 
			// menuItem12
			// 
			this.menuItem12.Index = 1;
			this.menuItem12.Text = "SaveAs";
			this.menuItem12.Click += new System.EventHandler(this.menuItem12_Click);
			// 
			// menuItem13
			// 
			this.menuItem13.Index = 2;
			this.menuItem13.Text = "Load";
			this.menuItem13.Click += new System.EventHandler(this.menuItem13_Click);
			// 
			// menuItem15
			// 
			this.menuItem15.Index = 3;
			this.menuItem15.Text = "Tools";
			// 
			// imageList1
			// 
			this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
			this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
			this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
			// 
			// toolBarButton1
			// 
			this.toolBarButton1.ImageIndex = 1;
			this.toolBarButton1.ToolTipText = "Graph view ";
			// 
			// toolBarButton2
			// 
			this.toolBarButton2.ImageIndex = 3;
			this.toolBarButton2.ToolTipText = "Data grid";
			// 
			// toolBarButton3
			// 
			this.toolBarButton3.ImageIndex = 2;
			this.toolBarButton3.ToolTipText = "Map view ";
			// 
			// imageList2
			// 
			this.imageList2.ImageSize = new System.Drawing.Size(16, 16);
			this.imageList2.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList2.ImageStream")));
			this.imageList2.TransparentColor = System.Drawing.Color.Transparent;
			// 
			// statusBar1
			// 
			this.statusBar1.Location = new System.Drawing.Point(0, 323);
			this.statusBar1.Name = "statusBar1";
			this.statusBar1.Size = new System.Drawing.Size(537, 25);
			this.statusBar1.TabIndex = 2;
			this.statusBar1.Text = "status";
			// 
			// panel1
			// 
			this.panel1.Controls.Add(this.workSpaceControl2);
			this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
			this.panel1.Location = new System.Drawing.Point(0, 0);
			this.panel1.Name = "panel1";
			this.panel1.Size = new System.Drawing.Size(537, 323);
			this.panel1.TabIndex = 3;
			// 
			// workSpaceControl2
			// 
			this.workSpaceControl2.Dock = System.Windows.Forms.DockStyle.Fill;
			this.workSpaceControl2.Location = new System.Drawing.Point(0, 0);
			this.workSpaceControl2.Name = "workSpaceControl2";
			this.workSpaceControl2.Size = new System.Drawing.Size(537, 323);
			this.workSpaceControl2.TabIndex = 0;
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
			this.ClientSize = new System.Drawing.Size(537, 348);
			this.Controls.Add(this.panel1);
			this.Controls.Add(this.statusBar1);
			this.Menu = this.mainMenu1;
			this.Name = "Form1";
			this.Text = "VisiWorks version 0.1";
			this.panel1.ResumeLayout(false);
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void menuItem3_Click(object sender, System.EventArgs e)
		{
			workSpaceControl2.splitHorizontal();
		}

		private void menuItem4_Click(object sender, System.EventArgs e)
		{
			workSpaceControl2.splitVertical();
		}
		/*
		public void openDataSource()
		{			
			OpenFileDialog openFileDialog = new OpenFileDialog();			
			openFileDialog.Filter = "Dbf file (*.dbf)|*.dbf";
			openFileDialog.ShowDialog();
			string fname = openFileDialog.FileName;
			if(fname.Length == 0)
				return;
			
			openDataSource(fname);
		}

		public string ConnectString
		{
			get
			{
				return m_connect;
			}

			set
			{
				m_connect = value;
			}
		}
		
		public void openDataSource(string fname)
		{	
			
			VisiDataSourceDBF dbf_project = new VisiDataSourceDBF();	
			dbf_project.TableName.Name = fname;
			m_connect = fname;
			dbf_project.open(m_connect);
			m_ds_selector.SetDataSource(dbf_project);
		}
*/
		/*		private void menuItem5_Click(object sender, System.EventArgs e)
				{
					//openDataSource();

					DataSourceRepository dsr = new DataSourceRepository(m_ds_selector);
					dsr.AddDataSource(typeof(VisiDataSourceDBF).ToString(),
						new VisiDataSourceDBF());

		
					Form form = new Form();
					dsr.Dock = DockStyle.Fill;
					form.Controls.Add(dsr);
					form.ShowDialog();

				}

				private void menuItem6_Click(object sender, System.EventArgs e)
				{
					m_ds_selector.addVideoNode();
				}
		*/
		private void menuItem8_Click(object sender, System.EventArgs e)
		{
			writeToFile(m_config_file);
		}

		/*		public VisiDataSource CreateDataSource(string ds_type)
				{
					if(ds_type == "VisiDataSourceDBF")
						return new VisiDataSourceDBF();

		
					MessageBox.Show("can't create data source of type: "+ds_type);
					return null;
				}

		*/
		public void writeToFile(string fname)
		{
			this.Text = "VisiData version 3.0 ["+fname+"]";
			DataSet config_ds = new DataSet();
			workSpaceControl2.saveConfig(config_ds);

			// save video nodes,data source and selected section
			// to configuration object
			DataTable setings_dt = new DataTable("Settings");
			setings_dt.Columns.Add("Property");
			setings_dt.Columns.Add("Value");

	//		DataRow r = setings_dt.NewRow();
	//		r["Property"] = "SelectedDataSource";
	//		r["Value"] = m_ds_selector.DataSource.getName();
	//		setings_dt.Rows.Add(r);

	//		r = setings_dt.NewRow();
	//		r["Property"] = "SelectedSection";
	//		r["Value"] = m_ds_selector.SelectedSection;
	//		setings_dt.Rows.Add(r);

			/*
			r = setings_dt.NewRow();
			r["Property"] = "Connect";
			r["Value"] = this.Connect;
			setings_dt.Rows.Add(r);
*/
			// save data source parameters:
	//		m_ds_selector.DataSource.SaveTo(config_ds,0);

			config_ds.Tables.Add(setings_dt);
/*
			DataTable video_nodes_dt = new DataTable("VideoNodes");
			video_nodes_dt.Columns.Add("ID",typeof(int));
			video_nodes_dt.Columns.Add("Name");

			int c=0;
		foreach(string n in m_ds_selector.VideoNodes)
			{
				DataRow vr = video_nodes_dt.NewRow();
				vr["ID"] = c++;
				vr["Name"] = n;
				video_nodes_dt.Rows.Add(vr);
			}
			
			config_ds.Tables.Add(video_nodes_dt);
*/
			config_ds.WriteXml(fname);
		}
		
		private void menuItem9_Click(object sender, System.EventArgs e)
		{
			readFromFile(m_config_file);
		}

		public void readFromFile(string fname)
		{
			//dataNavigator1.DataStreamer.displayEvent.
			this.Text = "VisiData version 3.0 ["+fname+"]";
			DataSet config_ds = new DataSet();
			config_ds.ReadXml(fname);
			
			workSpaceControl2.loadConfig(config_ds);

			// load video nodes,data source and selected section
			// from configuration object
			DataTable vnodes_dt = config_ds.Tables["VideoNodes"];
			ArrayList vnodes = new ArrayList();
			
			if(vnodes_dt != null)
			{
				foreach(DataRow vr in vnodes_dt.Rows)
				{											
					vnodes.Add(vr["Name"]);
				}
	//			m_ds_selector.VideoNodes = vnodes;
			}

			DataTable settings_dt = config_ds.Tables["Settings"];
			SortedList settings = new SortedList();

			if(settings_dt != null && settings_dt.Columns.Contains("Value"))
			{
				foreach(DataRow r in settings_dt.Rows)
				{					
					settings[(string)r["Property"]] = (string)r["Value"];
				}
				/*
					string conn_str = (string)settings["Connect"];
					if(this.Connect != conn_str)
						this.Connect = conn_str;
	*/
				string selected_ds_type = (string)settings["SelectedDataSource"];
				//				if(m_ds_selector.SelectedDataSource != selected_ds)
				//					m_ds_selector.SelectedDataSource = selected_ds;			

	//			VisiDataSource selected_ds = CreateDataSource(selected_ds_type);
	//			if(selected_ds == null)
	//				return;
				
				// read datasource configuration:
	//			selected_ds.LoadFrom(config_ds,0);
		//		selected_ds.connect();

				// asign new data source to datasource selector:
		//		m_ds_selector.SetDataSource(selected_ds);

		//		m_ds_selector.SelectedSection = Convert.ToInt32(settings["SelectedSection"]);					
			}
		}

		private void menuItem11_Click(object sender, System.EventArgs e)
		{
			workSpaceControl2.Clear();
		}

		private void menuItem10_Click(object sender, System.EventArgs e)
		{
			Application.Exit();
		}

		private void menuItem13_Click(object sender, System.EventArgs e)
		{
			OpenFileDialog of = new OpenFileDialog();			
			of.Filter = "Workspace files(*.wsc)|*.wsc";
			of.ShowDialog();

			if(of.FileName == "")
				return;
			m_config_file = of.FileName;
			this.readFromFile(m_config_file);
		}

		private void menuItem12_Click(object sender, System.EventArgs e)
		{
			SaveFileDialog sf = new SaveFileDialog();
			sf.Filter = "Workspace files(*.wsc)|*.wsc";
			sf.ShowDialog();

			if(sf.FileName == "")
				return;

			m_config_file = sf.FileName;
			this.writeToFile(m_config_file);
		}
	}

	public class VisiViewFactory: ControlsFactory
	{
		//taStream m_data_stream = null;
		//	DataSourceSelector m_ds_selector = null;
		ArrayList on_display_handlers = new ArrayList();
		ArrayList on_section_changed_handlers = new ArrayList();
		ArrayList on_source_changed_handlers = new ArrayList();
		//	VisiDataWs.DataNavigator m_nav;
		
		public VisiViewFactory()
		{
			
		}
		
		public override void Clear()
		{
		
		}

		public override Control Create(string cntrl_name)
		{				
			if(cntrl_name == typeof(VisiChartView).ToString())
			{
				VisiChartView chart_v = new VisiChartView();
				//Control cntrl = chart_v.createControl();
				//DataStream.displayEventHandler vdh = new DataStream.displayEventHandler(chart_v.onDisplay);
				//	on_display_handlers.Add(vdh);
				//	m_data_stream.displayEvent += vdh;
				//	DataSourceSelector.sectionChainagedEventHandler sch = new DataSourceSelector.sectionChainagedEventHandler(chart_v.onSectionChainaged);
				//	on_section_changed_handlers.Add(sch);
				//	m_ds_selector.sectionChaingedEvent += sch;
				
				// connect to the section
				/*		if(m_ds_selector.DataSection != null)
						{
							chart_v.onSectionChainaged(m_ds_selector,new DataSectionEventArgs(m_ds_selector.DataSection));	
						}
		*/
				return chart_v;			
			}
			else if(cntrl_name == typeof(VisiDataGridView).ToString())
			{
				VisiDataGridView data_grid_view = new VisiDataGridView();				
				/*				//m_data_stream.displayEvent += new DataStream.displayEventHandler(data_grid_view.onDisplay);
								DataStream.displayEventHandler vdh = new DataStream.displayEventHandler(data_grid_view.onDisplay);
								on_display_handlers.Add(vdh);
								m_data_stream.displayEvent += vdh;
								//m_ds_selector.sectionChaingedEvent += new DataSourceSelector.sectionChainagedEventHandler(data_grid_view.onSectionChainaged);		
								DataSourceSelector.sectionChainagedEventHandler sch = new DataSourceSelector.sectionChainagedEventHandler(data_grid_view.onSectionChainaged);
								on_section_changed_handlers.Add(sch);
								m_ds_selector.sectionChaingedEvent += sch;

								// connect to the section
								if(m_ds_selector.DataSection != null)
								{
									data_grid_view.onSectionChainaged(m_ds_selector,new DataSectionEventArgs(m_ds_selector.DataSection));	
								}
				*/
				return data_grid_view;
			}
			else if(cntrl_name == typeof(VisiGisView).ToString())
			{
				VisiGisView map_v = new VisiGisView();
				//m_data_stream.displayEvent += new DataStream.displayEventHandler(map_v.onDisplay);
				//m_ds_selector.sectionChaingedEvent += new DataSourceSelector.sectionChainagedEventHandler(map_v.onSectionChainaged);		
				/*				DataStream.displayEventHandler vdh = new DataStream.displayEventHandler(map_v.onDisplay);
								on_display_handlers.Add(vdh);
								m_data_stream.displayEvent += vdh;
				
								DataSourceSelector.sectionChainagedEventHandler sch = new DataSourceSelector.sectionChainagedEventHandler(map_v.onSectionChainaged);
								on_section_changed_handlers.Add(sch);
								m_ds_selector.sectionChaingedEvent += sch;
								//m_ds_selector.sourceChangedEvent +=new DataSourceSelector.sourceChangedEventHandler(map_v.onSourceChanged);
				
								DataSourceSelector.sourceChangedEventHandler dsch = new DataSourceSelector.sourceChangedEventHandler(map_v.onSourceChanged);
								on_source_changed_handlers.Add(dsch);
								m_ds_selector.sourceChangedEvent += dsch;

								if(m_ds_selector.DataSource != null)
								{
									map_v.onSourceChanged(m_ds_selector,new DataSourceEventArgs(m_ds_selector.DataSource));	
								}

								if(m_ds_selector.DataSection != null)
								{
									map_v.onSectionChainaged(m_ds_selector,new DataSectionEventArgs(m_ds_selector.DataSection));	
								}

								m_nav.UpdateTime = 100;
				*/				return map_v;
			}
	
			MessageBox.Show("can't create "+cntrl_name+" view");
			return null;			
		}
	}
}
		/*
				private void menuItem9_Click_1(object sender, System.EventArgs e)
				{
					m_aran_ds.connect();
					m_ds_selector.SetDataSource(m_aran_ds);
				}

				private void menuItem14_Click(object sender, System.EventArgs e)
				{
					int bar1 = WsProgressBar.Instance.Create("load visiweb data"); 
					WsProgressBar.Instance.Update(bar1,10);			
			
					m_visiweb_ds = new VisiWebDataSource();
					m_visiweb_ds.connect();
			
					WsProgressBar.Instance.Update(bar1,50);
					m_ds_selector.SetDataSource(m_visiweb_ds);
					WsProgressBar.Instance.Delete(bar1);
				}
		*/
		/*		private void menuItem16_Click(object sender, System.EventArgs e)
				{
					//"Provider=msdaora;Data Source=MyOracleDB;User Id=UserName;Password=asdasd;" 
					string con_str = "Provider=OraOLEDB.Oracle;User Id=gisadm;Data Source=;Password=gisadm";
					
					OleDbConnection conn  = new OleDbConnection(con_str);
					string [] loc_list = {"RTTYPE","RTNAME","TOWNNAME","STRTNAME"};
			
					OleDbCommand ora_img_stream_cmd = conn.CreateCommand();
					conn.Open();
					ora_img_stream_cmd.CommandText = "select count(*) from TD_LOCATORS";
					object num = ora_img_stream_cmd.ExecuteScalar();
					conn.Close();

					//ora_img_stream_cmd.Connection.Open();
					string loc_create_str = "CREATE TABLE TD_LOCATORS "+
						"(ID NUMBER(6) ,";
					for(int i=0; i<loc_list.Length; i++)
					{
						if(i>0)
							loc_create_str+=",";
						loc_create_str+=loc_list[i]+" VARCHAR2(60)";
					}

					loc_create_str += ");";  
			
					ora_img_stream_cmd.CommandText = loc_create_str;	
					//ora_img_stream_cmd.ExecuteNonQuery();	

			
					string sql_str = "SELECT DISTINCT ";
			
					for(int i=0; i<loc_list.Length; i++)
					{
						if(i>0)
							sql_str+=",";
						sql_str+=loc_list[i];
					}
			
					sql_str+=" FROM SARAH,ROUTE_SEGMENT WHERE SARAH.SEGMENT_ID=ROUTE_SEGMENT.SEGMENT_ID";
			
					OleDbDataAdapter locators_adapter = new OleDbDataAdapter(sql_str,conn);				
					DataTable data_table = new DataTable("locators");
					conn.Open();
					locators_adapter.Fill(data_table);
					conn.Close();
			
					conn.Open();	
					int cnt = 0;
			
					foreach(DataRow dr in data_table.Rows)
					{
						string insert_str = "insert into TD_LOCATORS values ("+cnt+",";
						for(int i=0; i<loc_list.Length; i++)
						{
							if(i>0)
								insert_str+=",";
							insert_str+="'"+dr[loc_list[i]]+"'";
						}
						insert_str+=");";
				
						ora_img_stream_cmd.CommandText = insert_str;
						ora_img_stream_cmd.ExecuteNonQuery();
						cnt++;
					}
					conn.Close();
				}		
			}

		*/	



By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Canada Canada
Baranovsky Eduard has been a software developer for more then 10 years. He has an experence in image processing, computer graphics and distributed systems design.

Comments and Discussions