Files
wg_cpso/CaeMesh/Parts/GeometryPart.cs

174 lines
6.7 KiB
C#
Raw Normal View History

2026-03-25 18:20:24 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CaeGlobals;
namespace CaeMesh
{
[Serializable]
public class GeometryPart : BasePart
{
// Variables
private MeshingParameters _meshingParameters;
private List<Enum> _elementTypeEnums;
private int[] _freeEdgeCellIds;
private int[] _errorEdgeCellIds;
private int[] _freeNodeIds;
private int[] _errorNodeIds;
private string _cadFileData;
// Properties
public MeshingParameters MeshingParameters
{
get { return _meshingParameters; }
set
{
_meshingParameters = value;
if (_meshingParameters != null && (PartType == PartType.Solid || PartType == PartType.SolidAsShell))
_meshingParameters.QuadDominated = false;
}
}
public int[] FreeEdgeCellIds { get { return _freeEdgeCellIds; } set { _freeEdgeCellIds = value; } }
public int[] ErrorEdgeCellIds { get { return _errorEdgeCellIds; } set { _errorEdgeCellIds = value; } }
public int[] FreeNodeIds { get { return _freeNodeIds; } set { _freeNodeIds = value; } }
public int[] ErrorNodeIds { get { return _errorNodeIds; } set { _errorNodeIds = value; } }
public bool HasErrors
{
get
{
if (_errorEdgeCellIds != null) return true;
else if (_errorNodeIds != null) return true;
else return false;
}
}
public bool HasFreeEdges
{
get
{
if (_freeEdgeCellIds != null) return true;
else if (_freeNodeIds != null) return true;
else return false;
}
}
public string CADFileData
{
get
{
if (_cadFileData != null) return StringCompressor.DecompressString(_cadFileData);
else return null;
}
set
{
if (value == null) _cadFileData = null;
else _cadFileData = StringCompressor.CompressString(value);
}
}
public bool IsCADPart { get { return _cadFileData != null; } }
// Constructors
public GeometryPart(string name, int partId, int[] nodeLabels, int[] elementLabels, Type[] elementTypes)
: base(name, partId, nodeLabels, elementLabels, elementTypes)
{
_meshingParameters = null;
_elementTypeEnums = null;
_freeEdgeCellIds = null;
_errorEdgeCellIds = null;
_freeNodeIds = null;
_errorNodeIds = null;
_cadFileData = null;
}
public GeometryPart(BasePart part)
: base(part)
{
_meshingParameters = null;
_elementTypeEnums = null;
_freeEdgeCellIds = null;
_errorEdgeCellIds = null;
_freeNodeIds = null;
_errorNodeIds = null;
_cadFileData = null;
}
public GeometryPart(GeometryPart part)
: base((BasePart)part)
{
_meshingParameters = part._meshingParameters != null ? part._meshingParameters.DeepClone() : null;
_elementTypeEnums = part._elementTypeEnums != null ? part._elementTypeEnums.ToList() : null;
_freeEdgeCellIds = part.FreeEdgeCellIds != null ? part.FreeEdgeCellIds.ToArray() : null;
_errorEdgeCellIds = part.ErrorEdgeCellIds != null ? part.ErrorEdgeCellIds.ToArray() : null;
_freeNodeIds = part.FreeNodeIds != null ? part.FreeNodeIds.ToArray() : null;
_errorNodeIds = part.ErrorNodeIds != null ? part.ErrorNodeIds.ToArray() : null;
_cadFileData = part._cadFileData != null ? part._cadFileData : null;
}
// Methods
public override BasePart DeepCopy()
{
return new GeometryPart(this);
}
//
public void CADFileDataFromFile(string brepFileName)
{
if (System.IO.Path.GetExtension(brepFileName) == ".brep") CADFileData = System.IO.File.ReadAllText(brepFileName);
else throw new NotSupportedException();
}
//
public override PartProperties GetProperties()
{
PartProperties properties = base.GetProperties();
properties.IsCADPart = IsCADPart;
return properties;
}
public override void SetProperties(PartProperties properties)
{
base.SetProperties(properties);
}
public List<Enum> GetElementTypeEnums()
{
return _elementTypeEnums;
}
public void AddElementTypeEnums(List<Enum> elementTypeEnums)
{
if (elementTypeEnums != null)
{
Dictionary<Type, Enum> oldEnums = new Dictionary<Type, Enum>();
if (_elementTypeEnums != null)
{
foreach (var oldElementTypeEnum in _elementTypeEnums)
oldEnums.Add(oldElementTypeEnum.GetType(), oldElementTypeEnum);
}
//
foreach (var newEnum in elementTypeEnums)
{
if (oldEnums.ContainsKey(newEnum.GetType())) oldEnums[newEnum.GetType()] = newEnum;
else oldEnums.Add(newEnum.GetType(), newEnum);
}
//
_elementTypeEnums = oldEnums.Values.ToList();
}
}
public override void RenumberVisualizationElements(Dictionary<int, int> newIds)
{
base.RenumberVisualizationElements(newIds);
}
public override void RenumberVisualizationNodes(Dictionary<int, int> newIds)
{
base.RenumberVisualizationNodes(newIds);
//
if (_errorNodeIds != null)
{
for (int i = 0; i < _errorNodeIds.Length; i++) _errorNodeIds[i] = newIds[_errorNodeIds[i]];
}
if (_freeNodeIds != null)
{
for (int i = 0; i < _freeNodeIds.Length; i++) _freeNodeIds[i] = newIds[_freeNodeIds[i]];
}
}
}
}