![]() |
VR-Forces 4.0.4 Class Documentation
|
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