DrawSketchHandlerEllipse Class Reference

This class handles user interaction to draw and save the ellipse. More...

Public Types

enum  ConstructionMethod { CENTER_PERIAPSIS_B, PERIAPSIS_APOAPSIS_B }
 Construction methods, describes the method used to construct the ellipse. More...
 
enum  SelectMode {
  STATUS_SEEK_PERIAPSIS, STATUS_SEEK_APOAPSIS, STATUS_SEEK_CENTROID, STATUS_SEEK_A,
  STATUS_SEEK_B, STATUS_Close
}
 Mode table, describes what step of the process we are in. More...
 

Public Member Functions

virtual void activated (ViewProviderSketch *)
 Slot called when the create ellipse command is activated. More...
 
 DrawSketchHandlerEllipse (int constructionMethod)
 
virtual void mouseMove (Base::Vector2d onSketchPos)
 Updates the ellipse when the cursor moves. More...
 
virtual bool pressButton (Base::Vector2d onSketchPos)
 Changes drawing mode on user-click. More...
 
virtual bool releaseButton (Base::Vector2d onSketchPos)
 Calls saveEllipse() after last user input. More...
 
virtual ~DrawSketchHandlerEllipse ()
 
- Public Member Functions inherited from SketcherGui::DrawSketchHandler
void createAutoConstraints (const std::vector< AutoConstraint > &autoConstrs, int geoId, Sketcher::PointPos pointPos=Sketcher::none, bool createowncommand=true)
 
virtual void deactivated (ViewProviderSketch *)
 
 DrawSketchHandler ()
 
int getHighestCurveIndex (void)
 
int getHighestVertexIndex (void)
 
virtual bool onSelectionChanged (const Gui::SelectionChanges &)
 
virtual void quit (void)
 
virtual void registerPressedKey (bool, int)
 
void renderSuggestConstraintsCursor (std::vector< AutoConstraint > &suggestedConstraints)
 
void resetPositionText (void)
 
int seekAutoConstraint (std::vector< AutoConstraint > &suggestedConstraints, const Base::Vector2d &Pos, const Base::Vector2d &Dir, AutoConstraint::TargetType type=AutoConstraint::VERTEX)
 
void setPositionText (const Base::Vector2d &Pos)
 
void setPositionText (const Base::Vector2d &Pos, const SbString &text)
 
virtual ~DrawSketchHandler ()
 

Protected Attributes

std::vector< AutoConstraintsugConstr1
 
std::vector< AutoConstraintsugConstr2
 
std::vector< AutoConstraintsugConstr3
 
- Protected Attributes inherited from SketcherGui::DrawSketchHandler
QCursor actCursor
 
QCursor oldCursor
 
ViewProviderSketchsketchgui
 

Additional Inherited Members

- Protected Member Functions inherited from SketcherGui::DrawSketchHandler
void applyCursor (QCursor &newCursor)
 
void applyCursor (void)
 
void setCrosshairColor ()
 
void setCursor (const QPixmap &p, int x, int y)
 
void unsetCursor (void)
 

Detailed Description

This class handles user interaction to draw and save the ellipse.

Two construction methods are implemented: -Periapsis, apoapsis, and b; and -Center, periapsis, and b.

The first method limits the ellipse to a circle, while the second method allows for swapping of the semi-major and semi-minor axes.

We use three reference frames in this class. The first (and primary), is the cartesian frame of the sketcher; all our work begins and ends in this frame. The second is the perifocal frame of the ellipse using polar coordinates. We use this frame for naming conventions and working with the ellipse. The last is a rotated right-handed cartesian frame centered at the ellipse center with the +X direction towards periapsis, +Z out of screen.

When working with an ellipse in the perifocal frame, the following equations are useful:

