From 14480a67b2b98ed6b614652c403ff99c54818143 Mon Sep 17 00:00:00 2001
From: Sebi <pape@vr.rwth-aachen.de>
Date: Tue, 23 Apr 2024 16:40:59 +0200
Subject: [PATCH] Implementing 3D Cursor & Crosshair, fixing many internal
 things, improving box shader & font rendering

---
 Source/DasherVR/Private/Dasher3DWidget.cpp  |  59 +++++++++++++-------
 Source/DasherVR/Private/SDasherWidget.cpp   |   7 ++-
 Source/DasherVR/Public/Dasher3DWidget.h     |   9 ++-
 Source/Thirdparty/Dasher/DasherCore         |   2 +-
 Source/Thirdparty/Dasher/Lib/DasherCore.lib |   4 +-
 Source/Thirdparty/Dasher/Lib/DasherCore.pdb | Bin 10326016 -> 10448896 bytes
 6 files changed, 52 insertions(+), 29 deletions(-)

diff --git a/Source/DasherVR/Private/Dasher3DWidget.cpp b/Source/DasherVR/Private/Dasher3DWidget.cpp
index d52de31..131080e 100644
--- a/Source/DasherVR/Private/Dasher3DWidget.cpp
+++ b/Source/DasherVR/Private/Dasher3DWidget.cpp
@@ -13,20 +13,21 @@ ADasher3DWidget::ADasher3DWidget() : DasherParents()
 	PrimaryActorTick.bCanEverTick = true;
 
 	ActorRootComponent = CreateDefaultSubobject<UStaticMeshComponent>("Root");
+	ActorRootComponent->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block);
 	SetRootComponent(ActorRootComponent);
 
 	CubeInstances = CreateDefaultSubobject<UInstancedStaticMeshComponent>("Cubes");
 	CubeInstances->SetupAttachment(GetRootComponent());
 	CubeInstances->SetFlags(RF_Transactional);
 	CubeInstances->NumCustomDataFloats = 7; //Color(3), Scale(3), LineWidth(1)
-	CubeInstances->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);
+	CubeInstances->SetCollisionResponseToChannel(ECC_Visibility, ECR_Block);
 	this->AddInstanceComponent(CubeInstances);
 
 	LetterInstances = CreateDefaultSubobject<UInstancedStaticMeshComponent>("Letters");
 	LetterInstances->SetupAttachment(GetRootComponent());
 	LetterInstances->SetFlags(RF_Transactional);
 	LetterInstances->NumCustomDataFloats = 5; //UV(2), Size(2), TexturePage(1)
-	LetterInstances->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);
+	LetterInstances->SetCollisionResponseToAllChannels(ECR_Ignore);
 	this->AddInstanceComponent(LetterInstances);
 
 }
@@ -37,6 +38,9 @@ void ADasher3DWidget::PostInitializeComponents()
 
 	CubeMaterialInstanceDynamic = UMaterialInstanceDynamic::Create(CubeInstances->GetMaterial(0), CubeInstances);
 	CubeInstances->SetMaterial(0, CubeMaterialInstanceDynamic);
+
+	LetterMaterialInstanceDynamic = UMaterialInstanceDynamic::Create(LetterInstances->GetMaterial(0), LetterInstances);
+	LetterInstances->SetMaterial(0, LetterMaterialInstanceDynamic);
 }
 
 // Called when the game starts or when spawned
