Continue cleaning.
This commit is contained in:
parent
cd688f608f
commit
cb4212d972
67 changed files with 367 additions and 282 deletions
|
@ -9,7 +9,7 @@ int main(int argc, char *argv[])
|
||||||
args->recordLaunchPath();
|
args->recordLaunchPath();
|
||||||
|
|
||||||
WebsiteGenerator generator;
|
WebsiteGenerator generator;
|
||||||
generator.findProject(args->getArg(1));
|
generator.findProject(args->getArgs()[1]);
|
||||||
|
|
||||||
generator.readConfig();
|
generator.readConfig();
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,8 @@ void BlochSphereNode::update(SceneInfo* sceneInfo)
|
||||||
mOuterCircle = std::make_unique<CircleNode>(loc, mSize/2.0);
|
mOuterCircle = std::make_unique<CircleNode>(loc, mSize/2.0);
|
||||||
|
|
||||||
const auto end_point_x = Point(loc.getX() + 1.2 * mSize / 2.0, loc.getY());
|
const auto end_point_x = Point(loc.getX() + 1.2 * mSize / 2.0, loc.getY());
|
||||||
mXAxis = std::make_unique<LineNode>(loc, { end_point_x });
|
const std::vector<Point> points{end_point_x };
|
||||||
|
mXAxis = std::make_unique<LineNode>(loc, points);
|
||||||
|
|
||||||
mCentreCircle = std::make_unique<CircleNode>(loc, mSize / 50.0);
|
mCentreCircle = std::make_unique<CircleNode>(loc, mSize / 50.0);
|
||||||
mCentreCircle->setFillColor(Color(0, 0, 0));
|
mCentreCircle->setFillColor(Color(0, 0, 0));
|
||||||
|
@ -49,5 +50,6 @@ void BlochSphereNode::update(SceneInfo* sceneInfo)
|
||||||
|
|
||||||
addChild(mInnerCircle.get());
|
addChild(mInnerCircle.get());
|
||||||
addChild(mOuterCircle.get());
|
addChild(mOuterCircle.get());
|
||||||
|
addChild(mXAxis.get());
|
||||||
addChild(mCentreCircle.get());
|
addChild(mCentreCircle.get());
|
||||||
}
|
}
|
|
@ -73,7 +73,7 @@ void TemplateFile::onTextSpanFinished()
|
||||||
mWorkingLineContent.clear();
|
mWorkingLineContent.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned TemplateFile::checkForStatement(const std::string& lineSection)
|
std::size_t TemplateFile::checkForStatement(const std::string& lineSection)
|
||||||
{
|
{
|
||||||
if (lineSection.empty())
|
if (lineSection.empty())
|
||||||
{
|
{
|
||||||
|
@ -81,7 +81,7 @@ unsigned TemplateFile::checkForStatement(const std::string& lineSection)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> hits;
|
std::vector<std::string> hits;
|
||||||
unsigned hit_size{0};
|
std::size_t hit_size{0};
|
||||||
if (Lexer::matchPattern("{%@%}", lineSection, '@', hits))
|
if (Lexer::matchPattern("{%@%}", lineSection, '@', hits))
|
||||||
{
|
{
|
||||||
if (hits.size() == 1)
|
if (hits.size() == 1)
|
||||||
|
@ -97,7 +97,7 @@ unsigned TemplateFile::checkForStatement(const std::string& lineSection)
|
||||||
return hit_size;
|
return hit_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned TemplateFile::checkForExpression(const std::string& lineSection)
|
std::size_t TemplateFile::checkForExpression(const std::string& lineSection)
|
||||||
{
|
{
|
||||||
if (lineSection.empty())
|
if (lineSection.empty())
|
||||||
{
|
{
|
||||||
|
@ -105,7 +105,7 @@ unsigned TemplateFile::checkForExpression(const std::string& lineSection)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> hits;
|
std::vector<std::string> hits;
|
||||||
unsigned hit_size{0};
|
std::size_t hit_size{0};
|
||||||
if (Lexer::matchPattern("{{@}}", lineSection, '@', hits))
|
if (Lexer::matchPattern("{{@}}", lineSection, '@', hits))
|
||||||
{
|
{
|
||||||
if (hits.size() == 1)
|
if (hits.size() == 1)
|
||||||
|
@ -123,7 +123,7 @@ unsigned TemplateFile::checkForExpression(const std::string& lineSection)
|
||||||
|
|
||||||
void TemplateFile::processLine(const std::string& line)
|
void TemplateFile::processLine(const std::string& line)
|
||||||
{
|
{
|
||||||
unsigned line_position = 0;
|
std::size_t line_position = 0;
|
||||||
mWorkingLineContent.clear();
|
mWorkingLineContent.clear();
|
||||||
while(line_position < line.size())
|
while(line_position < line.size())
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,9 +27,9 @@ public:
|
||||||
void loadContent();
|
void loadContent();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned checkForStatement(const std::string& lineSection);
|
std::size_t checkForStatement(const std::string& lineSection);
|
||||||
|
|
||||||
unsigned checkForExpression(const std::string& lineSection);
|
std::size_t checkForExpression(const std::string& lineSection);
|
||||||
|
|
||||||
void onTextSpanFinished();
|
void onTextSpanFinished();
|
||||||
|
|
||||||
|
|
|
@ -218,7 +218,7 @@ unsigned HuffmanCodeLengthTable::mapToDeflateIndex(unsigned index) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned HuffmanCodeLengthTable::getNumCodeLengths() const
|
std::size_t HuffmanCodeLengthTable::getNumCodeLengths() const
|
||||||
{
|
{
|
||||||
return mTree.getNumCodeLengths();
|
return mTree.getNumCodeLengths();
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ public:
|
||||||
|
|
||||||
const std::vector<unsigned> getCompressedLengthCounts() const;
|
const std::vector<unsigned> getCompressedLengthCounts() const;
|
||||||
|
|
||||||
unsigned getNumCodeLengths() const;
|
std::size_t getNumCodeLengths() const;
|
||||||
|
|
||||||
unsigned getCodeLength(std::size_t treeIndex) const;
|
unsigned getCodeLength(std::size_t treeIndex) const;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
set(MODULE_NAME core)
|
set(MODULE_NAME core)
|
||||||
|
|
||||||
list(APPEND core_HEADERS
|
list(APPEND HEADERS
|
||||||
AbstractApp.h
|
AbstractApp.h
|
||||||
AbstractNamedItem.h
|
AbstractNamedItem.h
|
||||||
AbstractWebApp.h
|
AbstractWebApp.h
|
||||||
|
@ -8,20 +8,22 @@ list(APPEND core_HEADERS
|
||||||
Event.h
|
Event.h
|
||||||
Color.h
|
Color.h
|
||||||
CommandLineArgs.h
|
CommandLineArgs.h
|
||||||
|
encoding/ByteUtils.h
|
||||||
|
encoding/StringUtils.h
|
||||||
|
encoding/UnicodeUtils.h
|
||||||
loggers/FileLogger.h
|
loggers/FileLogger.h
|
||||||
file_utilities/Directory.h
|
file_utilities/Directory.h
|
||||||
file_utilities/File.h
|
file_utilities/File.h
|
||||||
file_utilities/FileFormats.h
|
file_utilities/FileFormats.h
|
||||||
file_utilities/PathUtils.h
|
file_utilities/PathUtils.h
|
||||||
StringUtils.h
|
|
||||||
http/HttpResponse.h
|
http/HttpResponse.h
|
||||||
http/HttpHeader.h
|
http/HttpHeader.h
|
||||||
http/HttpRequest.h
|
http/HttpRequest.h
|
||||||
serializers/TomlReader.h
|
serializers/TomlReader.h
|
||||||
|
Win32BaseIncludes.h
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND core_LIB_INCLUDES
|
list(APPEND LIB_INCLUDES
|
||||||
ByteUtils.cpp
|
|
||||||
Event.cpp
|
Event.cpp
|
||||||
Dictionary.cpp
|
Dictionary.cpp
|
||||||
Color.cpp
|
Color.cpp
|
||||||
|
@ -35,7 +37,9 @@ list(APPEND core_LIB_INCLUDES
|
||||||
file_utilities/PathUtils.cpp
|
file_utilities/PathUtils.cpp
|
||||||
memory/SharedMemory.cpp
|
memory/SharedMemory.cpp
|
||||||
RandomUtils.cpp
|
RandomUtils.cpp
|
||||||
StringUtils.cpp
|
encoding/StringUtils.cpp
|
||||||
|
encoding/ByteUtils.cpp
|
||||||
|
encoding/UnicodeUtils.cpp
|
||||||
streams/BinaryStream.cpp
|
streams/BinaryStream.cpp
|
||||||
streams/BitStream.cpp
|
streams/BitStream.cpp
|
||||||
streams/InputBitStream.cpp
|
streams/InputBitStream.cpp
|
||||||
|
@ -46,10 +50,11 @@ list(APPEND core_LIB_INCLUDES
|
||||||
http/HttpRequest.cpp
|
http/HttpRequest.cpp
|
||||||
serializers/TomlReader.cpp)
|
serializers/TomlReader.cpp)
|
||||||
|
|
||||||
add_library(${MODULE_NAME} SHARED ${core_LIB_INCLUDES} ${core_HEADERS})
|
add_library(${MODULE_NAME} SHARED ${LIB_INCLUDES} ${HEADERS})
|
||||||
|
|
||||||
target_include_directories(${MODULE_NAME} PUBLIC
|
target_include_directories(${MODULE_NAME} PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/encoding
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/file_utilities
|
${CMAKE_CURRENT_SOURCE_DIR}/file_utilities
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/loggers
|
${CMAKE_CURRENT_SOURCE_DIR}/loggers
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/memory
|
${CMAKE_CURRENT_SOURCE_DIR}/memory
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
#include "CommandLineArgs.h"
|
#include "CommandLineArgs.h"
|
||||||
|
|
||||||
#include "StringUtils.h"
|
#include "UnicodeUtils.h"
|
||||||
#ifdef _WIN32
|
|
||||||
#include "Windows.h"
|
#include "Win32BaseIncludes.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
CommandLineArgs::CommandLineArgs()
|
CommandLineArgs::CommandLineArgs()
|
||||||
: mArugments(),
|
: mArugments(),
|
||||||
|
@ -25,7 +24,7 @@ void CommandLineArgs::initialize(CommandLineArgs* args)
|
||||||
std::vector<std::string> windowsArgs(nArgs);
|
std::vector<std::string> windowsArgs(nArgs);
|
||||||
for (int idx = 0; idx < nArgs; idx++)
|
for (int idx = 0; idx < nArgs; idx++)
|
||||||
{
|
{
|
||||||
windowsArgs[idx] = StringUtils::convert(szArglist[idx]);
|
windowsArgs[idx] = UnicodeUtils::utf16ToUtf8String(szArglist[idx]);
|
||||||
}
|
}
|
||||||
::LocalFree(szArglist);
|
::LocalFree(szArglist);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -15,15 +16,15 @@ public:
|
||||||
|
|
||||||
const std::vector<std::string> getArgs() const;
|
const std::vector<std::string> getArgs() const;
|
||||||
|
|
||||||
|
std::vector<std::string> getUserArgs() const;
|
||||||
|
|
||||||
|
static void initialize(CommandLineArgs* args);
|
||||||
|
|
||||||
void process(int argc, char *argv[]);
|
void process(int argc, char *argv[]);
|
||||||
|
|
||||||
void process(const std::vector<std::string>& args);
|
void process(const std::vector<std::string>& args);
|
||||||
|
|
||||||
void recordLaunchPath();
|
void recordLaunchPath();
|
||||||
|
|
||||||
std::vector<std::string> getUserArgs() const;
|
|
||||||
|
|
||||||
static void initialize(CommandLineArgs* args);
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::string> mArugments;
|
std::vector<std::string> mArugments;
|
||||||
std::filesystem::path mLaunchPath;
|
std::filesystem::path mLaunchPath;
|
||||||
|
|
13
src/core/Win32BaseIncludes.h
Normal file
13
src/core/Win32BaseIncludes.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef UNICODE
|
||||||
|
#define UNICODE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
//#define WIN32_LEAN_AND_MEAN
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include "Windows.h"
|
||||||
|
#endif
|
|
@ -67,6 +67,6 @@ public:
|
||||||
static bool CompareWords(char* buffer, const char* tag);
|
static bool CompareWords(char* buffer, const char* tag);
|
||||||
|
|
||||||
static const int BYTE_FIRST_BIT = 0x40; // 1000 0000
|
static const int BYTE_FIRST_BIT = 0x40; // 1000 0000
|
||||||
static const Word WORD_FIRST_BIT = 0x8000; // 1000 0000 - 0000 0000
|
static const Word WORD_FIRST_BIT = static_cast<Word>(0x8000); // 1000 0000 - 0000 0000
|
||||||
static const Word WORD_LAST_BYTE = 0x00FF; // 0000 0000 - 1111 1111
|
static const Word WORD_LAST_BYTE = 0x00FF; // 0000 0000 - 1111 1111
|
||||||
};
|
};
|
|
@ -5,10 +5,6 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include "Windows.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool StringUtils::isAlphaNumeric(char c)
|
bool StringUtils::isAlphaNumeric(char c)
|
||||||
{
|
{
|
||||||
return std::isalnum(c);
|
return std::isalnum(c);
|
||||||
|
@ -57,7 +53,7 @@ bool StringUtils::isWhitespaceOnly(const std::string& input)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned StringUtils::countFirstConsecutiveHits(const std::string& input, char c)
|
std::size_t StringUtils::countFirstConsecutiveHits(const std::string& input, char c)
|
||||||
{
|
{
|
||||||
auto found_id = input.find(c);
|
auto found_id = input.find(c);
|
||||||
if(found_id == std::string::npos)
|
if(found_id == std::string::npos)
|
||||||
|
@ -66,8 +62,8 @@ unsigned StringUtils::countFirstConsecutiveHits(const std::string& input, char c
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
unsigned count = 1;
|
std::size_t count = 1;
|
||||||
for(unsigned idx=found_id+1; idx<input.size(); idx++)
|
for(std::size_t idx=found_id+1; idx<input.size(); idx++)
|
||||||
{
|
{
|
||||||
if(input[idx] == c)
|
if(input[idx] == c)
|
||||||
{
|
{
|
||||||
|
@ -153,41 +149,6 @@ std::string StringUtils::toLower(const std::string& s)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string StringUtils::convert(const std::wstring& input)
|
|
||||||
{
|
|
||||||
if (input.empty())
|
|
||||||
{
|
|
||||||
return std::string();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
const auto size = ::WideCharToMultiByte(CP_UTF8, 0, &input[0], (int)input.size(), nullptr, 0, nullptr, nullptr);
|
|
||||||
|
|
||||||
std::string result(size, 0);
|
|
||||||
::WideCharToMultiByte(CP_UTF8, 0, &input[0], (int)input.size(), &result[0], size, nullptr, nullptr);
|
|
||||||
return result;
|
|
||||||
#else
|
|
||||||
throw std::logic_error("Not implemented");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
std::wstring StringUtils::convert(const std::string& input)
|
|
||||||
{
|
|
||||||
if (input.empty())
|
|
||||||
{
|
|
||||||
return std::wstring();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
const auto charsNeeded = ::MultiByteToWideChar(CP_UTF8, 0, input.data(), (int)input.size(), NULL, 0);
|
|
||||||
std::vector<wchar_t> buffer(charsNeeded);
|
|
||||||
const auto charsConverted = ::MultiByteToWideChar(CP_UTF8, 0, input.data(), (int)input.size(), &buffer[0], buffer.size());
|
|
||||||
return std::wstring(&buffer[0], charsConverted);
|
|
||||||
#else
|
|
||||||
throw std::logic_error("Not implemented");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string StringUtils::toPaddedString(unsigned numBytes, unsigned entry)
|
std::string StringUtils::toPaddedString(unsigned numBytes, unsigned entry)
|
||||||
{
|
{
|
||||||
std::stringstream sstr;
|
std::stringstream sstr;
|
|
@ -16,11 +16,7 @@ public:
|
||||||
static constexpr char SINGLE_QUOTE = '\'';
|
static constexpr char SINGLE_QUOTE = '\'';
|
||||||
static constexpr char COLON = ':';
|
static constexpr char COLON = ':';
|
||||||
|
|
||||||
static unsigned countFirstConsecutiveHits(const std::string& input, char c);
|
static std::size_t countFirstConsecutiveHits(const std::string& input, char c);
|
||||||
|
|
||||||
static std::string convert(const std::wstring& input);
|
|
||||||
|
|
||||||
static std::wstring convert(const std::string& input);
|
|
||||||
|
|
||||||
static bool isAlphaNumeric(char c);
|
static bool isAlphaNumeric(char c);
|
||||||
|
|
40
src/core/encoding/UnicodeUtils.cpp
Normal file
40
src/core/encoding/UnicodeUtils.cpp
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#include "UnicodeUtils.h"
|
||||||
|
|
||||||
|
#include "Win32BaseIncludes.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
std::string UnicodeUtils::utf16ToUtf8String(const std::wstring& input)
|
||||||
|
{
|
||||||
|
if (input.empty())
|
||||||
|
{
|
||||||
|
return std::string();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
const auto size = ::WideCharToMultiByte(CP_UTF8, 0, &input[0], static_cast<int>(input.size()), nullptr, 0, nullptr, nullptr);
|
||||||
|
|
||||||
|
std::string result(size, 0);
|
||||||
|
::WideCharToMultiByte(CP_UTF8, 0, &input[0], static_cast<int>(input.size()), &result[0], size, nullptr, nullptr);
|
||||||
|
return result;
|
||||||
|
#else
|
||||||
|
throw std::logic_error("Not implemented");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wstring UnicodeUtils::utf8ToUtf16WString(const std::string& input)
|
||||||
|
{
|
||||||
|
if (input.empty())
|
||||||
|
{
|
||||||
|
return std::wstring();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
const auto charsNeeded = ::MultiByteToWideChar(CP_UTF8, 0, input.data(), static_cast<int>(input.size()), nullptr, 0);
|
||||||
|
std::vector<wchar_t> buffer(charsNeeded);
|
||||||
|
const auto charsConverted = ::MultiByteToWideChar(CP_UTF8, 0, input.data(), static_cast<int>(input.size()), &buffer[0], static_cast<int>(buffer.size()));
|
||||||
|
return std::wstring(&buffer[0], charsConverted);
|
||||||
|
#else
|
||||||
|
throw std::logic_error("Not implemented");
|
||||||
|
#endif
|
||||||
|
}
|
11
src/core/encoding/UnicodeUtils.h
Normal file
11
src/core/encoding/UnicodeUtils.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class UnicodeUtils
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static std::string utf16ToUtf8String(const std::wstring& input);
|
||||||
|
|
||||||
|
static std::wstring utf8ToUtf16WString(const std::string& input);
|
||||||
|
};
|
|
@ -21,7 +21,7 @@ std::optional<unsigned char> InputBitStream::readNextByte()
|
||||||
{
|
{
|
||||||
if (mStream->good())
|
if (mStream->good())
|
||||||
{
|
{
|
||||||
return mStream->get();
|
return static_cast<unsigned char>(mStream->get());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,7 @@ class BasicFontEngine : public IFontEngine
|
||||||
{
|
{
|
||||||
virtual void initialize(){};
|
virtual void initialize(){};
|
||||||
|
|
||||||
virtual void loadFontFace(const std::filesystem::path& fontFile, int penSize = 16){};
|
virtual void loadFontFace(const std::filesystem::path& fontFile, float penSize = 16){};
|
||||||
|
|
||||||
virtual std::unique_ptr<FontGlyph> loadGlyph(unsigned charCode){return nullptr;};
|
virtual std::unique_ptr<FontGlyph> loadGlyph(unsigned charCode){return nullptr;};
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,6 +14,8 @@ list(APPEND fonts_LIB_INCLUDES
|
||||||
FontGlyph.h
|
FontGlyph.h
|
||||||
IFont.h
|
IFont.h
|
||||||
IFontEngine.h
|
IFontEngine.h
|
||||||
|
BasicFontEngine.h
|
||||||
|
BasicFontEngine.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
|
|
|
@ -34,7 +34,7 @@ IFontEngine* FontsManager::getFontEngine() const
|
||||||
return mFontEngine.get();
|
return mFontEngine.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
FontGlyph* FontsManager::getGlyph(const std::string& fontFace, int size, uint32_t c)
|
FontGlyph* FontsManager::getGlyph(const std::string& fontFace, float size, uint32_t c)
|
||||||
{
|
{
|
||||||
auto path = std::filesystem::path("truetype/liberation/LiberationSans-Regular.ttf");
|
auto path = std::filesystem::path("truetype/liberation/LiberationSans-Regular.ttf");
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ public:
|
||||||
|
|
||||||
bool usesGlyphs() const;
|
bool usesGlyphs() const;
|
||||||
|
|
||||||
FontGlyph* getGlyph(const std::string& fontFace, int size, uint32_t c);
|
FontGlyph* getGlyph(const std::string& fontFace, float size, uint32_t c);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool mUsesGlyphs{ false };
|
bool mUsesGlyphs{ false };
|
||||||
|
|
|
@ -13,7 +13,7 @@ public:
|
||||||
|
|
||||||
virtual void initialize(){};
|
virtual void initialize(){};
|
||||||
|
|
||||||
virtual void loadFontFace(const std::filesystem::path& fontFile, int penSize = 16) = 0;
|
virtual void loadFontFace(const std::filesystem::path& fontFile, float penSize = 16) = 0;
|
||||||
|
|
||||||
virtual std::unique_ptr<FontGlyph> loadGlyph(uint32_t charCode) = 0;
|
virtual std::unique_ptr<FontGlyph> loadGlyph(uint32_t charCode) = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "DirectWriteFontEngine.h"
|
#include "DirectWriteFontEngine.h"
|
||||||
|
|
||||||
#include "FontGlyph.h"
|
#include "FontGlyph.h"
|
||||||
#include "StringUtils.h"
|
#include "UnicodeUtils.h"
|
||||||
|
|
||||||
#include "DirectWriteHelpers.h"
|
#include "DirectWriteHelpers.h"
|
||||||
|
|
||||||
|
@ -24,10 +24,10 @@ void DirectWriteFontEngine::initializeOffScreenRenderer()
|
||||||
pInterface->QueryInterface(IID_IOffScreenTextRenderer, &mOffScreenRenderer);
|
pInterface->QueryInterface(IID_IOffScreenTextRenderer, &mOffScreenRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DirectWriteFontEngine::loadFontFaceFromName(const std::string& fontName, int penSize)
|
void DirectWriteFontEngine::loadFontFaceFromName(const std::string& fontName, float penSize)
|
||||||
{
|
{
|
||||||
mDWriteFactory->CreateTextFormat(StringUtils::convert(fontName).c_str(), nullptr, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL,
|
mDWriteFactory->CreateTextFormat(UnicodeUtils::utf8ToUtf16WString(fontName).c_str(), nullptr, DWRITE_FONT_WEIGHT_NORMAL,
|
||||||
penSize, L"en-us", &mTextFormat);
|
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, penSize, L"en-us", &mTextFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<FontGlyph> DirectWriteFontEngine::loadGlyph(uint32_t charCode)
|
std::unique_ptr<FontGlyph> DirectWriteFontEngine::loadGlyph(uint32_t charCode)
|
||||||
|
@ -45,7 +45,7 @@ std::unique_ptr<GlyphRunOutlines> DirectWriteFontEngine::getGlyphRunOutlines(con
|
||||||
text.push_back(code);
|
text.push_back(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto hr = mDWriteFactory->CreateTextLayout(text.c_str(), text.size(), mTextFormat.Get(), 50.0, 50.0, &mTextLayout);
|
auto hr = mDWriteFactory->CreateTextLayout(text.c_str(), static_cast<UINT32>(text.size()), mTextFormat.Get(), 50.0, 50.0, &mTextLayout);
|
||||||
|
|
||||||
mTextLayout->Draw(nullptr, mOffScreenRenderer.Get(), 0.0, 0.0);
|
mTextLayout->Draw(nullptr, mOffScreenRenderer.Get(), 0.0, 0.0);
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,9 @@ class DirectWriteFontEngine : public IFontEngine
|
||||||
public:
|
public:
|
||||||
void initialize() override;
|
void initialize() override;
|
||||||
|
|
||||||
void loadFontFace(const std::filesystem::path& fontFile, int penSize = 16) override {};
|
void loadFontFace(const std::filesystem::path& fontFile, float penSize = 16) override {};
|
||||||
|
|
||||||
void loadFontFaceFromName(const std::string& fontName, int penSize = 16);
|
void loadFontFaceFromName(const std::string& fontName, float penSize = 16);
|
||||||
|
|
||||||
std::unique_ptr<FontGlyph> loadGlyph(uint32_t charCode) override;
|
std::unique_ptr<FontGlyph> loadGlyph(uint32_t charCode) override;
|
||||||
|
|
||||||
|
|
|
@ -1,46 +1,53 @@
|
||||||
set(MODULE_NAME geometry)
|
set(MODULE_NAME geometry)
|
||||||
|
|
||||||
list(APPEND geometry_LIB_INCLUDES
|
list(APPEND HEADERS
|
||||||
AbstractGeometricItem.h
|
AbstractGeometricItem.h
|
||||||
Bounds.h
|
Bounds.h
|
||||||
DiscretePoint.h
|
|
||||||
DiscretePoint.cpp
|
|
||||||
Grid.h
|
Grid.h
|
||||||
Grid.cpp
|
|
||||||
Point.h
|
|
||||||
Point.cpp
|
|
||||||
Transform.cpp
|
|
||||||
math/Linalg.h
|
math/Linalg.h
|
||||||
math/Linalg.cpp
|
|
||||||
math/Matrix.h
|
math/Matrix.h
|
||||||
math/Matrix.cpp
|
|
||||||
math/Vector.h
|
math/Vector.h
|
||||||
math/Vector.cpp
|
|
||||||
path/Curve.h
|
path/Curve.h
|
||||||
path/Curve.cpp
|
|
||||||
path/Line.h
|
path/Line.h
|
||||||
path/Line.cpp
|
|
||||||
path/LineSegment.h
|
path/LineSegment.h
|
||||||
path/LineSegment.cpp
|
|
||||||
path/Path.h
|
path/Path.h
|
||||||
path/Path.cpp
|
|
||||||
path/PathElement.h
|
path/PathElement.h
|
||||||
|
points/Point.h
|
||||||
|
points/PointCollection.h
|
||||||
|
points/DiscretePoint.h
|
||||||
primitives/Circle.h
|
primitives/Circle.h
|
||||||
primitives/Circle.cpp
|
|
||||||
primitives/Quad.h
|
primitives/Quad.h
|
||||||
primitives/Quad.cpp
|
|
||||||
primitives/Rectangle.h
|
primitives/Rectangle.h
|
||||||
primitives/Rectangle.cpp
|
|
||||||
primitives/Triangle.h
|
primitives/Triangle.h
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND LIB_INCLUDES
|
||||||
|
Grid.cpp
|
||||||
|
Transform.cpp
|
||||||
|
math/Linalg.cpp
|
||||||
|
math/Matrix.cpp
|
||||||
|
math/Vector.cpp
|
||||||
|
path/Curve.cpp
|
||||||
|
path/Line.cpp
|
||||||
|
path/LineSegment.cpp
|
||||||
|
path/Path.cpp
|
||||||
|
path/PathElement.cpp
|
||||||
|
points/Point.cpp
|
||||||
|
points/PointCollection.cpp
|
||||||
|
points/DiscretePoint.cpp
|
||||||
|
primitives/Circle.cpp
|
||||||
|
primitives/Quad.cpp
|
||||||
|
primitives/Rectangle.cpp
|
||||||
primitives/Triangle.cpp
|
primitives/Triangle.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(${MODULE_NAME} SHARED ${geometry_LIB_INCLUDES})
|
add_library(${MODULE_NAME} SHARED ${LIB_INCLUDES} ${HEADERS})
|
||||||
|
|
||||||
target_include_directories(${MODULE_NAME} PUBLIC
|
target_include_directories(${MODULE_NAME} PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/math
|
${CMAKE_CURRENT_SOURCE_DIR}/math
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/path
|
${CMAKE_CURRENT_SOURCE_DIR}/path
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/points
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/primitives
|
${CMAKE_CURRENT_SOURCE_DIR}/primitives
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ public:
|
||||||
|
|
||||||
Bounds getBounds() const override;
|
Bounds getBounds() const override;
|
||||||
|
|
||||||
|
void sample(Grid* grid) const override {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Point mStartPoint;
|
Point mStartPoint;
|
||||||
std::vector<Point> mPoints;
|
std::vector<Point> mPoints;
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
#include "Path.h"
|
#include "Path.h"
|
||||||
|
|
||||||
const std::vector<PathElementPtr> Path::getElements() const
|
Path::~Path()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<PathElementPtr>& Path::getElements() const
|
||||||
{
|
{
|
||||||
return mElements;
|
return mElements;
|
||||||
}
|
}
|
|
@ -10,7 +10,8 @@ using PathElementPtr = std::unique_ptr<PathElement>;
|
||||||
class Path : public AbstractGeometricItem
|
class Path : public AbstractGeometricItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const std::vector<PathElementPtr> getElements() const;
|
~Path();
|
||||||
|
const std::vector<PathElementPtr>& getElements() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<PathElementPtr> mElements;
|
std::vector<PathElementPtr> mElements;
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include "PathElement.h"
|
||||||
|
|
||||||
|
PathElement::~PathElement()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -5,5 +5,5 @@
|
||||||
class PathElement : public AbstractGeometricItem
|
class PathElement : public AbstractGeometricItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
~PathElement() = default;
|
~PathElement();
|
||||||
};
|
};
|
|
@ -1,5 +1,7 @@
|
||||||
#include "Point.h"
|
#include "Point.h"
|
||||||
|
|
||||||
|
#include "Transform.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
Point::Point(double x, double y, double z)
|
Point::Point(double x, double y, double z)
|
||||||
|
@ -77,16 +79,13 @@ double Point::getDeltaZ(const Point& point) const
|
||||||
return point.getZ() - mZ;
|
return point.getZ() - mZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Point::scale(double x, double y, double z)
|
void Point::apply(const Transform& transform)
|
||||||
{
|
{
|
||||||
mX = x * mX;
|
mX -= transform.getLocation().getX();
|
||||||
mY = y * mY;
|
mY -= transform.getLocation().getY();
|
||||||
mZ = z * mZ;
|
mZ -= transform.getLocation().getZ();
|
||||||
}
|
|
||||||
|
|
||||||
void Point::translate(double x, double y, double z)
|
mX *= transform.getScaleX();
|
||||||
{
|
mY *= transform.getScaleY();
|
||||||
mX += x;
|
mZ *= transform.getScaleZ();
|
||||||
mY += y;
|
|
||||||
mZ += z;
|
|
||||||
}
|
}
|
|
@ -4,6 +4,9 @@
|
||||||
#include "Vector.h"
|
#include "Vector.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Transform;
|
||||||
|
|
||||||
class Point
|
class Point
|
||||||
{
|
{
|
||||||
|
@ -18,6 +21,8 @@ public:
|
||||||
|
|
||||||
static std::shared_ptr<Point> Create(double x, double y, double z = 0);
|
static std::shared_ptr<Point> Create(double x, double y, double z = 0);
|
||||||
|
|
||||||
|
void apply(const Transform& transform);
|
||||||
|
|
||||||
double getX() const;
|
double getX() const;
|
||||||
|
|
||||||
double getY() const;
|
double getY() const;
|
||||||
|
@ -34,10 +39,6 @@ public:
|
||||||
|
|
||||||
Vector getDelta(const Point& point) const;
|
Vector getDelta(const Point& point) const;
|
||||||
|
|
||||||
void scale(double x, double y, double z = 1.0);
|
|
||||||
|
|
||||||
void translate(double x, double y, double z = 0.0);
|
|
||||||
|
|
||||||
bool operator==(const Point& rhs) const
|
bool operator==(const Point& rhs) const
|
||||||
{
|
{
|
||||||
return (mX == rhs.mX)
|
return (mX == rhs.mX)
|
||||||
|
@ -56,4 +57,4 @@ private:
|
||||||
double mZ{0};
|
double mZ{0};
|
||||||
};
|
};
|
||||||
|
|
||||||
using PointPtr = std::shared_ptr<Point>;
|
using PointPtr = std::unique_ptr<Point>;
|
15
src/geometry/points/PointCollection.cpp
Normal file
15
src/geometry/points/PointCollection.cpp
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#include "PointCollection.h"
|
||||||
|
|
||||||
|
PointCollection::PointCollection(const std::vector<Point> points)
|
||||||
|
: mPoints(points)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PointCollection::apply(const Transform& transform)
|
||||||
|
{
|
||||||
|
for (auto& point : mPoints)
|
||||||
|
{
|
||||||
|
point.apply(transform);
|
||||||
|
}
|
||||||
|
}
|
15
src/geometry/points/PointCollection.h
Normal file
15
src/geometry/points/PointCollection.h
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Point.h"
|
||||||
|
#include "Transform.h"
|
||||||
|
|
||||||
|
class PointCollection
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PointCollection(const std::vector<Point> points = {});
|
||||||
|
|
||||||
|
void apply(const Transform& transform);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<Point> mPoints;
|
||||||
|
};
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
RasterPainter::RasterPainter(DrawingContext* context)
|
RasterPainter::RasterPainter(DrawingContext* context)
|
||||||
: AbstractPainter(context),
|
: AbstractPainter(context),
|
||||||
mGrid(std::make_unique<Grid<unsigned char> >(ntk::Rectangle(Point(0, 0), Point(100, 100))))
|
mGrid(std::make_unique<Grid>(Bounds{0.0, 0.0, 100.0, 100.0}))
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ void RasterPainter::paint()
|
||||||
{
|
{
|
||||||
const auto width = mDrawingContext->getSurface()->getWidth();
|
const auto width = mDrawingContext->getSurface()->getWidth();
|
||||||
const auto height = mDrawingContext->getSurface()->getHeight();
|
const auto height = mDrawingContext->getSurface()->getHeight();
|
||||||
mGrid->resetBounds(ntk::Rectangle(Point(0, 0), Point(width, height)));
|
mGrid->resetBounds(Bounds{ 0.0, 0.0, static_cast<double>(width), static_cast<double>(height) });
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for (unsigned idx=0; idx< context->getNumItems(); idx++)
|
for (unsigned idx=0; idx< context->getNumItems(); idx++)
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "AbstractPainter.h"
|
#include "AbstractPainter.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
class DrawingContext;
|
class DrawingContext;
|
||||||
|
|
||||||
template<class T>
|
|
||||||
class Grid;
|
class Grid;
|
||||||
|
|
||||||
class RasterPainter : public AbstractPainter
|
class RasterPainter : public AbstractPainter
|
||||||
|
@ -16,5 +15,5 @@ public:
|
||||||
void paint() override;
|
void paint() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Grid<unsigned char> > mGrid;
|
std::unique_ptr<Grid> mGrid;
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
#include "SceneText.h"
|
#include "SceneText.h"
|
||||||
#include "DirectX2dInterface.h"
|
#include "DirectX2dInterface.h"
|
||||||
|
|
||||||
#include "StringUtils.h"
|
#include "UnicodeUtils.h"
|
||||||
#include "File.h"
|
#include "File.h"
|
||||||
|
|
||||||
#include <windows.h>
|
#include "Win32BaseIncludes.h"
|
||||||
|
|
||||||
#include <d2d1_3.h>
|
#include <d2d1_3.h>
|
||||||
#include <d2d1_1.h>
|
#include <d2d1_1.h>
|
||||||
|
@ -33,7 +33,7 @@ void DirectXTextPainter::setD2dInterface(DirectX2dInterface* d2dIterface)
|
||||||
void DirectXTextPainter::updateTextFormat(const FontItem& font)
|
void DirectXTextPainter::updateTextFormat(const FontItem& font)
|
||||||
{
|
{
|
||||||
mD2dInterface->getDirectWriteFactory()->CreateTextFormat(
|
mD2dInterface->getDirectWriteFactory()->CreateTextFormat(
|
||||||
StringUtils::convert(font.getFaceName()).c_str(),
|
UnicodeUtils::utf8ToUtf16WString(font.getFaceName()).c_str(),
|
||||||
nullptr,
|
nullptr,
|
||||||
DWRITE_FONT_WEIGHT_NORMAL,
|
DWRITE_FONT_WEIGHT_NORMAL,
|
||||||
DWRITE_FONT_STYLE_NORMAL,
|
DWRITE_FONT_STYLE_NORMAL,
|
||||||
|
@ -53,7 +53,7 @@ void DirectXTextPainter::paint(SceneText* text, DrawingContext* context)
|
||||||
|
|
||||||
updateTextFormat(text->getTextData().mFont);
|
updateTextFormat(text->getTextData().mFont);
|
||||||
|
|
||||||
auto content = StringUtils::convert(text->getTextData().mContent);
|
auto content = UnicodeUtils::utf8ToUtf16WString(text->getTextData().mContent);
|
||||||
|
|
||||||
mD2dInterface->getRenderTarget()->DrawText(content.c_str(), static_cast<UINT32>(content.size()), mTextFormat.Get(), &textRect, mTextBrush.Get());
|
mD2dInterface->getRenderTarget()->DrawText(content.c_str(), static_cast<UINT32>(content.size()), mTextFormat.Get(), &textRect, mTextBrush.Get());
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ void PngWriter::writeDataChunks(const BufferBitStream& buffer)
|
||||||
auto max_bytes{32000};
|
auto max_bytes{32000};
|
||||||
|
|
||||||
auto num_dat_chunks = num_bytes/max_bytes + 1;
|
auto num_dat_chunks = num_bytes/max_bytes + 1;
|
||||||
unsigned offset = 0;
|
std::size_t offset = 0;
|
||||||
for(std::size_t idx=0;idx<num_dat_chunks;idx++)
|
for(std::size_t idx=0;idx<num_dat_chunks;idx++)
|
||||||
{
|
{
|
||||||
auto length = max_bytes;
|
auto length = max_bytes;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#include "Edge.h"
|
#include "Edge.h"
|
||||||
|
|
||||||
AbstractFace::AbstractFace(unsigned id)
|
AbstractFace::AbstractFace(std::size_t id)
|
||||||
: mId(id)
|
: mId(id)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -19,29 +19,29 @@ public:
|
||||||
CCW
|
CCW
|
||||||
};
|
};
|
||||||
|
|
||||||
AbstractFace(unsigned id=0);
|
AbstractFace(std::size_t id=0);
|
||||||
|
|
||||||
virtual ~AbstractFace();
|
virtual ~AbstractFace();
|
||||||
|
|
||||||
virtual std::vector<unsigned> getNodeIds() const = 0;
|
virtual std::vector<std::size_t> getNodeIds() const = 0;
|
||||||
|
|
||||||
void addVectorAttribute(const std::string& tag, const std::vector<double>& values);
|
void addVectorAttribute(const std::string& tag, const std::vector<double>& values);
|
||||||
|
|
||||||
std::vector<double> getVectorAttribute(const std::string& tag) const;
|
std::vector<double> getVectorAttribute(const std::string& tag) const;
|
||||||
|
|
||||||
void setIndex(std::size_t idx);
|
virtual std::size_t getNumNodes() const = 0;
|
||||||
|
|
||||||
virtual unsigned getNumNodes() const = 0;
|
|
||||||
|
|
||||||
virtual void associateWidthEdges() = 0;
|
virtual void associateWidthEdges() = 0;
|
||||||
|
|
||||||
virtual void replaceEdge(Edge* original, Edge* replacement) = 0;
|
virtual std::vector<std::size_t> getEdgeIds() const = 0;
|
||||||
|
|
||||||
virtual std::vector<unsigned> getEdgeIds() const = 0;
|
|
||||||
|
|
||||||
virtual std::vector<Point> getNodeLocations(Orientation orientation = Orientation::CCW) const = 0;
|
virtual std::vector<Point> getNodeLocations(Orientation orientation = Orientation::CCW) const = 0;
|
||||||
|
|
||||||
|
virtual void replaceEdge(Edge* original, Edge* replacement) = 0;
|
||||||
|
|
||||||
|
void setIndex(std::size_t idx);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
unsigned mId{0};
|
std::size_t mId{0};
|
||||||
std::unordered_map<std::string, std::vector<double> > mVectorAttributes;
|
std::unordered_map<std::string, std::vector<double> > mVectorAttributes;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
#include "Node.h"
|
#include "Node.h"
|
||||||
|
|
||||||
Edge::Edge(Node* node0, Node* node1, unsigned id)
|
Edge::Edge(Node* node0, Node* node1, std::size_t id)
|
||||||
: mNode0(node0),
|
: mNode0(node0),
|
||||||
mNode1(node1),
|
mNode1(node1),
|
||||||
mId(id)
|
mId(id)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Edge> Edge::Create(Node* node0, Node* node1, unsigned id)
|
std::unique_ptr<Edge> Edge::Create(Node* node0, Node* node1, std::size_t id)
|
||||||
{
|
{
|
||||||
return std::make_unique<Edge>(node0, node1, id);
|
return std::make_unique<Edge>(node0, node1, id);
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,12 @@ Edge::~Edge()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Edge::getNode0Id() const
|
std::size_t Edge::getNode0Id() const
|
||||||
{
|
{
|
||||||
return mNode0->getIndex();
|
return mNode0->getIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Edge::getNode1Id() const
|
std::size_t Edge::getNode1Id() const
|
||||||
{
|
{
|
||||||
return mNode1->getIndex();
|
return mNode1->getIndex();
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ Node* Edge::getOtherNode(Node* node) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Edge::getId() const
|
std::size_t Edge::getId() const
|
||||||
{
|
{
|
||||||
return mId;
|
return mId;
|
||||||
}
|
}
|
||||||
|
@ -95,17 +95,17 @@ void Edge::clearConnectivity()
|
||||||
mAssociatedFaceIds.clear();
|
mAssociatedFaceIds.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Edge::getNumConnectedFaces() const
|
std::size_t Edge::getNumConnectedFaces() const
|
||||||
{
|
{
|
||||||
return mAssociatedFaceIds.size();
|
return mAssociatedFaceIds.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Edge::associateFace(unsigned faceId)
|
void Edge::associateFace(std::size_t faceId)
|
||||||
{
|
{
|
||||||
mAssociatedFaceIds.push_back(faceId);
|
mAssociatedFaceIds.push_back(faceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Edge::getConnectedFaceId(std::size_t idx) const
|
std::size_t Edge::getConnectedFaceId(std::size_t idx) const
|
||||||
{
|
{
|
||||||
return mAssociatedFaceIds[idx];
|
return mAssociatedFaceIds[idx];
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,7 @@ void Edge::associateWithNodes()
|
||||||
mNode1->associateEdge(mId);
|
mNode1->associateEdge(mId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Edge::setIndex(unsigned idx)
|
void Edge::setIndex(std::size_t idx)
|
||||||
{
|
{
|
||||||
mId = idx;
|
mId = idx;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,33 +14,33 @@ public:
|
||||||
DIRTY
|
DIRTY
|
||||||
};
|
};
|
||||||
|
|
||||||
Edge(Node* node0, Node* node1, unsigned id = 0);
|
Edge(Node* node0, Node* node1, std::size_t id = 0);
|
||||||
|
|
||||||
~Edge();
|
~Edge();
|
||||||
|
|
||||||
static std::unique_ptr<Edge> Create(Node* node0, Node* node1, unsigned id = 0);
|
static std::unique_ptr<Edge> Create(Node* node0, Node* node1, std::size_t id = 0);
|
||||||
|
|
||||||
void associateFace(unsigned faceId);
|
void associateFace(std::size_t faceId);
|
||||||
|
|
||||||
void associateWithNodes();
|
void associateWithNodes();
|
||||||
|
|
||||||
void clearConnectivity();
|
void clearConnectivity();
|
||||||
|
|
||||||
unsigned getConnectedFaceId(std::size_t idx) const;
|
std::size_t getConnectedFaceId(std::size_t idx) const;
|
||||||
|
|
||||||
State getState() const;
|
State getState() const;
|
||||||
|
|
||||||
unsigned getId() const;
|
std::size_t getId() const;
|
||||||
|
|
||||||
unsigned getNode0Id() const;
|
std::size_t getNode0Id() const;
|
||||||
|
|
||||||
unsigned getNode1Id() const;
|
std::size_t getNode1Id() const;
|
||||||
|
|
||||||
Node* getNode0() const;
|
Node* getNode0() const;
|
||||||
|
|
||||||
Node* getNode1() const;
|
Node* getNode1() const;
|
||||||
|
|
||||||
unsigned getNumConnectedFaces() const;
|
std::size_t getNumConnectedFaces() const;
|
||||||
|
|
||||||
Node* getOtherNode(Node* node) const;
|
Node* getOtherNode(Node* node) const;
|
||||||
|
|
||||||
|
@ -52,14 +52,14 @@ public:
|
||||||
|
|
||||||
void setState(State state);
|
void setState(State state);
|
||||||
|
|
||||||
void setIndex(unsigned idx);
|
void setIndex(std::size_t idx);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned mId{0};
|
std::size_t mId{0};
|
||||||
Node* mNode0{nullptr};
|
Node* mNode0{nullptr};
|
||||||
Node* mNode1{nullptr};
|
Node* mNode1{nullptr};
|
||||||
|
|
||||||
std::vector<unsigned> mAssociatedFaceIds;
|
std::vector<std::size_t> mAssociatedFaceIds;
|
||||||
|
|
||||||
State mState{State::HEALTHY};
|
State mState{State::HEALTHY};
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
#include "Edge.h"
|
#include "Edge.h"
|
||||||
#include "AbstractFace.h"
|
#include "AbstractFace.h"
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
FaceMesh::~FaceMesh()
|
FaceMesh::~FaceMesh()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -26,7 +24,7 @@ const VecFaces& FaceMesh::getFaces() const
|
||||||
return mFaces;
|
return mFaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned> FaceMesh::getFaceNodeIds() const
|
std::vector<std::size_t> FaceMesh::getFaceNodeIds() const
|
||||||
{
|
{
|
||||||
if (mFaces.empty())
|
if (mFaces.empty())
|
||||||
{
|
{
|
||||||
|
@ -34,7 +32,7 @@ std::vector<unsigned> FaceMesh::getFaceNodeIds() const
|
||||||
}
|
}
|
||||||
|
|
||||||
auto nodes_per_face = mFaces[0]->getNumNodes();
|
auto nodes_per_face = mFaces[0]->getNumNodes();
|
||||||
std::vector<unsigned> ids(nodes_per_face*mFaces.size());
|
std::vector<std::size_t> ids(nodes_per_face*mFaces.size());
|
||||||
|
|
||||||
for(std::size_t idx=0; idx<mFaces.size(); idx++)
|
for(std::size_t idx=0; idx<mFaces.size(); idx++)
|
||||||
{
|
{
|
||||||
|
@ -67,7 +65,7 @@ void FaceMesh::addConstantFaceVectorAttribute(const std::string& tag, const std:
|
||||||
|
|
||||||
void FaceMesh::resetIds()
|
void FaceMesh::resetIds()
|
||||||
{
|
{
|
||||||
unsigned count = 0;
|
std::size_t count = 0;
|
||||||
for (auto& node : mNodes)
|
for (auto& node : mNodes)
|
||||||
{
|
{
|
||||||
node->setIndex(count);
|
node->setIndex(count);
|
||||||
|
@ -115,7 +113,7 @@ void FaceMesh::replaceIfOverlapping(FaceMesh* mesh, Node* target_node) const
|
||||||
if (node->getNumConnectedEdges() == 3 && node->isCoincident(target_node))
|
if (node->getNumConnectedEdges() == 3 && node->isCoincident(target_node))
|
||||||
{
|
{
|
||||||
target_node->setState(Node::State::DIRTY);
|
target_node->setState(Node::State::DIRTY);
|
||||||
for (unsigned idx=0; idx<3; idx++)
|
for (std::size_t idx=0; idx<3; idx++)
|
||||||
{
|
{
|
||||||
auto edge = mesh->mEdges[idx].get();
|
auto edge = mesh->mEdges[idx].get();
|
||||||
edge->replaceNodes(target_node, node.get());
|
edge->replaceNodes(target_node, node.get());
|
||||||
|
@ -132,7 +130,7 @@ void FaceMesh::replaceIfOverlapping(FaceMesh* mesh, Edge* target_edge) const
|
||||||
if (edge->getNumConnectedFaces() == 2 && target_edge->hasSameNodes(edge.get()))
|
if (edge->getNumConnectedFaces() == 2 && target_edge->hasSameNodes(edge.get()))
|
||||||
{
|
{
|
||||||
target_edge->setState(Edge::State::DIRTY);
|
target_edge->setState(Edge::State::DIRTY);
|
||||||
for (unsigned idx=0; idx<2; idx++)
|
for (std::size_t idx=0; idx<2; idx++)
|
||||||
{
|
{
|
||||||
auto face = mesh->mFaces[idx].get();
|
auto face = mesh->mFaces[idx].get();
|
||||||
face->replaceEdge(target_edge, edge.get());
|
face->replaceEdge(target_edge, edge.get());
|
||||||
|
@ -142,9 +140,9 @@ void FaceMesh::replaceIfOverlapping(FaceMesh* mesh, Edge* target_edge) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned> FaceMesh::getEdgeNodeIds() const
|
std::vector<std::size_t> FaceMesh::getEdgeNodeIds() const
|
||||||
{
|
{
|
||||||
std::vector<unsigned> ids(2*mEdges.size());
|
std::vector<std::size_t> ids(2*mEdges.size());
|
||||||
for(std::size_t idx=0; idx<mEdges.size(); idx++)
|
for(std::size_t idx=0; idx<mEdges.size(); idx++)
|
||||||
{
|
{
|
||||||
ids[2*idx] = mEdges[idx]->getNode0Id();
|
ids[2*idx] = mEdges[idx]->getNode0Id();
|
||||||
|
|
|
@ -25,9 +25,9 @@ public:
|
||||||
|
|
||||||
void populate(VecNodes& nodes, VecEdges& edges, VecFaces& faces);
|
void populate(VecNodes& nodes, VecEdges& edges, VecFaces& faces);
|
||||||
|
|
||||||
std::vector<unsigned> getFaceNodeIds() const;
|
std::vector<std::size_t> getFaceNodeIds() const;
|
||||||
|
|
||||||
std::vector<unsigned> getEdgeNodeIds() const;
|
std::vector<std::size_t> getEdgeNodeIds() const;
|
||||||
|
|
||||||
void addConstantFaceVectorAttribute(const std::string& tag, const std::vector<double>& values);
|
void addConstantFaceVectorAttribute(const std::string& tag, const std::vector<double>& values);
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@ LineMesh::MeshType LineMesh::getType() const
|
||||||
return LineMesh::MeshType::LINE;
|
return LineMesh::MeshType::LINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned> LineMesh::getEdgeNodeIds() const
|
std::vector<std::size_t> LineMesh::getEdgeNodeIds() const
|
||||||
{
|
{
|
||||||
std::vector<unsigned> ids(2*mEdges.size());
|
std::vector<std::size_t> ids(2*mEdges.size());
|
||||||
for(std::size_t idx=0; idx<mEdges.size(); idx++)
|
for(std::size_t idx=0; idx<mEdges.size(); idx++)
|
||||||
{
|
{
|
||||||
ids[2*idx] = mEdges[idx]->getNode0Id();
|
ids[2*idx] = mEdges[idx]->getNode0Id();
|
||||||
|
|
|
@ -18,7 +18,7 @@ public:
|
||||||
|
|
||||||
void populate(VecNodes& nodes, VecEdges& edges);
|
void populate(VecNodes& nodes, VecEdges& edges);
|
||||||
|
|
||||||
std::vector<unsigned> getEdgeNodeIds() const;
|
std::vector<std::size_t> getEdgeNodeIds() const;
|
||||||
|
|
||||||
MeshType getType() const override;
|
MeshType getType() const override;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "Node.h"
|
#include "Node.h"
|
||||||
|
|
||||||
std::unique_ptr<Node> Node::Create(const Point& p, unsigned index)
|
std::unique_ptr<Node> Node::Create(const Point& p, std::size_t index)
|
||||||
{
|
{
|
||||||
return std::make_unique<Node>(p, index);
|
return std::make_unique<Node>(p, index);
|
||||||
}
|
}
|
||||||
|
@ -10,19 +10,19 @@ Node::~Node()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Node::Node(const Point& p, unsigned index)
|
Node::Node(const Point& p, std::size_t index)
|
||||||
: mPoint(p),
|
: mPoint(p),
|
||||||
mIndex(index)
|
mIndex(index)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Node::getIndex() const
|
std::size_t Node::getIndex() const
|
||||||
{
|
{
|
||||||
return mIndex;
|
return mIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::updateIndex(unsigned index)
|
void Node::updateIndex(std::size_t index)
|
||||||
{
|
{
|
||||||
mIndex = index;
|
mIndex = index;
|
||||||
}
|
}
|
||||||
|
@ -78,32 +78,32 @@ void Node::clearConnectivity()
|
||||||
mAssociatedFaceIds.clear();
|
mAssociatedFaceIds.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Node::getNumConnectedEdges() const
|
std::size_t Node::getNumConnectedEdges() const
|
||||||
{
|
{
|
||||||
return mAssociatedEdgeIds.size();
|
return mAssociatedEdgeIds.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Node::getNumConnectedFaces() const
|
std::size_t Node::getNumConnectedFaces() const
|
||||||
{
|
{
|
||||||
return mAssociatedFaceIds.size();
|
return mAssociatedFaceIds.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::associateEdge(unsigned edgeId)
|
void Node::associateEdge(std::size_t edgeId)
|
||||||
{
|
{
|
||||||
mAssociatedEdgeIds.push_back(edgeId);
|
mAssociatedEdgeIds.push_back(edgeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Node::associateFace(unsigned faceId)
|
void Node::associateFace(std::size_t faceId)
|
||||||
{
|
{
|
||||||
mAssociatedFaceIds.push_back(faceId);
|
mAssociatedFaceIds.push_back(faceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Node::getConnectedEdgeId(std::size_t idx) const
|
std::size_t Node::getConnectedEdgeId(std::size_t idx) const
|
||||||
{
|
{
|
||||||
return mAssociatedEdgeIds[idx];
|
return mAssociatedEdgeIds[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Node::getConnectedFaceId(std::size_t idx) const
|
std::size_t Node::getConnectedFaceId(std::size_t idx) const
|
||||||
{
|
{
|
||||||
return mAssociatedFaceIds[idx];
|
return mAssociatedFaceIds[idx];
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,29 +16,29 @@ public:
|
||||||
DIRTY
|
DIRTY
|
||||||
};
|
};
|
||||||
|
|
||||||
Node(const Point& p, unsigned index = 0);
|
Node(const Point& p, std::size_t index = 0);
|
||||||
|
|
||||||
static std::unique_ptr<Node> Create(const Point& p, unsigned index = 0);
|
static std::unique_ptr<Node> Create(const Point& p, std::size_t index = 0);
|
||||||
|
|
||||||
~Node();
|
~Node();
|
||||||
|
|
||||||
void associateEdge(unsigned edgeId);
|
void associateEdge(std::size_t edgeId);
|
||||||
|
|
||||||
void associateFace(unsigned faceId);
|
void associateFace(std::size_t faceId);
|
||||||
|
|
||||||
void addVectorAttribute(const std::string& tag, const std::vector<double>& values);
|
void addVectorAttribute(const std::string& tag, const std::vector<double>& values);
|
||||||
|
|
||||||
void clearConnectivity();
|
void clearConnectivity();
|
||||||
|
|
||||||
unsigned getIndex() const;
|
std::size_t getIndex() const;
|
||||||
|
|
||||||
unsigned getNumConnectedEdges() const;
|
std::size_t getNumConnectedEdges() const;
|
||||||
|
|
||||||
unsigned getNumConnectedFaces() const;
|
std::size_t getNumConnectedFaces() const;
|
||||||
|
|
||||||
unsigned getConnectedEdgeId(std::size_t idx) const;
|
std::size_t getConnectedEdgeId(std::size_t idx) const;
|
||||||
|
|
||||||
unsigned getConnectedFaceId(std::size_t idx) const;
|
std::size_t getConnectedFaceId(std::size_t idx) const;
|
||||||
|
|
||||||
State getState() const;
|
State getState() const;
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ public:
|
||||||
|
|
||||||
void setIndex(std::size_t idx);
|
void setIndex(std::size_t idx);
|
||||||
|
|
||||||
void updateIndex(unsigned index);
|
void updateIndex(std::size_t index);
|
||||||
|
|
||||||
void scale(double x, double y);
|
void scale(double x, double y);
|
||||||
|
|
||||||
|
@ -60,11 +60,11 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unordered_map<std::string, std::vector<double> > mVectorAttributes;
|
std::unordered_map<std::string, std::vector<double> > mVectorAttributes;
|
||||||
unsigned mIndex{0};
|
std::size_t mIndex{0};
|
||||||
Point mPoint;
|
Point mPoint;
|
||||||
|
|
||||||
std::vector<unsigned> mAssociatedEdgeIds;
|
std::vector<std::size_t> mAssociatedEdgeIds;
|
||||||
std::vector<unsigned> mAssociatedFaceIds;
|
std::vector<std::size_t> mAssociatedFaceIds;
|
||||||
|
|
||||||
State mState{State::HEALTHY};
|
State mState{State::HEALTHY};
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include "Edge.h"
|
#include "Edge.h"
|
||||||
#include "Node.h"
|
#include "Node.h"
|
||||||
|
|
||||||
TriFace::TriFace(Edge* edge0, Edge* edge1, Edge* edge2, unsigned id)
|
TriFace::TriFace(Edge* edge0, Edge* edge1, Edge* edge2, std::size_t id)
|
||||||
: AbstractFace(id),
|
: AbstractFace(id),
|
||||||
mEdge0(edge0),
|
mEdge0(edge0),
|
||||||
mEdge1(edge1),
|
mEdge1(edge1),
|
||||||
|
@ -12,7 +12,7 @@ TriFace::TriFace(Edge* edge0, Edge* edge1, Edge* edge2, unsigned id)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<TriFace> TriFace::Create(Edge* edge0, Edge* edge1, Edge* edge2, unsigned id)
|
std::unique_ptr<TriFace> TriFace::Create(Edge* edge0, Edge* edge1, Edge* edge2, std::size_t id)
|
||||||
{
|
{
|
||||||
return std::make_unique<TriFace>(edge0, edge1, edge2, id);
|
return std::make_unique<TriFace>(edge0, edge1, edge2, id);
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,12 @@ TriFace::~TriFace()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned> TriFace::getNodeIds() const
|
std::vector<std::size_t> TriFace::getNodeIds() const
|
||||||
{
|
{
|
||||||
return {mEdge0->getNode0Id(), mEdge0->getNode1Id(), mEdge1->getNode1Id()};
|
return {mEdge0->getNode0Id(), mEdge0->getNode1Id(), mEdge1->getNode1Id()};
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned TriFace::getNumNodes() const
|
std::size_t TriFace::getNumNodes() const
|
||||||
{
|
{
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
@ -48,22 +48,22 @@ void TriFace::replaceEdge(Edge* original, Edge* replacement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned TriFace::getEdge0Id () const
|
std::size_t TriFace::getEdge0Id () const
|
||||||
{
|
{
|
||||||
return mEdge0->getId();
|
return mEdge0->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned TriFace::getEdge1Id () const
|
std::size_t TriFace::getEdge1Id () const
|
||||||
{
|
{
|
||||||
return mEdge1->getId();
|
return mEdge1->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned TriFace::getEdge2Id () const
|
std::size_t TriFace::getEdge2Id () const
|
||||||
{
|
{
|
||||||
return mEdge2->getId();
|
return mEdge2->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned> TriFace::getEdgeIds() const
|
std::vector<std::size_t> TriFace::getEdgeIds() const
|
||||||
{
|
{
|
||||||
return {mEdge0->getId(), mEdge1->getId(), mEdge2->getId()};
|
return {mEdge0->getId(), mEdge1->getId(), mEdge2->getId()};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,24 +8,24 @@ class Edge;
|
||||||
class TriFace : public AbstractFace
|
class TriFace : public AbstractFace
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriFace(Edge* edge0, Edge* edge1, Edge* edge2, unsigned id=0);
|
TriFace(Edge* edge0, Edge* edge1, Edge* edge2, std::size_t id=0);
|
||||||
|
|
||||||
~TriFace();
|
~TriFace();
|
||||||
|
|
||||||
static std::unique_ptr<TriFace> Create(Edge* edge0, Edge* edge1, Edge* edge2, unsigned id=0);
|
static std::unique_ptr<TriFace> Create(Edge* edge0, Edge* edge1, Edge* edge2, std::size_t id=0);
|
||||||
|
|
||||||
void associateWidthEdges() override;
|
void associateWidthEdges() override;
|
||||||
|
|
||||||
std::vector<unsigned> getNodeIds() const override;
|
std::vector<std::size_t> getNodeIds() const override;
|
||||||
|
|
||||||
unsigned getNumNodes() const override;
|
std::size_t getNumNodes() const override;
|
||||||
|
|
||||||
void replaceEdge(Edge* original, Edge* replacement);
|
void replaceEdge(Edge* original, Edge* replacement);
|
||||||
|
|
||||||
unsigned getEdge0Id () const;
|
std::size_t getEdge0Id () const;
|
||||||
unsigned getEdge1Id () const;
|
std::size_t getEdge1Id () const;
|
||||||
unsigned getEdge2Id () const;
|
std::size_t getEdge2Id () const;
|
||||||
std::vector<unsigned> getEdgeIds() const override;
|
std::vector<std::size_t> getEdgeIds() const override;
|
||||||
|
|
||||||
std::vector<Point> getNodeLocations(Orientation orientation = Orientation::CCW) const override;
|
std::vector<Point> getNodeLocations(Orientation orientation = Orientation::CCW) const override;
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "FileLogger.h"
|
#include "FileLogger.h"
|
||||||
|
|
||||||
#include "Win32TempFile.h"
|
#include "Win32TempFile.h"
|
||||||
|
#include "UnicodeUtils.h"
|
||||||
|
|
||||||
Win32WebRequest::Win32WebRequest()
|
Win32WebRequest::Win32WebRequest()
|
||||||
: mBuffer(DEFAULT_BUFFER_SIZE)
|
: mBuffer(DEFAULT_BUFFER_SIZE)
|
||||||
|
@ -47,8 +48,7 @@ void Win32WebRequest::resizeBuffer(unsigned size)
|
||||||
|
|
||||||
std::string Win32WebRequest::getUrlFromRequest() const
|
std::string Win32WebRequest::getUrlFromRequest() const
|
||||||
{
|
{
|
||||||
const std::wstring wide_url = mHandle->CookedUrl.pFullUrl;
|
return UnicodeUtils::utf16ToUtf8String(mHandle->CookedUrl.pFullUrl);
|
||||||
return StringUtils::convert(wide_url);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpRequest Win32WebRequest::getRequest() const
|
HttpRequest Win32WebRequest::getRequest() const
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include "HttpRequest.h"
|
#include "HttpRequest.h"
|
||||||
#include "HttpResponse.h"
|
#include "HttpResponse.h"
|
||||||
#include "FileLogger.h"
|
#include "FileLogger.h"
|
||||||
#include "StringUtils.h"
|
#include "UnicodeUtils.h"
|
||||||
|
|
||||||
Win32WebServer::Win32WebServer(AbstractWebApp* webApp)
|
Win32WebServer::Win32WebServer(AbstractWebApp* webApp)
|
||||||
: mListenUrl("http://localhost:49153/"),
|
: mListenUrl("http://localhost:49153/"),
|
||||||
|
@ -26,7 +26,7 @@ Win32WebServer::~Win32WebServer()
|
||||||
void Win32WebServer::clear()
|
void Win32WebServer::clear()
|
||||||
{
|
{
|
||||||
// Remove url
|
// Remove url
|
||||||
::HttpRemoveUrl(mWorkingQueue, StringUtils::convert(mListenUrl).c_str());
|
::HttpRemoveUrl(mWorkingQueue, UnicodeUtils::utf8ToUtf16WString(mListenUrl).c_str());
|
||||||
|
|
||||||
// Close the Request Queue handle.
|
// Close the Request Queue handle.
|
||||||
if (mWorkingQueue)
|
if (mWorkingQueue)
|
||||||
|
@ -56,7 +56,7 @@ void Win32WebServer::initialize()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
retCode = ::HttpAddUrl(mWorkingQueue, StringUtils::convert(mListenUrl).c_str(), nullptr);
|
retCode = ::HttpAddUrl(mWorkingQueue, UnicodeUtils::utf8ToUtf16WString(mListenUrl).c_str(), nullptr);
|
||||||
if (FAILED(retCode))
|
if (FAILED(retCode))
|
||||||
{
|
{
|
||||||
MLOG_ERROR("Failed to register queue to url: " << mListenUrl);
|
MLOG_ERROR("Failed to register queue to url: " << mListenUrl);
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef UNICODE
|
|
||||||
#define UNICODE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef WIN32_LEAN_AND_MEAN
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#endif
|
#endif
|
||||||
#include <windows.h>
|
|
||||||
|
#include "Win32BaseIncludes.h"
|
||||||
|
|
||||||
#ifndef _WIN32_WINNT
|
#ifndef _WIN32_WINNT
|
||||||
#define _WIN32_WINNT 0x0600
|
#define _WIN32_WINNT 0x0600
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "LatexSymbols.h"
|
#include "LatexSymbols.h"
|
||||||
|
|
||||||
#include "StringUtils.h"
|
#include "UnicodeUtils.h"
|
||||||
|
|
||||||
std::unordered_map<std::string, std::wstring> LatexSymbolLookup::mSymbols = {
|
std::unordered_map<std::string, std::wstring> LatexSymbolLookup::mSymbols = {
|
||||||
{"Psi", L"\u03A8"},
|
{"Psi", L"\u03A8"},
|
||||||
|
@ -14,7 +14,7 @@ std::optional<std::string> LatexSymbolLookup::getSymbolUtf8(const std::string& t
|
||||||
{
|
{
|
||||||
if (auto entry = getSymbolUtf16(tag); entry)
|
if (auto entry = getSymbolUtf16(tag); entry)
|
||||||
{
|
{
|
||||||
return StringUtils::convert(*entry);
|
return UnicodeUtils::utf16ToUtf8String(*entry);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,7 +73,7 @@ void Button::doPaint(const PaintEvent* event)
|
||||||
void Button::updateLabel(const PaintEvent* event)
|
void Button::updateLabel(const PaintEvent* event)
|
||||||
{
|
{
|
||||||
unsigned fontOffset = unsigned(mLabel.size()) * 4;
|
unsigned fontOffset = unsigned(mLabel.size()) * 4;
|
||||||
auto middle = DiscretePoint(mLocation.GetX() + mSize.mWidth/2 - fontOffset, mLocation.GetY() + mSize.mHeight/2 + 4);
|
auto middle = DiscretePoint(mLocation.getX() + mSize.mWidth/2 - fontOffset, mLocation.getY() + mSize.mHeight/2 + 4);
|
||||||
|
|
||||||
if (!mTextNode)
|
if (!mTextNode)
|
||||||
{
|
{
|
||||||
|
|
|
@ -48,7 +48,7 @@ void HorizontalSpacer::updateChildLocations()
|
||||||
delta = size.mMaxHeight;
|
delta = size.mMaxHeight;
|
||||||
}
|
}
|
||||||
child->setBounds(mSize.mWidth, unsigned(delta));
|
child->setBounds(mSize.mWidth, unsigned(delta));
|
||||||
child->setLocation(DiscretePoint(mLocation.GetX(), mLocation.GetY() + unsigned(offset)));
|
child->setLocation(DiscretePoint(mLocation.getX(), mLocation.getY() + unsigned(offset)));
|
||||||
offset += delta;
|
offset += delta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ void Label::doPaint(const PaintEvent* event)
|
||||||
void Label::updateLabel(const PaintEvent* event)
|
void Label::updateLabel(const PaintEvent* event)
|
||||||
{
|
{
|
||||||
unsigned fontOffset = unsigned(mLabel.size()) * 4;
|
unsigned fontOffset = unsigned(mLabel.size()) * 4;
|
||||||
auto middle = DiscretePoint(mLocation.GetX() + mSize.mWidth/2 - fontOffset, mLocation.GetY() + mSize.mHeight/2 + 4);
|
auto middle = DiscretePoint(mLocation.getX() + mSize.mWidth/2 - fontOffset, mLocation.getY() + mSize.mHeight/2 + 4);
|
||||||
|
|
||||||
if (!mTextNode)
|
if (!mTextNode)
|
||||||
{
|
{
|
||||||
|
|
|
@ -83,7 +83,7 @@ void TextBox::doPaint(const PaintEvent* event)
|
||||||
|
|
||||||
void TextBox::updateLabel(const PaintEvent* event)
|
void TextBox::updateLabel(const PaintEvent* event)
|
||||||
{
|
{
|
||||||
auto loc = DiscretePoint(mLocation.GetX() + mPadding.mLeft, mLocation.GetY() + mPadding.mTop + unsigned(0));
|
auto loc = DiscretePoint(mLocation.getX() + mPadding.mLeft, mLocation.getY() + mPadding.mTop + unsigned(0));
|
||||||
|
|
||||||
if (!mTextNode)
|
if (!mTextNode)
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,7 +37,7 @@ void VerticalSpacer::updateChildLocations()
|
||||||
double scale = mScales[idx];
|
double scale = mScales[idx];
|
||||||
double delta = mSize.mWidth * (scale/scaleSum);
|
double delta = mSize.mWidth * (scale/scaleSum);
|
||||||
child->setBounds(unsigned(delta), mSize.mHeight);
|
child->setBounds(unsigned(delta), mSize.mHeight);
|
||||||
child->setLocation(DiscretePoint(mLocation.GetX() + unsigned(offset), mLocation.GetY()));
|
child->setLocation(DiscretePoint(mLocation.getX() + unsigned(offset), mLocation.getY()));
|
||||||
offset += delta;
|
offset += delta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,19 +237,19 @@ void Widget::updateChildLocations()
|
||||||
|
|
||||||
bool Widget::contains(const DiscretePoint& loc) const
|
bool Widget::contains(const DiscretePoint& loc) const
|
||||||
{
|
{
|
||||||
if(loc.GetX() < mLocation.GetX())
|
if(loc.getX() < mLocation.getX())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(loc.GetX() > mLocation.GetX() + mSize.mWidth)
|
if(loc.getX() > mLocation.getX() + mSize.mWidth)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(loc.GetY() > mLocation.GetY() + mSize.mHeight)
|
if(loc.getY() > mLocation.getY() + mSize.mHeight)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(loc.GetY() < mLocation.GetY())
|
if(loc.getY() < mLocation.getY())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -313,8 +313,8 @@ void Widget::onMyMouseEvent(const MouseEvent* event)
|
||||||
|
|
||||||
void Widget::updateBackground(const PaintEvent* event)
|
void Widget::updateBackground(const PaintEvent* event)
|
||||||
{
|
{
|
||||||
unsigned locX = mLocation.GetX() + mMargin.mLeft;
|
unsigned locX = mLocation.getX() + mMargin.mLeft;
|
||||||
unsigned locY = mLocation.GetY() + mMargin.mTop;
|
unsigned locY = mLocation.getX() + mMargin.mTop;
|
||||||
unsigned deltaX = mSize.mWidth - mMargin.mLeft - mMargin.mRight;
|
unsigned deltaX = mSize.mWidth - mMargin.mLeft - mMargin.mRight;
|
||||||
unsigned deltaY = mSize.mHeight - mMargin.mTop - mMargin.mBottom;
|
unsigned deltaY = mSize.mHeight - mMargin.mTop - mMargin.mBottom;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include "LineNode.h"
|
||||||
|
|
||||||
|
LineNode::LineNode(const Point& location, const std::vector<Point>& points)
|
||||||
|
: GeometryNode(location),
|
||||||
|
mPoints(points)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
LineNode::Type LineNode::getType()
|
||||||
|
{
|
||||||
|
return Type::Line;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LineNode::createOrUpdateGeometry(SceneInfo* sceneInfo)
|
||||||
|
{
|
||||||
|
if (sceneInfo->mSupportsGeometryPrimitives)
|
||||||
|
{
|
||||||
|
auto line = std::make_unique<Line>(Point{ 0, 0 }, mPoints);
|
||||||
|
mBackgroundItem = std::make_unique<SceneModel>(std::move(line));
|
||||||
|
}
|
||||||
|
mBackgroundItem->setName(mName + "_Model");
|
||||||
|
}
|
||||||
|
|
||||||
|
void LineNode::updateTransform()
|
||||||
|
{
|
||||||
|
mBackgroundItem->updateTransform({ mLocation });
|
||||||
|
}
|
|
@ -10,33 +10,14 @@
|
||||||
class LineNode : public GeometryNode
|
class LineNode : public GeometryNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LineNode(const Point& location, const std::vector<Point>& points)
|
LineNode(const Point& location, const std::vector<Point>& points);
|
||||||
: GeometryNode(location),
|
|
||||||
mPoints(points)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
Type getType();
|
||||||
|
|
||||||
Type getType()
|
|
||||||
{
|
|
||||||
return Type::Line;
|
|
||||||
}
|
|
||||||
|
|
||||||
void createOrUpdateGeometry(SceneInfo* sceneInfo)
|
|
||||||
{
|
|
||||||
if (sceneInfo->mSupportsGeometryPrimitives)
|
|
||||||
{
|
|
||||||
auto line = std::make_unique<Line>(Point{ 0, 0 }, 1, 1);
|
|
||||||
mBackgroundItem = std::make_unique<SceneModel>(std::move(line));
|
|
||||||
}
|
|
||||||
mBackgroundItem->setName(mName + "_Model");
|
|
||||||
}
|
|
||||||
|
|
||||||
void updateTransform()
|
|
||||||
{
|
|
||||||
mBackgroundItem->updateTransform({ mLocation });
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void createOrUpdateGeometry(SceneInfo* sceneInfo) override;
|
||||||
|
|
||||||
|
void updateTransform() override;
|
||||||
|
|
||||||
std::vector<Point> mPoints;
|
std::vector<Point> mPoints;
|
||||||
};
|
};
|
|
@ -32,7 +32,7 @@ bool MarkdownParser::isInMultilineBlock() const
|
||||||
return working_type == MarkdownElement::Type::MULTILINE_QUOTE || working_type == MarkdownElement::Type::CUSTOM_MULTILINE ;
|
return working_type == MarkdownElement::Type::MULTILINE_QUOTE || working_type == MarkdownElement::Type::CUSTOM_MULTILINE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned MarkdownParser::checkForLink(const std::string& lineSection)
|
std::size_t MarkdownParser::checkForLink(const std::string& lineSection)
|
||||||
{
|
{
|
||||||
if (lineSection.empty())
|
if (lineSection.empty())
|
||||||
{
|
{
|
||||||
|
@ -40,7 +40,7 @@ unsigned MarkdownParser::checkForLink(const std::string& lineSection)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> hits;
|
std::vector<std::string> hits;
|
||||||
unsigned hit_size{0};
|
std::size_t hit_size{0};
|
||||||
if (Lexer::matchPattern("[@](@)", lineSection, '@', hits))
|
if (Lexer::matchPattern("[@](@)", lineSection, '@', hits))
|
||||||
{
|
{
|
||||||
if (hits.size() == 2)
|
if (hits.size() == 2)
|
||||||
|
@ -59,7 +59,7 @@ unsigned MarkdownParser::checkForLink(const std::string& lineSection)
|
||||||
return hit_size;
|
return hit_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned MarkdownParser::checkForImage(const std::string& lineSection)
|
std::size_t MarkdownParser::checkForImage(const std::string& lineSection)
|
||||||
{
|
{
|
||||||
if (lineSection.empty())
|
if (lineSection.empty())
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,7 @@ unsigned MarkdownParser::checkForImage(const std::string& lineSection)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> hits;
|
std::vector<std::string> hits;
|
||||||
unsigned hit_size{0};
|
std::size_t hit_size{0};
|
||||||
if (Lexer::matchPattern("![@](@)", lineSection, '@', hits))
|
if (Lexer::matchPattern("![@](@)", lineSection, '@', hits))
|
||||||
{
|
{
|
||||||
if (hits.size() == 2)
|
if (hits.size() == 2)
|
||||||
|
@ -85,7 +85,7 @@ unsigned MarkdownParser::checkForImage(const std::string& lineSection)
|
||||||
return hit_size;
|
return hit_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned MarkdownParser::checkForInlineQuote(const std::string& lineSection)
|
std::size_t MarkdownParser::checkForInlineQuote(const std::string& lineSection)
|
||||||
{
|
{
|
||||||
if (lineSection.empty())
|
if (lineSection.empty())
|
||||||
{
|
{
|
||||||
|
@ -93,7 +93,7 @@ unsigned MarkdownParser::checkForInlineQuote(const std::string& lineSection)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> hits;
|
std::vector<std::string> hits;
|
||||||
unsigned hit_size{0};
|
std::size_t hit_size{0};
|
||||||
if (Lexer::matchPattern("`@`", lineSection, '@', hits))
|
if (Lexer::matchPattern("`@`", lineSection, '@', hits))
|
||||||
{
|
{
|
||||||
if (hits.size() == 1)
|
if (hits.size() == 1)
|
||||||
|
@ -111,7 +111,8 @@ unsigned MarkdownParser::checkForInlineQuote(const std::string& lineSection)
|
||||||
}
|
}
|
||||||
return hit_size;
|
return hit_size;
|
||||||
}
|
}
|
||||||
unsigned MarkdownParser::checkForCustomInline(const std::string& lineSection)
|
|
||||||
|
std::size_t MarkdownParser::checkForCustomInline(const std::string& lineSection)
|
||||||
{
|
{
|
||||||
if (lineSection.empty())
|
if (lineSection.empty())
|
||||||
{
|
{
|
||||||
|
@ -119,9 +120,9 @@ unsigned MarkdownParser::checkForCustomInline(const std::string& lineSection)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> hits;
|
std::vector<std::string> hits;
|
||||||
unsigned hit_size{0};
|
std::size_t hit_size{0};
|
||||||
|
|
||||||
for(unsigned idx=0; idx<mWorkingDocument->getNumInlineContexts(); idx++)
|
for(std::size_t idx=0; idx<mWorkingDocument->getNumInlineContexts(); idx++)
|
||||||
{
|
{
|
||||||
const auto delimiter = mWorkingDocument->getInlineContext(idx)->getDelimiter();
|
const auto delimiter = mWorkingDocument->getInlineContext(idx)->getDelimiter();
|
||||||
if (Lexer::matchPattern(delimiter + "@" + delimiter, lineSection, '@', hits))
|
if (Lexer::matchPattern(delimiter + "@" + delimiter, lineSection, '@', hits))
|
||||||
|
@ -193,7 +194,7 @@ void MarkdownParser::processLine(const std::string& line)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned line_position = 0;
|
std::size_t line_position = 0;
|
||||||
mWorkingLine.clear();
|
mWorkingLine.clear();
|
||||||
while(line_position < line.size())
|
while(line_position < line.size())
|
||||||
{
|
{
|
||||||
|
@ -308,11 +309,11 @@ void MarkdownParser::onFoundHeading(const std::string& line)
|
||||||
{
|
{
|
||||||
onSectionFinished();
|
onSectionFinished();
|
||||||
|
|
||||||
unsigned level = StringUtils::countFirstConsecutiveHits(line, HEADING_DELIMITER);
|
auto level = StringUtils::countFirstConsecutiveHits(line, HEADING_DELIMITER);
|
||||||
auto heading = std::make_unique<MarkdownHeading>(level);
|
auto heading = std::make_unique<MarkdownHeading>(level);
|
||||||
|
|
||||||
std::string prefix;
|
std::string prefix;
|
||||||
for(unsigned idx=0; idx<level; idx++)
|
for(std::size_t idx=0; idx<level; idx++)
|
||||||
{
|
{
|
||||||
prefix += HEADING_DELIMITER;
|
prefix += HEADING_DELIMITER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,10 +25,10 @@ public:
|
||||||
private:
|
private:
|
||||||
void addChildToWorkingElement(std::unique_ptr<MarkdownInlineElement> child);
|
void addChildToWorkingElement(std::unique_ptr<MarkdownInlineElement> child);
|
||||||
|
|
||||||
unsigned checkForImage(const std::string& lineSection);
|
std::size_t checkForImage(const std::string& lineSection);
|
||||||
unsigned checkForLink(const std::string& lineSection);
|
std::size_t checkForLink(const std::string& lineSection);
|
||||||
unsigned checkForInlineQuote(const std::string& lineSection);
|
std::size_t checkForInlineQuote(const std::string& lineSection);
|
||||||
unsigned checkForCustomInline(const std::string& lineSection);
|
std::size_t checkForCustomInline(const std::string& lineSection);
|
||||||
|
|
||||||
bool isInMultilineBlock() const;
|
bool isInMultilineBlock() const;
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include "Win32DxWindowInterface.h"
|
#include "Win32DxWindowInterface.h"
|
||||||
|
|
||||||
#include "FileLogger.h"
|
#include "FileLogger.h"
|
||||||
#include "StringUtils.h"
|
#include "UnicodeUtils.h"
|
||||||
#include "Widget.h"
|
#include "Widget.h"
|
||||||
#include "DrawingContext.h"
|
#include "DrawingContext.h"
|
||||||
#include "DirectXPainter.h"
|
#include "DirectXPainter.h"
|
||||||
|
@ -105,7 +105,7 @@ LRESULT CALLBACK Win32Window::WindowProc(UINT message, WPARAM wParam, LPARAM lPa
|
||||||
key_event->setAction(KeyboardEvent::Action::Pressed);
|
key_event->setAction(KeyboardEvent::Action::Pressed);
|
||||||
|
|
||||||
auto keyChar = (wchar_t)wParam;
|
auto keyChar = (wchar_t)wParam;
|
||||||
key_event->setKeyString(StringUtils::convert(std::wstring(1, keyChar)));
|
key_event->setKeyString(UnicodeUtils::utf16ToUtf8String(std::wstring(1, keyChar)));
|
||||||
mDesktopManager->onUiEvent(std::move(key_event));
|
mDesktopManager->onUiEvent(std::move(key_event));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue