File indexing completed on 2024-05-05 03:51:46
0001 /*. 0002 SPDX-FileCopyrightText: 2007 Vladimir Kuznetsov <ks.vladimir@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef STEP_JOINTGRAPHICS_H 0008 #define STEP_JOINTGRAPHICS_H 0009 0010 #include "worldgraphics.h" 0011 #include "stepgraphicsitem.h" 0012 #include <stepcore/joints.h> 0013 0014 class AnchorCreator: public AttachableItemCreator 0015 { 0016 public: 0017 AnchorCreator(const QString& className, WorldModel* worldModel, WorldScene* worldScene) 0018 : AttachableItemCreator(className, worldModel, worldScene, WorldScene::SnapRigidBody | 0019 WorldScene::SnapParticle | WorldScene::SnapOnCenter | 0020 WorldScene::SnapSetPosition | WorldScene::SnapSetAngle, nullptr) {} 0021 }; 0022 0023 class AnchorGraphicsItem : public StepGraphicsItem 0024 { 0025 public: 0026 AnchorGraphicsItem(StepCore::Item* item, WorldModel* worldModel); 0027 0028 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; 0029 QPainterPath shape() const override; 0030 0031 void viewScaleChanged() override; 0032 void worldDataChanged(bool dynamicOnly) override; 0033 0034 protected: 0035 void mouseSetPos(const QPointF& pos, const QPointF&, MovingState movingState) override; 0036 StepCore::Anchor* anchor() const; 0037 }; 0038 0039 ///////////////////////////////////////////////////////////////////////////////////////// 0040 0041 class PinCreator: public AttachableItemCreator 0042 { 0043 public: 0044 PinCreator(const QString& className, WorldModel* worldModel, WorldScene* worldScene) 0045 : AttachableItemCreator(className, worldModel, worldScene, WorldScene::SnapRigidBody | 0046 WorldScene::SnapSetPosition | WorldScene::SnapSetLocalPosition, nullptr) {} 0047 }; 0048 0049 class PinGraphicsItem: public StepGraphicsItem 0050 { 0051 public: 0052 PinGraphicsItem(StepCore::Item* item, WorldModel* worldModel); 0053 0054 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; 0055 QPainterPath shape() const override; 0056 0057 void viewScaleChanged() override; 0058 void worldDataChanged(bool dynamicOnly) override; 0059 0060 protected: 0061 void mouseSetPos(const QPointF& pos, const QPointF&, MovingState movingState) override; 0062 StepCore::Pin* pin() const; 0063 }; 0064 0065 ///////////////////////////////////////////////////////////////////////////////////////// 0066 0067 class StickCreator: public AttachableItemCreator 0068 { 0069 public: 0070 StickCreator(const QString& className, WorldModel* worldModel, WorldScene* worldScene) 0071 : AttachableItemCreator(className, worldModel, worldScene, 0072 WorldScene::SnapRigidBody | WorldScene::SnapParticle | 0073 WorldScene::SnapSetLocalPosition, nullptr, true) {} 0074 }; 0075 0076 class StickHandlerGraphicsItem: public StepGraphicsItem 0077 { 0078 public: 0079 StickHandlerGraphicsItem(StepCore::Item* item, WorldModel* worldModel, 0080 QGraphicsItem* parent, int num); 0081 void viewScaleChanged() override; 0082 void worldDataChanged(bool) override; 0083 0084 protected: 0085 void mouseSetPos(const QPointF& pos, const QPointF& diff, MovingState movingState) override; 0086 int _num; 0087 }; 0088 0089 class StickGraphicsItem: public StepGraphicsItem 0090 { 0091 public: 0092 StickGraphicsItem(StepCore::Item* item, WorldModel* worldModel); 0093 0094 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; 0095 QPainterPath shape() const override; 0096 0097 void viewScaleChanged() override; 0098 void stateChanged() override; 0099 void worldDataChanged(bool dynamicOnly) override; 0100 0101 protected: 0102 void mouseSetPos(const QPointF& pos, const QPointF& diff, MovingState) override; 0103 0104 StepCore::Stick* stick() const { return static_cast<StepCore::Stick*>(_item); } 0105 0106 QPainterPath _painterPath; 0107 double _rnorm; 0108 double _radius; 0109 0110 StickHandlerGraphicsItem* _handler1; 0111 StickHandlerGraphicsItem* _handler2; 0112 0113 static const int RADIUS = 1; 0114 }; 0115 0116 #endif 0117