Files
wg_cpso/CPSO/Forms/03_AnalyzeGeometry/FrmAnalyzeGeometry.cs

142 lines
6.2 KiB
C#
Raw Permalink Normal View History

2026-03-25 18:20:24 +08:00
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CPSO
{
public partial class FrmAnalyzeGeometry : Form
{
// Variables
private Controller _controller;
private string[] _partNamesToAnalyze;
// Properties
public string[] PartNamesToAnalyze
{
get { return _partNamesToAnalyze; }
set
{
HashSet<string> partNames = new HashSet<string>();
CaeMesh.BasePart basePart;
foreach (var partName in value)
{
basePart = _controller.DisplayedMesh.Parts[partName];
if (basePart is CaeMesh.CompoundGeometryPart cgp) partNames.UnionWith(cgp.SubPartNames);
else partNames.Add(partName);
}
_partNamesToAnalyze = partNames.ToArray();
}
}
// Constructors
public FrmAnalyzeGeometry(Controller controller)
{
InitializeComponent();
//
_controller = controller;
//
tbMinEdgeLen.UnitConverter = new CaeGlobals.StringLengthConverter();
tbMinEdgesDistance.UnitConverter = tbMinEdgeLen.UnitConverter;
tbMinFaceSize.UnitConverter = new CaeGlobals.StringAreaConverter();
tbVerticesWithAngle.UnitConverter = new CaeGlobals.StringAngleDegMoreThanConverter();
}
// Event handlers
private void FrmAnalyzeGeometry_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
Hide();
}
}
private void FrmAnalyzeGeometry_VisibleChanged(object sender, EventArgs e)
{
if (this.Visible)
{
// Disable selection
_controller.SetSelectByToOff();
//
if (_partNamesToAnalyze == null || _partNamesToAnalyze.Length == 0)
throw new CaeGlobals.CaeException("No parts were selected for analysis.");
//
double shortestEdge = 0;
double closestEdges = 0;
double smallestFace = 0;
try
{
shortestEdge = _controller.GetShortestEdgeLen(_partNamesToAnalyze);
closestEdges = _controller.GetClosestUnConnectedEdgesDistance(_partNamesToAnalyze);
smallestFace = _controller.GetSmallestFace(_partNamesToAnalyze);
}
catch { }
//
float widthBefore = GetMaxLabelWidth();
//
string unitLength = " " + _controller.Model.UnitSystem.LengthUnitAbbreviation;
string unitArea = " " + _controller.Model.UnitSystem.AreaUnitAbbreviation;
labShortestEdge.Text = "Model min: " + shortestEdge.ToString("G4") + unitLength;
if (shortestEdge > 0) tbMinEdgeLen.Text = Math.Pow(10, Math.Ceiling(Math.Log10(shortestEdge))).ToString();
else tbMinEdgeLen.Text = "0.0";
//
labClosestEdges.Text = "Model min: " + closestEdges.ToString("G4") + unitLength;
if (closestEdges > 0) tbMinEdgesDistance.Text = Math.Pow(10, Math.Ceiling(Math.Log10(closestEdges))).ToString();
else tbMinEdgesDistance.Text = "0.0";
//
labSmallestFace.Text = "Model min: " + smallestFace.ToString("G4") + unitArea;
if (smallestFace > 0) tbMinFaceSize.Text = Math.Pow(10, Math.Ceiling(Math.Log10(smallestFace))).ToString();
else tbMinFaceSize.Text = "0.0";
//
tbVerticesWithAngle.Text = "175";
//
float widthAfter = GetMaxLabelWidth();
float delta = widthAfter - widthBefore;
Width += (int)delta;
//
btnShow_Click(null, null);
}
}
private void btnShow_Click(object sender, EventArgs e)
{
try
{
//if (cbEdgesShorter.Checked || cbFacesSmaller.Checked || cbCloseEdges.Checked || cbVerticesWithAngle.Checked)
_controller.ClearAllSelection();
//
if (cbEdgesShorter.Checked) _controller.ShowShortEdges(tbMinEdgeLen.Value, _partNamesToAnalyze);
if (cbFacesSmaller.Checked) _controller.ShowSmallFaces(tbMinFaceSize.Value, _partNamesToAnalyze);
if (cbCloseEdges.Checked) _controller.ShowCloseUnConnectedEdges(tbMinEdgesDistance.Value, _partNamesToAnalyze);
if (cbVerticesWithAngle.Checked)
_controller.ShowVerticesWithLargeAngle(_partNamesToAnalyze, tbVerticesWithAngle.Value);
}
catch
{
}
}
private void btnClose_Click(object sender, EventArgs e)
{
Hide();
}
private float GetMaxLabelWidth()
{
SizeF size;
float maxWidth;
maxWidth = labShortestEdge.CreateGraphics().MeasureString(labShortestEdge.Text, labShortestEdge.Font).Width;
size = labClosestEdges.CreateGraphics().MeasureString(labClosestEdges.Text, labClosestEdges.Font);
if (size.Width > maxWidth) maxWidth = size.Width;
size = labSmallestFace.CreateGraphics().MeasureString(labSmallestFace.Text, labSmallestFace.Font);
if (size.Width > maxWidth) maxWidth = size.Width;
return maxWidth;
}
}
}