Net.Like.Xue.Tokyo/Assets/Plugins/Draw XXL/scripts/components/2D/MeasurementVisualizer2D.cs

165 lines
14 KiB
C#

namespace DrawXXL
{
using UnityEngine;
[HelpURL("https://www.symphonygames.net/drawxxldocumentation/index.html")]
[AddComponentMenu("Draw XXL/2D/Measurement Visualizer 2D")]
[DefaultExecutionOrder(31000)] //negative numers are early, positive numbers are late. Range is till 32000 to both negative and positive direction.
public class MeasurementVisualizer2D : VisualizerParent
{
public enum MeasurementType { distanceBetweenPoints, distanceThresholdBetweenPoints, distanceFromPointToLine, angleBetweenVectors, angleFromLineToLine };
[SerializeField] MeasurementType measurementType = MeasurementType.distanceBetweenPoints;
[SerializeField] Color color1 = DrawMeasurements.defaultColor1;
[SerializeField] Color color2 = DrawMeasurements.defaultColor2;
[SerializeField] public bool appearanceBlock_isOutfolded = false; //is only "public" to silence the compiler warning saying that it is "never used". The compiler doesn't know that it is used via serialization.
[SerializeField] public float measuredResultValue; //is only "public" to silence the compiler warning saying that it is "never used". The compiler doesn't know that it is used via serialization.
[SerializeField] Color color = DrawBasics.defaultColor;
[SerializeField] float linesWidth = 0.0f;
[SerializeField] float enlargeSmallTextToThisMinTextSize = 0.005f;
[SerializeField] bool addTextForAlternativeAngleUnit = true;
[SerializeField] MeasurementVisualizer.AngleUnit angleUnitToDisplay = MeasurementVisualizer.AngleUnit.degree;
[SerializeField] float forceRadius_value = 1.0f;
[SerializeField] bool useReflexAngleOver180deg = false;
[SerializeField] bool drawBoundaryLines = true;
[SerializeField] bool returnObtuseAngleOver90deg = false;
[SerializeField] string name_ofGeoObject1 = null;
[SerializeField] string name_ofGeoObject2 = null;
[SerializeField] MeasurementVisualizer.DistanceThresholdType distanceThresholdType = MeasurementVisualizer.DistanceThresholdType.one;
[SerializeField] MeasurementVisualizer.PointerConfigOfAngleBetweenVectors pointerConfigOfAngleBetweenVectors = MeasurementVisualizer.PointerConfigOfAngleBetweenVectors.atBothEnds;
[SerializeField] float minimumLineLength_forDistancePointToLine = DrawMeasurements2D.minimumLineLength_forDistancePointToLine;
[SerializeField] float minimumLineLength_forAngleLineToLine = DrawMeasurements2D.minimumLineLength_forAngleLineToLine;
//only for distanceThreshold:
[SerializeField] float smallerThresholdDistance = 1.0f;
[SerializeField] float biggerThresholdDistance = 2.0f;
[SerializeField] bool displayDistanceAlsoAsText = false;
[SerializeField] MeasurementVisualizer.ExactlyOnThresholdBehaviour exactlyOnThresholdBehaviour = MeasurementVisualizer.ExactlyOnThresholdBehaviour.countAsShorterThanThreshold;
[SerializeField] DrawBasics.LineStyle overwriteStyle_forNear = DrawBasics.LineStyle.electricNoise;
[SerializeField] DrawBasics.LineStyle overwriteStyle_forMiddle = DrawBasics.LineStyle.electricImpulses;
[SerializeField] DrawBasics.LineStyle overwriteStyle_forFar = DrawBasics.LineStyle.solid;
[SerializeField] Color overwriteColor_forNear_oneThresholdVersion = UtilitiesDXXL_Colors.red_boolFalse;
[SerializeField] Color overwriteColor_forFar_oneThresholdVersion = UtilitiesDXXL_Colors.green_boolTrue;
[SerializeField] Color overwriteColor_forNear_twoThresholdsVersion = UtilitiesDXXL_Colors.red_lineThresholdFarDistance;
[SerializeField] Color overwriteColor_forMiddle_twoThresholdsVersion = UtilitiesDXXL_Colors.orange_lineThresholdMiddleDistance;
[SerializeField] Color overwriteColor_forFar_twoThresholdsVersion = UtilitiesDXXL_Colors.green_lineThresholdNearDistance;
public override void InitializeValues_onceInComponentLifetime()
{
TrySetTextToEmptyString();
endPlates_size = 0.0f;
coneLength_forStraightVectors = 0.10f;
coneLength_forCircledVectors = 0.13f;
drawPosOffset2DSection_isOutfolded = true;
drawPosOffset2DSection_ofPartnerGameobject_isOutfolded = true;
customVector2_1_picker_isOutfolded = true;
source_ofCustomVector2_1 = CustomVector2Source.transformsRight;
customVector2_1_clipboardForManualInput = Vector2.right;
vectorInterpretation_ofCustomVector2_1 = VectorInterpretation.globalSpace;
customVector2_2_picker_isOutfolded = true;
source_ofCustomVector2_2 = CustomVector2Source.manualInput;
customVector2_2_clipboardForManualInput = Vector2.one;
vectorInterpretation_ofCustomVector2_2 = VectorInterpretation.globalSpace;
customVector2_3_picker_isOutfolded = true;
source_ofCustomVector2_3 = CustomVector2Source.transformsRight;
customVector2_3_clipboardForManualInput = Vector2.one;
vectorInterpretation_ofCustomVector2_3 = VectorInterpretation.globalSpace;
customVector2ofPartnerGameobject_picker_isOutfolded = true;
source_ofCustomVector2ofPartnerGameobject = CustomVector2Source.transformsRight;
customVector2ofPartnerGameobject_clipboardForManualInput = Vector2.one;
vectorInterpretation_ofCustomVector2ofPartnerGameobject = VectorInterpretation.globalSpace;
}
public override void DrawVisualizedObject()
{
UtilitiesDXXL_Measurements.Set_defaultColor1_reversible(color1);
UtilitiesDXXL_Measurements.Set_defaultColor2_reversible(color2);
switch (measurementType)
{
case MeasurementType.distanceBetweenPoints:
UtilitiesDXXL_DrawBasics.Set_coneLength_interpretation_forStraightVectors_reversible(coneLength_interpretation_forStraightVectors);
measuredResultValue = DrawMeasurements2D.Distance(GetDrawPos2D_global(), GetDrawPos2D_ofPartnerGameobject_global(), color, linesWidth, text_inclGlobalMarkupTags, GetZPos_global_for2D(), coneLength_forStraightVectors, enlargeSmallTextToThisMinTextSize, 0.0f, hiddenByNearerObjects);
UtilitiesDXXL_DrawBasics.Reverse_coneLength_interpretation_forStraightVectors();
break;
case MeasurementType.distanceThresholdBetweenPoints:
switch (distanceThresholdType)
{
case MeasurementVisualizer.DistanceThresholdType.one:
UtilitiesDXXL_DrawBasics.Set_endPlates_sizeInterpretation_reversible(endPlates_sizeInterpretation);
DrawMeasurements2D.DistanceThreshold(GetDrawPos2D_global(), GetDrawPos2D_ofPartnerGameobject_global(), smallerThresholdDistance, text_inclGlobalMarkupTags, displayDistanceAlsoAsText, linesWidth, GetZPos_global_for2D(), ExactlyThresholdLength_countsAsShorter(), endPlates_size, overwriteStyle_forNear, overwriteStyle_forFar, overwriteColor_forNear_oneThresholdVersion, overwriteColor_forFar_oneThresholdVersion, enlargeSmallTextToThisMinTextSize, 0.0f, hiddenByNearerObjects);
UtilitiesDXXL_DrawBasics.Reverse_endPlates_sizeInterpretation();
break;
case MeasurementVisualizer.DistanceThresholdType.two:
UtilitiesDXXL_DrawBasics.Set_endPlates_sizeInterpretation_reversible(endPlates_sizeInterpretation);
DrawMeasurements2D.DistanceThresholds(GetDrawPos2D_global(), GetDrawPos2D_ofPartnerGameobject_global(), smallerThresholdDistance, biggerThresholdDistance, text_inclGlobalMarkupTags, displayDistanceAlsoAsText, linesWidth, GetZPos_global_for2D(), ExactlyThresholdLength_countsAsShorter(), endPlates_size, overwriteStyle_forNear, overwriteStyle_forMiddle, overwriteStyle_forFar, overwriteColor_forNear_twoThresholdsVersion, overwriteColor_forMiddle_twoThresholdsVersion, overwriteColor_forFar_twoThresholdsVersion, enlargeSmallTextToThisMinTextSize, 0.0f, hiddenByNearerObjects);
UtilitiesDXXL_DrawBasics.Reverse_endPlates_sizeInterpretation();
break;
default:
break;
}
break;
case MeasurementType.distanceFromPointToLine:
UtilitiesDXXL_Measurements2D.Set_minimumLineLength_forDistancePointToLine_reversible(minimumLineLength_forDistancePointToLine);
UtilitiesDXXL_DrawBasics.Set_coneLength_interpretation_forStraightVectors_reversible(coneLength_interpretation_forStraightVectors);
measuredResultValue = DrawMeasurements2D.DistancePointToLine(GetDrawPos2D_global(), GetDrawPos2D_ofPartnerGameobject_global(), Get_customVector2ofPartnerGameobject_inGlobalSpaceUnits(), color, linesWidth, text_inclGlobalMarkupTags, name_ofGeoObject2, GetZPos_global_for2D(), coneLength_forStraightVectors, enlargeSmallTextToThisMinTextSize, 0.0f, hiddenByNearerObjects);
UtilitiesDXXL_DrawBasics.Reverse_coneLength_interpretation_forStraightVectors();
UtilitiesDXXL_Measurements2D.Reverse_minimumLineLength_forDistancePointToLine();
break;
case MeasurementType.angleBetweenVectors:
switch (pointerConfigOfAngleBetweenVectors)
{
case MeasurementVisualizer.PointerConfigOfAngleBetweenVectors.atBothEnds:
UtilitiesDXXL_DrawBasics.Set_coneLength_interpretation_forCircledVectors_reversible(coneLength_interpretation_forCircledVectors);
measuredResultValue = DrawMeasurements2D.AngleSpan(Get_customVector2_1_inGlobalSpaceUnits(), Get_customVector2_2_inGlobalSpaceUnits(), GetDrawPos2D_global_independentAlternativeValue(), color, forceRadius_value, linesWidth, text_inclGlobalMarkupTags, GetZPos_global_for2D(), useReflexAngleOver180deg, DisplayAndReturn_radInsteadOfDeg(), coneLength_forCircledVectors, drawBoundaryLines, addTextForAlternativeAngleUnit, 0.0f, hiddenByNearerObjects);
UtilitiesDXXL_DrawBasics.Reverse_coneLength_interpretation_forCircledVectors();
break;
case MeasurementVisualizer.PointerConfigOfAngleBetweenVectors.onlyAtStart:
UtilitiesDXXL_DrawBasics.Set_coneLength_interpretation_forCircledVectors_reversible(coneLength_interpretation_forCircledVectors);
measuredResultValue = DrawMeasurements2D.Angle(Get_customVector2_2_inGlobalSpaceUnits(), Get_customVector2_1_inGlobalSpaceUnits(), GetDrawPos2D_global_independentAlternativeValue(), color, forceRadius_value, linesWidth, text_inclGlobalMarkupTags, GetZPos_global_for2D(), useReflexAngleOver180deg, DisplayAndReturn_radInsteadOfDeg(), coneLength_forCircledVectors, drawBoundaryLines, addTextForAlternativeAngleUnit, 0.0f, hiddenByNearerObjects);
UtilitiesDXXL_DrawBasics.Reverse_coneLength_interpretation_forCircledVectors();
break;
case MeasurementVisualizer.PointerConfigOfAngleBetweenVectors.onlyAtEnd:
UtilitiesDXXL_DrawBasics.Set_coneLength_interpretation_forCircledVectors_reversible(coneLength_interpretation_forCircledVectors);
measuredResultValue = DrawMeasurements2D.Angle(Get_customVector2_1_inGlobalSpaceUnits(), Get_customVector2_2_inGlobalSpaceUnits(), GetDrawPos2D_global_independentAlternativeValue(), color, forceRadius_value, linesWidth, text_inclGlobalMarkupTags, GetZPos_global_for2D(), useReflexAngleOver180deg, DisplayAndReturn_radInsteadOfDeg(), coneLength_forCircledVectors, drawBoundaryLines, addTextForAlternativeAngleUnit, 0.0f, hiddenByNearerObjects);
UtilitiesDXXL_DrawBasics.Reverse_coneLength_interpretation_forCircledVectors();
break;
default:
break;
}
break;
case MeasurementType.angleFromLineToLine:
UtilitiesDXXL_Measurements2D.Set_minimumLineLength_forAngleLineToLine_reversible(minimumLineLength_forAngleLineToLine);
UtilitiesDXXL_DrawBasics.Set_coneLength_interpretation_forCircledVectors_reversible(coneLength_interpretation_forCircledVectors);
measuredResultValue = DrawMeasurements2D.AngleLineToLine(GetDrawPos2D_global(), Get_customVector2_3_inGlobalSpaceUnits(), GetDrawPos2D_ofPartnerGameobject_global(), Get_customVector2ofPartnerGameobject_inGlobalSpaceUnits(), color, linesWidth, text_inclGlobalMarkupTags, name_ofGeoObject1, name_ofGeoObject2, GetZPos_global_for2D(), returnObtuseAngleOver90deg, DisplayAndReturn_radInsteadOfDeg(), coneLength_forCircledVectors, addTextForAlternativeAngleUnit, 0.0f, hiddenByNearerObjects);
UtilitiesDXXL_DrawBasics.Reverse_coneLength_interpretation_forCircledVectors();
UtilitiesDXXL_Measurements2D.Reverse_minimumLineLength_forAngleLineToLine();
break;
default:
break;
}
UtilitiesDXXL_Measurements.Reverse_defaultColor1();
UtilitiesDXXL_Measurements.Reverse_defaultColor2();
}
bool DisplayAndReturn_radInsteadOfDeg()
{
return (angleUnitToDisplay == MeasurementVisualizer.AngleUnit.radians);
}
bool ExactlyThresholdLength_countsAsShorter()
{
return (exactlyOnThresholdBehaviour == MeasurementVisualizer.ExactlyOnThresholdBehaviour.countAsShorterThanThreshold);
}
}
}