Skip to content

Commit

Permalink
Merge 9a979b5 into 6cd554f
Browse files Browse the repository at this point in the history
  • Loading branch information
Jedi18 committed Dec 19, 2020
2 parents 6cd554f + 9a979b5 commit ccd1af9
Show file tree
Hide file tree
Showing 30 changed files with 1,227 additions and 435 deletions.
4 changes: 2 additions & 2 deletions lcUI/dialogs/textdialog.cpp
Expand Up @@ -90,9 +90,9 @@ TextDialog::~TextDialog()

void TextDialog::okButtonClicked() {
kaguya::State state(_mainWindow->luaInterface()->luaState());
_mainWindow->runOperation(state["TextOperations"]);
_mainWindow->runOperation(state["MTextOperations"]);
state.dostring("updateTextOp = function(textEntity) mainWindow:currentOperation():copyEntity(textEntity) end");
lc::builder::TextBuilder textBuilder;
lc::builder::MTextBuilder textBuilder;
textBuilder.setLayer(_mainWindow->cadMdiChild()->activeLayer());
textBuilder.setMetaInfo(_mainWindow->cadMdiChild()->metaInfoManager()->metaInfo());
textBuilder.setBlock(_mainWindow->cadMdiChild()->activeViewport());
Expand Down
3 changes: 2 additions & 1 deletion lcUI/dialogs/textdialog.h
Expand Up @@ -5,7 +5,8 @@
#include <QCheckBox>

#include <mainwindow.h>
#include <cad/builders/text.h>
#include <cad/primitive/mtext.h>
#include <cad/builders/mtext.h>

namespace Ui {
class TextDialog;
Expand Down
4 changes: 4 additions & 0 deletions lcUI/widgets/guiAPI/entitynamevisitor.cpp
Expand Up @@ -26,6 +26,10 @@ void EntityNameVisitor::visit(entity::Text_CSPtr){
entityInfo = "Text";
}

void EntityNameVisitor::visit(entity::MText_CSPtr) {
entityInfo = "MText";
}

void EntityNameVisitor::visit(entity::Spline_CSPtr){
entityInfo = "Spline";
}
Expand Down
1 change: 1 addition & 0 deletions lcUI/widgets/guiAPI/entitynamevisitor.h
Expand Up @@ -16,6 +16,7 @@ namespace lc
void visit(entity::Arc_CSPtr) override;
void visit(entity::Ellipse_CSPtr) override;
void visit(entity::Text_CSPtr) override;
void visit(entity::MText_CSPtr) override;
void visit(entity::Spline_CSPtr) override;
void visit(entity::DimAligned_CSPtr) override;
void visit(entity::DimAngular_CSPtr) override;
Expand Down
109 changes: 109 additions & 0 deletions lcUILua/createActions/mtextoperations.lua
@@ -0,0 +1,109 @@
MTextOperations = {
name = "MTextOperations",
command_line = "MTEXT",
context_transitions = {
enterTextValue = {"enterInsertionPoint", "enterHeight", "enterAngle"},
enterInsertionPoint = {"enterTextValue", "enterHeight", "enterAngle"},
enterHeight = {"enterTextValue", "enterInsertionPoint", "enterAngle"},
enterAngle = {"enterTextValue", "enterInsertionPoint", "enterHeight"}
}
}
MTextOperations.__index = MTextOperations

setmetatable(MTextOperations, {
__index = CreateOperations,
__call = function (o, ...)
local self = setmetatable({}, o)
self:_init(...)
return self
end,
})

function MTextOperations:_init()
CreateOperations._init(self, lc.builder.MTextBuilder, "enterTextValue")
message("Enter mtext value")
self.builder:setTextValue("MText")
mainWindow:cliCommand():commandActive(true)
end

function MTextOperations:enterTextValue(eventName, data)
if(eventName == "mouseMove") then
self.builder:setInsertionPoint(data["position"])
elseif(eventName == "text") then
self.builder:setTextValue(data["text"])
self.textValue = data["text"]
self:determineNextStep()
end
end

function MTextOperations:enterInsertionPoint(eventName, data)
if(eventName == "mouseMove") then
self.builder:setInsertionPoint(data["position"])
elseif(eventName == "point") then
self.builder:setInsertionPoint(data["position"])
if self.byTextDialog ~= nil and self.byTextDialog then
self:createEntity()
else
self.insertionPoint = data["position"]
self:determineNextStep()
end
end
end

function MTextOperations:enterHeight(eventName, data)
if(eventName == "mouseMove") then
local dist = self.builder:insertionPoint():distanceTo(data["position"])
self.builder:setHeight(dist)
elseif(eventName == "point") then
local dist = self.builder:insertionPoint():distanceTo(data["position"])
self.builder:setHeight(dist)
self.height = dist
self:determineNextStep()
elseif(eventName == "number") then
self.builder:setHeight(data["number"])
self.height = data["number"]
self:determineNextStep()
end
end

function MTextOperations:enterAngle(eventName, data)
if(eventName == "mouseMove") then
local ang = self.builder:insertionPoint():distanceTo(data["position"]) * 0.05
self.builder:setAngle(ang)
elseif(eventName == "point") then
local ang = self.builder:insertionPoint():distanceTo(data["position"]) * 0.05
self.builder:setAngle(ang)
self.angle = ang
self:determineNextStep()
elseif(eventName == "number") then
self.builder:setAngle(data["number"] * 3.1416/180)
self.angle = self.builder:angle()
self:determineNextStep()
end
end

function MTextOperations:copyEntity(textEntity)
self.builder:copy(textEntity)
self.byTextDialog = true
self.step = "enterInsertionPoint"
message("Enter insertion point")
end

function MTextOperations:determineNextStep()
if(self.textValue == nil) then
message("Enter text value")
self.step = "enterTextValue"
elseif(self.insertionPoint == nil) then
message("Enter insertion point")
self.step = "enterInsertionPoint"
elseif(self.height == nil) then
message("Enter height of text")
self.step = "enterHeight"
elseif(self.angle == nil) then
message("Enter angle of text (in degrees)")
self.step = "enterAngle"
else
message("Done")
self:createEntity()
end
end
2 changes: 1 addition & 1 deletion lcadluascript/bridge/lc.cpp
Expand Up @@ -26,7 +26,7 @@ void import_lc_namespace(kaguya::State& state) {
);

state["lc"]["EntityDispatch"].setClass(kaguya::UserdataMetatable<lc::EntityDispatch>()
.addOverloadedFunctions("visit", static_cast<void(lc::EntityDispatch::*)(lc::entity::Line_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Point_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Circle_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Arc_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Ellipse_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Text_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Spline_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimAligned_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimAngular_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimDiametric_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimLinear_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimRadial_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::LWPolyline_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Image_CSPtr)>(&lc::EntityDispatch::visit))
.addOverloadedFunctions("visit", static_cast<void(lc::EntityDispatch::*)(lc::entity::Line_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Point_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Circle_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Arc_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Ellipse_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Text_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::MText_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Spline_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimAligned_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimAngular_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimDiametric_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimLinear_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::DimRadial_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::LWPolyline_CSPtr)>(&lc::EntityDispatch::visit), static_cast<void(lc::EntityDispatch::*)(lc::entity::Image_CSPtr)>(&lc::EntityDispatch::visit))
);

state["lc"]["EntityCoordinate"].setClass(kaguya::UserdataMetatable<lc::EntityCoordinate>()
Expand Down
31 changes: 22 additions & 9 deletions lcadluascript/bridge/lc_builder.cpp
Expand Up @@ -12,8 +12,11 @@
#include <cad/builders/line.h>
#include <cad/builders/spline.h>
#include <cad/builders/text.h>
#include <cad/builders/mtext.h>
#include <cad/builders/textbase.h>
#include <cad/builders/insert.h>
#include <cad/primitive/insert.h>
#include <cad/primitive/mtext.h>
#include "lc_builder.h"

void import_lc_builder_namespace(kaguya::State& state) {
Expand Down Expand Up @@ -280,17 +283,27 @@ void import_lc_builder_namespace(kaguya::State& state) {
.addFunction("setDocument", &lc::builder::InsertBuilder::setDocument)
);

state["lc"]["builder"]["TextBuilder"].setClass(kaguya::UserdataMetatable<lc::builder::TextBuilder, lc::builder::CADEntityBuilder>()
state["lc"]["builder"]["TextBaseBuilder"].setClass(kaguya::UserdataMetatable<lc::builder::TextBaseBuilder, lc::builder::CADEntityBuilder>()
.setConstructors<lc::builder::TextBaseBuilder()>()
.addFunction("insertionPoint", &lc::builder::TextBaseBuilder::insertionPoint)
.addFunction("setInsertionPoint", &lc::builder::TextBaseBuilder::setInsertionPoint)
.addFunction("textValue", &lc::builder::TextBaseBuilder::textValue)
.addFunction("setTextValue", &lc::builder::TextBaseBuilder::setTextValue)
.addFunction("height", &lc::builder::TextBaseBuilder::height)
.addFunction("setHeight", &lc::builder::TextBaseBuilder::setHeight)
.addFunction("angle", &lc::builder::TextBaseBuilder::angle)
.addFunction("setAngle", &lc::builder::TextBaseBuilder::setAngle)
);

state["lc"]["builder"]["TextBuilder"].setClass(kaguya::UserdataMetatable<lc::builder::TextBuilder, lc::builder::TextBaseBuilder>()
.setConstructors<lc::builder::TextBuilder()>()
.addFunction("build", &lc::builder::TextBuilder::build)
.addFunction("insertionPoint", &lc::builder::TextBuilder::insertionPoint)
.addFunction("setInsertionPoint", &lc::builder::TextBuilder::setInsertionPoint)
.addFunction("textValue", &lc::builder::TextBuilder::textValue)
.addFunction("setTextValue", &lc::builder::TextBuilder::setTextValue)
.addFunction("height", &lc::builder::TextBuilder::height)
.addFunction("setHeight", &lc::builder::TextBuilder::setHeight)
.addFunction("angle", &lc::builder::TextBuilder::angle)
.addFunction("setAngle", &lc::builder::TextBuilder::setAngle)
.addFunction("copy", &lc::builder::TextBuilder::copy)
);

state["lc"]["builder"]["MTextBuilder"].setClass(kaguya::UserdataMetatable<lc::builder::MTextBuilder, lc::builder::TextBaseBuilder>()
.setConstructors<lc::builder::MTextBuilder()>()
.addFunction("build", &lc::builder::MTextBuilder::build)
.addFunction("copy", &lc::builder::MTextBuilder::copy)
);
}
36 changes: 27 additions & 9 deletions lcadluascript/bridge/lc_entity.cpp
Expand Up @@ -17,6 +17,7 @@
#include <cad/primitive/lwpolyline.h>
#include <cad/primitive/spline.h>
#include <cad/primitive/text.h>
#include <cad/primitive/mtext.h>
#include <cad/primitive/image.h>
#include <cad/primitive/insert.h>
#include <cad/interface/unmanageddraggable.h>
Expand Down Expand Up @@ -296,28 +297,45 @@ void import_lc_entity_namespace(kaguya::State& state) {
.addFunction("snapPoints", &lc::entity::Spline::snapPoints)
);

state["lc"]["entity"]["Text"].setClass(kaguya::UserdataMetatable<lc::entity::Text, kaguya::MultipleBase<lc::entity::CADEntity, lc::Visitable, lc::entity::Draggable>>()
state["lc"]["entity"]["TextBase"].setClass(kaguya::UserdataMetatable<lc::entity::TextBase>()
.addFunction("angle", &lc::entity::TextBase::angle)
.addFunction("height", &lc::entity::TextBase::height)
.addFunction("insertion_point", &lc::entity::TextBase::insertion_point)
.addFunction("style", &lc::entity::TextBase::style)
.addFunction("text_value", &lc::entity::TextBase::text_value)
.addFunction("textgeneration", &lc::entity::Text::textgeneration)
.addFunction("halign", &lc::entity::Text::halign)
.addFunction("valign", &lc::entity::Text::valign)
);

state["lc"]["entity"]["Text"].setClass(kaguya::UserdataMetatable<lc::entity::Text, kaguya::MultipleBase<lc::entity::CADEntity, lc::entity::TextBase, lc::Visitable, lc::entity::Draggable>>()
.addFunction("accept", &lc::entity::Text::accept)
.addFunction("angle", &lc::entity::Text::angle)
.addFunction("boundingBox", &lc::entity::Text::boundingBox)
.addFunction("copy", &lc::entity::Text::copy)
.addFunction("dispatch", &lc::entity::Text::dispatch)
.addFunction("dragPoints", &lc::entity::Text::dragPoints)
.addFunction("halign", &lc::entity::Text::halign)
.addFunction("height", &lc::entity::Text::height)
.addFunction("insertion_point", &lc::entity::Text::insertion_point)
.addFunction("mirror", &lc::entity::Text::mirror)
.addFunction("modify", &lc::entity::Text::modify)
.addFunction("move", &lc::entity::Text::move)
.addFunction("rotate", &lc::entity::Text::rotate)
.addFunction("scale", &lc::entity::Text::scale)
.addFunction("setDragPoints", &lc::entity::Text::setDragPoints)
.addFunction("style", &lc::entity::Text::style)
.addFunction("text_value", &lc::entity::Text::text_value)
.addFunction("textgeneration", &lc::entity::Text::textgeneration)
.addFunction("valign", &lc::entity::Text::valign)
);

state["lc"]["entity"]["MText"].setClass(kaguya::UserdataMetatable<lc::entity::MText, kaguya::MultipleBase<lc::entity::CADEntity, lc::entity::TextBase, lc::Visitable, lc::entity::Draggable>>()
.addFunction("accept", &lc::entity::MText::accept)
.addFunction("boundingBox", &lc::entity::MText::boundingBox)
.addFunction("copy", &lc::entity::MText::copy)
.addFunction("dispatch", &lc::entity::MText::dispatch)
.addFunction("dragPoints", &lc::entity::MText::dragPoints)
.addFunction("mirror", &lc::entity::MText::mirror)
.addFunction("modify", &lc::entity::MText::modify)
.addFunction("move", &lc::entity::MText::move)
.addFunction("rotate", &lc::entity::MText::rotate)
.addFunction("scale", &lc::entity::MText::scale)
.addFunction("setDragPoints", &lc::entity::MText::setDragPoints)
);

state["lc"]["entity"]["Image"].setClass(kaguya::UserdataMetatable<lc::entity::Image, kaguya::MultipleBase<lc::entity::CADEntity, lc::entity::Snapable, lc::Visitable>>()
.addFunction("accept", &lc::entity::Image::accept)
.addFunction("base", &lc::entity::Image::base)
Expand Down
8 changes: 8 additions & 0 deletions lckernel/CMakeLists.txt
Expand Up @@ -62,6 +62,8 @@ cad/primitive/ellipse.cpp
cad/primitive/line.cpp
cad/primitive/spline.cpp
cad/primitive/text.cpp
cad/primitive/mtext.cpp
cad/primitive/textbase.cpp
cad/primitive/dimension.cpp
cad/primitive/dimradial.cpp
cad/primitive/dimdiametric.cpp
Expand Down Expand Up @@ -90,6 +92,8 @@ cad/builders/linepattern.cpp
cad/builders/spline.cpp
cad/builders/lwpolyline.cpp
cad/builders/text.cpp
cad/builders/mtext.cpp
cad/builders/textbase.cpp
cad/meta/customentitystorage.cpp
cad/operations/blockops.cpp
cad/operations/builder.cpp
Expand Down Expand Up @@ -176,6 +180,8 @@ cad/primitive/ellipse.h
cad/primitive/line.h
cad/primitive/spline.h
cad/primitive/text.h
cad/primitive/mtext.h
cad/primitive/textbase.h
cad/primitive/lwpolyline.h
cad/primitive/dimension.h
cad/primitive/dimradial.h
Expand All @@ -202,6 +208,8 @@ cad/builders/ellipse.cpp
cad/builders/point.h
cad/builders/spline.h
cad/builders/text.h
cad/builders/mtext.h
cad/builders/textbase.h
cad/primitive/insert.h
cad/builders/insert.h
cad/builders/layer.h
Expand Down
3 changes: 3 additions & 0 deletions lckernel/cad/base/visitor.h
Expand Up @@ -42,6 +42,9 @@ DECLARE_SHORT_SHARED_PTR(Line)
class Text;
DECLARE_SHORT_SHARED_PTR(Text)

class MText;
DECLARE_SHORT_SHARED_PTR(MText)

class Spline;
DECLARE_SHORT_SHARED_PTR(Spline)

Expand Down
71 changes: 71 additions & 0 deletions lckernel/cad/builders/mtext.cpp
@@ -0,0 +1,71 @@
#include "mtext.h"
#include <cad/primitive/mtext.h>

using namespace lc::builder;

MTextBuilder::MTextBuilder()
:
_underlined(false),
_strikethrough(false),
_bold(false),
_italic(false)
{
}

MTextBuilder* MTextBuilder::setUnderlined(bool underline) {
_underlined = underline;
return this;
}

bool MTextBuilder::underlined() const {
return _underlined;
}

MTextBuilder* MTextBuilder::setStrikethrough(bool strikethrough) {
_strikethrough = strikethrough;
return this;
}

bool MTextBuilder::strikethrough() const {
return _strikethrough;
}

MTextBuilder* MTextBuilder::setBold(bool bold) {
_bold = bold;
return this;
}

bool MTextBuilder::bold() const {
return _bold;
}

MTextBuilder* MTextBuilder::setItalic(bool italic) {
_italic = italic;
return this;
}

bool MTextBuilder::italic() const {
return _italic;
}

lc::entity::MText_CSPtr MTextBuilder::build() {
checkValues(true);
return entity::MText_CSPtr(new entity::MText(*this));
}

void MTextBuilder::copy(lc::entity::MText_CSPtr entity) {
CADEntityBuilder::copy(entity);

setInsertionPoint(entity->insertion_point());
setTextValue(entity->text_value());
setTextFont(entity->style());
setHeight(entity->height());
setAngle(entity->angle());
setDrawingDirection(entity->textgeneration());
setHorizontalAlign(entity->halign());
setVerticalAlign(entity->valign());
setUnderlined(entity->underlined());
setStrikethrough(entity->strikethrough());
setBold(entity->bold());
setItalic(entity->italic());
}

0 comments on commit ccd1af9

Please sign in to comment.