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