Files
wg_cpso/CPSO/Annotations/NodeAnnotation.cs

115 lines
4.4 KiB
C#
Raw Permalink Normal View History

2026-03-25 18:20:24 +08:00
using CaeGlobals;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CPSO
{
[Serializable]
public class NodeAnnotation : AnnotationBase
{
// Variables
private int _nodeId;
// Properties
public int NodeId { get { return _nodeId; } set { _nodeId = value; } }
// Constructors
public NodeAnnotation(string name, int nodeId)
: base(name)
{
_nodeId = nodeId;
//
HashSet<int> allPartIds = new HashSet<int>();
CaeMesh.FeMesh mesh = Controller.DisplayedMesh;
foreach (var entry in mesh.Parts)
{
if (entry.Value.NodeLabels.Contains(_nodeId))
{
allPartIds.Add(entry.Value.PartId);
}
}
_partIds = allPartIds.ToArray();
}
// Methods
public override void GetAnnotationData(out string text, out double[] coor)
{
Vec3D nodeVec;
Vec3D arrowVec;
string fieldData = "";
string fieldDataValue = "";
string numberFormat = Controller.Settings.Annotations.GetNumberFormat();
//
if (Controller.CurrentView == ViewGeometryModelResults.Geometry ||
Controller.CurrentView == ViewGeometryModelResults.Model)
{
nodeVec = new Vec3D(Controller.GetNode(_nodeId).Coor);
arrowVec = nodeVec;
}
else if (Controller.CurrentView == ViewGeometryModelResults.Results)
{
nodeVec = new Vec3D(Controller.GetScaledNode(1, _nodeId).Coor);
// Arrow
float scale = Controller.GetScale();
arrowVec = new Vec3D(Controller.GetScaledNode(scale, _nodeId).Coor); // for the arrow
//
if (Controller.ViewResultsType == ViewResultsTypeEnum.ColorContours)
{
float fieldValue = Controller.GetNodalValue(_nodeId);
string fieldUnit = Controller.GetCurrentResultsUnitAbbreviation();
if (fieldUnit == "/") fieldUnit = "";
//
fieldDataValue = string.Format("{0} {1}", fieldValue.ToString(numberFormat), fieldUnit);
fieldData = string.Format("Value: {0}", fieldDataValue);
}
}
else throw new NotSupportedException();
//
string lengthUnit = Controller.GetLengthUnit();
//
bool addNodeIdData = Controller.Settings.Annotations.ShowNodeId;
bool addCoorData = Controller.Settings.Annotations.ShowCoordinates;
bool addFieldData = fieldData.Length > 0;
bool onlyFieldData = false;
if (!addCoorData && !addFieldData) addNodeIdData = true;
if (!addNodeIdData && !addCoorData) onlyFieldData = true;
// Item name
string itemName = "Node id: ";
if (Controller.CurrentView == ViewGeometryModelResults.Geometry) itemName = "Vertex id: ";
// Node data
text = "";
if (addNodeIdData) text = itemName + _nodeId;
// Coordinates data
if (addCoorData)
{
if (text.Length > 0) text += Environment.NewLine;
//
text += string.Format("X: {1} {4}{0}Y: {2} {4}{0}Z: {3} {4}", Environment.NewLine,
nodeVec.Coor[0].ToString(numberFormat),
nodeVec.Coor[1].ToString(numberFormat),
nodeVec.Coor[2].ToString(numberFormat),
lengthUnit);
}
// Field value data
if (addFieldData)
{
if (text.Length > 0) text += Environment.NewLine;
if (onlyFieldData) text += fieldDataValue;
else text += fieldData;
}
//
coor = arrowVec.Coor;
//
if (IsTextOverridden) text = OverriddenText;
}
}
}