00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef KIG_MISC_SPECIAL_CONSTRUCTORS_H
00019 #define KIG_MISC_SPECIAL_CONSTRUCTORS_H
00020
00021 #include "object_constructor.h"
00022
00023 class TwoOrOneIntersectionConstructor
00024 : public StandardConstructorBase
00025 {
00026 const ArgsParserObjectType* mtype_std;
00027 const ArgsParserObjectType* mtype_special;
00028 ArgsParser margsparser;
00029 public:
00030 TwoOrOneIntersectionConstructor( const ArgsParserObjectType* t_std,
00031 const ArgsParserObjectType* t_special,
00032 const char* iconfile,
00033 const struct ArgsParser::spec argsspecv[] );
00034 ~TwoOrOneIntersectionConstructor();
00035
00036 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00037 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00038 void plug( KigPart* doc, KigGUIAction* kact );
00039 bool isTransform() const;
00040 };
00041
00042 class ThreeTwoOneIntersectionConstructor
00043 : public StandardConstructorBase
00044 {
00045 const ArgsParserObjectType* mtype_std;
00046 const ArgsParserObjectType* mtype_special;
00047 const ArgsParserObjectType* mtype_special2;
00048 ArgsParser margsparser;
00049 public:
00050 ThreeTwoOneIntersectionConstructor( const ArgsParserObjectType* t_std,
00051 const ArgsParserObjectType* t_special,
00052 const ArgsParserObjectType* t_special2,
00053 const char* iconfile,
00054 const struct ArgsParser::spec argsspecv[] );
00055 ~ThreeTwoOneIntersectionConstructor();
00056
00057 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00058 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00059 void plug( KigPart* doc, KigGUIAction* kact );
00060 bool isTransform() const;
00061 };
00062
00063
00064 class PolygonVertexTypeConstructor
00065 : public StandardConstructorBase
00066 {
00067 const ArgsParserObjectType* mtype;
00068 ArgsParser margsparser;
00069 public:
00070 PolygonVertexTypeConstructor();
00071 ~PolygonVertexTypeConstructor();
00072
00073 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00074 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00075 void plug( KigPart* doc, KigGUIAction* kact );
00076 bool isTransform() const;
00077 };
00078
00079 class PolygonSideTypeConstructor
00080 : public StandardConstructorBase
00081 {
00082 const ArgsParserObjectType* mtype;
00083 ArgsParser margsparser;
00084 public:
00085 PolygonSideTypeConstructor();
00086 ~PolygonSideTypeConstructor();
00087
00088 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00089 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00090 void plug( KigPart* doc, KigGUIAction* kact );
00091 bool isTransform() const;
00092 };
00093
00094 class PolygonBNPTypeConstructor
00095 : public ObjectConstructor
00096 {
00097 const ObjectType* mtype;
00098 public:
00099 PolygonBNPTypeConstructor();
00100 ~PolygonBNPTypeConstructor();
00101
00102 const QString descriptiveName() const;
00103 const QString description() const;
00104 const QByteArray iconFileName( const bool canBeNull = false ) const;
00105 bool isAlreadySelectedOK( const std::vector<ObjectCalcer*>& os, const int& ) const;
00106 int wantArgs( const std::vector<ObjectCalcer*>& os, const KigDocument& d, const KigWidget& v) const;
00107 void handleArgs( const std::vector<ObjectCalcer*>& os,
00108 KigPart& d,
00109 KigWidget& v
00110 ) const;
00111 QString useText( const ObjectCalcer& o, const std::vector<ObjectCalcer*>& sel,
00112 const KigDocument& d, const KigWidget& v
00113 ) const;
00114 QString selectStatement(
00115 const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00116 const KigWidget& w ) const;
00117 void handlePrelim( KigPainter& p,
00118 const std::vector<ObjectCalcer*>& sel,
00119 const KigDocument& d,
00120 const KigWidget& v
00121 ) const;
00122
00123 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00124 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00125 void plug( KigPart* doc, KigGUIAction* kact );
00126 bool isTransform() const;
00127 };
00128
00129 class PolygonBCVConstructor
00130 : public ObjectConstructor
00131 {
00132 const ObjectType* mtype;
00133 public:
00134 PolygonBCVConstructor();
00135 ~PolygonBCVConstructor();
00136
00137 const QString descriptiveName() const;
00138 const QString description() const;
00139 const QByteArray iconFileName( const bool canBeNull = false ) const;
00140 bool isAlreadySelectedOK( const std::vector<ObjectCalcer*>& os, const int& ) const;
00141 int wantArgs( const std::vector<ObjectCalcer*>& os,
00142 const KigDocument& d,
00143 const KigWidget& v
00144 ) const;
00145 void handleArgs( const std::vector<ObjectCalcer*>& os,
00146 KigPart& d,
00147 KigWidget& v
00148 ) const;
00149 QString useText( const ObjectCalcer& o, const std::vector<ObjectCalcer*>& sel,
00150 const KigDocument& d, const KigWidget& v
00151 ) const;
00152 QString selectStatement(
00153 const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00154 const KigWidget& w ) const;
00155 void handlePrelim( KigPainter& p,
00156 const std::vector<ObjectCalcer*>& sel,
00157 const KigDocument& d,
00158 const KigWidget& v
00159 ) const;
00160 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00161 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00162 void plug( KigPart* doc, KigGUIAction* kact );
00163 bool isTransform() const;
00164 int computeNsides( const Coordinate& c, const Coordinate& v, const Coordinate& cntrl, int& winding ) const;
00165 Coordinate getRotatedCoord( const Coordinate& c1,
00166 const Coordinate& c2, double alpha ) const;
00167 };
00168
00169 class MeasureTransportConstructor
00170 : public ObjectConstructor
00171 {
00172 const ObjectType* mtype;
00173 public:
00174 MeasureTransportConstructor();
00175 ~MeasureTransportConstructor();
00176
00177 const QString descriptiveName() const;
00178 const QString description() const;
00179 const QByteArray iconFileName( const bool canBeNull = false ) const;
00180 bool isAlreadySelectedOK( const std::vector<ObjectCalcer*>& os,
00181 const int& ) const;
00182 int wantArgs( const std::vector<ObjectCalcer*>& os,
00183 const KigDocument& d,
00184 const KigWidget& v
00185 ) const;
00186 void handleArgs( const std::vector<ObjectCalcer*>& os,
00187 KigPart& d,
00188 KigWidget& v
00189 ) const;
00190 QString useText( const ObjectCalcer& o, const std::vector<ObjectCalcer*>& sel,
00191 const KigDocument& d, const KigWidget& v
00192 ) const;
00193 QString selectStatement(
00194 const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00195 const KigWidget& w ) const;
00196 void handlePrelim( KigPainter& p,
00197 const std::vector<ObjectCalcer*>& sel,
00198 const KigDocument& d,
00199 const KigWidget& v
00200 ) const;
00201
00202 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00203 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00204 void plug( KigPart* doc, KigGUIAction* kact );
00205 bool isTransform() const;
00206 };
00207
00208 class ConicRadicalConstructor
00209 : public StandardConstructorBase
00210 {
00211 const ArgsParserObjectType* mtype;
00212 const ArgsParser mparser;
00213 public:
00214 ConicRadicalConstructor();
00215 ~ConicRadicalConstructor();
00216 QString useText( const ObjectCalcer& o, const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00217 const KigWidget& v ) const;
00218 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00219 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00220 void plug( KigPart* doc, KigGUIAction* kact );
00221
00222 bool isTransform() const;
00223 };
00224
00225 class LocusConstructor
00226 : public StandardConstructorBase
00227 {
00228 ArgsParser margsparser;
00229 public:
00230 LocusConstructor();
00231 ~LocusConstructor();
00237 int wantArgs(
00238 const std::vector<ObjectCalcer*>& os, const KigDocument& d,
00239 const KigWidget& v
00240 ) const;
00241 QString useText( const ObjectCalcer& o, const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00242 const KigWidget& v ) const;
00243
00244 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents, const KigDocument& ) const;
00245 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d, KigWidget& w ) const;
00246 void plug( KigPart* doc, KigGUIAction* kact );
00247
00248 bool isTransform() const;
00249 };
00250
00251 class GenericAffinityConstructor
00252 : public MergeObjectConstructor
00253 {
00254 public:
00255 GenericAffinityConstructor();
00256 ~GenericAffinityConstructor();
00257 };
00258
00259 class GenericProjectivityConstructor
00260 : public MergeObjectConstructor
00261 {
00262 public:
00263 GenericProjectivityConstructor();
00264 ~GenericProjectivityConstructor();
00265 };
00266
00267 class InversionConstructor
00268 : public MergeObjectConstructor
00269 {
00270 public:
00271 InversionConstructor();
00272 ~InversionConstructor();
00273 };
00274
00275 class GenericIntersectionConstructor
00276 : public MergeObjectConstructor
00277 {
00278 public:
00279 GenericIntersectionConstructor();
00280 ~GenericIntersectionConstructor();
00281
00282 bool isIntersection() const;
00283
00284 QString useText( const ObjectCalcer& o, const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00285 const KigWidget& v ) const;
00286 QString selectStatement(
00287 const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00288 const KigWidget& w ) const;
00289 };
00290
00291 class MidPointOfTwoPointsConstructor
00292 : public StandardConstructorBase
00293 {
00294 ArgsParser mparser;
00295 public:
00296 MidPointOfTwoPointsConstructor();
00297 ~MidPointOfTwoPointsConstructor();
00298 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents,
00299 const KigDocument& ) const;
00300 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d,
00301 KigWidget& w ) const;
00302 void plug( KigPart* doc, KigGUIAction* kact );
00303 bool isTransform() const;
00304 };
00305
00306 class TestConstructor
00307 : public StandardConstructorBase
00308 {
00309 const ArgsParserObjectType* mtype;
00310 public:
00311 TestConstructor( const ArgsParserObjectType* type, const char* descname,
00312 const char* desc, const char* iconfile );
00313 ~TestConstructor();
00314 void drawprelim( const ObjectDrawer& drawer, KigPainter& p, const std::vector<ObjectCalcer*>& parents,
00315 const KigDocument& ) const;
00316 std::vector<ObjectHolder*> build( const std::vector<ObjectCalcer*>& os, KigDocument& d,
00317 KigWidget& w ) const;
00318 int wantArgs( const std::vector<ObjectCalcer*>& os,
00319 const KigDocument& d, const KigWidget& v ) const;
00320 void plug( KigPart* doc, KigGUIAction* kact );
00321 bool isTransform() const;
00322 bool isTest() const;
00323
00324 BaseConstructMode* constructMode( KigPart& doc );
00325 };
00326
00327 class TangentConstructor
00328 : public MergeObjectConstructor
00329 {
00330 public:
00331 TangentConstructor();
00332 ~TangentConstructor();
00333
00334 QString useText( const ObjectCalcer& o, const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00335 const KigWidget& v ) const;
00336
00337
00338
00339 };
00340
00341 class CocConstructor
00342 : public MergeObjectConstructor
00343 {
00344 public:
00345 CocConstructor();
00346 ~CocConstructor();
00347
00348 QString useText( const ObjectCalcer& o, const std::vector<ObjectCalcer*>& sel, const KigDocument& d,
00349 const KigWidget& v ) const;
00350
00351
00352
00353 };
00354
00355 bool relativePrimes( int n, int p );
00356
00357 std::vector<ObjectCalcer*>
00358 removeDuplicatedPoints( std::vector<ObjectCalcer*> points );
00359 bool coincidentPoints( const ObjectImp* p1, const ObjectImp* p2 );
00360
00361 #endif