VR-Forces 4.0.4 Class Documentation
include/symbology/symbol.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2002 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: symbol.h,v $ $Revision: 1.90 $ $State: Exp $
00007 *******************************************************************************/
00008 
00011 
00012 #ifndef DtSymbol_H_
00013 #define DtSymbol_H_
00014 
00015 #include "symbolDrawerInterface/nullDrawer.h"
00016 #include "symbology/showHideContext.h"
00017 #include "drawerNative/displayPoint.h"
00018 
00019 #include <QtCore/QSize>
00020 #include <QtCore/QRect>
00021 #include <QtCore/QObject>
00022 #include <QtCore/QSize>
00023 #include <QtCore/QString>
00024 #include <QtCore/QList>
00025 #include <QtCore/QVector>
00026 #include <QtGui/QColor>
00027 #include <QtGui/QPolygon>
00028 
00029 #include <symbolDrawerInterface/symbolDrawer.h>
00030 
00031 class DtPaintDevice;
00032 
00033 class DtSymbol;
00034 class DtStaticAnimData;
00035 class QImage;
00036 class QPixmap;
00037 class DtSymbolDisplayOptions;
00038 
00039 class QTimer;
00040 
00041 enum DtSymbolGeometry{
00042       DtSymbol_Point = 0, 
00043       DtSymbol_Line, 
00044       DtSymbol_Area,
00045       DtSymbol_Composite
00046 };
00047 
00050 typedef DtSymbol* (*DtSymbolCreatorFcn)(DtSymbolDrawer& drawer);
00051 
00054 #include "symbology/symbologyDefines.h"
00055 class DT_DLL_symbology DtSymbol : public QObject
00056 {
00057    Q_OBJECT
00058 
00059 public:
00060 
00063    typedef enum
00064    {
00065       DtSymbol_BoundingSphere = 0,   
00066       DtSymbol_BoundingBox    = 1,   
00067       DtSymbol_SpherePieces   = 2,   
00068       DtSymbol_BoxPieces      = 3,   
00069       DtSymbol_Exact          = 4    
00070    } DtSymbol_OverlapTest;
00071 
00072    typedef enum
00073    {
00074       DtSymbol_DrawAsEntered  = 0,
00075       DtSymbol_DrawFirst      = 1,   
00076       DtSymbol_DrawLast       = 2,   
00077    } DtSymbol_DrawOrder;
00078 
00079    typedef enum
00080    {
00081       DtSymbol_Always = 0,          
00082       DtSymbol_Never = 1,           
00083       DtSymbol_OnlyIfCloned = 2     
00084    } DtSymbolCompositeDrawOptions;
00085 
00086 public:
00087 
00089    virtual ~DtSymbol();
00090 
00092    DtSymbol(const DtSymbol& orig);
00093 
00097    DtSymbol& operator=(const DtSymbol& orig);
00098  
00100    DtSymbol( DtSymbolDrawer & drawer );
00101 
00106    virtual void copyDataFrom(const DtSymbol* symbol);
00107 
00110    virtual DtSymbol* clone() const;
00111 
00113    virtual void setName(const QString& name);
00114    virtual const QString& name()const;
00115 
00118    virtual void setHighlight(const bool highlight);
00119    virtual bool highlight() const;
00120    virtual bool selected() const;
00121 
00124    virtual const DtDisplayPoint centerPoint() const;
00125 
00128    virtual const DtDisplayPoint topLeftPoint() const;
00129 
00134    virtual bool setLocationData(const QPolygon*);
00135 
00139    virtual const QPolygon* getLocationData() const;
00140 
00141 
00146    virtual void setOrigin(const QPoint & center);
00147 
00149    virtual void setOrigin( int x, int y );
00150 
00154    virtual const QPoint origin() const;
00155 
00157    virtual void shift(QPoint p);
00158 
00159    virtual void draw(QPainter& paint) const;
00160    virtual void drawHidden(QPainter& paint) const;
00161    virtual const DtSymbolDrawer& drawer() const;
00162 
00164    virtual QSize bbox() const;
00165    virtual QRect brect() const;
00166 
00169    virtual QRect selBbox() const;
00170 
00176    virtual void clearOffsetToParent();
00177    virtual void setOffsetToParent(const QPoint& offsetToParent);
00179    virtual const QPoint* offsetToParent() const;
00180 
00181 
00187    virtual bool show(DtShowHideContext module);
00188    virtual bool hide(DtShowHideContext module);
00189 
00192    virtual void show();
00193 
00195    virtual void hide();
00196 
00199    virtual void addIgnoreContext(DtShowHideContext);
00200    virtual void removeIgnoreContext(DtShowHideContext);
00201    const QVector<DtShowHideContext>& ignoreContexts() const;
00202 
00206    virtual void wasHidden(DtSymbol*);
00207 
00209    virtual void wasShown(DtSymbol*);
00210 
00211    virtual bool isShown() const;
00212 
00213    virtual DtSymbol* parent() const;
00214    virtual void setParent(DtSymbol* dad);
00215 
00217 
00220    virtual bool isComposite() {return false;}
00221   
00222    virtual DtSymbolGeometry geometry() const;
00223    virtual void setGeometry(DtSymbolGeometry geom);
00224 
00225 
00228    virtual void setCategoryTag(const QString& name);
00229    virtual const QString& categoryTag()const;
00230 
00232 
00235    virtual bool select(const QPoint& aPoint);
00236 
00239    virtual bool select(const QPoint& aPoint,
00240       const QSize& rectangleSize);
00241 
00246    virtual void setSelectable(bool value);
00247    virtual bool isSelectable() const;
00248 
00251    virtual void setEditable(bool b);
00252    virtual bool editable() const;
00253 
00257    virtual void setAllowEditOnSelection(bool b);
00258    virtual bool allowEditOnSelection() const;
00259 
00264    virtual void setInternalSelectable(bool value);
00265    virtual bool isInternalSelectable() const;
00266 
00269    virtual void setAddToDrawOrder(bool b);
00270    virtual bool addToDrawOrder() const;
00271 
00272 //----  Overlap Options
00273 
00279    virtual bool overlapsSymbol(const DtSymbol & aSymbol, 
00280       const DtSymbol_OverlapTest aTest = DtSymbol_BoxPieces,
00281       const float aTolerance = 0) const;
00282 
00285    virtual bool overlapsAreaSymbol(const DtSymbol & aSymbol, 
00286       const DtSymbol_OverlapTest aTest = DtSymbol_BoxPieces,
00287       const float aTolerance = 0) const;
00288 
00291    virtual bool overlapsLineSymbol(DtSymbol & aSymbol, 
00292       const float aTolerance = 0) const;                                  
00293 
00294 
00297    virtual bool isOriginal() const;
00298 
00299    virtual DtStaticAnimData* staticAnimData() const;
00300 
00303    virtual void setDrawOnComposite(DtSymbolCompositeDrawOptions opt);
00304    virtual bool drawOnComposite() const;
00305    virtual DtSymbolCompositeDrawOptions drawOnCompositeValue() const;
00306 
00310    virtual bool drawFirst() const;
00311    virtual void setDrawFirst(bool b);
00312 
00316    virtual bool drawLast() const;
00317    virtual void setDrawLast(bool b);
00318 
00323    virtual bool selectAdditionalSymbols(QList<DtSymbol*>& additionalSymbols);
00324 
00328    virtual bool forceUpdate() const;
00329 
00333    virtual void setColor(const QColor& color);
00334 
00336    virtual void clearColor();
00337 
00341    virtual bool adjustPoints(QPolygon& pnts, bool constrain);
00342 
00347    virtual void setDragClone(DtSymbol* clone);
00348    virtual DtSymbol* dragClone() const;
00349 
00351    virtual void setScaleBy(double factor);
00352    virtual double scaleBy() const;
00353 
00355    virtual bool isScalable() const;
00356 
00357    virtual void enableVisibilityChange(bool b);
00358 
00361    virtual void scheduleDisplayComplete(int);
00362 
00363    virtual void setShouldSelect(bool);
00364    virtual bool shouldSelect() const;
00365 
00367    virtual void setTransparencyLevel(int);
00368    virtual int transparencyLevel() const;
00369 
00373    virtual bool needsTransparentRedraw() const;
00374    virtual QPixmap* transparentImage() const;
00375    virtual QPixmap* cacheTransparentImage(const QPixmap& pixmap);
00376    virtual QPixmap* cacheTransparentImage(const QImage& image);
00377    virtual bool transparentCacheChanged() const;
00378    virtual void cacheTransparentVariables();
00379 
00381    virtual bool wantsTransparentDraw() const;
00382 
00383    bool operator==(const DtSymbol& orig) const;
00384    bool operator!=(const DtSymbol& orig) const;
00385 
00388    virtual DtSymbolDrawer* symbolDrawer();
00389    virtual DtSymbolDrawer* setDrawer(const DtSymbolDrawer&);
00390 
00393    virtual DtSymbolDrawer& backupDrawer() const;
00394    virtual void setBackupDrawer(DtSymbolDrawer*);
00395 
00396    static DtNullDrawer* nullDrawer();
00397 
00400    virtual bool removeIfOffScreen() const;
00401 
00405    void setRemoveIfOffScreen(bool b);
00406 
00407    virtual void setSymbolDisplayOptions(DtSymbolDisplayOptions*);
00408    virtual const DtSymbolDisplayOptions* symbolDisplayOptions() const;
00409    virtual DtSymbolDisplayOptions* symbolDisplayOptions();
00410    virtual int displayOptionsCache() const;
00411 
00412    void setAdjustPoints(bool);
00413    bool adjustPoints() const;
00414 
00416    const QVector<DtShowHideContext>& hiddenByModules() const;
00417    bool hiddenByModule(DtShowHideContext module) const;
00418 
00421    virtual void blockSignals(bool);
00422 
00425    virtual bool originIsCenterOfMass() const;
00426 
00430    virtual void setCacheSymbolAsBitmap(bool);
00431    bool cacheSymbolAsBitmap() const;
00432    
00435    virtual const QString& bitmapSymbolCacheKey() const;
00436 
00439    virtual void reset();
00440 
00445    virtual bool editMode();
00446    virtual void setEditMode(bool onOff);
00447 
00448 public slots:
00449 
00454    virtual void invalidateStaticAnimData();
00455 
00459    virtual void displayComplete();
00460 
00464    virtual void clearDragClone(QObject*);
00465 
00466 signals:
00469    void originalSymbolDestroyed();
00470 
00473    void destroyed(const DtSymbol *);
00474 
00476    void originChanged(const DtSymbol*);
00477 
00480    void visibilityChanged(const DtSymbol*);
00481 
00483    void displayComplete(const DtSymbol*);
00484 
00485 protected:
00488    bool overlapsBoundingSphere(const DtSymbol & aSymbol, 
00489                               const float aTolerance) const;   
00490 
00493    bool overlapsBoundingBox(const DtSymbol & aSymbol, 
00494                               const float aTolerance) const;   
00495    
00496 protected:
00497    static DtNullDrawer theNullDrawer;
00498 
00499    DtSymbolDrawer*   mySymbolDrawer;
00500    DtSymbolDrawer*   myBackupDrawer;
00501    QPoint            myOrigin;
00502    bool              myActiveOffsetToParent;
00503    QPoint            myOffsetToParent;
00504    bool myHighlight;
00505    bool myIsShown;
00506    bool myIsSelectable;
00507    bool myEditable;
00508    bool myInternalSelectable;
00509    QString myName;
00510    QString myCategoryTag;
00511    DtSymbolGeometry myGeometry;
00512 
00513    //Note: deleting a child does not delete the parent!
00514    DtSymbol* myParent;
00515 
00518    DtSymbol* myDragClone;
00519 
00520    bool              myIsOriginal;
00521    bool              myAllowEditOnSelection;
00522    bool              myAddToDrawOrder;
00523 
00524    double            myScaleFactor;
00525 
00526    mutable DtStaticAnimData* myStaticAnimData;
00527 
00528    bool              myEmitVisibilityChange;
00529 
00530    DtSymbol_DrawOrder   myDrawOrder;
00531    QTimer            *myTimer;
00532 
00533    DtSymbolCompositeDrawOptions  myDrawOnComposite;
00534 
00537    bool              myShouldSelect;
00538 
00540    int               myTransparencyLevel;
00541    QPixmap*          myTransparentImage;
00542    DtSymbol*         myTransparentCachedSymbol;
00543 
00544    DtSymbolDisplayOptions  *mySymbolDisplayOptions;
00545 
00546    bool              myAdjustPoints;
00547    QVector<DtShowHideContext>    myHiddenByModules;
00548    QVector<DtShowHideContext>    myIgnoreContexts;
00549 
00550    bool              myRemoveIfOffscreen;
00551    bool              myCacheSymbolAsBitmap;
00552    bool              myEditMode;
00553    mutable QString   mySymbolBitmapCacheKey;
00554 };
00555 
00556 inline bool DtSymbol::cacheSymbolAsBitmap() const
00557 {
00558    return myCacheSymbolAsBitmap;
00559 }
00560 
00561 inline void DtSymbol::setAdjustPoints(bool b)
00562 {
00563    myAdjustPoints = b;
00564 }
00565 
00566 inline bool DtSymbol::adjustPoints() const
00567 {
00568    return myAdjustPoints;
00569 }
00570 
00571 inline const QVector<DtShowHideContext>& DtSymbol::hiddenByModules() const
00572 {
00573    return myHiddenByModules;
00574 }
00575 
00576 inline const QVector<DtShowHideContext>& DtSymbol::ignoreContexts() const
00577 {
00578    return myIgnoreContexts;
00579 }
00580 
00581 inline bool DtSymbol::hiddenByModule(DtShowHideContext module) const
00582 {
00583    return (myHiddenByModules.indexOf(module) != -1);
00584 }
00585 
00586 inline void DtSymbol::setRemoveIfOffScreen(bool b)
00587 {
00588    myRemoveIfOffscreen = b;
00589 }
00590 
00594 #include "symbology/symbolList.h"
00595 
00596 #endif

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)