@@ -63,8 +67,10 @@ void ADasher3DWidget::Tick(float DeltaTime)
 
 std::pair<Dasher::screenint, Dasher::screenint> ADasher3DWidget::TextSize(Label* label, unsigned iFontSize)
 {
-	char CurrentChar = label->m_strText[0];
+	FString labelText = UTF8_TO_TCHAR(label->m_strText.c_str());
+	TCHAR CurrentChar = labelText[0];
 	if (CurrentChar < 32) CurrentChar = 32; // replace non-printable characters with spaces.
+	CurrentChar = DisplayFont->RemapChar(CurrentChar);
 
 	const float FontScale = iFontSize / DisplayFont->ImportOptions.Height;
 	const float CharacterSizeU = DisplayFont->Characters[CurrentChar].USize; // Pixel Sizes for actual character without blank space
@@ -80,7 +86,7 @@ std::pair<Dasher::screenint, Dasher::screenint> ADasher3DWidget::TextSize(Label*
 
 void ADasher3DWidget::DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, const Dasher::ColorPalette::Color& color){}
 
-void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) {
+void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) {
 		
 	if (sizeX == 0 || sizeY == 0) return;
 	const FVector Scale = FVector(FVector2D(sizeX, sizeY) / DrawingSize, 
@@ -90,7 +96,7 @@ void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, D
 	
 	const FLinearColor RectColor = FLinearColor(color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0);
 
-	BackBuffer->first.Add(FTransform(FQuat::Identity, FVector(Translation, -ExtrusionLevelToHeight(levelUnderCrosshair)) * WorldToMeters, Scale));
+	BackBuffer->first.Add(FTransform(FQuat::Identity, FVector(Translation, 0) * WorldToMeters, Scale));
 	BackBuffer->second.Add(RectColor.R);
 	BackBuffer->second.Add(RectColor.G);
 	BackBuffer->second.Add(RectColor.B);
@@ -101,23 +107,25 @@ void ADasher3DWidget::DrawCube(Dasher::screenint posX, Dasher::screenint posY, D
 }
 
 // x & y are given as upper left corner of the character
-void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, const Dasher::ColorPalette::Color& color) {
+void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, unsigned int iFontSize, const Dasher::ColorPalette::Color& color) {
 		float CharacterOffset = 0; // in Meters
-		
-		for (int i = 0; i < label->m_strText.size(); i++)
+
+		FString labelText = UTF8_TO_TCHAR(label->m_strText.c_str());
+		for (int i = 0; i < labelText.Len(); i++)
 		{
-			char CurrentChar = label->m_strText[i];
+			TCHAR CurrentChar = labelText[i];
 			if (CurrentChar < 32) CurrentChar = 32; // replace non-printable characters with spaces.
+			const TCHAR RemappedChar = DisplayFont->RemapChar(CurrentChar);
 
-			const int TextureIndex = DisplayFont->Characters[CurrentChar].TextureIndex;
+			const int TextureIndex = DisplayFont->Characters[RemappedChar].TextureIndex;
 			const float FontScale = iFontSize / DisplayFont->ImportOptions.Height;
-			const float TextureSizeU = TextureArray->SourceTextures[TextureIndex]->GetSizeX(); // Pixel Sizes
-			const float TextureSizeV = TextureArray->SourceTextures[TextureIndex]->GetSizeY(); // Pixel Sizes
-			const float CharacterOffsetU = DisplayFont->Characters[CurrentChar].StartU; //Upper left corner
-			const float CharacterOffsetV = DisplayFont->Characters[CurrentChar].StartV; //Upper left corner
-			const float CharacterSizeU = DisplayFont->Characters[CurrentChar].USize; // Pixel Sizes for actual character without blank space
-			const float CharacterSizeV = DisplayFont->Characters[CurrentChar].VSize; // Pixel Sizes for actual character without blank space
-			const float CharacterVerticalOffset = DisplayFont->Characters[CurrentChar].VerticalOffset * FontScale; //vertical offset in pixels
+			const float TextureSizeU = DisplayFont->Textures[TextureIndex]->GetSizeX(); // Pixel Sizes
+			const float TextureSizeV = DisplayFont->Textures[TextureIndex]->GetSizeY(); // Pixel Sizes
+			const float CharacterOffsetU = DisplayFont->Characters[RemappedChar].StartU; //Upper left corner
+			const float CharacterOffsetV = DisplayFont->Characters[RemappedChar].StartV; //Upper left corner
+			const float CharacterSizeU = DisplayFont->Characters[RemappedChar].USize; // Pixel Sizes for actual character without blank space
+			const float CharacterSizeV = DisplayFont->Characters[RemappedChar].VSize; // Pixel Sizes for actual character without blank space
+			const float CharacterVerticalOffset = DisplayFont->Characters[RemappedChar].VerticalOffset * FontScale; //vertical offset in pixels
 
 			TArray<float> FontData = {
 				CharacterOffsetU / TextureSizeU, // Upper Left Corner given in UV
@@ -136,7 +144,7 @@ void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::scr
 			const FVector CharTranslation = FVector(
 					(x / DrawingSize.X + CharScale.X * 0.5f) * WorldToMeters + CharacterOffset, 
 					((y + CharacterVerticalOffset) / DrawingSize.Y) * WorldToMeters,
-					(FMath::Max(ExtrusionLevelToHeight(extrusionLevel), 0.001) - ExtrusionLevelToHeight(levelUnderCrosshair) + groupRecursionDepth*FLT_EPSILON) * WorldToMeters + 0.01f
+					(FMath::Max(ExtrusionLevelToHeight(extrusionLevel), 0.001) + groupRecursionDepth*0.001) * WorldToMeters + 0.01f
 				)
 				- FVector(0.5f, 0.5f, 0) * WorldToMeters; // Move to upper left corner of parent
 
@@ -147,9 +155,17 @@ void ADasher3DWidget::Draw3DLabel(Label* label, Dasher::screenint x, Dasher::scr
 		}
 }
 
+void ADasher3DWidget::FinishRender3D(Dasher::myint originX, Dasher::myint originY, Dasher::myint originExtrusionLevel)
+{
+	Origin = FVector(originX / DrawingSize.X, originY / DrawingSize.Y, 0) * WorldToMeters;
+
+	CubeInstances->SetRelativeLocation({0,0,-ExtrusionLevelToHeight(originExtrusionLevel) * WorldToMeters});
+	LetterInstances->SetRelativeLocation({0,0,-ExtrusionLevelToHeight(originExtrusionLevel) * WorldToMeters});
+}
+
 void ADasher3DWidget::DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness)
 {
-	DrawCube((x2 - x1)/2 + x1, (y2-y1)/2 + y1, x2-x1, y2-y1, 1, 0, 0, color, outlineColor, iThickness);
+	DrawCube((x2 - x1)/2 + x1, (y2-y1)/2 + y1, x2-x1, y2-y1, 1, 0, color, outlineColor, iThickness);
 }
 
 void ADasher3DWidget::DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& lineColor, int iLineWidth)
@@ -241,8 +257,8 @@ bool ADasher3DWidget::GetScreenCoords(Dasher::screenint& iX, Dasher::screenint&
 
 void ADasher3DWidget::SetMouseLocation(FVector WorldLocation)
 {
-	FVector2D inp = FVector2D(ActorRootComponent->GetComponentToWorld().InverseTransformPosition(WorldLocation)) / WorldToMeters + FVector2D(0.5f,0.5f);
-	CursorPosition = inp * DrawingSize; //convert to pixels
+	MousePos = ActorRootComponent->GetComponentToWorld().InverseTransformPosition(WorldLocation) + FVector(0.5f,0.5f,0) * WorldToMeters;
+	CursorPosition = FVector2D(MousePos) / WorldToMeters * DrawingSize; //convert to pixels
 }
 
 void ADasher3DWidget::SimulateClick(FKey Key, bool pressed)
@@ -265,6 +281,7 @@ void ADasher3DWidget::InitializeTextureArray()
 			TextureArray->SourceTextures.Add(DisplayFont->Textures[i]);
 	}
 	TextureArray->UpdateSourceFromSourceTextures(true);
+	LetterMaterialInstanceDynamic->SetTextureParameterValue("TextureArray", TextureArray);
 }
 
 float ADasher3DWidget::ExtrusionLevelToHeight(float level)
