Ivan Mahonin d9135c
#pragma once
Ivan Mahonin d9135c
Ivan Mahonin d9135c
#ifndef ASSISTANTELLIPSE_INCLUDED
Ivan Mahonin d9135c
#define ASSISTANTELLIPSE_INCLUDED
Ivan Mahonin d9135c
Ivan Mahonin d9135c
Ivan Mahonin d9135c
// TnzTools includes
Ivan Mahonin d9135c
#include <tools/assistant.h>
Ivan Mahonin d9135c
#include <tools/assistants/guidelineline.h>
Ivan Mahonin d9135c
#include <tools/assistants/guidelineellipse.h>
Ivan Mahonin d9135c
Ivan Mahonin d9135c
// TnzCore includes
Ivan Mahonin d9135c
#include <tgl.h>
Ivan Mahonin d9135c
Ivan Mahonin d9135c
// std includes
Ivan Mahonin d9135c
#include <limits>
Ivan Mahonin d9135c
Ivan Mahonin d9135c
Ivan Mahonin d9135c
//*****************************************************************************************
Ivan Mahonin d9135c
//    TAssistantEllipse definition
Ivan Mahonin d9135c
//*****************************************************************************************
Ivan Mahonin d9135c
Ivan Mahonin d9135c
class TAssistantEllipse final : public TAssistant {
Ivan Mahonin d9135c
  Q_DECLARE_TR_FUNCTIONS(TAssistantEllipse)
Ivan Mahonin d9135c
public:
Ivan Mahonin d9135c
  const TStringId m_idCircle;
Ivan Mahonin d9135c
  const TStringId m_idRestrictA;
Ivan Mahonin d9135c
  const TStringId m_idRestrictB;
Ivan Mahonin d9135c
  const TStringId m_idRepeat;
Ivan Mahonin d9135c
  const TStringId m_idGrid;
Ivan Mahonin d9135c
  const TStringId m_idPerspective;
Ivan Mahonin d9135c
  const TStringId m_idPerspectiveDepth;
Ivan Mahonin d9135c
Ivan Mahonin d9135c
protected:
Ivan Mahonin d9135c
  TAssistantPoint &m_center;
Ivan Mahonin d9135c
  TAssistantPoint &m_a;
Ivan Mahonin d9135c
  TAssistantPoint &m_b;
Ivan Mahonin d9135c
  TAssistantPoint &m_grid0;
Ivan Mahonin d9135c
  TAssistantPoint &m_grid1;
Ivan Mahonin d9135c
Ivan Mahonin d9135c
public:
Ivan Mahonin d9135c
  TAssistantEllipse(TMetaObject &object);
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  static QString getLocalName();
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  void updateTranslation() const override;
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  inline bool getCircle() const
Ivan Mahonin d9135c
    { return data()[m_idCircle].getBool(); }
Ivan Mahonin d9135c
  inline bool getRestrictA() const
Ivan Mahonin d9135c
    { return data()[m_idRestrictA].getBool(); }
Ivan Mahonin d9135c
  inline bool getRestrictB() const
Ivan Mahonin d9135c
    { return data()[m_idRestrictB].getBool(); }
Ivan Mahonin d9135c
  inline bool getRepeat() const
Ivan Mahonin d9135c
    { return data()[m_idRepeat].getBool(); }
Ivan Mahonin d9135c
  inline bool getGrid() const
Ivan Mahonin d9135c
    { return data()[m_idGrid].getBool(); }
Ivan Mahonin d9135c
  inline bool getPerspective() const
Ivan Mahonin d9135c
    { return data()[m_idPerspective].getBool(); }
Ivan Mahonin d9135c
  inline bool getPerspectiveDepth() const
Ivan Mahonin d9135c
    { return data()[m_idPerspectiveDepth].getBool(); }
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  void onDataChanged(const TVariant &value) override;
Ivan Mahonin d9135c
Ivan Mahonin d9135c
private:
Ivan Mahonin d9135c
  void fixBAndGrid(
Ivan Mahonin d9135c
    TPointD prevCenter,
Ivan Mahonin d9135c
    TPointD prevA,
Ivan Mahonin d9135c
    TPointD prevB );
Ivan Mahonin d9135c
Ivan Mahonin d9135c
public:
Ivan Mahonin d9135c
  void onMovePoint(TAssistantPoint &point, const TPointD &position) override;
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  TAffine calcEllipseMatrix() const;
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  void getGuidelines(
Ivan Mahonin d9135c
    const TPointD &position,
Ivan Mahonin d9135c
    const TAffine &toTool,
Ivan Mahonin d9135c
    TGuidelineList &outGuidelines ) const override;
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  static void drawEllipseRanges(
Ivan Mahonin d9135c
    const TAngleRangeSet &ranges,
Ivan Mahonin d9135c
    const TAffine &ellipseMatrix,
Ivan Mahonin d9135c
    const TAffine &screenMatrixInv,
Ivan Mahonin d9135c
    double pixelSize,
Ivan Mahonin d9135c
    double alpha );
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  static inline void drawEllipse(
Ivan Mahonin d9135c
    const TAffine &ellipseMatrix,
Ivan Mahonin d9135c
    const TAffine &screenMatrixInv,
Ivan Mahonin d9135c
    double pixelSize,
Ivan Mahonin d9135c
    double alpha )
Ivan Mahonin d9135c
      { drawEllipseRanges(TAngleRangeSet(true), ellipseMatrix, screenMatrixInv, pixelSize, alpha); }
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  static void drawRuler(
Ivan Mahonin d9135c
    const TAffine &ellipseMatrix,
Ivan Mahonin d9135c
    const TPointD &grid0,
Ivan Mahonin d9135c
    const TPointD &grid1,
Ivan Mahonin d9135c
    bool perspective,
Ivan Mahonin d9135c
    double alpha );
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  static void drawConcentricGrid(
Ivan Mahonin d9135c
    const TAffine &ellipseMatrix,
Ivan Mahonin d9135c
    const TPointD &grid0,
Ivan Mahonin d9135c
    const TPointD &grid1,
Ivan Mahonin d9135c
    bool perspective,
Ivan Mahonin d9135c
    double alpha );
Ivan Mahonin d9135c
Ivan Mahonin d9135c
  static void drawParallelGrid(
Ivan Mahonin d9135c
    const TAffine &ellipseMatrix,
Ivan Mahonin d9135c
    const TPointD &grid0,
Ivan Mahonin d9135c
    const TPointD &grid1,
Ivan Mahonin d9135c
    const TPointD *bound0,
Ivan Mahonin d9135c
    const TPointD *bound1,
Ivan Mahonin d9135c
    bool perspective,
Ivan Mahonin d9135c
    bool perspectiveDepth,
Ivan Mahonin d9135c
    bool repeat,
Ivan Mahonin d9135c
    double alpha );
Ivan Mahonin d9135c
Ivan Mahonin d9135c
private:
Ivan Mahonin d9135c
  void draw(
Ivan Mahonin d9135c
    const TAffine &ellipseMatrix,
Ivan Mahonin d9135c
    const TAffine &screenMatrixInv,
Ivan Mahonin d9135c
    double ox,
Ivan Mahonin d9135c
    double pixelSize,
Ivan Mahonin d9135c
    bool enabled ) const;
Ivan Mahonin d9135c
Ivan Mahonin d9135c
public:
Ivan Mahonin d9135c
  void draw(TToolViewer *viewer, bool enabled) const override;
Ivan Mahonin d9135c
};
Ivan Mahonin d9135c
Ivan Mahonin d9135c
Ivan Mahonin d9135c
#endif