diff --git a/ExportDXF/AskViewFlipDecider.cs b/ExportDXF/AskViewFlipDecider.cs new file mode 100644 index 0000000..1e93a2a --- /dev/null +++ b/ExportDXF/AskViewFlipDecider.cs @@ -0,0 +1,24 @@ +using System.Windows.Forms; + +namespace ExportDXF +{ + public class AskViewFlipDecider : IViewFlipDecider + { + public string Name => "Ask to flip"; + + public bool ShouldFlip(SolidWorks.Interop.sldworks.View view) + { + var bends = ViewHelper.GetBends(view); + + if (bends.Count == 0) + return false; + + return MessageBox.Show("Flip view?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes; + } + + public override string ToString() + { + return Name; + } + } +} diff --git a/ExportDXF/ExportDXF.csproj b/ExportDXF/ExportDXF.csproj index 53283bd..58066b6 100644 --- a/ExportDXF/ExportDXF.csproj +++ b/ExportDXF/ExportDXF.csproj @@ -88,6 +88,7 @@ + diff --git a/ExportDXF/Forms/MainForm.Designer.cs b/ExportDXF/Forms/MainForm.Designer.cs index c907cb6..8511f30 100644 --- a/ExportDXF/Forms/MainForm.Designer.cs +++ b/ExportDXF/Forms/MainForm.Designer.cs @@ -28,96 +28,118 @@ /// private void InitializeComponent() { - this.activeDocTitleBox = new System.Windows.Forms.TextBox(); - this.richTextBox1 = new System.Windows.Forms.RichTextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.prefixTextBox = new System.Windows.Forms.TextBox(); - this.button1 = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // textBox1 - // - this.activeDocTitleBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.activeDocTitleBox = new System.Windows.Forms.TextBox(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.prefixTextBox = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // activeDocTitleBox + // + this.activeDocTitleBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.activeDocTitleBox.BackColor = System.Drawing.Color.White; - this.activeDocTitleBox.Location = new System.Drawing.Point(130, 13); - this.activeDocTitleBox.Name = "textBox1"; - this.activeDocTitleBox.ReadOnly = true; - this.activeDocTitleBox.Size = new System.Drawing.Size(400, 25); - this.activeDocTitleBox.TabIndex = 2; - this.activeDocTitleBox.TextChanged += new System.EventHandler(this.textBox1_TextChanged); - // - // richTextBox1 - // - this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.activeDocTitleBox.BackColor = System.Drawing.Color.White; + this.activeDocTitleBox.Location = new System.Drawing.Point(130, 13); + this.activeDocTitleBox.Name = "activeDocTitleBox"; + this.activeDocTitleBox.ReadOnly = true; + this.activeDocTitleBox.Size = new System.Drawing.Size(424, 25); + this.activeDocTitleBox.TabIndex = 2; + this.activeDocTitleBox.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // richTextBox1 + // + this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.richTextBox1.BackColor = System.Drawing.Color.White; - this.richTextBox1.Location = new System.Drawing.Point(12, 76); - this.richTextBox1.Name = "richTextBox1"; - this.richTextBox1.ReadOnly = true; - this.richTextBox1.Size = new System.Drawing.Size(570, 266); - this.richTextBox1.TabIndex = 3; - this.richTextBox1.Text = ""; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 16); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(112, 17); - this.label1.TabIndex = 4; - this.label1.Text = "Active Document :"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(23, 47); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(101, 17); - this.label2.TabIndex = 4; - this.label2.Text = "Prefix files with :"; - // - // textBox2 - // - this.prefixTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.richTextBox1.BackColor = System.Drawing.Color.White; + this.richTextBox1.Location = new System.Drawing.Point(12, 119); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.Size = new System.Drawing.Size(594, 260); + this.richTextBox1.TabIndex = 3; + this.richTextBox1.Text = ""; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(13, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(111, 17); + this.label1.TabIndex = 4; + this.label1.Text = "Active document :"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(23, 47); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(101, 17); + this.label2.TabIndex = 4; + this.label2.Text = "Prefix files with :"; + // + // prefixTextBox + // + this.prefixTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.prefixTextBox.Location = new System.Drawing.Point(130, 44); - this.prefixTextBox.Name = "textBox2"; - this.prefixTextBox.Size = new System.Drawing.Size(400, 25); - this.prefixTextBox.TabIndex = 2; - // - // button1 - // - this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.button1.Image = global::ExportDXF.Properties.Resources.play; - this.button1.Location = new System.Drawing.Point(536, 13); - this.button1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(46, 56); - this.button1.TabIndex = 0; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // MainForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(594, 354); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.richTextBox1); - this.Controls.Add(this.prefixTextBox); - this.Controls.Add(this.activeDocTitleBox); - this.Controls.Add(this.button1); - this.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.MaximizeBox = false; - this.Name = "MainForm"; - this.Text = "ExportDXF"; - this.ResumeLayout(false); - this.PerformLayout(); + this.prefixTextBox.Location = new System.Drawing.Point(130, 44); + this.prefixTextBox.Name = "prefixTextBox"; + this.prefixTextBox.Size = new System.Drawing.Size(424, 25); + this.prefixTextBox.TabIndex = 2; + // + // button1 + // + this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.button1.Image = global::ExportDXF.Properties.Resources.play; + this.button1.Location = new System.Drawing.Point(560, 13); + this.button1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(46, 56); + this.button1.TabIndex = 0; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 78); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(112, 17); + this.label3.TabIndex = 4; + this.label3.Text = "View flip decider :"; + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(130, 75); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(353, 25); + this.comboBox1.TabIndex = 5; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(618, 391); + this.Controls.Add(this.comboBox1); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.richTextBox1); + this.Controls.Add(this.prefixTextBox); + this.Controls.Add(this.activeDocTitleBox); + this.Controls.Add(this.button1); + this.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.MaximizeBox = false; + this.Name = "MainForm"; + this.Text = "ExportDXF"; + this.ResumeLayout(false); + this.PerformLayout(); } @@ -129,6 +151,8 @@ private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox prefixTextBox; - } + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox comboBox1; + } } diff --git a/ExportDXF/Forms/MainForm.cs b/ExportDXF/Forms/MainForm.cs index 14aa2a6..e46030e 100644 --- a/ExportDXF/Forms/MainForm.cs +++ b/ExportDXF/Forms/MainForm.cs @@ -12,7 +12,7 @@ using System.Windows.Forms; namespace ExportDXF.Forms { - public partial class MainForm : Form + public partial class MainForm : Form { private SldWorks sldWorks; private BackgroundWorker worker; @@ -29,7 +29,16 @@ namespace ExportDXF.Forms worker.DoWork += Worker_DoWork; worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - viewFlipDecider = new AskViewFlipDecider(); + var type = typeof(IViewFlipDecider); + var types = AppDomain.CurrentDomain.GetAssemblies() + .SelectMany(s => s.GetTypes()) + .Where(p => type.IsAssignableFrom(p) && p.IsClass) + .ToList(); + + comboBox1.DataSource = GetItems(); + comboBox1.DisplayMember = "Name"; + + //viewFlipDecider = new AskViewFlipDecider(); } protected override void OnLoad(EventArgs e) @@ -52,6 +61,29 @@ namespace ExportDXF.Forms task.Start(); } + private List GetItems() + { + var types = AppDomain.CurrentDomain.GetAssemblies() + .SelectMany(s => s.GetTypes()) + .Where(p => typeof(IViewFlipDecider).IsAssignableFrom(p) && p.IsClass) + .ToList(); + + var items = new List(); + + foreach (var type in types) + { + var obj = (IViewFlipDecider)Activator.CreateInstance(type); + + items.Add(new Item2 + { + Name = obj.Name, + ViewFlipDecider = obj + }); + } + + return items; + } + private void button1_Click(object sender, EventArgs e) { if (worker.IsBusy) @@ -77,12 +109,15 @@ namespace ExportDXF.Forms Invoke(new MethodInvoker(() => { + var item = comboBox1.SelectedItem as Item2; + viewFlipDecider = item.ViewFlipDecider; + button1.Image = Properties.Resources.stop_alt; if (richTextBox1.TextLength != 0) richTextBox1.AppendText("\n\n"); })); - + var model = sldWorks.ActiveDoc as ModelDoc2; Print("Started at " + DateTime.Now.ToShortTimeString()); @@ -169,10 +204,10 @@ namespace ExportDXF.Forms private void SetActiveDocName() { var model = sldWorks.ActiveDoc as ModelDoc2; - activeDocTitleBox.Text = model == null ? "" : model.GetTitle(); - } + activeDocTitleBox.Text = model == null ? "" : model.GetTitle(); + } - private void DetermineModelTypeAndExportToDXF(ModelDoc2 model) + private void DetermineModelTypeAndExportToDXF(ModelDoc2 model) { if (model is PartDoc) { @@ -300,10 +335,10 @@ namespace ExportDXF.Forms { item.Thickness = sheetMetalData.Thickness.FromSldWorks(); item.KFactor = sheetMetalData.KFactor; - item.BendRadius = sheetMetalData.BendRadius.FromSldWorks(); - } + item.BendRadius = sheetMetalData.BendRadius.FromSldWorks(); + } - if (item.Description == null) + if (item.Description == null) item.Description = model.Extension.CustomPropertyManager[config].Get("Description"); if (item.Description == null) @@ -313,7 +348,7 @@ namespace ExportDXF.Forms item.Material = part.GetMaterialPropertyName2(config, out db); - if (part == null) + if (part == null) continue; SavePartToDXF(part, config, savepath); @@ -322,9 +357,9 @@ namespace ExportDXF.Forms try { - var drawingInfo = DrawingInfo.Parse(prefix); - var bomName = drawingInfo != null ? string.Format("{0} {1} BOM", drawingInfo.JobNo, drawingInfo.DrawingNo) : "BOM"; - var bomFile = Path.Combine(savePath, bomName + ".xlsx"); + var drawingInfo = DrawingInfo.Parse(prefix); + var bomName = drawingInfo != null ? string.Format("{0} {1} BOM", drawingInfo.JobNo, drawingInfo.DrawingNo) : "BOM"; + var bomFile = Path.Combine(savePath, bomName + ".xlsx"); CreateBOMExcelFile(bomFile, items.ToList()); } catch (Exception ex) @@ -363,11 +398,11 @@ namespace ExportDXF.Forms if (templateDrawing == null) templateDrawing = CreateDrawing(); - + var sheet = templateDrawing.IGetCurrentSheet(); var modelName = Path.GetFileNameWithoutExtension(partModel.GetPathName()); sheet.SetName(modelName); - + Print(partModel.GetTitle() + " - Creating flat pattern."); SolidWorks.Interop.sldworks.View view; view = templateDrawing.CreateFlatPatternViewFromModelView3(partModel.GetPathName(), partConfiguration, 0, 0, 0, false, false); @@ -430,11 +465,11 @@ namespace ExportDXF.Forms if (item.KFactor > 0) partsSheet.Cells[row, 7].Value = item.KFactor; - if (item.BendRadius > 0) - partsSheet.Cells[row, 8].Value = item.BendRadius; + if (item.BendRadius > 0) + partsSheet.Cells[row, 8].Value = item.BendRadius; } - partsSheet.Column(1).AutoFit(); + partsSheet.Column(1).AutoFit(); workbook.Calculate(); pkg.Save(); @@ -603,29 +638,33 @@ namespace ExportDXF.Forms get { return Path.Combine(Application.StartupPath, "Templates", "Blank.drwdot"); } } - private void textBox1_TextChanged(object sender, EventArgs e) - { - var model = sldWorks.ActiveDoc as ModelDoc2; - var isDrawing = model is DrawingDoc; + private void textBox1_TextChanged(object sender, EventArgs e) + { + var model = sldWorks.ActiveDoc as ModelDoc2; + var isDrawing = model is DrawingDoc; - if (!isDrawing) - return; + if (!isDrawing) + return; - var drawingInfo = DrawingInfo.Parse(activeDocTitleBox.Text); + var drawingInfo = DrawingInfo.Parse(activeDocTitleBox.Text); - if (drawingInfo == null) - return; + if (drawingInfo == null) + return; - prefixTextBox.Text = string.Format("{0} {1} PT", drawingInfo.JobNo, drawingInfo.DrawingNo); - prefixTextBox.SelectionStart = prefixTextBox.Text.Length; - } - } + prefixTextBox.Text = string.Format("{0} {1} PT", drawingInfo.JobNo, drawingInfo.DrawingNo); + prefixTextBox.SelectionStart = prefixTextBox.Text.Length; + } + } - public class AskViewFlipDecider : IViewFlipDecider - { - public bool ShouldFlip(SolidWorks.Interop.sldworks.View view) - { - return MessageBox.Show("Flip view?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes; - } - } + public class Item2 + { + public string Name { get; set; } + public IViewFlipDecider ViewFlipDecider { get; set; } + } +} + + + +namespace Helpers +{ } diff --git a/ExportDXF/IViewFlipDecider.cs b/ExportDXF/IViewFlipDecider.cs index 44bab75..141ca59 100644 --- a/ExportDXF/IViewFlipDecider.cs +++ b/ExportDXF/IViewFlipDecider.cs @@ -1,7 +1,9 @@ namespace ExportDXF { - public interface IViewFlipDecider + public interface IViewFlipDecider { bool ShouldFlip(SolidWorks.Interop.sldworks.View view); + + string Name { get; } } } diff --git a/ExportDXF/ViewFlipDecider.cs b/ExportDXF/ViewFlipDecider.cs index da77c11..933c8b6 100644 --- a/ExportDXF/ViewFlipDecider.cs +++ b/ExportDXF/ViewFlipDecider.cs @@ -1,147 +1,156 @@ using SolidWorks.Interop.sldworks; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text.RegularExpressions; namespace ExportDXF { - public class ViewFlipDecider : IViewFlipDecider + [DisplayName("Automatic")] + public class ViewFlipDecider : IViewFlipDecider { + public string Name => "Automatic"; + public bool ShouldFlip(SolidWorks.Interop.sldworks.View view) { - var orientation = GetOrientation(view); - var bounds = GetBounds(view); - var bends = GetBends(view); + var orientation = ViewHelper.GetOrientation(view); + var bounds = ViewHelper.GetBounds(view); + var bends = ViewHelper.GetBends(view); - var up = bends.Where(b => b.Direction == BendDirection.Up).ToList(); - var down = bends.Where(b => b.Direction == BendDirection.Down).ToList(); + var up = bends.Where(b => b.Direction == BendDirection.Up).ToList(); + var down = bends.Where(b => b.Direction == BendDirection.Down).ToList(); - if (down.Count == 0) - return false; + if (down.Count == 0) + return false; - if (up.Count == 0) - return true; + if (up.Count == 0) + return true; - var bend = ClosestToBounds(bounds, bends); + var bend = ViewHelper.ClosestToBounds(bounds, bends); - return bend.Direction == BendDirection.Down; - } + return bend.Direction == BendDirection.Down; + } - private static Bounds GetBounds(SolidWorks.Interop.sldworks.View view) - { - var outline = view.GetOutline() as double[]; - var minX = outline[0] / 0.0254; - var minY = outline[1] / 0.0254; - var maxX = outline[2] / 0.0254; - var maxY = outline[3] / 0.0254; + } - var width = Math.Abs(minX) + Math.Abs(maxX); - var height = Math.Abs(minY) + Math.Abs(maxY); + internal static class ViewHelper + { + public static Bounds GetBounds(SolidWorks.Interop.sldworks.View view) + { + var outline = view.GetOutline() as double[]; - return new Bounds - { - X = minX, - Y = minY, - Width = width, - Height = height - }; - } + var minX = outline[0] / 0.0254; + var minY = outline[1] / 0.0254; + var maxX = outline[2] / 0.0254; + var maxY = outline[3] / 0.0254; - private static Bend ClosestToBounds(Bounds bounds, IList bends) - { - var hBends = bends.Where(b => GetAngleOrientation(b.ParallelBendAngle) == BendOrientation.Horizontal).ToList(); - var vBends = bends.Where(b => GetAngleOrientation(b.ParallelBendAngle) == BendOrientation.Vertical).ToList(); + var width = Math.Abs(minX) + Math.Abs(maxX); + var height = Math.Abs(minY) + Math.Abs(maxY); - Bend minVBend = null; - double minVBendDist = double.MaxValue; + return new Bounds + { + X = minX, + Y = minY, + Width = width, + Height = height + }; + } - foreach (var bend in vBends) - { - double distFromLft = Math.Abs(bend.X - bounds.Left); - double distFromRgt = Math.Abs(bounds.Right - bend.X); + public static Bend ClosestToBounds(Bounds bounds, IList bends) + { + var hBends = bends.Where(b => GetAngleOrientation(b.ParallelBendAngle) == BendOrientation.Horizontal).ToList(); + var vBends = bends.Where(b => GetAngleOrientation(b.ParallelBendAngle) == BendOrientation.Vertical).ToList(); - double minDist = Math.Min(distFromLft, distFromRgt); + Bend minVBend = null; + double minVBendDist = double.MaxValue; - if (minDist < minVBendDist) - { - minVBendDist = minDist; - minVBend = bend; - } - } + foreach (var bend in vBends) + { + double distFromLft = Math.Abs(bend.X - bounds.Left); + double distFromRgt = Math.Abs(bounds.Right - bend.X); - Bend minHBend = null; - double minHBendDist = double.MaxValue; + double minDist = Math.Min(distFromLft, distFromRgt); - foreach (var bend in hBends) - { - double distFromBtm = Math.Abs(bend.Y - bounds.Bottom); - double distFromTop = Math.Abs(bounds.Top - bend.Y); + if (minDist < minVBendDist) + { + minVBendDist = minDist; + minVBend = bend; + } + } - double minDist = Math.Min(distFromBtm, distFromTop); + Bend minHBend = null; + double minHBendDist = double.MaxValue; - if (minDist < minHBendDist) - { - minHBendDist = minDist; - minHBend = bend; - } - } + foreach (var bend in hBends) + { + double distFromBtm = Math.Abs(bend.Y - bounds.Bottom); + double distFromTop = Math.Abs(bounds.Top - bend.Y); - return minHBendDist < minVBendDist ? minHBend : minVBend; - } + double minDist = Math.Min(distFromBtm, distFromTop); - private static Bend SmallestYCoordinate(IList bends) - { - double dist = double.MaxValue; - int index = -1; + if (minDist < minHBendDist) + { + minHBendDist = minDist; + minHBend = bend; + } + } - for (int i = 0; i < bends.Count; i++) - { - var bend = bends[i]; + return minHBendDist < minVBendDist ? minHBend : minVBend; + } - if (bend.Y < dist) - { - dist = bend.Y; - index = i; - } - } + public static Bend SmallestYCoordinate(IList bends) + { + double dist = double.MaxValue; + int index = -1; - return index == -1 ? null : bends[index]; - } + for (int i = 0; i < bends.Count; i++) + { + var bend = bends[i]; - private static Bend SmallestXCoordinate(IList bends) - { - double dist = double.MaxValue; - int index = -1; + if (bend.Y < dist) + { + dist = bend.Y; + index = i; + } + } - for (int i = 0; i < bends.Count; i++) - { - var bend = bends[i]; + return index == -1 ? null : bends[index]; + } - if (bend.X < dist) - { - dist = bend.X; - index = i; - } - } + public static Bend SmallestXCoordinate(IList bends) + { + double dist = double.MaxValue; + int index = -1; - return index == -1 ? null : bends[index]; - } + for (int i = 0; i < bends.Count; i++) + { + var bend = bends[i]; - private static BendDirection GetBendDirection(Note note) + if (bend.X < dist) + { + dist = bend.X; + index = i; + } + } + + return index == -1 ? null : bends[index]; + } + + public static BendDirection GetBendDirection(Note note) { var txt = note.GetText(); return txt.ToUpper().Contains("UP") ? BendDirection.Up : BendDirection.Down; } - private static IEnumerable GetBendNotes(SolidWorks.Interop.sldworks.View view) + public static IEnumerable GetBendNotes(SolidWorks.Interop.sldworks.View view) { return (view.GetNotes() as Array)?.Cast(); } - private static Note GetLeftMostNote(SolidWorks.Interop.sldworks.View view) + public static Note GetLeftMostNote(SolidWorks.Interop.sldworks.View view) { var notes = GetBendNotes(view); @@ -163,7 +172,7 @@ namespace ExportDXF return leftMostNote; } - private static Note GetBottomMostNote(SolidWorks.Interop.sldworks.View view) + public static Note GetBottomMostNote(SolidWorks.Interop.sldworks.View view) { var notes = GetBendNotes(view); @@ -185,12 +194,12 @@ namespace ExportDXF return btmMostNote; } - private static IEnumerable GetBendAngles(SolidWorks.Interop.sldworks.View view) + public static IEnumerable GetBendAngles(SolidWorks.Interop.sldworks.View view) { var angles = new List(); var notes = GetBendNotes(view); - foreach (var note in notes) + foreach (var note in notes) { var angle = RadiansToDegrees(note.Angle); angles.Add(angle); @@ -199,49 +208,49 @@ namespace ExportDXF return angles; } - private static List GetBends(SolidWorks.Interop.sldworks.View view) - { - var bends = new List(); - var notes = GetBendNotes(view); + public static List GetBends(SolidWorks.Interop.sldworks.View view) + { + var bends = new List(); + var notes = GetBendNotes(view); - const string pattern = @"(?(UP|DOWN))\s*(?(\d+))°"; + const string pattern = @"(?(UP|DOWN))\s*(?(\d+))°"; - foreach (var note in notes) - { - var pos = note.GetTextPoint2() as double[]; + foreach (var note in notes) + { + var pos = note.GetTextPoint2() as double[]; - var x = pos[0] / 0.0254; - var y = pos[1] / 0.0254; + var x = pos[0] / 0.0254; + var y = pos[1] / 0.0254; - var text = note.GetText(); - var match = Regex.Match(text, pattern, RegexOptions.IgnoreCase); + var text = note.GetText(); + var match = Regex.Match(text, pattern, RegexOptions.IgnoreCase); - if (!match.Success) - continue; + if (!match.Success) + continue; - var angle = double.Parse(match.Groups["ANGLE"].Value); - var direection = match.Groups["DIRECTION"].Value; + var angle = double.Parse(match.Groups["ANGLE"].Value); + var direection = match.Groups["DIRECTION"].Value; - var bend = new Bend - { - ParallelBendAngle = RadiansToDegrees(note.Angle), - Angle = angle, - Direction = direection == "UP" ? BendDirection.Up : BendDirection.Down, - X = x, - Y = y - }; + var bend = new Bend + { + ParallelBendAngle = RadiansToDegrees(note.Angle), + Angle = angle, + Direction = direection == "UP" ? BendDirection.Up : BendDirection.Down, + X = x, + Y = y + }; - bends.Add(bend); - } + bends.Add(bend); + } - return bends; - } + return bends; + } - private static BendOrientation GetOrientation(SolidWorks.Interop.sldworks.View view) + public static BendOrientation GetOrientation(SolidWorks.Interop.sldworks.View view) { var angles = GetBendAngles(view); - var bends = GetBends(view); + var bends = GetBends(view); var vertical = 0; var horizontal = 0; @@ -268,7 +277,7 @@ namespace ExportDXF return vertical > horizontal ? BendOrientation.Vertical : BendOrientation.Horizontal; } - private static BendOrientation GetAngleOrientation(double angleInDegrees) + public static BendOrientation GetAngleOrientation(double angleInDegrees) { if (angleInDegrees < 10 || angleInDegrees > 350) return BendOrientation.Horizontal; @@ -285,7 +294,7 @@ namespace ExportDXF return BendOrientation.Unknown; } - private static double RadiansToDegrees(double angleInRadians) + public static double RadiansToDegrees(double angleInRadians) { return Math.Round(angleInRadians * 180.0 / Math.PI, 8); }