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