Files
create/src/Mod/Measure/Gui/ViewProviderMeasureDistance.h
2024-07-01 08:25:03 -05:00

113 lines
3.8 KiB
C++

/***************************************************************************
* Copyright (c) 2023 David Friedli <david[at]friedli-be.ch> *
* Copyright (c) 2013 Thomas Anderson <blobfish[at]gmx.com> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
#ifndef MEASUREGUI_VIEWPROVIDERMEASUREDISTANCE_H
#define MEASUREGUI_VIEWPROVIDERMEASUREDISTANCE_H
#include <QObject>
#include <Mod/Measure/MeasureGlobal.h>
#include "ViewProviderMeasureBase.h"
#include <Inventor/engines/SoSubEngine.h>
#include <Inventor/engines/SoEngine.h>
#include <Inventor/fields/SoSFBool.h>
#include <Inventor/fields/SoSFColor.h>
#include <Inventor/fields/SoSFFloat.h>
#include <Inventor/fields/SoSFMatrix.h>
#include <Inventor/fields/SoSFRotation.h>
#include <Inventor/fields/SoSFString.h>
#include <Inventor/fields/SoSFVec3f.h>
#include <Inventor/nodekits/SoSeparatorKit.h>
class SoCoordinate3;
class SoIndexedLineSet;
namespace MeasureGui
{
class DimensionLinear: public SoSeparatorKit
{
SO_KIT_HEADER(DimensionLinear);
SO_KIT_CATALOG_ENTRY_HEADER(transformation);
SO_KIT_CATALOG_ENTRY_HEADER(annotate);
SO_KIT_CATALOG_ENTRY_HEADER(leftArrow);
SO_KIT_CATALOG_ENTRY_HEADER(rightArrow);
SO_KIT_CATALOG_ENTRY_HEADER(line);
SO_KIT_CATALOG_ENTRY_HEADER(textSep);
public:
DimensionLinear();
static void initClass();
SbBool affectsState() const override;
void setupDimension();
SoSFVec3f point1;
SoSFVec3f point2;
SoSFString text;
SoSFColor dColor;
SoSFBool showArrows;
SoSFFloat fontSize;
protected:
SoSFRotation rotate;
SoSFFloat length;
SoSFVec3f origin;
private:
~DimensionLinear() override;
};
class MeasureGuiExport ViewProviderMeasureDistance : public MeasureGui::ViewProviderMeasureBase
{
PROPERTY_HEADER_WITH_OVERRIDE(MeasureGui::ViewProviderMeasureDistance);
public:
/// Constructor
ViewProviderMeasureDistance();
~ViewProviderMeasureDistance() override;
void redrawAnnotation() override;
void positionAnno(const Measure::MeasureBase* measureObject) override;
protected:
Base::Vector3d getTextDirection(Base::Vector3d elementDirection, double tolerance = defaultTolerance) override;
private:
SoCoordinate3 * pCoords;
SoIndexedLineSet * pLines;
SoSFFloat fieldDistance;
SbMatrix getMatrix();
};
} //namespace MeasureGui
#endif // MEASUREGUI_VIEWPROVIDERMEASUREDISTANCE_H