diff --git a/OpenNest.Core/Geometry/Entity.cs b/OpenNest.Core/Geometry/Entity.cs index 95c94e7..2f055d6 100644 --- a/OpenNest.Core/Geometry/Entity.cs +++ b/OpenNest.Core/Geometry/Entity.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Drawing; using OpenNest.Math; namespace OpenNest.Geometry @@ -13,6 +14,21 @@ namespace OpenNest.Geometry boundingBox = new Box(); } + /// + /// Entity color (resolved from DXF ByLayer/ByBlock to actual color). + /// + public Color Color { get; set; } + + /// + /// Entity linetype name (e.g. "Continuous", "Center", "Dashed"). + /// + public string LineTypeName { get; set; } + + /// + /// Whether this entity is visible (used for color/linetype filtering). + /// + public bool IsVisible { get; set; } = true; + /// /// Smallest box that contains the entity. /// diff --git a/OpenNest/Controls/EntityView.cs b/OpenNest/Controls/EntityView.cs index f658e8e..98db8dd 100644 --- a/OpenNest/Controls/EntityView.cs +++ b/OpenNest/Controls/EntityView.cs @@ -103,7 +103,7 @@ namespace OpenNest.Controls private void DrawEntity(Graphics g, Entity e, Pen pen) { - if (!e.Layer.IsVisible) + if (!e.Layer.IsVisible || !e.IsVisible) return; switch (e.Type) diff --git a/OpenNest/Forms/CadConverterForm.Designer.cs b/OpenNest/Forms/CadConverterForm.Designer.cs index 6a9bd7c..19f0e74 100644 --- a/OpenNest/Forms/CadConverterForm.Designer.cs +++ b/OpenNest/Forms/CadConverterForm.Designer.cs @@ -29,247 +29,252 @@ private void InitializeComponent() { System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.splitContainer2 = new System.Windows.Forms.SplitContainer(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.checkedListBox1 = new System.Windows.Forms.CheckedListBox(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.checkedListBox2 = new System.Windows.Forms.CheckedListBox(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.checkedListBox3 = new System.Windows.Forms.CheckedListBox(); - this.entityView1 = new OpenNest.Controls.EntityView(); - this.bottomPanel1 = new OpenNest.Controls.BottomPanel(); - this.cancelButton = new System.Windows.Forms.Button(); - this.acceptButton = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); - this.splitContainer2.Panel1.SuspendLayout(); - this.splitContainer2.Panel2.SuspendLayout(); - this.splitContainer2.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.tabPage3.SuspendLayout(); - this.bottomPanel1.SuspendLayout(); - this.SuspendLayout(); + splitContainer1 = new System.Windows.Forms.SplitContainer(); + dataGridView1 = new System.Windows.Forms.DataGridView(); + splitContainer2 = new System.Windows.Forms.SplitContainer(); + tabControl1 = new System.Windows.Forms.TabControl(); + tabPage1 = new System.Windows.Forms.TabPage(); + checkedListBox1 = new System.Windows.Forms.CheckedListBox(); + tabPage2 = new System.Windows.Forms.TabPage(); + checkedListBox2 = new System.Windows.Forms.CheckedListBox(); + tabPage3 = new System.Windows.Forms.TabPage(); + checkedListBox3 = new System.Windows.Forms.CheckedListBox(); + entityView1 = new OpenNest.Controls.EntityView(); + bottomPanel1 = new OpenNest.Controls.BottomPanel(); + cancelButton = new System.Windows.Forms.Button(); + acceptButton = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit(); + splitContainer1.Panel1.SuspendLayout(); + splitContainer1.Panel2.SuspendLayout(); + splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)splitContainer2).BeginInit(); + splitContainer2.Panel1.SuspendLayout(); + splitContainer2.Panel2.SuspendLayout(); + splitContainer2.SuspendLayout(); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + tabPage2.SuspendLayout(); + tabPage3.SuspendLayout(); + bottomPanel1.SuspendLayout(); + SuspendLayout(); // // splitContainer1 // - this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer1.Location = new System.Drawing.Point(0, 0); - this.splitContainer1.Name = "splitContainer1"; - this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + splitContainer1.Location = new System.Drawing.Point(0, 0); + splitContainer1.Name = "splitContainer1"; + splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; // // splitContainer1.Panel1 // - this.splitContainer1.Panel1.Controls.Add(this.dataGridView1); + splitContainer1.Panel1.Controls.Add(dataGridView1); // // splitContainer1.Panel2 // - this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); - this.splitContainer1.Size = new System.Drawing.Size(928, 479); - this.splitContainer1.SplitterDistance = 225; - this.splitContainer1.TabIndex = 0; + splitContainer1.Panel2.Controls.Add(splitContainer2); + splitContainer1.Size = new System.Drawing.Size(928, 643); + splitContainer1.SplitterDistance = 302; + splitContainer1.TabIndex = 0; // // dataGridView1 // - this.dataGridView1.AllowUserToAddRows = false; - this.dataGridView1.AllowUserToResizeRows = false; - this.dataGridView1.BackgroundColor = System.Drawing.Color.White; - this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.BackgroundColor = System.Drawing.Color.White; + dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(255, 255, 192); dataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.Black; dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle1; - this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.dataGridView1.GridColor = System.Drawing.Color.Gainsboro; - this.dataGridView1.Location = new System.Drawing.Point(0, 0); - this.dataGridView1.MultiSelect = false; - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.RowHeadersVisible = false; - this.dataGridView1.RowTemplate.Height = 26; - this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dataGridView1.Size = new System.Drawing.Size(928, 225); - this.dataGridView1.TabIndex = 0; - this.dataGridView1.DataBindingComplete += new System.Windows.Forms.DataGridViewBindingCompleteEventHandler(this.dataGridView1_DataBindingComplete); - this.dataGridView1.SelectionChanged += new System.EventHandler(this.dataGridView1_SelectionChanged); + dataGridView1.DefaultCellStyle = dataGridViewCellStyle1; + dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; + dataGridView1.GridColor = System.Drawing.Color.Gainsboro; + dataGridView1.Location = new System.Drawing.Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowTemplate.Height = 26; + dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new System.Drawing.Size(928, 302); + dataGridView1.TabIndex = 0; + dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete; + dataGridView1.SelectionChanged += dataGridView1_SelectionChanged; // // splitContainer2 // - this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer2.Location = new System.Drawing.Point(0, 0); - this.splitContainer2.Name = "splitContainer2"; + splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + splitContainer2.Location = new System.Drawing.Point(0, 0); + splitContainer2.Name = "splitContainer2"; // // splitContainer2.Panel1 // - this.splitContainer2.Panel1.Controls.Add(this.tabControl1); + splitContainer2.Panel1.Controls.Add(tabControl1); // // splitContainer2.Panel2 // - this.splitContainer2.Panel2.Controls.Add(this.entityView1); - this.splitContainer2.Size = new System.Drawing.Size(928, 250); - this.splitContainer2.SplitterDistance = 309; - this.splitContainer2.TabIndex = 0; + splitContainer2.Panel2.Controls.Add(entityView1); + splitContainer2.Size = new System.Drawing.Size(928, 337); + splitContainer2.SplitterDistance = 309; + splitContainer2.TabIndex = 0; // // tabControl1 // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Controls.Add(this.tabPage3); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 0); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(309, 250); - this.tabControl1.TabIndex = 0; + tabControl1.Controls.Add(tabPage1); + tabControl1.Controls.Add(tabPage2); + tabControl1.Controls.Add(tabPage3); + tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + tabControl1.Location = new System.Drawing.Point(0, 0); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new System.Drawing.Size(309, 337); + tabControl1.TabIndex = 0; // // tabPage1 // - this.tabPage1.Controls.Add(this.checkedListBox1); - this.tabPage1.Location = new System.Drawing.Point(4, 25); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(301, 221); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Layers"; - this.tabPage1.UseVisualStyleBackColor = true; + tabPage1.Controls.Add(checkedListBox1); + tabPage1.Location = new System.Drawing.Point(4, 25); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new System.Windows.Forms.Padding(3); + tabPage1.Size = new System.Drawing.Size(301, 308); + tabPage1.TabIndex = 0; + tabPage1.Text = "Layers"; + tabPage1.UseVisualStyleBackColor = true; // // checkedListBox1 // - this.checkedListBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.checkedListBox1.CheckOnClick = true; - this.checkedListBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkedListBox1.FormattingEnabled = true; - this.checkedListBox1.Location = new System.Drawing.Point(3, 3); - this.checkedListBox1.Name = "checkedListBox1"; - this.checkedListBox1.Size = new System.Drawing.Size(295, 215); - this.checkedListBox1.TabIndex = 0; - this.checkedListBox1.SelectedIndexChanged += new System.EventHandler(this.checkedListBox1_SelectedIndexChanged); + checkedListBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + checkedListBox1.CheckOnClick = true; + checkedListBox1.Dock = System.Windows.Forms.DockStyle.Fill; + checkedListBox1.FormattingEnabled = true; + checkedListBox1.Location = new System.Drawing.Point(3, 3); + checkedListBox1.Name = "checkedListBox1"; + checkedListBox1.Size = new System.Drawing.Size(295, 302); + checkedListBox1.TabIndex = 0; + checkedListBox1.SelectedIndexChanged += checkedListBox1_SelectedIndexChanged; // // tabPage2 // - this.tabPage2.Controls.Add(this.checkedListBox2); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(301, 294); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "Colors"; - this.tabPage2.UseVisualStyleBackColor = true; + tabPage2.Controls.Add(checkedListBox2); + tabPage2.Location = new System.Drawing.Point(4, 24); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new System.Windows.Forms.Padding(3); + tabPage2.Size = new System.Drawing.Size(301, 309); + tabPage2.TabIndex = 1; + tabPage2.Text = "Colors"; + tabPage2.UseVisualStyleBackColor = true; // // checkedListBox2 // - this.checkedListBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.checkedListBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkedListBox2.FormattingEnabled = true; - this.checkedListBox2.Location = new System.Drawing.Point(3, 3); - this.checkedListBox2.Name = "checkedListBox2"; - this.checkedListBox2.Size = new System.Drawing.Size(295, 288); - this.checkedListBox2.TabIndex = 1; + checkedListBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + checkedListBox2.CheckOnClick = true; + checkedListBox2.Dock = System.Windows.Forms.DockStyle.Fill; + checkedListBox2.FormattingEnabled = true; + checkedListBox2.Location = new System.Drawing.Point(3, 3); + checkedListBox2.Name = "checkedListBox2"; + checkedListBox2.Size = new System.Drawing.Size(295, 303); + checkedListBox2.TabIndex = 1; + checkedListBox2.DrawItem += checkedListBox2_DrawItem; + checkedListBox2.SelectedIndexChanged += checkedListBox2_SelectedIndexChanged; // // tabPage3 // - this.tabPage3.Controls.Add(this.checkedListBox3); - this.tabPage3.Location = new System.Drawing.Point(4, 22); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.Padding = new System.Windows.Forms.Padding(3); - this.tabPage3.Size = new System.Drawing.Size(301, 294); - this.tabPage3.TabIndex = 2; - this.tabPage3.Text = "Line Types"; - this.tabPage3.UseVisualStyleBackColor = true; + tabPage3.Controls.Add(checkedListBox3); + tabPage3.Location = new System.Drawing.Point(4, 24); + tabPage3.Name = "tabPage3"; + tabPage3.Padding = new System.Windows.Forms.Padding(3); + tabPage3.Size = new System.Drawing.Size(301, 309); + tabPage3.TabIndex = 2; + tabPage3.Text = "Line Types"; + tabPage3.UseVisualStyleBackColor = true; // // checkedListBox3 // - this.checkedListBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.checkedListBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkedListBox3.FormattingEnabled = true; - this.checkedListBox3.Location = new System.Drawing.Point(3, 3); - this.checkedListBox3.Name = "checkedListBox3"; - this.checkedListBox3.Size = new System.Drawing.Size(295, 288); - this.checkedListBox3.TabIndex = 2; + checkedListBox3.BorderStyle = System.Windows.Forms.BorderStyle.None; + checkedListBox3.CheckOnClick = true; + checkedListBox3.Dock = System.Windows.Forms.DockStyle.Fill; + checkedListBox3.FormattingEnabled = true; + checkedListBox3.Location = new System.Drawing.Point(3, 3); + checkedListBox3.Name = "checkedListBox3"; + checkedListBox3.Size = new System.Drawing.Size(295, 303); + checkedListBox3.TabIndex = 2; + checkedListBox3.SelectedIndexChanged += checkedListBox3_SelectedIndexChanged; // // entityView1 // - this.entityView1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(40)))), ((int)(((byte)(48))))); - this.entityView1.Cursor = System.Windows.Forms.Cursors.Cross; - this.entityView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.entityView1.Location = new System.Drawing.Point(0, 0); - this.entityView1.Name = "entityView1"; - this.entityView1.Size = new System.Drawing.Size(615, 250); - this.entityView1.TabIndex = 0; - this.entityView1.Text = "entityView1"; + entityView1.BackColor = System.Drawing.Color.FromArgb(33, 40, 48); + entityView1.Cursor = System.Windows.Forms.Cursors.Cross; + entityView1.Dock = System.Windows.Forms.DockStyle.Fill; + entityView1.Location = new System.Drawing.Point(0, 0); + entityView1.Name = "entityView1"; + entityView1.Size = new System.Drawing.Size(615, 337); + entityView1.TabIndex = 0; + entityView1.Text = "entityView1"; // // bottomPanel1 // - this.bottomPanel1.Controls.Add(this.cancelButton); - this.bottomPanel1.Controls.Add(this.acceptButton); - this.bottomPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.bottomPanel1.Location = new System.Drawing.Point(0, 479); - this.bottomPanel1.Name = "bottomPanel1"; - this.bottomPanel1.Size = new System.Drawing.Size(928, 50); - this.bottomPanel1.TabIndex = 1; + bottomPanel1.Controls.Add(cancelButton); + bottomPanel1.Controls.Add(acceptButton); + bottomPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + bottomPanel1.Location = new System.Drawing.Point(0, 643); + bottomPanel1.Name = "bottomPanel1"; + bottomPanel1.Size = new System.Drawing.Size(928, 50); + bottomPanel1.TabIndex = 1; // // cancelButton // - this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelButton.Location = new System.Drawing.Point(826, 10); - this.cancelButton.Name = "cancelButton"; - this.cancelButton.Size = new System.Drawing.Size(90, 28); - this.cancelButton.TabIndex = 1; - this.cancelButton.Text = "Cancel"; - this.cancelButton.UseVisualStyleBackColor = true; + cancelButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + cancelButton.Location = new System.Drawing.Point(826, 10); + cancelButton.Name = "cancelButton"; + cancelButton.Size = new System.Drawing.Size(90, 28); + cancelButton.TabIndex = 1; + cancelButton.Text = "Cancel"; + cancelButton.UseVisualStyleBackColor = true; // // acceptButton // - this.acceptButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.acceptButton.DialogResult = System.Windows.Forms.DialogResult.OK; - this.acceptButton.Location = new System.Drawing.Point(730, 10); - this.acceptButton.Name = "acceptButton"; - this.acceptButton.Size = new System.Drawing.Size(90, 28); - this.acceptButton.TabIndex = 0; - this.acceptButton.Text = "Accept"; - this.acceptButton.UseVisualStyleBackColor = true; + acceptButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + acceptButton.DialogResult = System.Windows.Forms.DialogResult.OK; + acceptButton.Location = new System.Drawing.Point(730, 10); + acceptButton.Name = "acceptButton"; + acceptButton.Size = new System.Drawing.Size(90, 28); + acceptButton.TabIndex = 0; + acceptButton.Text = "Accept"; + acceptButton.UseVisualStyleBackColor = true; // // CadConverterForm // - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.ClientSize = new System.Drawing.Size(928, 529); - this.Controls.Add(this.splitContainer1); - this.Controls.Add(this.bottomPanel1); - this.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MinimizeBox = false; - this.Name = "CadConverterForm"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "CAD Converter"; - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.splitContainer2.Panel1.ResumeLayout(false); - this.splitContainer2.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); - this.splitContainer2.ResumeLayout(false); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.tabPage3.ResumeLayout(false); - this.bottomPanel1.ResumeLayout(false); - this.ResumeLayout(false); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + ClientSize = new System.Drawing.Size(928, 693); + Controls.Add(splitContainer1); + Controls.Add(bottomPanel1); + Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + MinimizeBox = false; + Name = "CadConverterForm"; + ShowIcon = false; + ShowInTaskbar = false; + StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + Text = "CAD Converter"; + splitContainer1.Panel1.ResumeLayout(false); + splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit(); + splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + splitContainer2.Panel1.ResumeLayout(false); + splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)splitContainer2).EndInit(); + splitContainer2.ResumeLayout(false); + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage2.ResumeLayout(false); + tabPage3.ResumeLayout(false); + bottomPanel1.ResumeLayout(false); + ResumeLayout(false); } diff --git a/OpenNest/Forms/CadConverterForm.cs b/OpenNest/Forms/CadConverterForm.cs index 6621504..dd2b4ef 100644 --- a/OpenNest/Forms/CadConverterForm.cs +++ b/OpenNest/Forms/CadConverterForm.cs @@ -46,6 +46,9 @@ namespace OpenNest.Forms entityView1.Entities.AddRange(item.Entities); entityView1.ZoomToFit(); + item.Entities.ForEach(e => e.IsVisible = true); + + // Layers checkedListBox1.Items.Clear(); var layers = item.Entities @@ -56,6 +59,27 @@ namespace OpenNest.Forms foreach (var layer in layers) checkedListBox1.Items.Add(layer, true); + + // Colors + checkedListBox2.Items.Clear(); + + var colors = item.Entities + .Select(e => e.Color.ToArgb()) + .Distinct() + .Select(argb => new ColorItem(Color.FromArgb(argb))); + + foreach (var color in colors) + checkedListBox2.Items.Add(color, false); + + // Line Types + checkedListBox3.Items.Clear(); + + var lineTypes = item.Entities + .Select(e => e.LineTypeName ?? "Continuous") + .Distinct(); + + foreach (var lineType in lineTypes) + checkedListBox3.Items.Add(lineType, false); } private static Color GetNextColor() @@ -77,7 +101,7 @@ namespace OpenNest.Forms foreach (var item in Items) { - var entities = item.Entities.Where(e => e.Layer.IsVisible).ToList(); + var entities = item.Entities.Where(e => e.Layer.IsVisible && e.IsVisible).ToList(); if (entities.Count == 0) continue; @@ -216,6 +240,64 @@ namespace OpenNest.Forms entityView1.Invalidate(); } + + private void checkedListBox2_SelectedIndexChanged(object sender, System.EventArgs e) + { + UpdateEntityVisibility(); + } + + private void checkedListBox3_SelectedIndexChanged(object sender, System.EventArgs e) + { + UpdateEntityVisibility(); + } + + private void UpdateEntityVisibility() + { + var item = CurrentItem; + if (item == null) return; + + var checkedColors = new HashSet(); + for (var i = 0; i < checkedListBox2.Items.Count; i++) + { + if (checkedListBox2.GetItemChecked(i)) + checkedColors.Add(((ColorItem)checkedListBox2.Items[i]).Argb); + } + + var checkedLineTypes = new HashSet(); + for (var i = 0; i < checkedListBox3.Items.Count; i++) + { + if (checkedListBox3.GetItemChecked(i)) + checkedLineTypes.Add(checkedListBox3.Items[i].ToString()); + } + + item.Entities.ForEach(entity => + { + entity.IsVisible = !checkedColors.Contains(entity.Color.ToArgb()) + && !checkedLineTypes.Contains(entity.LineTypeName ?? "Continuous"); + }); + + entityView1.Invalidate(); + } + + private void checkedListBox2_DrawItem(object sender, DrawItemEventArgs e) + { + if (e.Index < 0) return; + + e.DrawBackground(); + + var colorItem = (ColorItem)checkedListBox2.Items[e.Index]; + var swatchRect = new Rectangle(e.Bounds.Left + 20, e.Bounds.Top + 2, 16, e.Bounds.Height - 4); + + using (var brush = new SolidBrush(colorItem.Color)) + e.Graphics.FillRectangle(brush, swatchRect); + + e.Graphics.DrawRectangle(Pens.Gray, swatchRect); + + var textRect = new Rectangle(swatchRect.Right + 4, e.Bounds.Top, e.Bounds.Width - swatchRect.Right - 4, e.Bounds.Height); + TextRenderer.DrawText(e.Graphics, colorItem.ToString(), e.Font, textRect, e.ForeColor, TextFormatFlags.VerticalCenter); + + e.DrawFocusRectangle(); + } } class CadConverterItem @@ -233,6 +315,22 @@ namespace OpenNest.Forms public List Entities { get; set; } } + class ColorItem + { + public int Argb { get; } + public Color Color { get; } + + public ColorItem(Color color) + { + Color = color; + Argb = color.ToArgb(); + } + + public override string ToString() => $"RGB({Color.R}, {Color.G}, {Color.B})"; + public override bool Equals(object obj) => obj is ColorItem other && Argb == other.Argb; + public override int GetHashCode() => Argb; + } + public class RandomColorGenerator { private readonly Random random; diff --git a/OpenNest/Forms/CadConverterForm.resx b/OpenNest/Forms/CadConverterForm.resx index 1af7de1..8b2ff64 100644 --- a/OpenNest/Forms/CadConverterForm.resx +++ b/OpenNest/Forms/CadConverterForm.resx @@ -1,17 +1,17 @@  -