diff --git a/Source/DasherVR/Private/SDasherWidget.cpp b/Source/DasherVR/Private/SDasherWidget.cpp
index 3f715fe..c533fc7 100644
--- a/Source/DasherVR/Private/SDasherWidget.cpp
+++ b/Source/DasherVR/Private/SDasherWidget.cpp
@@ -138,14 +138,15 @@ void SDasherWidget::Construct(const FArguments& InArgs)
 
   //Setting up Dasher
   static Dasher::XMLErrorDisplay display;
-    Dasher::XmlSettingsStore* Settings = new Dasher::XmlSettingsStore("Settings.xml", &display); //Gets deleted somewhere else
-    Settings->Load();
+  Dasher::XmlSettingsStore* Settings = new Dasher::XmlSettingsStore("Settings.xml", &display); //Gets deleted somewhere else
+  Settings->Load();
   Settings->Save();
-    DasherMainInterface = MakeShared<Dasher::DasherInterface>(Settings);
+  DasherMainInterface = MakeShared<Dasher::DasherInterface>(Settings);
   DasherMainInterface->SetDefaultInputDevice(this);
 
   DasherMainInterface->SetScreen(this);
   DasherMainInterface->SetBuffer(0);
+  DasherMainInterface->SetLongParameter(Dasher::LP_SHAPE_TYPE, Dasher::Options::OVERLAPPING_RECTANGLE);
 
   DasherMainInterface->SetCharEnteredCallback([this](FString Char, FString Buffer) {CharacterEnteredFlag = true; AlteredChar = Char; });
   DasherMainInterface->SetCharDeletedCallback([this](FString Char, FString Buffer) {CharacterDeletedFlag = true; AlteredChar = Char; });
