| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #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 |
| |
|