| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef DATUMS_H |
| #define DATUMS_H |
|
|
| #include "GeoFeature.h" |
| #include "GeoFeatureGroupExtension.h" |
| #include "QCoreApplication" |
|
|
| namespace Base |
| { |
| class Rotation; |
| } |
|
|
| namespace App |
| { |
| class LocalCoordinateSystem; |
|
|
| class AppExport DatumElement: public App::GeoFeature |
| { |
| PROPERTY_HEADER_WITH_OVERRIDE(App::DatumElement); |
|
|
| public: |
| |
| PropertyString Role; |
|
|
| |
| DatumElement(bool hideRole = true); |
| ~DatumElement() override; |
|
|
| |
| App::LocalCoordinateSystem* getLCS() const; |
| Base::Vector3d getBasePoint() const; |
| Base::Vector3d getDirection() const; |
| Base::Vector3d getBaseDirection() const; |
|
|
| bool getCameraAlignmentDirection(Base::Vector3d& directionZ, Base::Vector3d& directionX, const char* subname) const override; |
|
|
| |
| bool isOriginFeature() const; |
|
|
| protected: |
| void setBaseDirection(const Base::Vector3d& dir); |
|
|
| private: |
| Base::Vector3d baseDir; |
| }; |
|
|
| class AppExport Plane: public App::DatumElement |
| { |
| PROPERTY_HEADER_WITH_OVERRIDE(App::DatumElement); |
|
|
| public: |
| const char* getViewProviderName() const override |
| { |
| return "Gui::ViewProviderPlane"; |
| } |
| }; |
|
|
| class AppExport Line: public App::DatumElement |
| { |
| PROPERTY_HEADER_WITH_OVERRIDE(App::DatumElement); |
|
|
| public: |
| Line(); |
| const char* getViewProviderName() const override |
| { |
| return "Gui::ViewProviderLine"; |
| } |
| }; |
|
|
| class AppExport Point: public App::DatumElement |
| { |
| PROPERTY_HEADER_WITH_OVERRIDE(App::DatumElement); |
|
|
| public: |
| Point(); |
| const char* getViewProviderName() const override |
| { |
| return "Gui::ViewProviderPoint"; |
| } |
| }; |
|
|
| class AppExport LocalCoordinateSystem: public App::GeoFeature, public App::GeoFeatureGroupExtension |
| { |
| PROPERTY_HEADER_WITH_EXTENSIONS(App::LocalCoordinateSystem); |
| Q_DECLARE_TR_FUNCTIONS(App::LocalCoordinateSystem) |
|
|
| public: |
| |
| LocalCoordinateSystem(); |
| ~LocalCoordinateSystem() override; |
|
|
| |
| const char* getViewProviderName() const override |
| { |
| return "Gui::ViewProviderCoordinateSystem"; |
| } |
|
|
| bool getCameraAlignmentDirection(Base::Vector3d& directionZ, Base::Vector3d& directionX, const char* subname) const override; |
|
|
| |
| |
| |
| |
| |
| |
| App::Point* getOrigin() const |
| { |
| return getPoint(PointRoles[0]); |
| } |
|
|
| |
| App::Line* getX() const |
| { |
| return getAxis(AxisRoles[0]); |
| } |
| |
| App::Line* getY() const |
| { |
| return getAxis(AxisRoles[1]); |
| } |
| |
| App::Line* getZ() const |
| { |
| return getAxis(AxisRoles[2]); |
| } |
|
|
| |
| App::Plane* getXY() const |
| { |
| return getPlane(PlaneRoles[0]); |
| } |
| |
| App::Plane* getXZ() const |
| { |
| return getPlane(PlaneRoles[1]); |
| } |
| |
| App::Plane* getYZ() const |
| { |
| return getPlane(PlaneRoles[2]); |
| } |
|
|
| |
| std::vector<App::Line*> axes() const |
| { |
| return {getX(), getY(), getZ()}; |
| } |
|
|
| |
| std::vector<App::Plane*> planes() const |
| { |
| return {getXY(), getXZ(), getYZ()}; |
| } |
|
|
| |
| std::vector<App::DatumElement*> baseObjects() const |
| { |
| return {getX(), getY(), getZ(), getXY(), getXZ(), getYZ(), getOrigin()}; |
| } |
|
|
| |
| App::DatumElement* getDatumElement(const char* role) const; |
|
|
| |
| App::Line* getAxis(const char* role) const; |
|
|
| |
| App::Plane* getPlane(const char* role) const; |
|
|
| |
| App::Point* getPoint(const char* role) const; |
| |
|
|
| |
| short mustExecute() const override; |
|
|
| |
| static constexpr const char* AxisRoles[3] = {"X_Axis", "Y_Axis", "Z_Axis"}; |
| |
| static constexpr const char* PlaneRoles[3] = {"XY_Plane", "XZ_Plane", "YZ_Plane"}; |
| |
| static constexpr const char* PointRoles[1] = {"Origin"}; |
|
|
| virtual bool isOrigin() const |
| { |
| return false; |
| } |
|
|
| |
| PropertyLinkList OriginFeatures; |
|
|
| |
| bool extensionGetSubObject(DocumentObject*& ret, |
| const char* subname, |
| PyObject**, |
| Base::Matrix4D*, |
| bool, |
| int) const override; |
|
|
| |
| bool hasObject(const DocumentObject* obj, bool recursive = false) const override; |
|
|
| protected: |
| |
| App::DocumentObjectExecReturn* execute() override; |
| |
| void setupObject() override; |
| |
| void unsetupObject() override; |
| void onDocumentRestored() override; |
|
|
| private: |
| struct SetupData; |
| void setupDatumElement(App::PropertyLink& featProp, const SetupData& data); |
|
|
| struct SetupData |
| { |
| Base::Type type; |
| const char* role = nullptr; |
| QString label; |
| Base::Rotation rot; |
| }; |
| static const std::vector<SetupData>& getSetupData(); |
|
|
| DatumElement* createDatum(const SetupData& data); |
| SetupData getData(const char* role); |
|
|
| void migrateOriginPoint(); |
| }; |
|
|
| } |
|
|
| #endif |
|
|