| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| |
|
| | #include <App/Application.h> |
| | #include <Base/Persistence.h> |
| | #include <Base/Vector3D.h> |
| |
|
| | #include "CosmeticVertex.h" |
| | #include "CosmeticVertexPy.h" |
| | #include "LineGroup.h" |
| | #include "Preferences.h" |
| | #include "DrawUtil.h" |
| | #include "DrawViewPart.h" |
| |
|
| | using namespace TechDraw; |
| | using namespace std; |
| | using DU = DrawUtil; |
| |
|
| | TYPESYSTEM_SOURCE(TechDraw::CosmeticVertex, Base::Persistence) |
| |
|
| | CosmeticVertex::CosmeticVertex() : TechDraw::Vertex() |
| | { |
| | color = Preferences::vertexColor(); |
| | size = Preferences::vertexScale() * |
| | LineGroup::getDefaultWidth("Thin"); |
| |
|
| | hlrVisible = true; |
| | cosmetic = true; |
| | cosmeticTag = getTagAsString(); |
| | } |
| |
|
| | CosmeticVertex::CosmeticVertex(const TechDraw::CosmeticVertex* cv) : TechDraw::Vertex(cv), |
| | permaPoint(cv->permaPoint), |
| | linkGeom(cv->linkGeom), |
| | color(cv->color), |
| | size(cv->size), |
| | style(cv->style), |
| | visible(cv->visible) |
| | { |
| | |
| | hlrVisible = true; |
| | cosmetic = true; |
| | cosmeticTag = getTagAsString(); |
| | } |
| |
|
| | CosmeticVertex::CosmeticVertex(const Base::Vector3d& loc) : TechDraw::Vertex(loc), |
| | permaPoint(loc), |
| | color(Preferences::vertexColor()) |
| | { |
| | size = Preferences::vertexScale() * |
| | LineGroup::getDefaultWidth("Thick"); |
| |
|
| | hlrVisible = true; |
| | cosmetic = true; |
| | cosmeticTag = getTagAsString(); |
| | } |
| |
|
| | void CosmeticVertex::move(const Base::Vector3d& newPos) |
| | { |
| | point(newPos); |
| | } |
| |
|
| | void CosmeticVertex::moveRelative(const Base::Vector3d& movement) |
| | { |
| | point( point() += movement); |
| | } |
| |
|
| | std::string CosmeticVertex::toString() const |
| | { |
| | std::stringstream ss; |
| | ss << point().x << ", " << |
| | point().y << ", " << |
| | point().z << ", " << |
| | " / " << |
| | linkGeom << ", " << |
| | " / " << |
| | color.asHexString() << ", " << |
| | " / " << |
| | size << ", " << |
| | " / " << |
| | style << ", " << |
| | " / " << |
| | visible << " / " ; |
| | ss << getTagAsString(); |
| | return ss.str(); |
| | } |
| |
|
| | |
| | unsigned int CosmeticVertex::getMemSize () const |
| | { |
| | return 1; |
| | } |
| |
|
| | void CosmeticVertex::Save(Base::Writer &writer) const |
| | { |
| | TechDraw::Vertex::Save(writer); |
| | writer.Stream() << writer.ind() << "<PermaPoint " |
| | << "X=\"" << permaPoint.x << |
| | "\" Y=\"" << permaPoint.y << |
| | "\" Z=\"" << permaPoint.z << |
| | "\"/>" << '\n'; |
| | writer.Stream() << writer.ind() << "<LinkGeom value=\"" << linkGeom << "\"/>" << '\n'; |
| | writer.Stream() << writer.ind() << "<Color value=\"" << color.asHexString() << "\"/>" << '\n'; |
| | writer.Stream() << writer.ind() << "<Size value=\"" << size << "\"/>" << '\n'; |
| | writer.Stream() << writer.ind() << "<Style value=\"" << style << "\"/>" << '\n'; |
| | const char v = visible?'1':'0'; |
| | writer.Stream() << writer.ind() << "<Visible value=\"" << v << "\"/>" << '\n'; |
| |
|
| | |
| | Tag::Save(writer); |
| | } |
| |
|
| | void CosmeticVertex::Restore(Base::XMLReader &reader) |
| | { |
| | if (!CosmeticVertex::restoreCosmetic()) { |
| | return; |
| | } |
| | TechDraw::Vertex::Restore(reader); |
| |
|
| | |
| | if(strcmp(reader.localName(),"PermaPoint") != 0) { |
| | reader.readElement("PermaPoint"); |
| | } |
| | permaPoint.x = reader.getAttribute<double>("X"); |
| | permaPoint.y = reader.getAttribute<double>("Y"); |
| | permaPoint.z = reader.getAttribute<double>("Z"); |
| | reader.readElement("LinkGeom"); |
| | linkGeom = reader.getAttribute<int>("value"); |
| | reader.readElement("Color"); |
| | std::string temp = reader.getAttribute<const char*>("value"); |
| | color.fromHexString(temp); |
| | reader.readElement("Size"); |
| | size = reader.getAttribute<double>("value"); |
| | reader.readElement("Style"); |
| | style = reader.getAttribute<int>("value"); |
| | reader.readElement("Visible"); |
| | visible = reader.getAttribute<bool>("value"); |
| |
|
| | Tag::Restore(reader); |
| | } |
| |
|
| | Base::Vector3d CosmeticVertex::scaled(const double factor) const |
| | { |
| | return permaPoint * factor; |
| | } |
| |
|
| | |
| | Base::Vector3d CosmeticVertex::rotatedAndScaled(const double scale, const double rotDegrees) const |
| | { |
| | Base::Vector3d scaledPoint = scaled(scale); |
| | if (rotDegrees != 0.0) { |
| | |
| | |
| | scaledPoint = DU::invertY(scaledPoint); |
| | scaledPoint.RotateZ(rotDegrees * std::numbers::pi / DegreesHalfCircle); |
| | scaledPoint = DU::invertY(scaledPoint); |
| | } |
| | return scaledPoint; |
| | } |
| |
|
| | |
| | |
| | |
| | Base::Vector3d CosmeticVertex::makeCanonicalPoint(DrawViewPart* dvp, Base::Vector3d point, bool unscale) |
| | { |
| | double rotDeg = dvp->Rotation.getValue(); |
| |
|
| | Base::Vector3d result = point; |
| | if (rotDeg != 0.0) { |
| | |
| | double rotRad = rotDeg * std::numbers::pi / DegreesHalfCircle; |
| | |
| | result.RotateZ(-rotRad); |
| | } |
| |
|
| | if (unscale) { |
| | |
| | double scale = dvp->getScale(); |
| | return result / scale; |
| | } |
| |
|
| | |
| | return result; |
| | } |
| |
|
| | |
| | Base::Vector3d CosmeticVertex::makeCanonicalPointInverted(DrawViewPart* dvp, Base::Vector3d invertedPoint, bool unscale) |
| | { |
| | Base::Vector3d result = makeCanonicalPoint(dvp, |
| | DU::invertY(invertedPoint), |
| | unscale); |
| | return DU::invertY(result); |
| | } |
| |
|
| | CosmeticVertex* CosmeticVertex::copy() const |
| | { |
| | |
| | return new CosmeticVertex(this); |
| | } |
| |
|
| | CosmeticVertex* CosmeticVertex::clone() const |
| | { |
| | |
| | CosmeticVertex* cpy = this->copy(); |
| | cpy->setTag(this->getTag()); |
| | return cpy; |
| | } |
| |
|
| | PyObject* CosmeticVertex::getPyObject() |
| | { |
| | if (PythonObject.is(Py::_None())) { |
| | |
| | PythonObject = Py::Object(new CosmeticVertexPy(this), true); |
| | } |
| | return Py::new_reference_to(PythonObject); |
| | } |
| |
|
| | |
| | void CosmeticVertex::dump(const char* title) |
| | { |
| | Base::Console().message("CV::dump - %s \n", title); |
| | Base::Console().message("CV::dump - %s \n", toString().c_str()); |
| | } |
| |
|