120 lines
4.9 KiB
C#
120 lines
4.9 KiB
C#
using Hi.Disp.Flag;
|
|
using Hi.Disp;
|
|
using Hi.Machining.MachiningEquipmentUtils;
|
|
using Hi.Mech.Topo;
|
|
using Hi.Numerical;
|
|
using Hi.Numerical.NcArgs;
|
|
using System.Collections;
|
|
using System;
|
|
using Hi.Geom;
|
|
using System.Linq;
|
|
|
|
namespace Sample.Disp
|
|
{
|
|
/// <summary>
|
|
/// Displayee for Heidenhain coordinate entry visualization.
|
|
/// </summary>
|
|
public class HeidenhainCoordinateEntryDisplayee : IAnchoredDisplayee
|
|
{
|
|
/// <summary>
|
|
/// Gets or sets whether to show Heidenhain datum preset information.
|
|
/// </summary>
|
|
public bool ShowHeidenhainDatumPreset { get; set; } = true;
|
|
/// <summary>
|
|
/// Gets or sets whether to show Heidenhain datum shift information.
|
|
/// </summary>
|
|
public bool ShowHeidenhainDatumShift { get; set; } = true;
|
|
/// <summary>
|
|
/// Gets or sets the function that provides the NcEnv instance.
|
|
/// </summary>
|
|
public Func<HardNcEnv> NcEnvFunc { get; set; }
|
|
/// <summary>
|
|
/// Gets or sets the function that provides the machining equipment.
|
|
/// </summary>
|
|
public Func<IMachiningEquipment> MillingEquipmentFunc { get; set; }
|
|
HardNcEnv NcEnv => NcEnvFunc?.Invoke();
|
|
/// <summary>
|
|
/// Gets or sets the Heidenhain Cycle Def 247 Q339 value.
|
|
/// </summary>
|
|
public int HeidenhainCycleDef247Q339 { get; set; }
|
|
/// <summary>
|
|
/// Gets or sets the Heidenhain Cycle Def 7 arguments.
|
|
/// </summary>
|
|
public HeidenhainCycleDef7Arg HeidenhainCycleDef7Arg { get; set; }
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance.
|
|
/// </summary>
|
|
/// <param name="ncEnvFunc">The function that provides the NcEnv instance.</param>
|
|
/// <param name="millingEquipmentSource">The function that provides the machining equipment.</param>
|
|
public HeidenhainCoordinateEntryDisplayee(Func<HardNcEnv> ncEnvFunc, Func<IMachiningEquipment> millingEquipmentSource)
|
|
{
|
|
NcEnvFunc = ncEnvFunc;
|
|
MillingEquipmentFunc = millingEquipmentSource;
|
|
}
|
|
/// <inheritdoc/>
|
|
public void Display(Bind bind)
|
|
{
|
|
HardNcEnv ncEnv = NcEnv;
|
|
if (ncEnv == null || NcEnv.CncBrand != CncBrand.Heidenhain)
|
|
return;
|
|
|
|
////Console.WriteLine($"B: {CoordinateIndex}; {coordinateMove}");
|
|
Vec3d mcXyz_AttacherAtTableBuckleZero = MillingEquipmentFunc?.Invoke()
|
|
?.GetMachinePositionAtTableBuckleZero();
|
|
if (mcXyz_AttacherAtTableBuckleZero == null)
|
|
return;
|
|
|
|
Vec3d coordinateMove;
|
|
string text;
|
|
if (HeidenhainCycleDef247Q339 == 0 && HeidenhainCycleDef7Arg == null)
|
|
return;
|
|
coordinateMove = NcFlagUtil.GetHeidenhainCoordinateOffset(
|
|
HeidenhainCycleDef247Q339, HeidenhainCycleDef7Arg, ncEnv);
|
|
//Console.WriteLine($"HeidenhainCycleDef7Arg: {HeidenhainCycleDef7Arg==null}");
|
|
string datumPresetText = null;
|
|
if (HeidenhainCycleDef247Q339 != 0 && ShowHeidenhainDatumPreset)
|
|
datumPresetText = $"Datum Preset Q339={HeidenhainCycleDef247Q339}";
|
|
string datumShiftText = null;
|
|
if (HeidenhainCycleDef7Arg != null && ShowHeidenhainDatumShift)
|
|
datumShiftText = $"Datum Shift: {HeidenhainCycleDef7Arg?.ToString() ?? "None"}";
|
|
text = string.Join(", ",
|
|
(new string[] { datumPresetText, datumShiftText }).
|
|
Where(v => v != null));
|
|
//text = $"Datum Preset Q339={HeidenhainCycleDef247Q339}, Datum Shift: #1";
|
|
//Console.WriteLine($"text: [{text}]");
|
|
|
|
bind.ModelMatStack.Push();
|
|
bind.ModelMatStack.Trans(coordinateMove - mcXyz_AttacherAtTableBuckleZero);
|
|
CoordinateDrawing.Display(bind, text);
|
|
bind.ModelMatStack.Pop();
|
|
}
|
|
/// <inheritdoc/>
|
|
public void ExpandToBox3d(Box3d dst)
|
|
{
|
|
HardNcEnv ncEnv = NcEnv;
|
|
if (ncEnv == null || NcEnv.CncBrand != CncBrand.Heidenhain)
|
|
return;
|
|
|
|
Vec3d mcXyz_AttacherAtTableBuckleZero = MillingEquipmentFunc?.Invoke()
|
|
?.GetMachinePositionAtTableBuckleZero();
|
|
if (mcXyz_AttacherAtTableBuckleZero == null)
|
|
return;
|
|
Vec3d coordinateMove;
|
|
if (HeidenhainCycleDef247Q339 == 0 && HeidenhainCycleDef7Arg == null)
|
|
return;
|
|
coordinateMove = NcFlagUtil.GetHeidenhainCoordinateOffset(
|
|
HeidenhainCycleDef247Q339, HeidenhainCycleDef7Arg, ncEnv);
|
|
|
|
|
|
dst.Expand(-mcXyz_AttacherAtTableBuckleZero + coordinateMove);
|
|
}
|
|
/// <inheritdoc/>
|
|
public Anchor GetAnchor()
|
|
{
|
|
return MillingEquipmentFunc?.Invoke()?.GetMachiningChain()
|
|
?.GetTableBuckle()?.GetAnchor();
|
|
}
|
|
}
|
|
}
|