FDO API Reference | Feature Data Objects |
00001 #ifndef _GEOMETRYFACTORYABSTRACT_H_ 00002 #define _GEOMETRYFACTORYABSTRACT_H_ 00003 00004 // 00005 // Copyright (C) 2004-2006 Autodesk, Inc. 00006 // 00007 // This library is free software; you can redistribute it and/or 00008 // modify it under the terms of version 2.1 of the GNU Lesser 00009 // General Public License as published by the Free Software Foundation. 00010 // 00011 // This library is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 // Lesser General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU Lesser General Public 00017 // License along with this library; if not, write to the Free Software 00018 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00019 // 00020 00021 00022 00023 #ifdef _WIN32 00024 #pragma once 00025 #endif 00026 00027 #include <FdoCommon.h> 00028 #include <Geometry/GeometryStd.h> 00029 00030 /// \brief 00031 /// 00032 /// The FdoGeometryFactoryAbstract class is a factory (abstract, non-pure) for Geometry objects and Geometry helper objects. 00033 class FdoGeometryFactoryAbstract : public FdoIDisposable 00034 { 00035 public: 00036 00037 /// Position 00038 00039 /// \brief 00040 /// Creates a position object using X and Y ordinates. 00041 /// 00042 /// \remarks 00043 /// The resulting object's accessor methods for ordinates 00044 /// that are not given here as input parameters will return the default 00045 /// value of 0.0. 00046 /// 00047 /// \param x 00048 /// Input X ordinate value 00049 /// \param y 00050 /// Input Y ordinate value 00051 /// 00052 /// \return 00053 /// Returns a direct position 00054 /// 00055 FDO_GEOM_API virtual FdoIDirectPosition* CreatePositionXY( 00056 double x, 00057 double y); 00058 00059 /// \brief 00060 /// Creates a position object using X, Y and Z ordinates. 00061 /// 00062 /// \remarks 00063 /// The resulting object's accessor methods for ordinates 00064 /// that are not given here as input parameters will return the default 00065 /// value of 0.0. 00066 /// 00067 /// \param x 00068 /// Input X ordinate value 00069 /// \param y 00070 /// Input Y ordinate value 00071 /// \param z 00072 /// Input Z ordinate value 00073 /// 00074 /// \return 00075 /// Returns a direct position 00076 /// 00077 FDO_GEOM_API virtual FdoIDirectPosition* CreatePositionXYZ( 00078 double x, 00079 double y, 00080 double z); 00081 00082 /// \brief 00083 /// Creates a position object using X, Y and M ordinates. 00084 /// 00085 /// \remarks 00086 /// The resulting object's accessor methods for ordinates 00087 /// that are not given here as input parameters will return the default 00088 /// value of 0.0. 00089 /// 00090 /// \param x 00091 /// Input X ordinate value 00092 /// \param y 00093 /// Input Y ordinate value 00094 /// \param m 00095 /// Input M ordinate value 00096 /// 00097 /// \return 00098 /// Returns a direct position 00099 /// 00100 FDO_GEOM_API virtual FdoIDirectPosition* CreatePositionXYM( 00101 double x, 00102 double y, 00103 double m); 00104 00105 /// \brief 00106 /// Creates a position object using X, Y, Z and M ordinates. 00107 /// 00108 /// \param x 00109 /// Input X ordinate value 00110 /// \param y 00111 /// Input Y ordinate value 00112 /// \param z 00113 /// Input Z ordinate value 00114 /// \param m 00115 /// Input M ordinate value 00116 /// 00117 /// \return 00118 /// Returns a direct position 00119 /// 00120 FDO_GEOM_API virtual FdoIDirectPosition* CreatePositionXYZM( 00121 double x, 00122 double y, 00123 double z, 00124 double m); 00125 00126 FDO_GEOM_API virtual FdoIDirectPosition* CreatePosition( 00127 FdoInt32 dimensionality, 00128 const double * ordinates); 00129 00130 /// \brief 00131 /// Creates a position object by copying from an existing position. 00132 /// 00133 /// \param position 00134 /// Input position to copy 00135 /// 00136 /// \return 00137 /// Returns a direct position 00138 /// 00139 FDO_GEOM_API virtual FdoIDirectPosition* CreatePosition( 00140 FdoIDirectPosition * position); 00141 00142 /// Envelope 00143 00144 /// \brief 00145 /// Creates an envelope object using two positions. 00146 /// 00147 /// \param lowerLeft 00148 /// Input lower-left position 00149 /// \param upperRight 00150 /// Input upper-right position 00151 /// 00152 /// \return 00153 /// Returns an envelope 00154 /// 00155 FDO_GEOM_API virtual FdoIEnvelope* CreateEnvelope( 00156 FdoIDirectPosition * lowerLeft, 00157 FdoIDirectPosition * upperRight); 00158 00159 /// \brief 00160 /// Creates an envelope object by copying from an array of ordinates. 00161 /// 00162 /// \param dimensionType 00163 /// Input dimensionality of the ordinates (see FdoDimensionality) 00164 /// \param ordinates 00165 /// Input ordinate array representing two positions 00166 /// 00167 /// \return 00168 /// Returns an envelope 00169 /// 00170 FDO_GEOM_API virtual FdoIEnvelope* CreateEnvelope( 00171 FdoInt32 dimensionType, 00172 double * ordinates); 00173 00174 /// \brief 00175 /// Creates an envelope object using X and Y ordinates. 00176 /// 00177 /// \param lowerLeftX 00178 /// Input lower-left X ordinate 00179 /// \param lowerLeftY 00180 /// Input lower-left Y ordinate 00181 /// \param upperRightX 00182 /// Input upper-right X ordinate 00183 /// \param upperRightY 00184 /// Input upper-right Y ordinate 00185 /// 00186 /// \return 00187 /// Returns an envelope 00188 /// 00189 FDO_GEOM_API virtual FdoIEnvelope* CreateEnvelopeXY( 00190 double lowerLeftX, 00191 double lowerLeftY, 00192 double upperRightX, 00193 double upperRightY); 00194 00195 /// \brief 00196 /// Creates an envelope object using X, Y and Z ordinates. 00197 /// 00198 /// \param lowerLeftX 00199 /// Input lower-left, rear X ordinate 00200 /// \param lowerLeftY 00201 /// Input lower-left, rear Y ordinate 00202 /// \param lowerLeftZ 00203 /// Input lower-left, rear Z ordinate 00204 /// \param upperRightX 00205 /// Input upper-right, front X ordinate 00206 /// \param upperRightY 00207 /// Input upper-right, front Y ordinate 00208 /// \param upperRightZ 00209 /// Input upper-right, front Z ordinate 00210 /// 00211 /// \return 00212 /// Returns an envelope 00213 /// 00214 FDO_GEOM_API virtual FdoIEnvelope* CreateEnvelopeXYZ( 00215 double lowerLeftX, 00216 double lowerLeftY, 00217 double lowerLeftZ, 00218 double upperRightX, 00219 double upperRightY, 00220 double upperRightZ); 00221 00222 /// \brief 00223 /// Creates a envelope object by copying from another envelope. 00224 /// 00225 /// \param envelope 00226 /// Input Source envelope 00227 /// 00228 /// \return 00229 /// Returns an envelope 00230 /// 00231 FDO_GEOM_API virtual FdoIEnvelope* CreateEnvelope( 00232 FdoIEnvelope * envelope); 00233 00234 /// LineString 00235 00236 /// \brief 00237 /// Creates a LineString object by copying from a collection of positions. 00238 /// 00239 /// \param positions 00240 /// Input collection of positions to copy 00241 /// 00242 /// \return 00243 /// Returns a LineString 00244 /// 00245 FDO_GEOM_API virtual FdoILineString* CreateLineString( 00246 FdoDirectPositionCollection* positions) = 0; 00247 00248 /// \brief 00249 /// Creates a LineString object by copying from an array of ordinates. 00250 /// 00251 /// \param dimensionType 00252 /// Input dimensionality of the ordinates (see FdoDimensionality) 00253 /// \param numOrdinates 00254 /// Input total number of ordinates in the array 00255 /// \param ordinates 00256 /// Input ordinate array representing positions 00257 /// 00258 /// \return 00259 /// Returns a LineString 00260 /// 00261 FDO_GEOM_API virtual FdoILineString* CreateLineString( 00262 FdoInt32 dimensionType, 00263 FdoInt32 numOrdinates, 00264 double* ordinates) = 0; 00265 00266 /// Geometry 00267 00268 /// \brief 00269 /// Creates a Geometry object by copying from another Geometry. 00270 /// 00271 /// \remarks 00272 /// This is a pseudo-copy-constructor. 00273 /// It is required that any implementation use only public methods on the underlying 00274 /// Geometry object, thus enabling conversion from geometries of the same (or any 00275 /// other) implementation of this Geometry package. 00276 /// 00277 /// \param geometry 00278 /// Input Source geometry 00279 /// 00280 /// \return 00281 /// Returns an envelope 00282 /// 00283 FDO_GEOM_API virtual FdoIGeometry * CreateGeometry( 00284 FdoIGeometry * geometry) = 0; 00285 00286 /// \brief 00287 /// Creates a Geometry object by converting from a text string. 00288 /// 00289 /// \remarks 00290 /// While this method is not pure virtual, its default implementation will 00291 /// throw an exception if called. A concrete, derived class should override this 00292 /// method if conversion from text is required. 00293 /// 00294 /// \param text 00295 /// Input Source geometry text 00296 /// 00297 /// \return 00298 /// Returns a Geometry 00299 /// 00300 FDO_GEOM_API FdoIGeometry * CreateGeometry( 00301 FdoString* text); 00302 00303 /// \brief 00304 /// Creates a Geometry object by converting from an envelope. 00305 /// 00306 /// \remarks 00307 /// This method will produce a new Geometry 00308 /// based on the given envelope. The actual geometry type produced is implementation-dependent. 00309 /// 00310 /// \param envelope 00311 /// Input Source envelope 00312 /// 00313 /// \return 00314 /// Returns a Geometry 00315 /// 00316 FDO_GEOM_API virtual FdoIGeometry * CreateGeometry( 00317 FdoIEnvelope * envelope) = 0; 00318 00319 /// Point 00320 00321 /// \brief 00322 /// Creates a point object by copying from a position. 00323 /// 00324 /// \param position 00325 /// Input position to copy 00326 /// 00327 /// \return 00328 /// Returns a point 00329 /// 00330 FDO_GEOM_API virtual FdoIPoint* CreatePoint( 00331 FdoIDirectPosition* position) = 0; 00332 00333 /// \brief 00334 /// Creates a point object by copying from an array of ordinates. 00335 /// 00336 /// \param dimensionality 00337 /// Input dimensionality of the ordinates (see FdoDimensionality) 00338 /// \param ordinates 00339 /// Input ordinate array representing one position 00340 /// 00341 /// \return 00342 /// Returns a point 00343 /// 00344 FDO_GEOM_API virtual FdoIPoint* CreatePoint( 00345 FdoInt32 dimensionality, 00346 double* ordinates) = 0; 00347 00348 /// LinearRing 00349 00350 /// \brief 00351 /// Creates a LinearRing object by copying from a collection of positions. 00352 /// 00353 /// \remarks 00354 /// The first and last positions must be equal. 00355 /// 00356 /// \param positions 00357 /// Input collection of positions to copy 00358 /// 00359 /// \return 00360 /// Returns a LinearRing 00361 /// 00362 FDO_GEOM_API virtual FdoILinearRing* CreateLinearRing( 00363 FdoDirectPositionCollection* positions) = 0; 00364 00365 /// \brief 00366 /// Creates a LinearRing object by copying from an array of ordinates. 00367 /// 00368 /// \remarks 00369 /// The ordinates representing the first and last positions must be equal. 00370 /// 00371 /// \param dimensionality 00372 /// Input dimensionality of the ordinates (see FdoDimensionality) 00373 /// \param numOrdinates 00374 /// Input total number of ordinates in the array 00375 /// \param ordinates 00376 /// Input ordinate array representing positions 00377 /// 00378 /// \return 00379 /// Returns a LinearRing 00380 /// 00381 FDO_GEOM_API virtual FdoILinearRing* CreateLinearRing( 00382 FdoInt32 dimensionality, 00383 FdoInt32 numOrdinates, 00384 double* ordinates) = 0; 00385 00386 /// LineStringSegment 00387 00388 /// \brief 00389 /// Creates a LineStringSegment object by copying from a collection of positions. 00390 /// 00391 /// \param positions 00392 /// Input collection of positions to copy 00393 /// 00394 /// \return 00395 /// Returns a LineStringSegment 00396 /// 00397 FDO_GEOM_API virtual FdoILineStringSegment* CreateLineStringSegment( 00398 FdoDirectPositionCollection* positions) = 0; 00399 00400 /// \brief 00401 /// Creates a LineStringSegment object by copying from an array of ordinates. 00402 /// 00403 /// \param dimtype 00404 /// Input dimensionality of the ordinates (see FdoDimensionality) 00405 /// \param numOrdinates 00406 /// Input total number of ordinates in the array 00407 /// \param ordinates 00408 /// Input ordinate array representing positions 00409 /// 00410 /// \return 00411 /// Returns a LineStringSegment 00412 /// 00413 FDO_GEOM_API virtual FdoILineStringSegment* CreateLineStringSegment( 00414 FdoInt32 dimtype, 00415 FdoInt32 numOrdinates, 00416 double* ordinates) = 0; 00417 00418 /// Polygon 00419 00420 /// \brief 00421 /// Creates a polygon object by copying from given LinearRing objects. 00422 /// 00423 /// \param exteriorRing 00424 /// Input exterior ring to copy 00425 /// \param interiorRings 00426 /// Input collection of interior rings to copy 00427 /// 00428 /// \return 00429 /// Returns a polygon 00430 /// 00431 FDO_GEOM_API virtual FdoIPolygon* CreatePolygon( 00432 FdoILinearRing* exteriorRing, 00433 FdoLinearRingCollection* interiorRings) = 0; 00434 00435 /// MultiPoint 00436 00437 /// \brief 00438 /// Creates a MultiPoint object by copying from a collection of point objects. 00439 /// 00440 /// \param points 00441 /// Input collection of point objects to copy 00442 /// 00443 /// \return 00444 /// Returns a MultiPoint 00445 /// 00446 FDO_GEOM_API virtual FdoIMultiPoint* CreateMultiPoint( 00447 FdoPointCollection* points) = 0; 00448 00449 /// \brief 00450 /// Creates a MultiPoint object by copying from an array of ordinates. 00451 /// 00452 /// \param dimensionality 00453 /// Input dimensionality of the ordinates (see FdoDimensionality) 00454 /// \param numOrdinates 00455 /// Input total number of ordinates in the array 00456 /// \param ordinates 00457 /// Input ordinate array representing positions 00458 /// 00459 /// \return 00460 /// Returns a MultiPoint 00461 /// 00462 FDO_GEOM_API virtual FdoIMultiPoint* CreateMultiPoint( 00463 FdoInt32 dimensionality, 00464 FdoInt32 numOrdinates, 00465 double* ordinates) = 0; 00466 00467 /// MultiLineString 00468 00469 /// \brief 00470 /// Creates a MultiLineString object by copying from a collection of LineString objects. 00471 /// 00472 /// \param lineStrings 00473 /// Input collection of LineString objects to copy 00474 /// 00475 /// \return 00476 /// Returns a MultiLineString 00477 /// 00478 FDO_GEOM_API virtual FdoIMultiLineString* CreateMultiLineString( 00479 FdoLineStringCollection* lineStrings) = 0; 00480 00481 //MultiPolygon 00482 00483 /// \brief 00484 /// Creates a MultiPolygon object by copying from a collection of polygon objects. 00485 /// 00486 /// \param polygons 00487 /// Input collection of polygon objects to copy 00488 /// 00489 /// \return 00490 /// Returns a MultiPolygon 00491 /// 00492 FDO_GEOM_API virtual FdoIMultiPolygon* CreateMultiPolygon( 00493 FdoPolygonCollection* polygons) = 0; 00494 00495 /// CircularArcSegment 00496 00497 /// \brief 00498 /// Creates a CircularArcSegment object by copying from three points on the arc. 00499 /// 00500 /// \param startPosition 00501 /// Input starting position of the arc 00502 /// \param midPosition 00503 /// Input a position on the arc, and not equal to the starting or ending positions 00504 /// \param endPosition 00505 /// Input ending position of the arc 00506 /// 00507 /// \return 00508 /// Returns a CircularArcSegment 00509 /// 00510 FDO_GEOM_API virtual FdoICircularArcSegment* CreateCircularArcSegment( 00511 FdoIDirectPosition* startPosition, 00512 FdoIDirectPosition* midPosition, 00513 FdoIDirectPosition* endPosition) = 0; 00514 00515 /// CurveString 00516 00517 /// \brief 00518 /// Creates a CurveString object by copying from a collection of CurveSegment objects. 00519 /// 00520 /// \param curveSegments 00521 /// Input collection of CurveSegment objects to copy 00522 /// 00523 /// \return 00524 /// Returns a CurveString 00525 /// 00526 FDO_GEOM_API virtual FdoICurveString* CreateCurveString( 00527 FdoCurveSegmentCollection* curveSegments) = 0; 00528 00529 /// MultiCurveString 00530 00531 /// \brief 00532 /// Creates an MultiCurveString object by copying from a collection of CurveString objects. 00533 /// 00534 /// \param curveStrings 00535 /// Input collection of CurveString objects to copy 00536 /// 00537 /// \return 00538 /// Returns a MultiCurveString 00539 /// 00540 FDO_GEOM_API virtual FdoIMultiCurveString* CreateMultiCurveString( 00541 FdoCurveStringCollection* curveStrings) = 0; 00542 00543 /// Ring 00544 00545 /// \brief 00546 /// Creates a ring object by copying from a collection of CurveSegment objects. 00547 /// 00548 /// \param curveSegments 00549 /// Input collection of CurveSegment objects to copy 00550 /// 00551 /// \return 00552 /// Returns a ring 00553 /// 00554 FDO_GEOM_API virtual FdoIRing* CreateRing( 00555 FdoCurveSegmentCollection* curveSegments) = 0; 00556 00557 /// CurvePolygon 00558 00559 /// \brief 00560 /// Creates a CurvePolygon object by copying from given ring objects. 00561 /// 00562 /// \param exteriorRing 00563 /// Input exterior ring to copy 00564 /// \param interiorRings 00565 /// Input collection of interior rings to copy 00566 /// 00567 /// \return 00568 /// Returns a CurvePolygon 00569 /// 00570 FDO_GEOM_API virtual FdoICurvePolygon* CreateCurvePolygon( 00571 FdoIRing* exteriorRing, 00572 FdoRingCollection* interiorRings) = 0; 00573 00574 /// MultiCurvePolygon 00575 00576 /// \brief 00577 /// Creates a MultiCurvePolygon object by copying from a collection of CurvePolygon objects. 00578 /// 00579 /// \param curvePolygons 00580 /// Input collection of CurvePolygon objects to copy 00581 /// 00582 /// \return 00583 /// Returns a MultiCurvePolygon 00584 /// 00585 FDO_GEOM_API virtual FdoIMultiCurvePolygon* CreateMultiCurvePolygon( 00586 FdoCurvePolygonCollection* curvePolygons) = 0; 00587 00588 /// MultiGeometry 00589 00590 /// \brief 00591 /// Creates a MultiGeometry object by copying from a collection of Geometry objects. 00592 /// 00593 /// \param geometries 00594 /// Input collection of Geometry objects to copy 00595 /// 00596 /// \return 00597 /// Returns a MultiGeometry 00598 /// 00599 FDO_GEOM_API virtual FdoIMultiGeometry* CreateMultiGeometry( 00600 FdoGeometryCollection* geometries) = 0; 00601 00602 protected: 00603 00604 /// \brief 00605 /// Constructs a default instance of a FdoGeometryFactoryAbstract. 00606 /// 00607 /// \return 00608 /// Returns nothing 00609 /// 00610 FDO_GEOM_API FdoGeometryFactoryAbstract() {}; 00611 00612 /// \brief 00613 /// Default destructor. 00614 /// 00615 /// \return 00616 /// Returns nothing 00617 /// 00618 FDO_GEOM_API virtual ~FdoGeometryFactoryAbstract() {}; 00619 }; 00620 #endif 00621 00622
Comments or suggestions? Send us feedback. |