LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/cad/libopencad - cadgeometry.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 146 639 22.8 %
Date: 2024-11-21 22:18:42 Functions: 50 179 27.9 %

          Line data    Source code
       1             : /*******************************************************************************
       2             :  *  Project: libopencad
       3             :  *  Purpose: OpenSource CAD formats support library
       4             :  *  Author: Alexandr Borzykh, mush3d at gmail.com
       5             :  *  Author: Dmitry Baryshnikov, bishop.dev@gmail.com
       6             :  *  Language: C++
       7             :  *******************************************************************************
       8             :  *  The MIT License (MIT)
       9             :  *
      10             :  *  Copyright (c) 2016 Alexandr Borzykh
      11             :  *  Copyright (c) 2016 NextGIS, <info@nextgis.com>
      12             :  *
      13             :   * SPDX-License-Identifier: MIT
      14             :  *******************************************************************************/
      15             : #include "cadgeometry.h"
      16             : 
      17             : #include <cmath>
      18             : #include <iostream>
      19             : 
      20             : using namespace std;
      21             : 
      22             : //------------------------------------------------------------------------------
      23             : // CADGeometry
      24             : //------------------------------------------------------------------------------
      25             : 
      26           0 : void Matrix::translate( const CADVector& vector )
      27             : {
      28           0 :     double a00 = matrix[0];
      29           0 :     double a01 = matrix[1];
      30           0 :     double a02 = matrix[2];
      31           0 :     double a10 = matrix[3];
      32           0 :     double a11 = matrix[4];
      33           0 :     double a12 = matrix[5];
      34           0 :     double a20 = matrix[6];
      35           0 :     double a21 = matrix[7];
      36           0 :     double a22 = matrix[8];
      37             : 
      38           0 :     matrix[6] = vector.getX() * a00 + vector.getY() * a10 + a20;
      39           0 :     matrix[7] = vector.getX() * a01 + vector.getY() * a11 + a21;
      40           0 :     matrix[8] = vector.getX() * a02 + vector.getY() * a12 + a22;
      41           0 : }
      42             : 
      43           0 : void Matrix::rotate( double rotation )
      44             : {
      45           0 :     const double s = sin( rotation );
      46           0 :     const double c = cos( rotation );
      47           0 :     double a00 = matrix[0];
      48           0 :     double a01 = matrix[1];
      49           0 :     double a02 = matrix[2];
      50           0 :     double a10 = matrix[3];
      51           0 :     double a11 = matrix[4];
      52           0 :     double a12 = matrix[5];
      53             : 
      54           0 :     matrix[0] = c * a00 + s * a10;
      55           0 :     matrix[1] = c * a01 + s * a11;
      56           0 :     matrix[2] = c * a02 + s * a12;
      57             : 
      58           0 :     matrix[3] = c * a10 - s * a00;
      59           0 :     matrix[4] = c * a11 - s * a01;
      60           0 :     matrix[5] = c * a12 - s * a02;
      61           0 : }
      62             : 
      63           0 : void Matrix::scale( const CADVector& vector )
      64             : {
      65           0 :     matrix[0] *= vector.getX();
      66           0 :     matrix[1] *= vector.getX();
      67           0 :     matrix[2] *= vector.getX();
      68           0 :     matrix[3] *= vector.getY();
      69           0 :     matrix[4] *= vector.getY();
      70           0 :     matrix[5] *= vector.getY();
      71           0 : }
      72             : 
      73           0 : CADVector Matrix::multiply( const CADVector& vector ) const
      74             : {
      75           0 :     CADVector out;
      76           0 :     out.setX( vector.getX() * matrix[0] + vector.getY() * matrix[1] + vector.getZ() * matrix[2] );
      77           0 :     out.setY( vector.getX() * matrix[3] + vector.getY() * matrix[4] + vector.getZ() * matrix[5] );
      78           0 :     out.setZ( vector.getX() * matrix[6] + vector.getY() * matrix[7] + vector.getZ() * matrix[8] );
      79           0 :     return out;
      80             : }
      81             : 
      82             : //------------------------------------------------------------------------------
      83             : // CADGeometry
      84             : //------------------------------------------------------------------------------
      85             : 
      86          19 : CADGeometry::CADGeometry() :
      87             :     geometryType( UNDEFINED ),
      88          19 :     m_thickness( 0 )
      89             : {
      90          19 :     geometry_color.R = 0;
      91          19 :     geometry_color.G = 0;
      92          19 :     geometry_color.B = 0;
      93          19 : }
      94             : 
      95          27 : CADGeometry::~CADGeometry()
      96             : {
      97             : 
      98          27 : }
      99             : 
     100          13 : CADGeometry::GeometryType CADGeometry::getType() const
     101             : {
     102          13 :     return geometryType;
     103             : }
     104             : 
     105          13 : double CADGeometry::getThickness() const
     106             : {
     107          13 :     return m_thickness;
     108             : }
     109             : 
     110          13 : void CADGeometry::setThickness( double thickness )
     111             : {
     112          13 :     m_thickness = thickness;
     113          13 : }
     114             : 
     115          13 : RGBColor CADGeometry::getColor() const
     116             : {
     117          13 :     return geometry_color;
     118             : }
     119             : 
     120          17 : void CADGeometry::setColor( RGBColor color )
     121             : {
     122          17 :     geometry_color = color;
     123          17 : }
     124             : 
     125          16 : vector<string> CADGeometry::getEED() const
     126             : {
     127          16 :     return asEED;
     128             : }
     129             : 
     130          17 : void CADGeometry::setEED( const vector<string>& eed )
     131             : {
     132          17 :     asEED = eed;
     133          17 : }
     134             : 
     135          13 : vector<CADAttrib> CADGeometry::getBlockAttributes() const
     136             : {
     137          13 :     return blockAttributes;
     138             : }
     139             : 
     140           0 : void CADGeometry::setBlockAttributes( const vector<CADAttrib>& data )
     141             : {
     142           0 :     blockAttributes = data;
     143           0 : }
     144             : 
     145             : //------------------------------------------------------------------------------
     146             : // CADUnknown
     147             : //------------------------------------------------------------------------------
     148           0 : CADUnknown::CADUnknown()
     149             : {
     150           0 : }
     151             : 
     152           0 : void CADUnknown::transform( const Matrix& /*matrix*/)
     153             : {
     154           0 : }
     155             : 
     156           0 : void CADUnknown::print() const
     157             : {
     158           0 :     cout << "|---------Unhandled---------|\n\n";
     159           0 : }
     160             : 
     161             : //------------------------------------------------------------------------------
     162             : // CADPoint3D
     163             : //------------------------------------------------------------------------------
     164             : 
     165          16 : CADPoint3D::CADPoint3D() :
     166          16 :     xAxisAng( 0.0 )
     167             : {
     168          16 :     geometryType = CADGeometry::POINT;
     169          16 : }
     170             : 
     171           2 : CADPoint3D::CADPoint3D( const CADVector& positionIn, double thicknessIn ) :
     172             :     position( positionIn),
     173           2 :     xAxisAng( 0.0 )
     174             : {
     175           2 :     m_thickness = thicknessIn;
     176           2 :     geometryType = CADGeometry::POINT;
     177           2 : }
     178             : 
     179          32 : CADVector CADPoint3D::getPosition() const
     180             : {
     181          32 :     return position;
     182             : }
     183             : 
     184          16 : void CADPoint3D::setPosition( const CADVector& value )
     185             : {
     186          16 :     position = value;
     187          16 : }
     188             : 
     189           0 : CADVector CADPoint3D::getExtrusion() const
     190             : {
     191           0 :     return extrusion;
     192             : }
     193             : 
     194          11 : void CADPoint3D::setExtrusion( const CADVector& value )
     195             : {
     196          11 :     extrusion = value;
     197          11 : }
     198             : 
     199           0 : double CADPoint3D::getXAxisAng() const
     200             : {
     201           0 :     return xAxisAng;
     202             : }
     203             : 
     204           3 : void CADPoint3D::setXAxisAng( double value )
     205             : {
     206           3 :     xAxisAng = value;
     207           3 : }
     208             : 
     209           0 : void CADPoint3D::print() const
     210             : {
     211             :     cout << "|---------Point---------|\n" <<
     212           0 :         "Position: \t" << position.getX() <<
     213           0 :                   "\t" << position.getY() <<
     214           0 :                   "\t" << position.getZ() << "\n\n";
     215           0 : }
     216             : 
     217           0 : void CADPoint3D::transform( const Matrix& matrix )
     218             : {
     219           0 :     position = matrix.multiply( position );
     220           0 : }
     221             : 
     222             : //------------------------------------------------------------------------------
     223             : // CADLine
     224             : //------------------------------------------------------------------------------
     225             : 
     226           0 : CADLine::CADLine()
     227             : {
     228           0 :     geometryType = CADGeometry::LINE;
     229           0 : }
     230             : 
     231           1 : CADLine::CADLine( const CADPoint3D& startIn, const CADPoint3D& endIn ) :
     232             :     start( startIn ),
     233           1 :     end( endIn )
     234             : {
     235           1 :     geometryType = CADGeometry::LINE;
     236           1 : }
     237             : 
     238           3 : CADPoint3D CADLine::getStart() const
     239             : {
     240           3 :     return start;
     241             : }
     242             : 
     243           0 : void CADLine::setStart( const CADPoint3D& value )
     244             : {
     245           0 :     start = value;
     246           0 : }
     247             : 
     248           3 : CADPoint3D CADLine::getEnd() const
     249             : {
     250           3 :     return end;
     251             : }
     252             : 
     253           0 : void CADLine::setEnd( const CADPoint3D& value )
     254             : {
     255           0 :     end = value;
     256           0 : }
     257             : 
     258           0 : void CADLine::print() const
     259             : {
     260             :     cout << "|---------Line---------|\n" <<
     261           0 :         "Start Position: \t" << start.getPosition().getX() <<
     262           0 :                         "\t" << start.getPosition().getY() <<
     263           0 :                         "\t" << start.getPosition().getZ() << "\n" <<
     264           0 :         "End Position: \t" << end.getPosition().getX() <<
     265           0 :                       "\t" << end.getPosition().getY() <<
     266           0 :                       "\t" << end.getPosition().getZ() << "\n\n";
     267           0 : }
     268             : 
     269           0 : void CADLine::transform( const Matrix& matrix )
     270             : {
     271           0 :     start.transform( matrix );
     272           0 :     end.transform( matrix );
     273           0 : }
     274             : 
     275             : //------------------------------------------------------------------------------
     276             : // CADCircle
     277             : //------------------------------------------------------------------------------
     278             : 
     279           4 : CADCircle::CADCircle() : radius( 0.0f )
     280             : {
     281           4 :     geometryType = CADGeometry::CIRCLE;
     282           4 : }
     283             : 
     284          12 : double CADCircle::getRadius() const
     285             : {
     286          12 :     return radius;
     287             : }
     288             : 
     289           3 : void CADCircle::setRadius( double value )
     290             : {
     291           3 :     radius = value;
     292           3 : }
     293             : 
     294           0 : void CADCircle::print() const
     295             : {
     296             :     cout << "|---------Circle---------|\n" <<
     297           0 :         "Position: \t" << position.getX() <<
     298           0 :                   "\t" << position.getY() <<
     299           0 :                   "\t" << position.getZ() << "\n" <<
     300           0 :         "Radius: " << radius << "\n\n";
     301           0 : }
     302             : 
     303             : //------------------------------------------------------------------------------
     304             : // CADArc
     305             : //------------------------------------------------------------------------------
     306             : 
     307           1 : CADArc::CADArc() : CADCircle(),
     308             :     startingAngle( 0.0f ),
     309           1 :     endingAngle( 0.0f )
     310             : {
     311           1 :     geometryType = CADGeometry::ARC;
     312           1 : }
     313             : 
     314           1 : double CADArc::getStartingAngle() const
     315             : {
     316           1 :     return startingAngle;
     317             : }
     318             : 
     319           1 : void CADArc::setStartingAngle( double value )
     320             : {
     321           1 :     startingAngle = value;
     322           1 : }
     323             : 
     324           1 : double CADArc::getEndingAngle() const
     325             : {
     326           1 :     return endingAngle;
     327             : }
     328             : 
     329           1 : void CADArc::setEndingAngle( double value )
     330             : {
     331           1 :     endingAngle = value;
     332           1 : }
     333             : 
     334           0 : void CADArc::print() const
     335             : {
     336             :     cout << "|---------Arc---------|\n" <<
     337           0 :         "Position: \t" << position.getX() <<
     338           0 :                   "\t" << position.getY() <<
     339           0 :                   "\t" << position.getZ() << "\n" <<
     340           0 :         "Radius: \t" << radius << "\n" <<
     341           0 :         "Beg & End angles: \t" << startingAngle <<
     342           0 :                           "\t" << endingAngle << "\n\n";
     343           0 : }
     344             : 
     345             : //------------------------------------------------------------------------------
     346             : // CADPolyline3D
     347             : //------------------------------------------------------------------------------
     348             : 
     349           0 : CADPolyline3D::CADPolyline3D()
     350             : {
     351           0 :     geometryType = CADGeometry::POLYLINE3D;
     352           0 : }
     353             : 
     354           0 : void CADPolyline3D::addVertex( const CADVector& vertex )
     355             : {
     356           0 :     vertices.push_back( vertex );
     357           0 : }
     358             : 
     359           0 : size_t CADPolyline3D::getVertexCount() const
     360             : {
     361           0 :     return vertices.size();
     362             : }
     363             : 
     364           0 : CADVector& CADPolyline3D::getVertex( size_t index )
     365             : {
     366           0 :     return vertices[index];
     367             : }
     368             : 
     369           0 : void CADPolyline3D::print() const
     370             : {
     371           0 :     cout << "|------Polyline3D-----|\n";
     372           0 :     for( size_t i = 0; i < vertices.size(); ++i )
     373             :     {
     374           0 :         cout << "  #" << i <<
     375           0 :             ". X: " << vertices[i].getX() <<
     376           0 :             ", Y: " << vertices[i].getY() << "\n";
     377             :     }
     378           0 :     cout << "\n";
     379           0 : }
     380             : 
     381           0 : void CADPolyline3D::transform( const Matrix& matrix )
     382             : {
     383           0 :     for( CADVector& vertex : vertices )
     384             :     {
     385           0 :         vertex = matrix.multiply( vertex );
     386             :     }
     387           0 : }
     388             : 
     389             : //------------------------------------------------------------------------------
     390             : // CADLWPolyline
     391             : //------------------------------------------------------------------------------
     392             : 
     393           0 : CADLWPolyline::CADLWPolyline() :
     394             :     bClosed( false ),
     395             :     constWidth( 0.0 ),
     396           0 :     elevation( 0.0 )
     397             : {
     398           0 :     geometryType = CADGeometry::LWPOLYLINE;
     399           0 : }
     400             : 
     401           0 : void CADLWPolyline::print() const
     402             : {
     403           0 :     cout << "|------LWPolyline-----|\n";
     404           0 :     for( size_t i = 0; i < vertices.size(); ++i )
     405             :     {
     406           0 :         cout << "  #" << i <<
     407           0 :             ". X: " << vertices[i].getX() <<
     408           0 :             ", Y: " << vertices[i].getY() << "\n";
     409             :     }
     410           0 :     cout << "\n";
     411           0 : }
     412             : 
     413           0 : double CADLWPolyline::getConstWidth() const
     414             : {
     415           0 :     return constWidth;
     416             : }
     417             : 
     418           0 : void CADLWPolyline::setConstWidth( double value )
     419             : {
     420           0 :     constWidth = value;
     421           0 : }
     422             : 
     423           0 : double CADLWPolyline::getElevation() const
     424             : {
     425           0 :     return elevation;
     426             : }
     427             : 
     428           0 : void CADLWPolyline::setElevation( double value )
     429             : {
     430           0 :     elevation = value;
     431           0 : }
     432             : 
     433           0 : CADVector CADLWPolyline::getVectExtrusion() const
     434             : {
     435           0 :     return vectExtrusion;
     436             : }
     437             : 
     438           0 : void CADLWPolyline::setVectExtrusion( const CADVector& value )
     439             : {
     440           0 :     vectExtrusion = value;
     441           0 : }
     442             : 
     443           0 : vector<pair<double, double> > CADLWPolyline::getWidths() const
     444             : {
     445           0 :     return widths;
     446             : }
     447             : 
     448           0 : void CADLWPolyline::setWidths( const vector<pair<double, double> >& value )
     449             : {
     450           0 :     widths = value;
     451           0 : }
     452             : 
     453           0 : vector<double> CADLWPolyline::getBulges() const
     454             : {
     455           0 :     return bulges;
     456             : }
     457             : 
     458           0 : void CADLWPolyline::setBulges( const vector<double>& value )
     459             : {
     460           0 :     bulges = value;
     461           0 : }
     462             : 
     463           0 : bool CADLWPolyline::isClosed() const
     464             : {
     465           0 :     return bClosed;
     466             : }
     467             : 
     468           0 : void CADLWPolyline::setClosed( bool state )
     469             : {
     470           0 :     bClosed = state;
     471           0 : }
     472             : 
     473             : //------------------------------------------------------------------------------
     474             : // CADEllipse
     475             : //------------------------------------------------------------------------------
     476             : 
     477           1 : CADEllipse::CADEllipse() : CADArc(),
     478           1 :     axisRatio( 0.0f )
     479             : {
     480           1 :     geometryType = CADGeometry::ELLIPSE;
     481           1 : }
     482             : 
     483           1 : double CADEllipse::getAxisRatio() const
     484             : {
     485           1 :     return axisRatio;
     486             : }
     487             : 
     488           1 : void CADEllipse::setAxisRatio( double value )
     489             : {
     490           1 :     axisRatio = value;
     491           1 : }
     492             : 
     493           1 : CADVector CADEllipse::getSMAxis()
     494             : {
     495           1 :     return vectSMAxis;
     496             : }
     497             : 
     498           1 : void CADEllipse::setSMAxis( const CADVector& SMAxisVect )
     499             : {
     500           1 :     vectSMAxis = SMAxisVect;
     501           1 : }
     502             : 
     503           0 : void CADEllipse::print() const
     504             : {
     505             :     cout << "|---------Ellipse---------|\n" <<
     506           0 :         "Position: \t" << position.getX() <<
     507           0 :                   "\t" << position.getY() <<
     508           0 :                   "\t" << position.getZ() << "\n" <<
     509           0 :         "Beg & End angles: \t" << startingAngle <<
     510           0 :                           "\t" << endingAngle << "\n\n";
     511           0 : }
     512             : 
     513             : //------------------------------------------------------------------------------
     514             : // CADText
     515             : //------------------------------------------------------------------------------
     516             : 
     517          11 : CADText::CADText() : CADPoint3D(),
     518             :     obliqueAngle( 0 ),
     519             :     rotationAngle( 0 ),
     520          11 :     height( 0 )
     521             : {
     522          11 :     geometryType = CADGeometry::TEXT;
     523          11 : }
     524             : 
     525           6 : string CADText::getTextValue() const
     526             : {
     527           6 :     return textValue;
     528             : }
     529             : 
     530          11 : void CADText::setTextValue( const string& value )
     531             : {
     532          11 :     textValue = value;
     533          11 : }
     534             : 
     535           0 : double CADText::getHeight() const
     536             : {
     537           0 :     return height;
     538             : }
     539             : 
     540          11 : void CADText::setHeight( double value )
     541             : {
     542          11 :     height = value;
     543          11 : }
     544             : 
     545           0 : double CADText::getRotationAngle() const
     546             : {
     547           0 :     return rotationAngle;
     548             : }
     549             : 
     550           9 : void CADText::setRotationAngle( double value )
     551             : {
     552           9 :     rotationAngle = value;
     553           9 : }
     554             : 
     555           0 : double CADText::getObliqueAngle() const
     556             : {
     557           0 :     return obliqueAngle;
     558             : }
     559             : 
     560           9 : void CADText::setObliqueAngle( double value )
     561             : {
     562           9 :     obliqueAngle = value;
     563           9 : }
     564             : 
     565           0 : void CADText::print() const
     566             : {
     567             :     cout << "|---------Text---------|\n" <<
     568           0 :         "Position: \t" << position.getX() <<
     569           0 :                   "\t" << position.getY() << "\n" <<
     570           0 :         "Text value: \t" << textValue << "\n\n";
     571           0 : }
     572             : 
     573             : //------------------------------------------------------------------------------
     574             : // CADRay
     575             : //------------------------------------------------------------------------------
     576             : 
     577           0 : CADRay::CADRay() : CADPoint3D()
     578             : {
     579           0 :     geometryType = CADGeometry::RAY;
     580           0 : }
     581             : 
     582           0 : CADVector CADRay::getVectVector() const
     583             : {
     584           0 :     return extrusion;
     585             : }
     586             : 
     587           0 : void CADRay::setVectVector( const CADVector& value )
     588             : {
     589           0 :     extrusion = value;
     590           0 : }
     591             : 
     592           0 : void CADRay::print() const
     593             : {
     594             :     cout << "|---------Ray---------|\n" <<
     595           0 :         "Position: \t" << position.getX() <<
     596           0 :                   "\t" << position.getY() << "\n" <<
     597           0 :         "Vector: \t" << extrusion.getX() <<
     598           0 :                 "\t" << extrusion.getY() << "\n\n";
     599           0 : }
     600             : 
     601             : //------------------------------------------------------------------------------
     602             : // CADHatch
     603             : //------------------------------------------------------------------------------
     604             : 
     605           0 : CADHatch::CADHatch()
     606             : {
     607           0 :     geometryType = CADGeometry::HATCH;
     608           0 : }
     609             : 
     610             : //------------------------------------------------------------------------------
     611             : // CADSpline
     612             : //------------------------------------------------------------------------------
     613             : 
     614           0 : CADSpline::CADSpline() :
     615             :     scenario( 0 ),
     616             :     rational( false ),
     617             :     closed( false ),
     618             :     weight( false ),
     619             :     fitTolerance( 0.0 ),
     620           0 :     degree( 0 )
     621             : {
     622           0 :     geometryType = CADGeometry::SPLINE;
     623           0 : }
     624             : 
     625           0 : void CADSpline::print() const
     626             : {
     627             : 
     628             :     cout << "|---------Spline---------|\n" <<
     629           0 :         "Is rational: \t" << rational << "\n" <<
     630           0 :         "Is closed: \t" << closed << "\n" <<
     631           0 :         "Control pts count: " << avertCtrlPoints.size() << "\n";
     632           0 :     for( size_t j = 0; j < avertCtrlPoints.size(); ++j )
     633             :     {
     634           0 :         cout << "  #" << j << ".\t" << avertCtrlPoints[j].getX() <<
     635           0 :                                "\t" << avertCtrlPoints[j].getY() <<
     636           0 :                                "\t" << avertCtrlPoints[j].getZ() << "\t";
     637           0 :         if( weight == true )
     638           0 :             cout << ctrlPointsWeight[j] << "\n";
     639             :         else
     640           0 :             cout << "\n";
     641             :     }
     642             : 
     643           0 :     cout << "Fit pts count: " << averFitPoints.size() << "\n";
     644           0 :     for( size_t j = 0; j < averFitPoints.size(); ++j )
     645             :     {
     646           0 :         cout << "  #" << j << ".\t" << averFitPoints[j].getX() <<
     647           0 :                                "\t" << averFitPoints[j].getY() <<
     648           0 :                                "\t" << averFitPoints[j].getZ() << "\n";
     649             :     }
     650           0 :     cout << "\n";
     651           0 : }
     652             : 
     653           0 : void CADSpline::transform( const Matrix& matrix )
     654             : {
     655           0 :     for( CADVector& pt : avertCtrlPoints )
     656           0 :         pt = matrix.multiply( pt );
     657           0 :     for( CADVector& pt : averFitPoints )
     658           0 :         pt = matrix.multiply( pt );
     659           0 : }
     660             : 
     661           0 : long CADSpline::getScenario() const
     662             : {
     663           0 :     return scenario;
     664             : }
     665             : 
     666           0 : void CADSpline::setScenario( long value )
     667             : {
     668           0 :     scenario = value;
     669           0 : }
     670             : 
     671           0 : bool CADSpline::isRational() const
     672             : {
     673           0 :     return rational;
     674             : }
     675             : 
     676           0 : void CADSpline::setRational( bool value )
     677             : {
     678           0 :     rational = value;
     679           0 : }
     680             : 
     681           0 : bool CADSpline::isClosed() const
     682             : {
     683           0 :     return closed;
     684             : }
     685             : 
     686           0 : void CADSpline::setClosed( bool value )
     687             : {
     688           0 :     closed = value;
     689           0 : }
     690             : 
     691           0 : void CADSpline::addControlPointsWeight( double p_weight )
     692             : {
     693           0 :     ctrlPointsWeight.push_back( p_weight );
     694           0 : }
     695             : 
     696           0 : void CADSpline::addControlPoint( const CADVector& point )
     697             : {
     698           0 :     avertCtrlPoints.push_back( point );
     699           0 : }
     700             : 
     701           0 : void CADSpline::addFitPoint( const CADVector& point )
     702             : {
     703           0 :     averFitPoints.push_back( point );
     704           0 : }
     705             : 
     706           0 : bool CADSpline::getWeight() const
     707             : {
     708           0 :     return weight;
     709             : }
     710             : 
     711           0 : void CADSpline::setWeight( bool value )
     712             : {
     713           0 :     weight = value;
     714           0 : }
     715             : 
     716           0 : double CADSpline::getFitTolerance() const
     717             : {
     718           0 :     return fitTolerance;
     719             : }
     720             : 
     721           0 : void CADSpline::setFitTolerance( double value )
     722             : {
     723           0 :     fitTolerance = value;
     724           0 : }
     725             : 
     726           0 : long CADSpline::getDegree() const
     727             : {
     728           0 :     return degree;
     729             : }
     730             : 
     731           0 : void CADSpline::setDegree( long value )
     732             : {
     733           0 :     degree = value;
     734           0 : }
     735             : 
     736           0 : vector<CADVector>& CADSpline::getControlPoints()
     737             : {
     738           0 :     return avertCtrlPoints;
     739             : }
     740             : 
     741           0 : vector<CADVector>& CADSpline::getFitPoints()
     742             : {
     743           0 :     return averFitPoints;
     744             : }
     745             : 
     746           0 : vector<double>& CADSpline::getControlPointsWeights()
     747             : {
     748           0 :     return ctrlPointsWeight;
     749             : }
     750             : 
     751             : //------------------------------------------------------------------------------
     752             : // CADSolid
     753             : //------------------------------------------------------------------------------
     754             : 
     755           0 : CADSolid::CADSolid() :
     756           0 :     elevation( 0.0 )
     757             : {
     758           0 :     geometryType = CADGeometry::SOLID;
     759           0 : }
     760             : 
     761           0 : void CADSolid::print() const
     762             : {
     763           0 :     cout << "|---------Solid---------|\n";
     764           0 :     for( size_t i = 0; i < avertCorners.size(); ++i )
     765             :     {
     766           0 :         cout << "  #" << i << ".\t" << avertCorners[i].getX() <<
     767           0 :                                "\t" << avertCorners[i].getY() << "\n" <<
     768           0 :                 "Elevation: " << elevation << "\n";
     769             :     }
     770           0 :     cout << "\n";
     771           0 : }
     772             : 
     773           0 : void CADSolid::transform( const Matrix& matrix )
     774             : {
     775           0 :     CADPoint3D::transform( matrix );
     776           0 :     for( CADVector& corner : avertCorners )
     777           0 :         corner = matrix.multiply( corner );
     778           0 : }
     779             : 
     780           0 : double CADSolid::getElevation() const
     781             : {
     782           0 :     return elevation;
     783             : }
     784             : 
     785           0 : void CADSolid::setElevation( double value )
     786             : {
     787           0 :     elevation = value;
     788           0 : }
     789             : 
     790           0 : void CADSolid::addCorner( const CADVector& corner )
     791             : {
     792           0 :     avertCorners.push_back( corner );
     793           0 : }
     794             : 
     795           0 : vector<CADVector> CADSolid::getCorners()
     796             : {
     797           0 :     return avertCorners;
     798             : }
     799             : 
     800             : //------------------------------------------------------------------------------
     801             : // CADImage
     802             : //------------------------------------------------------------------------------
     803             : 
     804           0 : CADImage::CADImage() :
     805             :     bTransparency( false ),
     806             :     bClipping( false ),
     807             :     dBrightness( 0 ),
     808             :     dContrast( 0 ),
     809             :     resolutionUnits( NONE ),
     810           0 :     clippingBoundaryType( 0 )
     811             : {
     812           0 :     geometryType = CADGeometry::IMAGE;
     813           0 : }
     814             : 
     815           0 : CADVector CADImage::getVertInsertionPoint() const
     816             : {
     817           0 :     return vertInsertionPoint;
     818             : }
     819             : 
     820           0 : void CADImage::setVertInsertionPoint( const CADVector& value )
     821             : {
     822           0 :     vertInsertionPoint = value;
     823           0 : }
     824             : 
     825           0 : CADVector CADImage::getImageSize() const
     826             : {
     827           0 :     return imageSize;
     828             : }
     829             : 
     830           0 : void CADImage::setImageSize( const CADVector& value )
     831             : {
     832           0 :     imageSize = value;
     833           0 : }
     834             : 
     835           0 : CADVector CADImage::getImageSizeInPx() const
     836             : {
     837           0 :     return imageSizeInPx;
     838             : }
     839             : 
     840           0 : void CADImage::setImageSizeInPx( const CADVector& value )
     841             : {
     842           0 :     imageSizeInPx = value;
     843           0 : }
     844             : 
     845           0 : CADVector CADImage::getPixelSizeInACADUnits() const
     846             : {
     847           0 :     return pixelSizeInACADUnits;
     848             : }
     849             : 
     850           0 : void CADImage::setPixelSizeInACADUnits( const CADVector& value )
     851             : {
     852           0 :     pixelSizeInACADUnits = value;
     853           0 : }
     854             : 
     855           0 : short CADImage::getClippingBoundaryType() const
     856             : {
     857           0 :     return clippingBoundaryType;
     858             : }
     859             : 
     860           0 : void CADImage::setClippingBoundaryType( short value )
     861             : {
     862           0 :     clippingBoundaryType = value;
     863           0 : }
     864             : 
     865           0 : enum CADImage::ResolutionUnit CADImage::getResolutionUnits() const
     866             : {
     867           0 :     return resolutionUnits;
     868             : }
     869             : 
     870           0 : void CADImage::setResolutionUnits( enum CADImage::ResolutionUnit res_unit )
     871             : {
     872           0 :     resolutionUnits = res_unit;
     873           0 : }
     874             : 
     875           0 : string CADImage::getFilePath() const
     876             : {
     877           0 :     return filePath;
     878             : }
     879             : 
     880           0 : void CADImage::setFilePath( const string& value )
     881             : {
     882           0 :     filePath = value;
     883           0 : }
     884             : 
     885           0 : void CADImage::setOptions( bool transparency, bool clip, unsigned char brightness,
     886             :     unsigned char contrast )
     887             : {
     888           0 :     bTransparency = transparency;
     889           0 :     bClipping     = clip;
     890           0 :     dBrightness   = brightness;
     891           0 :     dContrast     = contrast;
     892           0 : }
     893             : 
     894           0 : void CADImage::print() const
     895             : {
     896             :     cout << "|---------Image---------|\n" <<
     897           0 :         "Filepath: " << filePath << "\n" <<
     898           0 :         "Insertion point: " << vertInsertionPoint.getX() << "\t" <<
     899           0 :                                vertInsertionPoint.getY() << "\n" <<
     900           0 :         "Transparent? : " << bTransparency << "\n" <<
     901           0 :         "Brightness (0-100) : " << dBrightness << "\n" <<
     902           0 :         "Contrast (0-100) : " << dContrast << "\n" <<
     903           0 :         "Clipping polygon:" << endl;
     904           0 :     for( size_t i = 0; i < avertClippingPolygon.size(); ++i )
     905             :     {
     906           0 :         cout << "  #" << i << ". X: " << avertClippingPolygon[i].getX() <<
     907           0 :                               ", Y: " << avertClippingPolygon[i].getY() << "\n";
     908             :     }
     909           0 :     cout << "\n";
     910           0 : }
     911             : 
     912           0 : void CADImage::transform( const Matrix& matrix )
     913             : {
     914           0 :     vertInsertionPoint = matrix.multiply( vertInsertionPoint );
     915           0 :     for( CADVector& pt : avertClippingPolygon )
     916           0 :         pt = matrix.multiply( pt );
     917           0 : }
     918             : 
     919           0 : void CADImage::addClippingPoint( const CADVector& pt )
     920             : {
     921           0 :     avertClippingPolygon.push_back( pt );
     922           0 : }
     923             : 
     924             : //------------------------------------------------------------------------------
     925             : // CADMText
     926             : //------------------------------------------------------------------------------
     927             : 
     928           2 : CADMText::CADMText() :
     929             :     rectWidth( 0.0 ),
     930             :     extents( 0.0 ),
     931           2 :     extentsWidth( 0.0 )
     932             : {
     933           2 :     geometryType = CADGeometry::MTEXT;
     934           2 : }
     935             : 
     936           0 : double CADMText::getRectWidth() const
     937             : {
     938           0 :     return rectWidth;
     939             : }
     940             : 
     941           2 : void CADMText::setRectWidth( double value )
     942             : {
     943           2 :     rectWidth = value;
     944           2 : }
     945             : 
     946           0 : double CADMText::getExtents() const
     947             : {
     948           0 :     return extents;
     949             : }
     950             : 
     951           2 : void CADMText::setExtents( double value )
     952             : {
     953           2 :     extents = value;
     954           2 : }
     955             : 
     956           0 : double CADMText::getExtentsWidth() const
     957             : {
     958           0 :     return extentsWidth;
     959             : }
     960             : 
     961           2 : void CADMText::setExtentsWidth( double value )
     962             : {
     963           2 :     extentsWidth = value;
     964           2 : }
     965             : 
     966           0 : void CADMText::print() const
     967             : {
     968             :     cout << "|---------MText---------|\n" <<
     969           0 :         "Position: " << position.getX() << "\t" <<
     970           0 :                         position.getY() << "\t" <<
     971           0 :                         position.getZ() << "\n" <<
     972           0 :         "Text: " << textValue << "\n\n";
     973           0 : }
     974             : 
     975             : //------------------------------------------------------------------------------
     976             : // CADFace3D
     977             : //------------------------------------------------------------------------------
     978             : 
     979           0 : CADFace3D::CADFace3D() :
     980           0 :     invisFlags( 0 )
     981             : {
     982           0 :     geometryType = CADGeometry::FACE3D;
     983           0 : }
     984             : 
     985           0 : void CADFace3D::addCorner( const CADVector& corner )
     986             : {
     987           0 :     avertCorners.push_back( corner );
     988           0 : }
     989             : 
     990           0 : CADVector CADFace3D::getCorner( size_t index )
     991             : {
     992           0 :     return avertCorners[index];
     993             : }
     994             : 
     995           0 : void CADFace3D::print() const
     996             : {
     997             :     cout << "|---------3DFace---------|\n" <<
     998           0 :         "Corners: \n";
     999           0 :     for( size_t i = 0; i < avertCorners.size(); ++i )
    1000             :     {
    1001           0 :         cout << "  #" << i << ". X: " << avertCorners[i].getX() << "\t" <<
    1002           0 :                                 "Y: " << avertCorners[i].getY() << "\t" <<
    1003           0 :                                 "Z: " << avertCorners[i].getZ() << "\n";
    1004             :     }
    1005           0 :     cout << "\n";
    1006           0 : }
    1007             : 
    1008           0 : void CADFace3D::transform( const Matrix& matrix )
    1009             : {
    1010           0 :     for( CADVector& corner : avertCorners )
    1011             :     {
    1012           0 :         corner = matrix.multiply( corner );
    1013             :     }
    1014           0 : }
    1015             : 
    1016           0 : short CADFace3D::getInvisFlags() const
    1017             : {
    1018           0 :     return invisFlags;
    1019             : }
    1020             : 
    1021           0 : void CADFace3D::setInvisFlags( short value )
    1022             : {
    1023           0 :     invisFlags = value;
    1024           0 : }
    1025             : 
    1026             : //------------------------------------------------------------------------------
    1027             : // CADPolylinePFace
    1028             : //------------------------------------------------------------------------------
    1029             : 
    1030           0 : CADPolylinePFace::CADPolylinePFace()
    1031             : {
    1032           0 :     geometryType = CADGeometry::POLYLINE_PFACE;
    1033           0 : }
    1034             : 
    1035           0 : void CADPolylinePFace::print() const
    1036             : {
    1037           0 :     cout << "|---------PolylinePface---------|\n";
    1038           0 :     for( size_t i = 0; i < vertices.size(); ++i )
    1039             :     {
    1040           0 :         cout << "  #" << i << ".\t" << vertices[i].getX() <<
    1041           0 :                                "\t" << vertices[i].getY() <<
    1042           0 :                                "\t" << vertices[i].getZ() << "\n";
    1043             :     }
    1044           0 :     cout << "\n";
    1045           0 : }
    1046             : 
    1047           0 : void CADPolylinePFace::transform( const Matrix& matrix )
    1048             : {
    1049           0 :     for( CADVector& vertex : vertices )
    1050           0 :         vertex = matrix.multiply( vertex );
    1051           0 : }
    1052             : 
    1053           0 : void CADPolylinePFace::addVertex( const CADVector& vertex )
    1054             : {
    1055           0 :     vertices.push_back( vertex );
    1056           0 : }
    1057             : 
    1058             : //------------------------------------------------------------------------------
    1059             : // CADXLine
    1060             : //------------------------------------------------------------------------------
    1061             : 
    1062           0 : CADXLine::CADXLine()
    1063             : {
    1064           0 :     geometryType = CADGeometry::XLINE;
    1065           0 : }
    1066             : 
    1067           0 : void CADXLine::print() const
    1068             : {
    1069             :     cout << "|---------XLine---------|\n" <<
    1070           0 :         "Position: " << position.getX() << "\t" <<
    1071           0 :                         position.getY() << "\t" <<
    1072           0 :                         position.getZ() << "\n" <<
    1073           0 :         "Direction: " << extrusion.getX() << "\t" <<
    1074           0 :                          extrusion.getY() << "\t" <<
    1075           0 :                          extrusion.getZ() << "\n\n";
    1076           0 : }
    1077             : 
    1078             : //------------------------------------------------------------------------------
    1079             : // CADMLine
    1080             : //------------------------------------------------------------------------------
    1081             : 
    1082           0 : CADMLine::CADMLine() :
    1083             :     scale( 0.0 ),
    1084           0 :     opened( false )
    1085             : {
    1086           0 :     geometryType = CADGeometry::MLINE;
    1087           0 : }
    1088             : 
    1089           0 : void CADMLine::print() const
    1090             : {
    1091             :     cout << "|---------MLine---------|\n" <<
    1092           0 :         "Base point: " << position.getX() << "\t" <<
    1093           0 :                           position.getY() << "\t" <<
    1094           0 :                           position.getZ() << "\n" <<
    1095           0 :         "Vertices:\n";
    1096           0 :     for( size_t i = 0; i < avertVertices.size(); ++i )
    1097             :     {
    1098           0 :         cout << "  #" << i << ".\t" << avertVertices[i].getX() <<
    1099           0 :                                "\t" << avertVertices[i].getY() <<
    1100           0 :                                "\t" << avertVertices[i].getZ() << "\n";
    1101             :     }
    1102           0 :     cout << "\n";
    1103           0 : }
    1104             : 
    1105           0 : void CADMLine::transform( const Matrix& matrix )
    1106             : {
    1107           0 :     CADPoint3D::transform( matrix );
    1108           0 :     for( CADVector& vertex : avertVertices )
    1109             :     {
    1110           0 :         vertex = matrix.multiply( vertex );
    1111             :     }
    1112           0 : }
    1113             : 
    1114           0 : double CADMLine::getScale() const
    1115             : {
    1116           0 :     return scale;
    1117             : }
    1118             : 
    1119           0 : void CADMLine::setScale( double value )
    1120             : {
    1121           0 :     scale = value;
    1122           0 : }
    1123             : 
    1124           0 : bool CADMLine::isOpened() const
    1125             : {
    1126           0 :     return opened;
    1127             : }
    1128             : 
    1129           0 : void CADMLine::setOpened( bool value )
    1130             : {
    1131           0 :     opened = value;
    1132           0 : }
    1133             : 
    1134           0 : void CADMLine::addVertex( const CADVector& vertex )
    1135             : {
    1136           0 :     avertVertices.push_back( vertex );
    1137           0 : }
    1138             : 
    1139             : //------------------------------------------------------------------------------
    1140             : // CADAttrib
    1141             : //------------------------------------------------------------------------------
    1142             : 
    1143           5 : CADAttrib::CADAttrib() :
    1144             :     dfElevation( 0.0 ),
    1145           5 :     bLockPosition( false )
    1146             : {
    1147           5 :     geometryType = CADGeometry::ATTRIB;
    1148           5 : }
    1149             : 
    1150           0 : void CADAttrib::print() const
    1151             : {
    1152             :     cout << "|---------Attribute---------|\n" <<
    1153           0 :         "Base point: " << position.getX() << "\t" <<
    1154           0 :                           position.getY() << "\t" <<
    1155           0 :                           position.getZ() << "\n" <<
    1156           0 :         "Tag: " << sTag << "\n" <<
    1157           0 :         "Text: " << textValue << "\n\n";
    1158           0 : }
    1159             : 
    1160           0 : void CADAttrib::transform( const Matrix& matrix )
    1161             : {
    1162           0 :     CADText::transform( matrix );
    1163           0 :     vertAlignmentPoint = matrix.multiply( vertAlignmentPoint );
    1164           0 : }
    1165             : 
    1166           0 : double CADAttrib::getElevation() const
    1167             : {
    1168           0 :     return dfElevation;
    1169             : }
    1170             : 
    1171           5 : void CADAttrib::setElevation( double elev )
    1172             : {
    1173           5 :     dfElevation = elev;
    1174           5 : }
    1175             : 
    1176           5 : string CADAttrib::getTag() const
    1177             : {
    1178           5 :     return sTag;
    1179             : }
    1180             : 
    1181           5 : void CADAttrib::setTag( const string& tag )
    1182             : {
    1183           5 :     sTag = tag;
    1184           5 : }
    1185             : 
    1186           0 : CADVector CADAttrib::getAlignmentPoint() const
    1187             : {
    1188           0 :     return vertAlignmentPoint;
    1189             : }
    1190             : 
    1191           5 : void CADAttrib::setAlignmentPoint( const CADVector& vect )
    1192             : {
    1193           5 :     vertAlignmentPoint = vect;
    1194           5 : }
    1195             : 
    1196           0 : bool CADAttrib::isPositionLocked() const
    1197             : {
    1198           0 :     return bLockPosition;
    1199             : }
    1200             : 
    1201           5 : void CADAttrib::setPositionLocked( bool lock )
    1202             : {
    1203           5 :     bLockPosition = lock;
    1204           5 : }
    1205             : 
    1206             : //------------------------------------------------------------------------------
    1207             : // CADAttdef
    1208             : //------------------------------------------------------------------------------
    1209             : 
    1210           5 : CADAttdef::CADAttdef()
    1211             : {
    1212           5 :     geometryType = CADGeometry::ATTDEF;
    1213           5 : }
    1214             : 
    1215           0 : void CADAttdef::print() const
    1216             : {
    1217             :     cout << "|---------Attribute defn---------|\n" <<
    1218           0 :         "Base point: " << position.getX() << "\t" <<
    1219           0 :                           position.getY() << "\t" <<
    1220           0 :                           position.getZ() << "\n" <<
    1221           0 :         "Tag: " << sTag << "\n" <<
    1222           0 :         "Text: " << textValue << "\n" <<
    1223           0 :         "Prompt: " << sPrompt << "\n\n";
    1224           0 : }
    1225             : 
    1226           0 : string CADAttdef::getPrompt() const
    1227             : {
    1228           0 :     return sPrompt;
    1229             : }
    1230             : 
    1231           5 : void CADAttdef::setPrompt( const string& prompt )
    1232             : {
    1233           5 :     sPrompt = prompt;
    1234           5 : }

Generated by: LCOV version 1.14