diff --git a/Source/DasherVR/Public/Dasher3DWidget.h b/Source/DasherVR/Public/Dasher3DWidget.h
index df3167a..936e407 100644
--- a/Source/DasherVR/Public/Dasher3DWidget.h
+++ b/Source/DasherVR/Public/Dasher3DWidget.h
@@ -43,8 +43,9 @@ public:
 	virtual std::pair<Dasher::screenint, Dasher::screenint> TextSize(Label* label, unsigned iFontSize) override;
 	virtual void DrawString(Label* label, Dasher::screenint x, Dasher::screenint y, unsigned iFontSize, const Dasher::ColorPalette::Color& color) override;
 	virtual void DrawRectangle(Dasher::screenint x1, Dasher::screenint y1, Dasher::screenint x2, Dasher::screenint y2, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) override;
-	virtual void DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) override;
-	virtual void Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, Dasher::myint levelUnderCrosshair, unsigned int iFontSize, const Dasher::ColorPalette::Color& color) override;
+	virtual void DrawCube(Dasher::screenint posX, Dasher::screenint posY, Dasher::screenint sizeX, Dasher::screenint sizeY, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, const Dasher::ColorPalette::Color& color, const Dasher::ColorPalette::Color& outlineColor, int iThickness) override;
+	virtual void Draw3DLabel(Label* label, Dasher::screenint x, Dasher::screenint y, Dasher::myint extrusionLevel, Dasher::myint groupRecursionDepth, unsigned int iFontSize, const Dasher::ColorPalette::Color& color) override;
+	virtual void FinishRender3D(Dasher::myint originX, Dasher::myint originY, Dasher::myint originExtrusionLevel) override;
 	virtual void DrawCircle(Dasher::screenint iCX, Dasher::screenint iCY, Dasher::screenint iR, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& lineColor, int iLineWidth) override;
 	virtual void Polyline(point* Points, int Number, int iWidth, const Dasher::ColorPalette::Color& color) override;
 	virtual void Polygon(point* Points, int Number, const Dasher::ColorPalette::Color& fillColor, const Dasher::ColorPalette::Color& outlineColor, int lineWidth) override;
@@ -62,10 +63,13 @@ public:
 	UPROPERTY(EditAnywhere) UFont* DisplayFont;
 	UPROPERTY(EditAnywhere) UMaterial* FontMaterial;
 	UPROPERTY(EditAnywhere) float DepthScale = 0.1;
+	UPROPERTY(EditAnywhere, BlueprintReadOnly) FVector Origin = {0,0,0};
+	UPROPERTY(EditAnywhere, BlueprintReadOnly) FVector MousePos = {0,0,0};
 
 	UFUNCTION(BlueprintCallable) void SetMouseLocation(FVector WorldLocation);
 	UFUNCTION(BlueprintCallable) void SimulateClick(FKey Key, bool pressed);
 	virtual void PostInitializeComponents() override;
+	
 
 private:
 	FVector2D CursorPosition;
@@ -73,6 +77,7 @@ private:
 	FVector2D DrawingSize = {1000,1000}; // Rendering Resolution
 	TSharedPtr<Dasher::DasherInterface> DasherMainInterface;
 	UPROPERTY() UMaterialInstanceDynamic* CubeMaterialInstanceDynamic;
+	UPROPERTY() UMaterialInstanceDynamic* LetterMaterialInstanceDynamic;
 	UPROPERTY() UTexture2DArray* TextureArray;
 
 	FVector DefaultTranslation;
diff --git a/Source/Thirdparty/Dasher/DasherCore b/Source/Thirdparty/Dasher/DasherCore
index a061849..841a75e 160000
--- a/Source/Thirdparty/Dasher/DasherCore
+++ b/Source/Thirdparty/Dasher/DasherCore
@@ -1 +1 @@
-Subproject commit a061849126815c95bda625aee511b63030904236
+Subproject commit 841a75e6a3410f40a44696a5ba4b224fac32566c
diff --git a/Source/Thirdparty/Dasher/Lib/DasherCore.lib b/Source/Thirdparty/Dasher/Lib/DasherCore.lib
index 0541fb6..211eee4 100644
--- a/Source/Thirdparty/Dasher/Lib/DasherCore.lib
+++ b/Source/Thirdparty/Dasher/Lib/DasherCore.lib
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:461b5d6f6fec5470088444f0467fd5a7ed51f135bef940b1fc1142d950a950dd
-size 19978948
+oid sha256:6b5181c3f79660521838bb8c41ba794ef0520053e866f40be22e12913b5de066
+size 20109586
diff --git a/Source/Thirdparty/Dasher/Lib/DasherCore.pdb b/Source/Thirdparty/Dasher/Lib/DasherCore.pdb
index 130b41dcca7bc1dfc61498ffa647656a8c135793..c5fff29c9228c3de21efa84677b30bac89437b21 100644
GIT binary patch
delta 64907
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
aif1_)7^t5VH##ygbHUQmSI&)&-}nK=N|H$c

delta 11740
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

-- 
GitLab