Skip to content
Snippets Groups Projects
Commit 6820b577 authored by Paul-Walcher's avatar Paul-Walcher
Browse files

Added Cuboid Fact

parent 6748b406
No related branches found
No related tags found
No related merge requests found
using Newtonsoft.Json;
using REST_JSON_API;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
/// <summary>
/// Point in 3D Space
/// </summary>
public class CuboidFact : FactWrappedCRTP<CuboidFact>
{
//used points
public string PidR, PidT;
public Vector3 T;
public RectangleFact RF = null;
public float Area = 0.0F;
public RectangleFact GetR {get => (RectangleFact)FactRecorder.AllFacts[PidR];}
public PointFact GetT {get => (PointFact)FactRecorder.AllFacts[PidT];}
protected void calculate_vectors(){
/*
A = ((PointFact)FactRecorder.AllFacts[PidA]).Point + Vector3.zero;
B = ((PointFact)FactRecorder.AllFacts[PidB]).Point + Vector3.zero;
C = ((PointFact)FactRecorder.AllFacts[PidC]).Point + Vector3.zero;
D = (A - B) + C;
Area = (Vector3.Distance(A, B) * Vector3.Distance(B, C));
Vector3 scale = new Vector3(Vector3.Distance(B, C), Vector3.Distance(A, B), 1.0F);
LocalScale = scale * 0.5F;
Position = B + 0.5F*((A-B) + (C-B));
Rotation = Quaternion.LookRotation(Vector3.Cross((A-B), (C-B)), Vector3.up);
//Rotation = Quaternion.LookRotation(forward, new Vector3(1.0F, 0.0F, 0.0F));
*/
T = ((PointFact)FactRecorder.AllFacts[PidT]).Point + Vector3.zero;
RF = ((RectangleFact)FactRecorder.AllFacts[PidR]);
}
public CuboidFact() : base(){
this.PidR = null;
this.PidT = null;
}
[JsonConstructor]
public CuboidFact( string PidR, string PidT) : base()
{
this.PidR = PidR;
this.PidT = PidT;
calculate_vectors();
}
/// <summary>
/// Bypasses initialization of new MMT %Fact by using existend URI, _which is not checked for existence_.
/// <see cref="Normal"/> set to <c>Vector3.up</c>
/// </summary>
/// <param name="Point">sets <see cref="Point"/></param>
/// <param name="ServerDefinition">MMT URI as OMS</param>
public CuboidFact(string PidR, string PidT, SOMDoc ServerDefinition) : base()
{
this.PidR = PidR;
this.PidT = PidT;
this.ServerDefinition = ServerDefinition;
calculate_vectors();
}
/// \copydoc Fact.parseFact(ScrollFact)
public new static IEnumerator parseFact(List<Fact> ret, MMTFact fact)
{
if (((MMTGeneralFact)fact).defines is not OMA df)
yield break;
OMS rectangleR, pointT;
rectangleR = (OMS)df.arguments[0];
pointT = (OMS)df.arguments[1];
string PidR = rectangleR.uri;
string PidT = pointT.uri;
ret.Add(new CuboidFact(PidR, PidT, fact.@ref));
//ParsingDictionary.parseTermsToId.TryAdd(defines.ToString(), fact.@ref.uri);
//ret.Add(new PointFact(SOMDoc.MakeVector3(defines), fact.@ref));
}
/// \copydoc Fact.hasDependentFacts
public override bool HasDependentFacts => true;
/// \copydoc Fact.getDependentFactIds
protected override string[] GetDependentFactIds()
=> new string[] {PidR, PidT};
/// \copydoc Fact.GetHashCode
/* public override int GetHashCode()
=> this.Point.GetHashCode();
*/
protected override void RecalculateTransform()
{
calculate_vectors();
}
/// \copydoc Fact.Equivalent(Fact, Fact)
protected override bool EquivalentWrapped(CuboidFact f1, CuboidFact f2){
return (
Math3d.IsApproximatelyEqual(f1.T, f2.T)
&& f1.RF.isEqual(f2.RF)
);
}
protected override Fact _ReInitializeMe(Dictionary<string, string> old_to_new){
return new CuboidFact(this.PidR, this.PidT);
}
public override MMTFact MakeMMTDeclaration()
{
SOMDoc tp = new OMS(MMTConstants.CuboidType);
return new MMTGeneralFact(_LastLabel, tp, Defines());
}
public override SOMDoc Defines()
=> new OMA(
new OMS(MMTConstants.CuboidCons),
new[] {
new OMS(PidR),
new OMS(PidT)
}
);
}
\ No newline at end of file
fileFormatVersion: 2
guid: 67ed11bf3c4fc4043a85233ce249d78d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
......@@ -136,6 +136,10 @@ protected override bool EquivalentWrapped(RectangleFact f1, RectangleFact f2){
}
public bool isEqual(RectangleFact f2){
return EquivalentWrapped(this, f2);
}
protected override Fact _ReInitializeMe(Dictionary<string, string> old_to_new){
return new RectangleFact(this.PidA, this.PidB, this.PidC);
......
......@@ -48,6 +48,10 @@ public static class MMTConstants
public static readonly string TriangleType = "http://mathhub.info/FrameIT/frameworld?TriangleType?triangleType";
public static readonly string TriangleScroll = "http://mathhub.info/FrameIT/frameworld?TriangleScroll";
public static readonly string CuboidCons = "http://mathhub.info/FrameIT/frameworld?CuboidType?cuboidCons";
public static readonly string CuboidType = "http://mathhub.info/FrameIT/frameworld?CuboidType?cuboidType";
public static readonly string CuboidScroll = "http://mathhub.info/FrameIT/frameworld?CuboidScroll";
public static readonly string CircleType3d = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?circleType3D";
public static readonly string MkCircle3d = "http://mathhub.info/FrameIT/frameworld?FrameITCircle?circle3D";
public static readonly string TriangleMiddlePoint = "http://mathhub.info/FrameIT/frameworld?FrameITTriangles?triangleMidPointWrapper";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment