| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| |
|
| | #ifndef PARTDESIGN_Hole_H
|
| | #define PARTDESIGN_Hole_H
|
| |
|
| | #include <optional>
|
| | #include <App/PropertyUnits.h>
|
| | #include "json_fwd.hpp"
|
| | #include "FeatureSketchBased.h"
|
| |
|
| | class Property;
|
| |
|
| | namespace Base
|
| | {
|
| | class XMLReader;
|
| | }
|
| |
|
| | namespace PartDesign
|
| | {
|
| |
|
| | static constexpr size_t ThreadClass_ISOmetric_data_size = 25;
|
| | static constexpr size_t ThreadRunout_size = 24;
|
| |
|
| | class PartDesignExport Hole: public ProfileBased
|
| | {
|
| | PROPERTY_HEADER_WITH_OVERRIDE(PartDesign::Hole);
|
| |
|
| | public:
|
| | Hole();
|
| |
|
| | App::PropertyBool Threaded;
|
| | App::PropertyBool ModelThread;
|
| | App::PropertyLength ThreadPitch;
|
| | App::PropertyEnumeration ThreadType;
|
| | App::PropertyEnumeration ThreadSize;
|
| | App::PropertyEnumeration ThreadClass;
|
| | App::PropertyEnumeration ThreadFit;
|
| | App::PropertyLength Diameter;
|
| | App::PropertyLength ThreadDiameter;
|
| | App::PropertyEnumeration ThreadDirection;
|
| | App::PropertyEnumeration HoleCutType;
|
| | App::PropertyBool HoleCutCustomValues;
|
| | App::PropertyLength HoleCutDiameter;
|
| | App::PropertyLength HoleCutDepth;
|
| | App::PropertyAngle HoleCutCountersinkAngle;
|
| | App::PropertyEnumeration DepthType;
|
| | App::PropertyLength Depth;
|
| | App::PropertyEnumeration ThreadDepthType;
|
| | App::PropertyLength ThreadDepth;
|
| | App::PropertyEnumeration DrillPoint;
|
| | App::PropertyAngle DrillPointAngle;
|
| | App::PropertyBool DrillForDepth;
|
| | App::PropertyBool Tapered;
|
| | App::PropertyAngle TaperedAngle;
|
| | App::PropertyBool UseCustomThreadClearance;
|
| | App::PropertyLength CustomThreadClearance;
|
| | App::PropertyInteger BaseProfileType;
|
| |
|
| | enum BaseProfileTypeOptions
|
| | {
|
| | OnPoints = 1 << 0,
|
| | OnCircles = 1 << 1,
|
| | OnArcs = 1 << 2,
|
| |
|
| |
|
| | OnPointsCirclesArcs = OnPoints | OnCircles | OnArcs,
|
| | OnCirclesArcs = OnCircles | OnArcs
|
| | };
|
| | static int baseProfileOption_idxToBitmask(int index);
|
| | static int baseProfileOption_bitmaskToIdx(int bitmask);
|
| |
|
| |
|
| |
|
| |
|
| | App::DocumentObjectExecReturn* execute() override;
|
| |
|
| |
|
| | const char* getViewProviderName() const override
|
| | {
|
| | return "PartDesignGui::ViewProviderHole";
|
| | }
|
| |
|
| | short mustExecute() const override;
|
| |
|
| | using ThreadDescription = struct
|
| | {
|
| | const char* designation;
|
| | double diameter;
|
| | double pitch;
|
| | double TapDrill;
|
| | };
|
| | static const std::vector<Hole::ThreadDescription> threadDescription[];
|
| |
|
| | static const double metricHoleDiameters[51][4];
|
| |
|
| | using UTSClearanceDefinition = struct
|
| | {
|
| | std::string designation;
|
| | double close;
|
| | double normal;
|
| | double loose;
|
| | };
|
| | static const UTSClearanceDefinition UTSHoleDiameters[23];
|
| |
|
| | void Restore(Base::XMLReader& reader) override;
|
| |
|
| | virtual void updateProps();
|
| | bool isDynamicCounterbore(const std::string& thread, const std::string& holeCutType);
|
| | bool isDynamicCountersink(const std::string& thread, const std::string& holeCutType);
|
| |
|
| | Base::Vector3d guessNormalDirection(const TopoShape& profileshape) const;
|
| | TopoShape findHoles(
|
| | std::vector<TopoShape>& holes,
|
| | const TopoShape& profileshape,
|
| | const TopoDS_Shape& protohole
|
| | ) const;
|
| |
|
| | protected:
|
| | void onChanged(const App::Property* prop) override;
|
| | void setupObject() override;
|
| |
|
| | static const App::PropertyAngle::Constraints floatAngle;
|
| |
|
| | private:
|
| | static const char* DepthTypeEnums[];
|
| | static const char* ThreadDepthTypeEnums[];
|
| | static const char* ThreadTypeEnums[];
|
| | static const char* ClearanceNoneEnums[];
|
| | static const char* ClearanceMetricEnums[];
|
| | static const char* ClearanceUTSEnums[];
|
| | static const char* ClearanceOtherEnums[];
|
| | static const char* DrillPointEnums[];
|
| | static const char* ThreadDirectionEnums[];
|
| |
|
| |
|
| | static const char* HoleCutType_None_Enums[];
|
| | static const char* ThreadClass_None_Enums[];
|
| |
|
| |
|
| | static std::vector<std::string> HoleCutType_ISOmetric_Enums;
|
| | static const char* ThreadClass_ISOmetric_Enums[];
|
| | static const double ThreadClass_ISOmetric_data[ThreadClass_ISOmetric_data_size][2];
|
| |
|
| |
|
| | static std::vector<std::string> HoleCutType_ISOmetricfine_Enums;
|
| | static const char* ThreadClass_ISOmetricfine_Enums[];
|
| |
|
| |
|
| | static const char* HoleCutType_UNC_Enums[];
|
| | static const char* ThreadClass_UNC_Enums[];
|
| |
|
| |
|
| | static const char* HoleCutType_UNF_Enums[];
|
| | static const char* ThreadClass_UNF_Enums[];
|
| |
|
| |
|
| | static const char* HoleCutType_UNEF_Enums[];
|
| | static const char* ThreadClass_UNEF_Enums[];
|
| |
|
| |
|
| | static const char* HoleCutType_NPT_Enums[];
|
| |
|
| |
|
| | static const char* HoleCutType_BSP_Enums[];
|
| |
|
| |
|
| | static const char* HoleCutType_BSW_Enums[];
|
| | static const char* ThreadClass_BSW_Enums[];
|
| |
|
| |
|
| | static const char* HoleCutType_BSF_Enums[];
|
| | static const char* ThreadClass_BSF_Enums[];
|
| |
|
| | static const double ThreadRunout[ThreadRunout_size][2];
|
| |
|
| |
|
| |
|
| |
|
| | struct CounterBoreDimension
|
| | {
|
| | std::string thread;
|
| | double diameter;
|
| | double depth;
|
| | static const CounterBoreDimension nothing;
|
| | };
|
| |
|
| | struct CounterSinkDimension
|
| | {
|
| | std::string thread;
|
| | double diameter;
|
| | static const CounterSinkDimension nothing;
|
| | };
|
| |
|
| |
|
| | class CutDimensionSet
|
| | {
|
| | public:
|
| | enum CutType
|
| | {
|
| | Counterbore,
|
| | Countersink
|
| | };
|
| | enum ThreadType
|
| | {
|
| | Metric,
|
| | MetricFine
|
| | };
|
| |
|
| | CutDimensionSet()
|
| | : cut_type(Counterbore)
|
| | , thread_type(Metric)
|
| | , angle(0.0)
|
| | {}
|
| | CutDimensionSet(
|
| | const std::string& nme,
|
| | std::vector<CounterBoreDimension>&& d,
|
| | CutType cut,
|
| | ThreadType thread,
|
| | double angle = 0.0
|
| | );
|
| | CutDimensionSet(
|
| | const std::string& nme,
|
| | std::vector<CounterSinkDimension>&& d,
|
| | CutType cut,
|
| | ThreadType thread,
|
| | double angle = 0.0
|
| | );
|
| |
|
| | const CounterBoreDimension& get_bore(const std::string& t) const;
|
| | const CounterSinkDimension& get_sink(const std::string& t) const;
|
| |
|
| | std::vector<CounterBoreDimension> bore_data;
|
| | std::vector<CounterSinkDimension> sink_data;
|
| | CutType cut_type;
|
| | ThreadType thread_type;
|
| | std::string name;
|
| | double angle;
|
| | };
|
| |
|
| | class CutDimensionKey
|
| | {
|
| | std::string thread_type;
|
| | std::string cut_name;
|
| |
|
| | public:
|
| | CutDimensionKey() = default;
|
| | CutDimensionKey(const std::string& t, const std::string& c);
|
| | bool operator<(const CutDimensionKey& b) const;
|
| | };
|
| |
|
| | std::map<CutDimensionKey, CutDimensionSet> HoleCutTypeMap;
|
| |
|
| | const CutDimensionSet& find_cutDimensionSet(const std::string& t, const std::string& c);
|
| |
|
| | const CutDimensionSet& find_cutDimensionSet(const CutDimensionKey& k);
|
| |
|
| | void addCutType(const CutDimensionSet& dimensions);
|
| | void updateHoleCutParams();
|
| | void calculateAndSetCounterbore();
|
| | void calculateAndSetCountersink();
|
| | std::optional<double> determineDiameter() const;
|
| | void updateDiameterParam();
|
| | void updateThreadDepthParam();
|
| | void readCutDefinitions();
|
| |
|
| | double getCountersinkAngle() const;
|
| | double getThreadClassClearance() const;
|
| | double getThreadRunout(int mode = 1) const;
|
| | double getThreadPitch() const;
|
| | double getThreadProfileAngle();
|
| | void findClosestDesignation();
|
| | void rotateToNormal(const gp_Dir& helixAxis, const gp_Dir& normalAxis, TopoDS_Shape& helixShape) const;
|
| | gp_Vec computePerpendicular(const gp_Vec&) const;
|
| | TopoDS_Shape makeThread(const gp_Vec&, const gp_Vec&, double);
|
| |
|
| |
|
| | friend void from_json(const nlohmann::json& j, CounterBoreDimension& t);
|
| | friend void from_json(const nlohmann::json& j, CounterSinkDimension& t);
|
| | friend void from_json(const nlohmann::json& j, CutDimensionSet& t);
|
| | };
|
| |
|
| | }
|
| |
|
| |
|
| | #endif
|
| |
|