[Measure] Add MeasureDistanceDetached
This commit is contained in:
@@ -97,6 +97,7 @@ PyMOD_INIT_FUNC(Measure)
|
||||
Measure::MeasurePython ::init();
|
||||
Measure::MeasureAngle ::init();
|
||||
Measure::MeasureDistance ::init();
|
||||
Measure::MeasureDistanceDetached::init();
|
||||
Measure::MeasurePosition ::init();
|
||||
Measure::MeasureLength ::init();
|
||||
Measure::MeasureArea ::init();
|
||||
@@ -111,6 +112,13 @@ PyMOD_INIT_FUNC(Measure)
|
||||
MeasureDistance::isPrioritizedSelection
|
||||
);
|
||||
|
||||
App::MeasureManager::addMeasureType("DISTANCEFREE",
|
||||
"Distance Free",
|
||||
"Measure::MeasureDistanceDetached",
|
||||
MeasureDistanceDetached::isValidSelection,
|
||||
nullptr
|
||||
);
|
||||
|
||||
App::MeasureManager::addMeasureType(
|
||||
"ANGLE",
|
||||
"Angle",
|
||||
|
||||
@@ -229,3 +229,65 @@ std::vector<App::DocumentObject*> MeasureDistance::getSubject() const
|
||||
return {Element1.getValue()};
|
||||
}
|
||||
|
||||
|
||||
|
||||
PROPERTY_SOURCE(Measure::MeasureDistanceDetached, Measure::MeasureBase)
|
||||
|
||||
MeasureDistanceDetached::MeasureDistanceDetached()
|
||||
{
|
||||
ADD_PROPERTY_TYPE(Distance,(0.0),"Measurement",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output),
|
||||
"Distance between the two elements");
|
||||
Distance.setUnit(Base::Unit::Length);
|
||||
|
||||
ADD_PROPERTY_TYPE(Position1,(Base::Vector3d(0.0,0.0,0.0)),"Measurement", App::Prop_None, "Position1");
|
||||
ADD_PROPERTY_TYPE(Position2,(Base::Vector3d(0.0,1.0,0.0)),"Measurement", App::Prop_None, "Position2");
|
||||
}
|
||||
|
||||
MeasureDistanceDetached::~MeasureDistanceDetached() = default;
|
||||
|
||||
|
||||
bool MeasureDistanceDetached::isValidSelection(const App::MeasureSelection& selection){
|
||||
return selection.size() == 2;
|
||||
}
|
||||
|
||||
void MeasureDistanceDetached::parseSelection(const App::MeasureSelection& selection) {
|
||||
auto sel1 = selection.at(0);
|
||||
auto sel2 = selection.at(1);
|
||||
|
||||
Position1.setValue(sel1.pickedPoint);
|
||||
Position2.setValue(sel2.pickedPoint);
|
||||
}
|
||||
|
||||
|
||||
App::DocumentObjectExecReturn *MeasureDistanceDetached::execute()
|
||||
{
|
||||
recalculateDistance();
|
||||
return DocumentObject::StdReturn;
|
||||
}
|
||||
|
||||
void MeasureDistanceDetached::recalculateDistance()
|
||||
{
|
||||
auto delta = Position1.getValue() - Position2.getValue();
|
||||
Distance.setValue(delta.Length());
|
||||
}
|
||||
|
||||
void MeasureDistanceDetached::onChanged(const App::Property* prop)
|
||||
{
|
||||
if (isRestoring() || isRemoving()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (prop == &Position1 || prop == &Position2) {
|
||||
recalculateDistance();
|
||||
}
|
||||
|
||||
MeasureBase::onChanged(prop);
|
||||
}
|
||||
|
||||
|
||||
std::vector<App::DocumentObject*> MeasureDistanceDetached::getSubject() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -81,6 +81,47 @@ private:
|
||||
void onChanged(const App::Property* prop) override;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class MeasureExport MeasureDistanceDetached : public Measure::MeasureBase
|
||||
{
|
||||
PROPERTY_HEADER_WITH_OVERRIDE(Measure::MeasureDistanceDetached);
|
||||
|
||||
public:
|
||||
/// Constructor
|
||||
MeasureDistanceDetached();
|
||||
~MeasureDistanceDetached() override;
|
||||
|
||||
App::PropertyDistance Distance;
|
||||
|
||||
App::PropertyVector Position1;
|
||||
App::PropertyVector Position2;
|
||||
|
||||
App::DocumentObjectExecReturn *execute() override;
|
||||
void recalculateDistance();
|
||||
|
||||
const char* getViewProviderName() const override {
|
||||
return "MeasureGui::ViewProviderMeasureDistance";
|
||||
}
|
||||
|
||||
static bool isValidSelection(const App::MeasureSelection& selection);
|
||||
void parseSelection(const App::MeasureSelection& selection) override;
|
||||
|
||||
std::vector<std::string> getInputProps() override {return {"Position1", "Position2"};}
|
||||
App::Property* getResultProp() override {return &this->Distance;}
|
||||
|
||||
// Return the object we are measuring
|
||||
std::vector<App::DocumentObject*> getSubject() const override;
|
||||
|
||||
|
||||
private:
|
||||
void onChanged(const App::Property* prop) override;
|
||||
|
||||
};
|
||||
|
||||
|
||||
} //namespace Measure
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user