00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 #ifndef INC_MI32_TRANS2DC_H
00135 #define INC_MI32_TRANS2DC_H
00136
00137 #ifndef INC_MI32_TRANS2D_H
00138 #include <mi32/trans2d.h>
00139 #endif
00140
00141 #ifndef INC_MI32_TRANSGEN_H
00142 #include <mi32/transgen.h>
00143 #endif
00144
00145 #ifndef INC_MI32_RECT_H
00146 #include <mi32/rect.h>
00147 #endif
00148
00149 #ifndef INC_MI32_MAPPROJ_H
00150 #include <mi32/mapproj.h>
00151 #endif
00152
00153 #ifndef INC_MI32_CTRLPT_H
00154 #include <mi32/ctrlpt.h>
00155 #endif
00156
00157 #ifndef INC_MI32_RVCGREF_H
00158 #include <mi32/rvcgref.h>
00159 #endif
00160
00161 #include <memory.h>
00162
00163
00164 #ifndef GENERATING_DOXYGEN_OUTPUT
00165 #ifdef GEOMDLL
00166 #define GEOMLIBEXPORT MI_DLLEXPORT
00167 #define GEOMLIBCLASSEXPORT MI_DLLCLASSEXPORT
00168 #else
00169 #define GEOMLIBEXPORT MI_DLLIMPORT
00170 #define GEOMLIBCLASSEXPORT MI_DLLCLASSIMPORT
00171 #endif
00172
00173
00174
00175 class TRANS2D_MAPGEN;
00176
00177 #endif // GENERATING_DOXYGEN_OUTPUT
00178
00179
00180
00181
00182
00183
00184
00185 class GEOMLIBCLASSEXPORT TRANS2D_AFFINE {
00186
00187 public:
00188
00189 enum AXIS {
00190 AXIS_X = 0,
00191 AXIS_Y = 1
00192 };
00193
00194
00195 TRANS2D_AFFINE (
00196 ) { trans2dinit(m_fwd,m_inv); }
00197
00198
00199 TRANS2D_AFFINE (
00200 const TRANS2D_AFFINE& rhs
00201 ) {
00202 memcpy(m_fwd,rhs.m_fwd,sizeof(MAT3X3));
00203 memcpy(m_inv,rhs.m_inv,sizeof(MAT3X3));
00204 }
00205
00206
00207 TRANS2D_AFFINE (
00208 const MAT3X3 fwd,
00209 const MAT3X3 inv
00210 ) {
00211 memcpy(m_fwd,fwd,sizeof(MAT3X3));
00212 memcpy(m_inv,inv,sizeof(MAT3X3));
00213 }
00214
00215
00216 TRANS2D_AFFINE (
00217 const TRANS2D_AFFINE& trans1,
00218 const TRANS2D_AFFINE& trans2
00219 ) { trans2dmatrix2(m_fwd,m_inv,trans1.m_fwd,trans1.m_inv,trans2.m_fwd,trans2.m_inv); }
00220
00221
00222 TRANS2D_AFFINE (
00223 const CTRLPOINT *cp,
00224 int numpoints,
00225 bool invert = false
00226 ) { FindBestTrans2DA(numpoints,cp,m_fwd,m_inv,(invert)?TRANS2DMODEL_OrientInvert:0); }
00227
00228
00229 TRANS2D_AFFINE (
00230 const CTRLPOINT3 *cp,
00231 int numpoints,
00232 bool invert = false
00233 ) { FindBestTrans2D3A(numpoints,cp,m_fwd,m_inv,(invert)?TRANS2DMODEL_OrientInvert:0); }
00234
00235
00236 ~TRANS2D_AFFINE (
00237 ) {}
00238
00239
00240 TRANS2D_AFFINE& operator= (
00241 const TRANS2D_AFFINE& rhs
00242 ) {
00243 if (this != &rhs) {
00244 memcpy(m_fwd,rhs.m_fwd,sizeof(MAT3X3));
00245 memcpy(m_inv,rhs.m_inv,sizeof(MAT3X3));
00246 }
00247 return (*this);
00248 }
00249
00250
00251 void ApplyOffset (
00252 double xoffset,
00253 double yoffset
00254 ) { trans2dshift(m_fwd,m_inv,xoffset,yoffset); }
00255
00256
00257 void ApplyOffset (
00258 const DPOINT2D& offset
00259 ) { trans2dshift(m_fwd,m_inv,offset.x,offset.y); }
00260
00261
00262 void ApplyOffsetReverse (
00263 double xoffset,
00264 double yoffset
00265 ) { trans2dshift(m_inv,m_fwd,xoffset,yoffset); }
00266
00267
00268 void ApplyOffsetReverse (
00269 const DPOINT2D& offset
00270 ) { trans2dshift(m_inv,m_fwd,offset.x,offset.y); }
00271
00272
00273 void ApplyRotation (
00274 double angle
00275 ) { trans2drot(m_fwd,m_inv,angle); }
00276
00277
00278 void ApplyScale (
00279 double scale
00280 ) { trans2dscale(m_fwd,m_inv,scale,scale); }
00281
00282
00283 void ApplyScale (
00284 double xscale,
00285 double yscale
00286 ) { trans2dscale(m_fwd,m_inv,xscale,yscale); }
00287
00288
00289 void ApplyScale (
00290 const DPOINT2D &scale
00291 ) { trans2dscale(m_fwd,m_inv,scale.x,scale.y); }
00292
00293
00294 void ApplyScaleReverse (
00295 double xscale,
00296 double yscale
00297 ) { trans2dscale(m_inv,m_fwd,xscale,yscale); }
00298
00299
00300 void ApplyScaleReverse (
00301 const DPOINT2D &scale
00302 ) { trans2dscale(m_inv,m_fwd,scale.x,scale.y); }
00303
00304
00305 void ApplyShear (
00306 double angle,
00307 AXIS axis
00308 ) { trans2dshear(m_fwd,m_inv,angle,static_cast<int>(axis)); }
00309
00310
00311 void Combine (
00312 const TRANS2D_AFFINE& trans1
00313 ) {
00314 trans2dmatrix(m_fwd,trans1.m_fwd);
00315 trans2dmatrix(m_inv,trans1.m_inv);
00316 }
00317
00318
00319 void Combine (
00320 const TRANS2D_AFFINE& trans1,
00321 const TRANS2D_AFFINE& trans2
00322 ) { trans2dmatrix2(m_fwd,m_inv,trans1.m_fwd,trans1.m_inv,trans2.m_fwd,trans2.m_inv); }
00323
00324
00325
00326 DPOINT2D ConvertForward (
00327 double x,
00328 double y
00329 ) const { return (DPOINT2D(trans2dx(x,y,m_fwd),trans2dy(x,y,m_fwd))); }
00330
00331
00332 void ConvertForward (
00333 double x,
00334 double y,
00335 double& ox,
00336 double& oy
00337 ) const { ox = trans2dx(x,y,m_fwd); oy = trans2dy(x,y,m_fwd); }
00338
00339
00340
00341 DPOINT2D ConvertForward (
00342 const DPOINT2D& ipoint
00343 ) const { return (DPOINT2D(trans2dx(ipoint.x,ipoint.y,m_fwd),trans2dy(ipoint.x,ipoint.y,m_fwd))); }
00344
00345
00346
00347 DPOINT3D ConvertForward (
00348 const DPOINT3D& ipoint
00349 ) const { return (DPOINT3D(trans2dx(ipoint.x,ipoint.y,m_fwd),trans2dy(ipoint.x,ipoint.y,m_fwd),ipoint.z)); }
00350
00351
00352 void ConvertForward (
00353 const DPOINT2D* ipoints,
00354 DPOINT2D* opoints,
00355 INT32 NumPoints
00356 ) const;
00357
00358
00359 void ConvertForward (
00360 const DPOINT3D* ipoints,
00361 DPOINT3D* opoints,
00362 INT32 NumPoints
00363 ) const;
00364
00365
00366
00367 DRECT2D ConvertForward (
00368 const DRECT2D& irect
00369 ) const {
00370 DRECT2D orect;
00371 Trans2DRect(m_fwd,&irect,&orect);
00372 return (orect);
00373 }
00374
00375
00376 void ConvertForward (
00377 const DRECT2D& irect,
00378 DRECT2D& orect
00379 ) const { Trans2DRect(m_fwd,&irect,&orect); }
00380
00381
00382
00383 DPOINT2D ConvertInverse (
00384 double x,
00385 double y
00386 ) const { return (DPOINT2D(trans2dx(x,y,m_inv),trans2dy(x,y,m_inv))); }
00387
00388
00389
00390 DPOINT2D ConvertInverse (
00391 const DPOINT2D& ipoint
00392 ) const { return (DPOINT2D(trans2dx(ipoint.x,ipoint.y,m_inv),trans2dy(ipoint.x,ipoint.y,m_inv))); }
00393
00394
00395
00396 DPOINT3D ConvertInverse (
00397 const DPOINT3D& ipoint
00398 ) const { return (DPOINT3D(trans2dx(ipoint.x,ipoint.y,m_inv),trans2dy(ipoint.x,ipoint.y,m_inv),ipoint.z)); }
00399
00400
00401 void ConvertInverse (
00402 const DPOINT2D* ipoints,
00403 DPOINT2D* opoints,
00404 INT32 NumPoints
00405 ) const;
00406
00407
00408 void ConvertInverse (
00409 const DPOINT3D* ipoints,
00410 DPOINT3D* opoints,
00411 INT32 NumPoints
00412 ) const;
00413
00414
00415
00416 DRECT2D ConvertInverse (
00417 const DRECT2D& irect
00418 ) const {
00419 DRECT2D orect;
00420 Trans2DRect(m_inv,&irect,&orect);
00421 return (orect);
00422 }
00423
00424
00425 void ConvertInverse (
00426 const DRECT2D& irect,
00427 DRECT2D& orect
00428 ) const { Trans2DRect(m_inv,&irect,&orect); }
00429
00430
00431 void DisectForward (
00432 double *xscale,
00433 double *yscale,
00434 double *rotangle = 0,
00435 double *shearangle = 0
00436 ) const { DisectTrans2D(m_fwd,xscale,yscale,rotangle,shearangle); }
00437
00438
00439 void DisectInverse (
00440 double *xscale,
00441 double *yscale,
00442 double *rotangle = 0,
00443 double *shearangle = 0
00444 ) const { DisectTrans2D(m_inv,xscale,yscale,rotangle,shearangle); }
00445
00446
00447 void GetMatrices (
00448 MAT3X3 fwd,
00449 MAT3X3 inv
00450 ) const { memcpy(fwd,m_fwd,sizeof(MAT3X3)); memcpy(inv,m_inv,sizeof(MAT3X3)); }
00451
00452
00453
00454 bool IsEquivalentTo (
00455 const TRANS2D_AFFINE& rhs
00456 ) const {
00457 for (int i = 0;(i < 3);++i) {
00458 for (int j = 0;(j < 3);++j) {
00459 if (fabs(m_fwd[i][j] - rhs.m_fwd[i][j]) > 0.0000001) return (false);
00460 }
00461 }
00462 return (true);
00463 }
00464
00465
00466
00467 bool IsIdentity (
00468 ) const {
00469 return (m_fwd[0][0] == 1.0 && m_fwd[1][1] == 1.0 && m_fwd[0][1] == 0.0 && m_fwd[0][2] == 0.0 && m_fwd[1][0] == 0.0 && m_fwd[1][2] == 0.0);
00470 }
00471
00472
00473 void ReverseDirection (
00474 ) {
00475 MAT3X3 temp;
00476 memcpy(temp,m_fwd,sizeof(MAT3X3));
00477 memcpy(m_fwd,m_inv,sizeof(MAT3X3));
00478 memcpy(m_inv,temp,sizeof(MAT3X3));
00479 }
00480
00481
00482 ERRVALUE SetCtrlPoint (
00483 const CTRLPOINT *cp,
00484 int numpoints,
00485 bool invert = false
00486 ) { return (FindBestTrans2DA(numpoints,cp,m_fwd,m_inv,(invert)?TRANS2DMODEL_OrientInvert:0)); }
00487
00488
00489 ERRVALUE SetCtrlPoint (
00490 const CTRLPOINT3 *cp,
00491 int numpoints,
00492 bool invert = false
00493 ) { return (FindBestTrans2D3A(numpoints,cp,m_fwd,m_inv,(invert)?TRANS2DMODEL_OrientInvert:0)); }
00494
00495
00496 void SetIdentity (
00497 ) { trans2dinit(m_fwd,m_inv); }
00498
00499
00500 void SetMatrices (
00501 const MAT3X3 fwd,
00502 const MAT3X3 inv
00503 ) { memcpy(m_fwd,fwd,sizeof(MAT3X3)); memcpy(m_inv,inv,sizeof(MAT3X3)); }
00504
00505 private:
00506 #ifndef GENERATING_DOXYGEN_OUTPUT
00507 MAT3X3 m_fwd;
00508 MAT3X3 m_inv;
00509
00510 friend class TRANS2D_MAPGEN;
00511 #endif // GENERATING_DOXYGEN_OUTPUT
00512 };
00513
00514
00515
00516
00517
00518
00519
00520 class TRANS2D_MAPGEN {
00521 public:
00522
00523
00524 enum DIRECTION {
00525 DIRECTION_Forward = TRANSDIR_Forward,
00526 DIRECTION_Inverse = TRANSDIR_Inverse
00527 };
00528
00529
00530 TRANS2D_MAPGEN (
00531 ) { TransGenInit(&m_transparm); }
00532
00533
00534 TRANS2D_MAPGEN (
00535 const TRANS2D_MAPGEN &rhs
00536 ) {
00537 TransGenInit(&m_transparm);
00538 TransGenCopy(&m_transparm,&rhs.m_transparm);
00539 }
00540
00541
00542 TRANS2D_MAPGEN (
00543 const TRANSPARM& transparm
00544 ) {
00545 TransGenInit(&m_transparm);
00546 TransGenCopy(&m_transparm,&transparm);
00547 }
00548
00549
00550 ~TRANS2D_MAPGEN (
00551 ) { TransGenFreeParm(&m_transparm); }
00552
00553
00554 TRANS2D_MAPGEN& operator= (
00555 const TRANS2D_MAPGEN &rhs
00556 ) {
00557 if (this != &rhs) {
00558 TransGenCopy(&m_transparm,&rhs.m_transparm);
00559 }
00560 return (*this);
00561 }
00562
00563
00564 TRANS2D_MAPGEN& operator= (
00565 const TRANSPARM &rhs
00566 ) {
00567 TransGenCopy(&m_transparm,&rhs);
00568 return (*this);
00569 }
00570
00571
00572 operator const TRANSPARM* (
00573 ) const { return (&m_transparm); }
00574
00575 void Clear (
00576 ) { TransGenFreeParm(&m_transparm); TransGenInit(&m_transparm); }
00577
00578
00579 ERRVALUE ConvertForward (
00580 const DPOINT2D& ipoint,
00581 DPOINT2D& opoint
00582 ) const { return (TransGenConvPointFwd(&m_transparm,&ipoint,&opoint)); }
00583
00584
00585 ERRVALUE ConvertForward (
00586 const DPOINT3D& ipoint,
00587 DPOINT3D& opoint
00588 ) const { opoint.z = ipoint.z; return (TransGenConvPointFwd(&m_transparm, &ipoint, &opoint)); }
00589
00590
00591 ERRVALUE ConvertForward (
00592 const DPOINT2D* ipoints,
00593 DPOINT2D* opoints,
00594 INT32 NumPoints
00595 ) const { return (TransGenConvPointSetFwd(&m_transparm,reinterpret_cast<const double*>(ipoints),NumPoints,2,reinterpret_cast<double*>(opoints))); }
00596
00597
00598 ERRVALUE ConvertForward (
00599 const DPOINT3D* ipoints,
00600 DPOINT3D* opoints,
00601 INT32 NumPoints
00602 ) const { return (TransGenConvPointSetFwd(&m_transparm,reinterpret_cast<const double*>(ipoints),NumPoints,3,reinterpret_cast<double*>(opoints))); }
00603
00604
00605 ERRVALUE ConvertForward (
00606 const void* ipoints,
00607 void* opoints,
00608 INT32 NumPoints,
00609 int NumDim
00610 ) const { return (TransGenConvPointSetFwd(&m_transparm,reinterpret_cast<const double*>(ipoints),NumPoints,NumDim,reinterpret_cast<double*>(opoints))); }
00611
00612
00613 ERRVALUE ConvertForward (
00614 const DRECT2D& irect,
00615 DRECT2D& orect,
00616 int sidepoints=0
00617 ) const { return (TransGenConvRectFwd(&m_transparm,&irect,&orect,sidepoints)); }
00618
00619
00620 INT32 ConvertForwardDense (
00621 const DPOINT2D* ipoint,
00622 INT32 iNumPoints,
00623 DPOINT2D** opoint
00624 ) const {
00625 INT32 oNumPoints;
00626 int err;
00627 if ((err = TransGenConvPointsFwd(&m_transparm,reinterpret_cast<const double*>(ipoint),iNumPoints,2,reinterpret_cast<double**>(opoint),&oNumPoints)) < 0) return (err);
00628 return (oNumPoints);
00629 }
00630
00631
00632 INT32 ConvertForwardDense (
00633 const DPOINT3D* ipoint,
00634 INT32 iNumPoints,
00635 DPOINT3D** opoint
00636 ) const {
00637 INT32 oNumPoints;
00638 int err;
00639 if ((err = TransGenConvPointsFwd(&m_transparm,reinterpret_cast<const double*>(ipoint),iNumPoints,3,reinterpret_cast<double**>(opoint),&oNumPoints)) < 0) return (err);
00640 return (oNumPoints);
00641 }
00642
00643
00644 ERRVALUE ConvertInverse (
00645 const DPOINT2D& ipoint,
00646 DPOINT2D& opoint
00647 ) const { return (TransGenConvPointInv(&m_transparm,&ipoint,&opoint)); }
00648
00649
00650 ERRVALUE ConvertInverse (
00651 const DPOINT3D& ipoint,
00652 DPOINT3D& opoint
00653 ) const { opoint.z = ipoint.z; return (TransGenConvPointInv(&m_transparm,&ipoint,&opoint)); }
00654
00655
00656 ERRVALUE ConvertInverse (
00657 const DPOINT2D* ipoints,
00658 DPOINT2D* opoints,
00659 INT32 NumPoints
00660 ) const { return (TransGenConvPointSetInv(&m_transparm,reinterpret_cast<const double*>(ipoints),NumPoints,2,reinterpret_cast<double*>(opoints))); }
00661
00662
00663 ERRVALUE ConvertInverse (
00664 const DPOINT3D* ipoints,
00665 DPOINT3D* opoints,
00666 INT32 NumPoints
00667 ) const { return (TransGenConvPointSetInv(&m_transparm,reinterpret_cast<const double*>(ipoints),NumPoints,3,reinterpret_cast<double*>(opoints))); }
00668
00669
00670 ERRVALUE ConvertInverse (
00671 const void* ipoints,
00672 void* opoints,
00673 INT32 NumPoints,
00674 int NumDim
00675 ) const { return (TransGenConvPointSetInv(&m_transparm,reinterpret_cast<const double*>(ipoints),NumPoints,NumDim,reinterpret_cast<double*>(opoints))); }
00676
00677
00678 ERRVALUE ConvertInverse (
00679 const DRECT2D& irect,
00680 DRECT2D& orect,
00681 int sidepoints=0
00682 ) const { return (TransGenConvRectInv(&m_transparm,&irect,&orect,sidepoints)); }
00683
00684
00685 INT32 ConvertInverseDense (
00686 const DPOINT2D* ipoint,
00687 INT32 iNumPoints,
00688 DPOINT2D** opoint
00689 ) const {
00690 INT32 oNumPoints;
00691 int err;
00692 if ((err = TransGenConvPointsInv(&m_transparm,reinterpret_cast<const double*>(ipoint),iNumPoints,2,reinterpret_cast<double**>(opoint),&oNumPoints)) < 0) return (err);
00693 return (oNumPoints);
00694 }
00695
00696
00697 INT32 ConvertInverseDense (
00698 const DPOINT3D* ipoint,
00699 INT32 iNumPoints,
00700 DPOINT3D** opoint
00701 ) const {
00702 INT32 oNumPoints;
00703 int err;
00704 if ((err = TransGenConvPointsInv(&m_transparm,reinterpret_cast<const double*>(ipoint),iNumPoints,3,reinterpret_cast<double**>(opoint),&oNumPoints)) < 0) return (err);
00705 return (oNumPoints);
00706 }
00707
00708
00709 ERRVALUE ConvertMapToMapForward (
00710 const DPOINT2D& ipoint,
00711 DPOINT2D& opoint
00712 ) const { return (TransGenConvPointMapToMapFwd(&m_transparm,&ipoint,&opoint)); }
00713
00714
00715 ERRVALUE ConvertMapToMapInverse (
00716 const DPOINT2D& ipoint,
00717 DPOINT2D& opoint
00718 ) const { return (TransGenConvPointMapToMapInv(&m_transparm,&ipoint,&opoint)); }
00719
00720
00721 ERRVALUE ConvertOutputToMap (
00722 const DPOINT2D& ipoint,
00723 DPOINT2D& opoint
00724 ) const { return (TransGenConvPointOutputToMap(&m_transparm,&ipoint,&opoint)); }
00725
00726
00727 void CopyInputToInput (
00728 const TRANSPARM& transparm
00729 ) {
00730 int err;
00731 if ((err = TransGenCopyInputParms(&m_transparm,&transparm)) < 0) {
00732
00733 }
00734 return;
00735 }
00736
00737
00738 void CopyInputToInput (
00739 const TRANS2D_MAPGEN& itrans
00740 ) { CopyInputToInput(itrans.m_transparm); }
00741
00742
00743 void CopyInputToOutput (
00744 const TRANSPARM& transparm
00745 ) {
00746 int err;
00747 if ((err = TransGenCopyInputToOutput(&m_transparm,&transparm)) < 0) {
00748
00749 }
00750 return;
00751 }
00752
00753
00754 void CopyInputToOutput (
00755 const TRANS2D_MAPGEN& itrans
00756 ) { CopyInputToOutput(itrans.m_transparm); }
00757
00758
00759 void CopyOutputToInput (
00760 const TRANSPARM& transparm
00761 ) {
00762 int err;
00763 if ((err = TransGenCopyOutputToInput(&m_transparm,&transparm)) < 0) {
00764
00765 }
00766 return;
00767 }
00768
00769
00770 void CopyOutputToInput (
00771 const TRANS2D_MAPGEN& itrans
00772 ) { CopyOutputToInput(itrans.m_transparm); }
00773
00774
00775 void CopyOutputToOutput (
00776 const TRANSPARM& transparm
00777 ) {
00778 int err;
00779 if ((err = TransGenCopyOutputParms(&m_transparm,&transparm)) < 0) {
00780
00781 }
00782 return;
00783 }
00784
00785
00786 void CopyOutputToOutput (
00787 const TRANS2D_MAPGEN& itrans
00788 ) { CopyOutputToOutput(itrans.m_transparm); }
00789
00790
00791 ERRVALUE DisectForward (
00792 const DPOINT2D& point,
00793 double *xscale,
00794 double *yscale,
00795 double *rotangle = 0,
00796 double *shearangle = 0,
00797 double size = 1.0
00798 ) const {
00799 return (TransGenDisectFwd(&m_transparm,&point,size,xscale,yscale,rotangle,shearangle));
00800 }
00801
00802
00803 ERRVALUE DisectInverse (
00804 const DPOINT2D& point,
00805 double *xscale,
00806 double *yscale,
00807 double *rotangle = 0,
00808 double *shearangle = 0,
00809 double size = 1.0
00810 ) const {
00811 return (TransGenDisectInv(&m_transparm,&point,size,xscale,yscale,rotangle,shearangle));
00812 }
00813
00814
00815
00816 ERRVALUE GetAffine (
00817 MAT3X3 fwd,
00818 MAT3X3 inv
00819 ) const { return (TransGenGetAffine(&m_transparm, fwd, inv)); }
00820
00821
00822
00823 ERRVALUE GetAffine (
00824 TRANS2D_AFFINE& trans
00825 ) const { return (TransGenGetAffine(&m_transparm, trans.m_fwd, trans.m_inv)); }
00826
00827
00828 const SPATREF::COORDREFSYS& GetInputMapCoordRefSys (
00829 ) const { return (TransGenGetInputMapCoordRefSys(m_transparm)); }
00830
00831
00832 UINT16 GetInputModel (
00833 ) const {
00834 return (TransGenGetInputModel(&m_transparm));
00835 }
00836
00837
00838 MAPPROJPARM GetInputProjection (
00839 ) const {
00840 MAPPROJPARM projparm;
00841 TransGenGetInputProj(&m_transparm,&projparm);
00842 return (projparm);
00843 }
00844
00845
00846 ERRVALUE GetInputTrans (
00847 TRANS2D_AFFINE& trans
00848 ) { return (TransGenGetInputTransAffine(&m_transparm,trans.m_fwd,trans.m_inv)); }
00849
00850
00851 ERRVALUE GetInputTrans (
00852 MAT3X3 fwd,
00853 MAT3X3 inv
00854 ) { return (TransGenGetInputTransAffine(&m_transparm,fwd,inv)); }
00855
00856
00857
00858 int GetInputTrans (
00859 CTRLPOINT3 **ctrlpoint
00860 ) { return (TransGenGetInputTransCtrlPoint(&m_transparm, ctrlpoint)); }
00861
00862
00863 ERRVALUE GetLocalAffine (
00864 const DPOINT2D& point,
00865 MAT3X3 fwd,
00866 MAT3X3 inv,
00867 double size = 1.0,
00868 UINT32 flags = 0
00869 ) { return (TransGenGetAffineLocal(&m_transparm, &point, size, fwd, inv, flags)); }
00870
00871
00872 ERRVALUE GetLocalAffine (
00873 const DPOINT2D& point,
00874 TRANS2D_AFFINE& trans,
00875 double size = 1.0,
00876 UINT32 flags = 0
00877 ) { return (TransGenGetAffineLocal(&m_transparm, &point, size, trans.m_fwd, trans.m_inv, flags)); }
00878
00879
00880 const SPATREF::COORDREFSYS& GetOutputMapCoordRefSys (
00881 ) const { return (TransGenGetOutputMapCoordRefSys(m_transparm)); }
00882
00883
00884 UINT16 GetOutputModel (
00885 ) const {
00886 return (TransGenGetOutputModel(&m_transparm));
00887 }
00888
00889
00890 MAPPROJPARM GetOutputProjection (
00891 ) const {
00892 MAPPROJPARM projparm;
00893 TransGenGetOutputProj(&m_transparm,&projparm);
00894 return (projparm);
00895 }
00896
00897
00898 ERRVALUE GetOutputTrans (
00899 TRANS2D_AFFINE& trans
00900 ) { return (TransGenGetOutputTransAffine(&m_transparm,trans.m_fwd,trans.m_inv)); }
00901
00902
00903 ERRVALUE GetOutputTrans (
00904 MAT3X3 fwd,
00905 MAT3X3 inv
00906 ) { return (TransGenGetOutputTransAffine(&m_transparm,fwd,inv)); }
00907
00908
00909
00910 int GetOutputTrans (
00911 CTRLPOINT3 **ctrlpoint
00912 ) { return (TransGenGetOutputTransCtrlPoint(&m_transparm, ctrlpoint)); }
00913
00914 const TRANSPARM& GetTransParm (
00915 ) const { return (m_transparm); }
00916
00917
00918 bool IsAffine (
00919 ) const { return (TransGenIsAffine(&m_transparm)); }
00920
00921
00922 bool IsIdentity (
00923 ) const { return (TransGenIsIdentity(&m_transparm)); }
00924
00925
00926 bool IsInputTransIdentity (
00927 ) const { return (TransGenIsInputTransIdentity(&m_transparm)); }
00928
00929
00930 bool IsOutputTransIdentity (
00931 ) const { return (TransGenIsOutputTransIdentity(&m_transparm)); }
00932
00933
00934 bool IsReversible (
00935 ) const { return (TransGenIsReversible(&m_transparm)); }
00936
00937
00938 ERRVALUE ReadGeoreference (
00939 int fhandle,
00940 RVCINODENUM inode,
00941 bool dooutput = false
00942 ) {
00943 return (MfReadGeorefTransParm(fhandle,inode,0,&m_transparm,(dooutput)?RVCGREF_TransGenOutput:0));
00944 }
00945
00946
00947
00948
00949 ERRVALUE SetAffineApproximation (
00950 const DRECT2D& rect,
00951 double tolerance,
00952 UINT32 coord
00953 ) { return (TransGenSetAffineApprox(&m_transparm,&rect,tolerance,static_cast<UINT32>(coord))); }
00954
00955
00956
00957
00958
00959 void SetExtrapolation (
00960 bool extrapolate
00961 ) { TransGenSetExtrapOutside(&m_transparm,extrapolate); }
00962
00963
00964 void SetFullTransAffine (
00965 const TRANS2D_AFFINE& trans
00966 ) { TransGenSetFullTransAffine(&m_transparm,trans.m_fwd,trans.m_inv); }
00967
00968
00969 ERRVALUE SetInputBounds (
00970 const DRECT2D& boundrect
00971 ) { return (TransGenSetInputBound(&m_transparm,&boundrect)); }
00972
00973
00974 void SetInputMaxError (
00975 double maxerror
00976 ) {
00977 TransGenSetInputInsertMaxError(&m_transparm,maxerror);
00978 TransGenSetDoInsert(&m_transparm,1);
00979 }
00980
00981
00982 ERRVALUE SetInputMapCoordRefSys (
00983 const SPATREF::COORDREFSYS& MapCRS
00984 ) { return (TransGenSetInputMapCoordRefSys(m_transparm,MapCRS)); }
00985
00986
00987 ERRVALUE SetInputProjection (
00988 const MAPPROJPARM& projparm
00989 ) { return ( TransGenSetInputProj(&m_transparm,&projparm)); }
00990
00991
00992 void SetInputTrans (
00993 const TRANS2D_AFFINE& trans
00994 ) { TransGenSetInputTransAffine(&m_transparm,trans.m_fwd,trans.m_inv); }
00995
00996
00997 void SetInputTrans (
00998 const MAT3X3 fwd,
00999 const MAT3X3 inv
01000 ) { TransGenSetInputTransAffine(&m_transparm,fwd,inv); }
01001
01002
01003 ERRVALUE SetInputTrans (
01004 const CTRLPOINT3 *CtrlPoint,
01005 INT32 NumPoints,
01006 UINT16 Model
01007 ) { return (TransGenSetInputTransCtrlPoint(&m_transparm,CtrlPoint,NumPoints,Model)); }
01008
01009
01010 void SetInputTransIdentity (
01011 ) { TransGenSetInputTransIdentity(&m_transparm); }
01012
01013
01014 void SetMaxVertices (
01015 INT32 MaxVertices
01016 ) { TransGenSetMaxInsertVertices(&m_transparm, MaxVertices); }
01017
01018
01019 ERRVALUE SetOutputBounds (
01020 const DRECT2D& boundrect
01021 ) { return (TransGenSetOutputBound(&m_transparm,&boundrect)); }
01022
01023
01024 void SetOutputMaxError (
01025 double maxerror
01026 ) {
01027 TransGenSetOutputInsertMaxError(&m_transparm,maxerror);
01028 TransGenSetDoInsert(&m_transparm,1);
01029 }
01030
01031
01032 ERRVALUE SetOutputMapCoordRefSys (
01033 const SPATREF::COORDREFSYS& MapCRS
01034 ) { return (TransGenSetOutputMapCoordRefSys(m_transparm,MapCRS)); }
01035
01036
01037 ERRVALUE SetOutputProjection (
01038 const MAPPROJPARM& projparm
01039 ) { return (TransGenSetOutputProj(&m_transparm,&projparm)); }
01040
01041
01042 void SetOutputTrans (
01043 const TRANS2D_AFFINE& trans
01044 ) { TransGenSetOutputTransAffine(&m_transparm,trans.m_fwd,trans.m_inv); }
01045
01046
01047 void SetOutputTrans (
01048 const MAT3X3 fwd,
01049 const MAT3X3 inv
01050 ) { TransGenSetOutputTransAffine(&m_transparm,fwd,inv); }
01051
01052
01053 ERRVALUE SetOutputTrans (
01054 const CTRLPOINT3 *CtrlPoint,
01055 INT32 NumPoints,
01056 UINT16 Model
01057 ) { return (TransGenSetOutputTransCtrlPoint(&m_transparm,CtrlPoint,NumPoints,Model)); }
01058
01059
01060 void SetOutputTransIdentity (
01061 ) { TransGenSetOutputTransIdentity(&m_transparm); }
01062
01063
01064
01065
01066
01067 void SetPrimaryDirection (
01068 DIRECTION direction
01069 ) { TransGenSetPrimaryDirection(&m_transparm,static_cast<UINT8>(direction)); }
01070
01071 ERRVALUE Update (
01072 ) { return (TransGenUpdate(&m_transparm)); }
01073
01074
01075 private:
01076 #ifndef GENERATING_DOXYGEN_OUTPUT
01077 TRANSPARM m_transparm;
01078 #endif // GENERATING_DOXYGEN_OUTPUT
01079 };
01080
01081
01082 #endif