00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00041 #ifndef vtkSimple3DCirclesStrategyH
00042 #define vtkSimple3DCirclesStrategyH 1
00043
00044 #include "vtkGraphLayoutStrategy.h"
00045
00046 class vtkDirectedGraph;
00047 class vtkIdTypeArray;
00048 class vtkIntArray;
00049 class vtkSimple3DCirclesStrategyInternal;
00050
00051 class VTK_INFOVIS_EXPORT vtkSimple3DCirclesStrategy : public vtkGraphLayoutStrategy
00052 {
00053 public:
00054 static vtkSimple3DCirclesStrategy * New();
00055 vtkTypeMacro(vtkSimple3DCirclesStrategy,vtkGraphLayoutStrategy);
00056 void PrintSelf( ostream& os, vtkIndent indent );
00057
00058
00059 enum
00060 {
00061 FixedRadiusMethod = 0, FixedDistanceMethod = 1
00062 };
00063
00065
00068 vtkSetMacro(Method,int);
00069 vtkGetMacro(Method,int);
00070
00071
00072
00073 vtkSetMacro(Radius,double);
00074 vtkGetMacro(Radius,double);
00075
00076
00077
00078 vtkSetMacro(Height,double);
00079 vtkGetMacro(Height,double);
00080
00081
00082 vtkSetVector3Macro(Orign,double);
00083 vtkGetVector3Macro(Orign,double);
00084
00085
00086
00087 virtual void SetDirection( double dx, double dy, double dz );
00088 virtual void SetDirection( double d[3] );
00089 vtkGetVector3Macro(Direction,double);
00090
00091
00092
00093
00094
00095 virtual void SetMarkedStartVertices( vtkIntArray * _arg );
00096 vtkGetObjectMacro(MarkedStartVertices,vtkIntArray);
00097
00098
00099 vtkSetMacro(MarkedValue,int);
00100 vtkGetMacro(MarkedValue,int);
00101
00102
00103
00104 vtkSetMacro(ForceToUseUniversalStartPointsFinder,int);
00105 vtkGetMacro(ForceToUseUniversalStartPointsFinder,int);
00106 vtkBooleanMacro(ForceToUseUniversalStartPointsFinder,int);
00107
00108
00109
00110 vtkSetMacro(AutoHeight,int);
00111 vtkGetMacro(AutoHeight,int);
00112 vtkBooleanMacro(AutoHeight,int);
00113
00114
00115 vtkSetMacro(MinimumRadian,double);
00116 vtkGetMacro(MinimumRadian,double);
00117
00118
00119 virtual void SetMinimumDegree( double degree );
00120 virtual double GetMinimumDegree( void );
00121
00122
00123
00124 virtual void SetHierarchicalLayers( vtkIntArray * _arg );
00125 vtkGetObjectMacro(HierarchicalLayers,vtkIntArray);
00126
00127
00128
00129 virtual void SetHierarchicalOrder( vtkIdTypeArray * _arg );
00130 vtkGetObjectMacro(HierarchicalOrder,vtkIdTypeArray);
00131
00132
00133 virtual void Layout( void );
00134
00135
00136 virtual void SetGraph( vtkGraph * graph );
00138 protected:
00139
00140 vtkSimple3DCirclesStrategy( void );
00141 virtual ~vtkSimple3DCirclesStrategy( void );
00142
00143 inline void Transform( double Local[], double Global[] );
00144
00145 double Radius;
00146 double Height;
00147 double Orign[3];
00148 double Direction[3];
00149 int Method;
00150 vtkIntArray * MarkedStartVertices;
00151 int MarkedValue;
00152 int ForceToUseUniversalStartPointsFinder;
00153 int AutoHeight;
00154 double MinimumRadian;
00155
00156 vtkIntArray * HierarchicalLayers;
00157 vtkIdTypeArray * HierarchicalOrder;
00158
00159 private:
00160
00162
00165 virtual int UniversalStartPoints( vtkDirectedGraph * input, vtkSimple3DCirclesStrategyInternal * target, vtkSimple3DCirclesStrategyInternal *StandAlones, vtkIntArray * layers );
00166
00167
00168 virtual int BuildLayers( vtkDirectedGraph * input, vtkSimple3DCirclesStrategyInternal * source, vtkIntArray * layers );
00169
00170
00171 virtual void BuildPointOrder( vtkDirectedGraph * input, vtkSimple3DCirclesStrategyInternal *source, vtkSimple3DCirclesStrategyInternal *StandAlones, vtkIntArray * layers, vtkIdTypeArray * order );
00173
00174 double T[3][3];
00175
00176
00177 vtkSimple3DCirclesStrategy(const vtkSimple3DCirclesStrategy&);
00178 void operator=(const vtkSimple3DCirclesStrategy&);
00179 };
00180
00181 #endif