同步main
parent
fbfc5f2759
commit
99d31f4db4
|
@ -293,208 +293,6 @@ QJsonObject StrokeElementLayerStyle::toJson() const
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<LayerStyle> StrokeElementLayerStyle::clone() const
|
|
||||||
{
|
|
||||||
LayerStyleContainer container(isClosedElement);
|
|
||||||
for (const auto& style : jsonArray)
|
|
||||||
{
|
|
||||||
container.useStyle(LayerStyle::fromJson(style.toObject()));
|
|
||||||
}
|
|
||||||
return container;
|
|
||||||
}
|
|
||||||
|
|
||||||
LayerStyleContainer::LayerStyleContainer(bool isClosedElement) : hash(0)
|
|
||||||
{
|
|
||||||
for (const auto& style : commonStyles)
|
|
||||||
{
|
|
||||||
unusedStyles.insert(style);
|
|
||||||
}
|
|
||||||
if (isClosedElement)
|
|
||||||
{
|
|
||||||
for (const auto& style : closedOnlyStyles)
|
|
||||||
{
|
|
||||||
unusedStyles.insert(style);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (const auto& style : unclosedOnlyStyles)
|
|
||||||
{
|
|
||||||
unusedStyles.insert(style);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<Renderer::BaseStyle> LayerStyleContainer::toBaseStyles() const
|
|
||||||
{
|
|
||||||
std::vector<Renderer::BaseStyle> result;
|
|
||||||
for (const auto& style : styles | std::views::values)
|
|
||||||
{
|
|
||||||
auto baseStyles = style->toBaseStyles();
|
|
||||||
result.insert(result.end(),
|
|
||||||
std::make_move_iterator(baseStyles.begin()),
|
|
||||||
std::make_move_iterator(baseStyles.end()));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
QJsonArray LayerStyleContainer::toJson() const
|
|
||||||
{
|
|
||||||
QJsonArray json;
|
|
||||||
for (const auto& style : styles | std::views::values)
|
|
||||||
{
|
|
||||||
json.append(style->toJson());
|
|
||||||
}
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList LayerStyleContainer::unusedStyleNames() const
|
|
||||||
{
|
|
||||||
QStringList result;
|
|
||||||
for(const auto& name : unusedStyles | std::views::keys)
|
|
||||||
{
|
|
||||||
result << name;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<LayerStyle> LayerStyleContainer::makeUnusedStyle(const QString& styleName) const
|
|
||||||
{
|
|
||||||
return unusedStyles.at(styleName)();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool LayerStyleContainer::empty() const
|
|
||||||
{
|
|
||||||
return styles.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool LayerStyleContainer::full() const
|
|
||||||
{
|
|
||||||
return unusedStyles.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::map<QString, std::shared_ptr<LayerStyle>>::iterator LayerStyleContainer::begin()
|
|
||||||
{
|
|
||||||
return styles.begin();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::map<QString, std::shared_ptr<LayerStyle>>::iterator LayerStyleContainer::end()
|
|
||||||
{
|
|
||||||
return styles.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool LayerStyleContainer::useStyle(const std::shared_ptr<LayerStyle>& style)
|
|
||||||
{
|
|
||||||
auto styleNode = unusedStyles.extract(style->getDisplayName());
|
|
||||||
if (styleNode.empty())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
styles[styleNode.key()] = style;
|
|
||||||
usedStyles.insert(std::move(styleNode));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool LayerStyleContainer::dropStyle(const QString& styleName)
|
|
||||||
{
|
|
||||||
auto styleNode = usedStyles.extract(styleName);
|
|
||||||
if (styleNode.empty())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
styles.erase(styleName);
|
|
||||||
unusedStyles.insert(std::move(styleNode));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
float LayerStyleContainer::boundingBoxAffectValue() const {
|
|
||||||
float maxLineWidth = 0;
|
|
||||||
const auto strokeStyle = styles.find(StrokeElementLayerStyle::displayName());
|
|
||||||
if (strokeStyle != styles.end())
|
|
||||||
{
|
|
||||||
if (const auto strokeElementLayerStyle =
|
|
||||||
std::dynamic_pointer_cast<StrokeElementLayerStyle>(strokeStyle->second);
|
|
||||||
strokeElementLayerStyle != nullptr)
|
|
||||||
{
|
|
||||||
const auto& leftStyleStroke = strokeElementLayerStyle->strokePair.first;
|
|
||||||
const auto& rightStyleStroke = strokeElementLayerStyle->strokePair.second;
|
|
||||||
if (leftStyleStroke != nullptr)
|
|
||||||
{
|
|
||||||
maxLineWidth = std::max(maxLineWidth, leftStyleStroke->halfWidth);
|
|
||||||
}
|
|
||||||
if (rightStyleStroke != nullptr)
|
|
||||||
{
|
|
||||||
maxLineWidth = std::max(maxLineWidth, rightStyleStroke->halfWidth);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return maxLineWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t LayerStyleContainer::getHash() const
|
|
||||||
{
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<StrokeElementLayerStyle> StrokeElementLayerStyle::fromJson(const QJsonObject& json)
|
|
||||||
{
|
|
||||||
auto ptr = std::make_unique<StrokeElementLayerStyle>(
|
|
||||||
std::static_pointer_cast<MaterialStyleStroke>(
|
|
||||||
std::shared_ptr(std::move(MaterialStyle::decoded(EncodeUtil::fromBase64<GLfloat>(json["left"].toString()))))
|
|
||||||
),
|
|
||||||
std::static_pointer_cast<MaterialStyleStroke>(
|
|
||||||
std::shared_ptr(std::move(MaterialStyle::decoded(EncodeUtil::fromBase64<GLfloat>(json["right"].toString()))))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
ptr->enableEachSideIndependent = json["enableEachSideIndependent"].toBool();
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
StrokeElementLayerStyle::StrokeElementLayerStyle()
|
|
||||||
{
|
|
||||||
const auto materialMap = std::map<float, Renderer::Material>();
|
|
||||||
this->strokePair.first = std::make_shared<MaterialStyleStroke>(
|
|
||||||
7,
|
|
||||||
Renderer::StrokeType::kLeftSide, Renderer::StrokeEndType::kFlat,
|
|
||||||
std::make_shared<Renderer::StrokeRadialGradient>(materialMap, false)
|
|
||||||
);
|
|
||||||
|
|
||||||
this->strokePair.second = std::make_shared<MaterialStyleStroke>(
|
|
||||||
7,
|
|
||||||
Renderer::StrokeType::kRightSide, Renderer::StrokeEndType::kFlat,
|
|
||||||
std::make_shared<Renderer::StrokeRadialGradient>(materialMap, false)
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
StrokeElementLayerStyle::StrokeElementLayerStyle(const PMaterialStyleStroke& left, const PMaterialStyleStroke& right)
|
|
||||||
{
|
|
||||||
this->strokePair.first = left;
|
|
||||||
this->strokePair.second = right ? right : std::static_pointer_cast<MaterialStyleStroke>(
|
|
||||||
std::shared_ptr(std::move(left->clone()))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
StrokeElementLayerStyle::StrokeElementLayerStyle(const StrokeElementLayerStyle& other)
|
|
||||||
{
|
|
||||||
strokePair.first = std::static_pointer_cast<MaterialStyleStroke>(
|
|
||||||
std::shared_ptr(std::move(other.strokePair.first->clone()))
|
|
||||||
);
|
|
||||||
strokePair.second = std::static_pointer_cast<MaterialStyleStroke>(
|
|
||||||
std::shared_ptr(std::move(other.strokePair.second->clone()))
|
|
||||||
);
|
|
||||||
enableEachSideIndependent = other.enableEachSideIndependent;
|
|
||||||
}
|
|
||||||
|
|
||||||
QJsonObject StrokeElementLayerStyle::toJson() const
|
|
||||||
{
|
|
||||||
auto json = LayerStyle::toJson();
|
|
||||||
json["enableEachSideIndependent"] = enableEachSideIndependent;
|
|
||||||
json["left"] = EncodeUtil::toBase64<GLfloat>(strokePair.first->encoded());
|
|
||||||
json["right"] = EncodeUtil::toBase64<GLfloat>(strokePair.second->encoded());
|
|
||||||
return json;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<LayerStyle> StrokeElementLayerStyle::clone() const
|
std::unique_ptr<LayerStyle> StrokeElementLayerStyle::clone() const
|
||||||
{
|
{
|
||||||
return std::make_unique<StrokeElementLayerStyle>(StrokeElementLayerStyle(*this));
|
return std::make_unique<StrokeElementLayerStyle>(StrokeElementLayerStyle(*this));
|
||||||
|
|
|
@ -376,6 +376,7 @@ GLuint Renderer::Model::loadPainting(std::string path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
painting.generateBuffers(glFunc);
|
painting.generateBuffers(glFunc);
|
||||||
|
|
||||||
auto index = vtManager->createVirtualTexture(painting);
|
auto index = vtManager->createVirtualTexture(painting);
|
||||||
|
|
Loading…
Reference in New Issue