\begin{eqnarray*} r &\equiv& \textrm{ radial distance from the focus to a point on the ellipse}\\ r_a &\equiv& \textrm{ radial distance from the focus to apopasis}\\ r_p &\equiv& \textrm{ radial distance from the focus to periapsis}\\ a &\equiv& \textrm{ length of the semi-major axis, colloquially 'radius'}\\ b &\equiv& \textrm{ length of the semi-minor axis, colloquially 'radius'}\\ e &\equiv& \textrm{ eccentricity of the ellipse}\\ \theta_b &\equiv& \textrm{ angle to the intersection of the semi-minor axis and the ellipse, relative to the focus}\\ ae &\equiv& \textrm{ distance from the focus to the centroid}\\ r &=& \frac{a(1-e^2)}{1+e\cos(\theta)} = \frac{r_a(1-e)}{1+e\cos(\theta)} = \frac{r_p(1+e)}{1+e\cos(\theta)}\\ r_a &=& a(1-e)\\ r_p &=& a(1+e)\\ a &=& \frac{r_p+r_a}{2}\\ b &=& a\sqrt{1-e^2}\\ e &=& \frac{r_a-r_p}{r_a+r_p} = \sqrt{1-\frac{b^2}{a^2}}\\ \theta_b &=& \left[\pi - \arctan\left(\frac{b}{ae}\right)\right] \pm N\pi \end{eqnarray*}

Member Enumeration Documentation

◆ ConstructionMethod

Construction methods, describes the method used to construct the ellipse.

Enumerator
CENTER_PERIAPSIS_B 

enum value, click on center, then periapsis, then b point.

PERIAPSIS_APOAPSIS_B 

enum value, click on periapsis, then apoapsis, then b point.

◆ SelectMode

Mode table, describes what step of the process we are in.

Enumerator
STATUS_SEEK_PERIAPSIS 

enum value, looking for click to set periapsis.

STATUS_SEEK_APOAPSIS 

enum value, looking for click to set apoapsis.

STATUS_SEEK_CENTROID 

enum value, looking for click to set centroid.

STATUS_SEEK_A 

enum value, looking for click to set a.

STATUS_SEEK_B 

enum value, looking for click to set b.

STATUS_Close 

enum value, finalizing and saving ellipse.

Constructor & Destructor Documentation

◆ DrawSketchHandlerEllipse()

DrawSketchHandlerEllipse::DrawSketchHandlerEllipse ( int  constructionMethod)

◆ ~DrawSketchHandlerEllipse()

virtual DrawSketchHandlerEllipse::~DrawSketchHandlerEllipse ( )
virtual

Member Function Documentation

◆ activated()

virtual void DrawSketchHandlerEllipse::activated ( ViewProviderSketch )
virtual

Slot called when the create ellipse command is activated.

Parameters
sketchguiA pointer to the active sketch

Reimplemented from SketcherGui::DrawSketchHandler.

References CENTER_PERIAPSIS_B, PERIAPSIS_APOAPSIS_B, SketcherGui::DrawSketchHandler::setCrosshairColor(), SketcherGui::DrawSketchHandler::setCursor(), STATUS_SEEK_CENTROID, and STATUS_SEEK_PERIAPSIS.

◆ mouseMove()

◆ pressButton()

virtual bool DrawSketchHandlerEllipse::pressButton ( Base::Vector2d  onSketchPos)
virtual

Changes drawing mode on user-click.

Parameters
onSketchPosthe position of the cursor on the sketch
Returns

Implements SketcherGui::DrawSketchHandler.

References PERIAPSIS_APOAPSIS_B, STATUS_Close, STATUS_SEEK_APOAPSIS, STATUS_SEEK_B, STATUS_SEEK_CENTROID, and STATUS_SEEK_PERIAPSIS.

◆ releaseButton()

virtual bool DrawSketchHandlerEllipse::releaseButton ( Base::Vector2d  onSketchPos)
virtual

Calls saveEllipse() after last user input.

Parameters
onSketchPosthe position of the cursor on the sketch
Returns

Implements SketcherGui::DrawSketchHandler.

References CENTER_PERIAPSIS_B, App::GetApplication(), ParameterGrp::GetBool(), App::Application::GetParameterGroupByPath(), PERIAPSIS_APOAPSIS_B, STATUS_Close, STATUS_SEEK_CENTROID, and STATUS_SEEK_PERIAPSIS.

Member Data Documentation

◆ sugConstr1

std::vector<AutoConstraint> DrawSketchHandlerEllipse::sugConstr1
protected

Referenced by mouseMove().

◆ sugConstr2

std::vector<AutoConstraint> DrawSketchHandlerEllipse::sugConstr2
protected

Referenced by mouseMove().

◆ sugConstr3

std::vector<AutoConstraint> DrawSketchHandlerEllipse::sugConstr3
protected

Referenced by mouseMove().


The documentation for this class was generated from the following file:
  • src/Mod/Sketcher/Gui/CommandCreateGeo.cpp