Skip to content

Commit

Permalink
typedef carve::geom::vector<3> to vec3
Browse files Browse the repository at this point in the history
fix in CMakeLists.txt for carve
  • Loading branch information
ifcquery committed Jun 22, 2016
1 parent 711c68b commit e09f05d
Show file tree
Hide file tree
Showing 16 changed files with 526 additions and 465 deletions.
1 change: 0 additions & 1 deletion Carve/CMakeLists.txt
Expand Up @@ -57,7 +57,6 @@ SET(CARVE_SOURCE_FILES
src/lib/shewchuk_predicates.cpp
src/lib/tag.cpp
src/lib/timing.cpp
src/lib/triangle_intersection.cpp
src/lib/triangulator.cpp
src/common/geometry.cpp
)
Expand Down
28 changes: 14 additions & 14 deletions IfcPlusPlus/src/ifcpp/geometry/CSG_Adapter.h
Expand Up @@ -164,11 +164,11 @@ namespace CSG_Adapter
const carve::mesh::Vertex<3>* v2 = edge_i->v2();
const carve::mesh::Vertex<3>* v3 = edge_next->v2();

const carve::geom::vector<3>& v1vec = v1->v;
const carve::geom::vector<3>& v2vec = v2->v;
const carve::geom::vector<3>& v3vec = v3->v;
carve::geom::vector<3> sement12 = v2vec - v1vec;
carve::geom::vector<3> sement23 = v3vec - v2vec;
const vec3& v1vec = v1->v;
const vec3& v2vec = v2->v;
const vec3& v3vec = v3->v;
vec3 sement12 = v2vec - v1vec;
vec3 sement23 = v3vec - v2vec;
double sement12_length2 = sement12.length2();
double sement23_length2 = sement23.length2();
#ifdef _DEBUG
Expand Down Expand Up @@ -232,8 +232,8 @@ namespace CSG_Adapter
{
// edges are not in line, so faces should be in a plane
#ifdef _DEBUG
const carve::geom::vector<3>& normal_face_i = edge_i->face->plane.N;
const carve::geom::vector<3>& normal_face_i_rev = edge_i->rev->face->plane.N;
const vec3& normal_face_i = edge_i->face->plane.N;
const vec3& normal_face_i_rev = edge_i->rev->face->plane.N;


double dot_face_angle = dot( normal_face_i, normal_face_i_rev );
Expand Down Expand Up @@ -544,8 +544,8 @@ namespace CSG_Adapter
face_t* face = edge->face;
face_t* face_reverse = edge_reverse->face;

carve::geom::vector<3>& face_normal = face->plane.N;
carve::geom::vector<3>& face_reverse_normal = face_reverse->plane.N;
vec3& face_normal = face->plane.N;
vec3& face_reverse_normal = face_reverse->plane.N;

const double cos_angle = dot( face_normal, face_reverse_normal );
if( std::abs( cos_angle + 1.0 ) > 0.000001 )
Expand Down Expand Up @@ -626,7 +626,7 @@ namespace CSG_Adapter

//carve::geom3d::Vector normal = face->plane.N;

std::vector<carve::geom::vector<2> > verts2d;
std::vector<vec2 > verts2d;
face->getProjectedVertices( verts2d );
if( verts2d.size() < 3 )
{
Expand Down Expand Up @@ -666,7 +666,7 @@ namespace CSG_Adapter
edge_t* edge = face->edge;
do
{
const carve::geom::vector<3>& v = edge->vert->v;
const vec3& v = edge->vert->v;
edge = edge->next;
int vertex_index = poly_cache.addPoint( v );
map_merged_idx[i_vert] = vertex_index;
Expand Down Expand Up @@ -926,18 +926,18 @@ namespace CSG_Adapter
// TODO: Subclass from carve::mesh::MeshSet and add attribute to remember which meshset has already been simplified.

// check if meshset aabb is far away from origin. if so, move to origin, compute, move back
carve::geom::vector<3> translate_avoid_large_numbers;
vec3 translate_avoid_large_numbers;
const carve::geom::aabb<3>& aabb_op1 = op1->getAABB();
if( aabb_op1.pos.length2() > 10000 )
{
const carve::geom::aabb<3>& aabb_op2 = op2->getAABB();

if( aabb_op2.pos.length2() > 10000 )
{
carve::geom::vector<3> aabb_op1_direction( aabb_op1.pos );
vec3 aabb_op1_direction( aabb_op1.pos );
aabb_op1_direction.normalize();

carve::geom::vector<3> aabb_op2_direction( aabb_op2.pos );
vec3 aabb_op2_direction( aabb_op2.pos );
aabb_op2_direction.normalize();

double cos_angle = dot( aabb_op1_direction, aabb_op2_direction );
Expand Down
18 changes: 9 additions & 9 deletions IfcPlusPlus/src/ifcpp/geometry/ConverterOSG.h
Expand Up @@ -58,7 +58,7 @@ class ConverterOSG : public StatusCallback
#ifdef _DEBUG
std::cout << "not triangulated" << std::endl;
#endif
std::vector<carve::geom::vector<3> > face_vertices;
std::vector<vec3 > face_vertices;
face_vertices.resize( face->nVertices() );
carve::mesh::Edge<3> *e = face->edge;
const size_t num_vertices = face->nVertices();
Expand All @@ -73,7 +73,7 @@ class ConverterOSG : public StatusCallback
std::cout << "drawFace is meant only for num vertices > 4" << std::endl;
}

carve::geom::vector<3> * vertex_vec;
vec3 * vertex_vec;
osg::Vec3Array* vertices = new osg::Vec3Array( num_vertices );
if( !vertices ) { throw IfcPPOutOfMemoryException(); }
osg::ref_ptr<osg::DrawElementsUInt> triangles = new osg::DrawElementsUInt( osg::PrimitiveSet::POLYGON, num_vertices );
Expand Down Expand Up @@ -177,7 +177,7 @@ class ConverterOSG : public StatusCallback
{
carve::mesh::Face<3>* face = mesh->faces[i_face];
// compute area of projected face:
std::vector<carve::geom::vector<2> > projected;
std::vector<vec2 > projected;
face->getProjectedVertices( projected );
double face_area = carve::geom2d::signedArea( projected );
map_face_area[face] = abs( face_area );
Expand All @@ -199,15 +199,15 @@ class ConverterOSG : public StatusCallback
drawFace( face, geode );
continue;
}
const carve::geom::vector<3> face_normal = face->plane.N;
const vec3 face_normal = face->plane.N;

if( crease_angle > 0 )
{
carve::mesh::Edge<3>* e = face->edge;
for( size_t jj = 0; jj < n_vertices; ++jj )
{
carve::mesh::Vertex<3>* vertex = e->vert;
carve::geom::vector<3> intermediate_normal;
vec3 intermediate_normal;

// collect all faces at vertex
// | ^
Expand Down Expand Up @@ -238,7 +238,7 @@ class ConverterOSG : public StatusCallback
break;
}

carve::geom::vector<3> f1_normal = f1->plane.N;
vec3 f1_normal = f1->plane.N;
const double cos_angle = dot( f1_normal, face_normal );
if( cos_angle > 0 )
{
Expand Down Expand Up @@ -289,7 +289,7 @@ class ConverterOSG : public StatusCallback
intermediate_normal *= 1.0 / intermediate_normal_length;
}

const carve::geom::vector<3>& vertex_v = vertex->v;
const vec3& vertex_v = vertex->v;
if( face->n_edges == 3 )
{
vertices_tri->push_back( osg::Vec3( vertex_v.x, vertex_v.y, vertex_v.z ) );
Expand All @@ -311,7 +311,7 @@ class ConverterOSG : public StatusCallback
for( size_t jj = 0; jj < n_vertices; ++jj )
{
carve::mesh::Vertex<3>* vertex = e->vert;
const carve::geom::vector<3>& vertex_v = vertex->v;
const vec3& vertex_v = vertex->v;

if( face->n_edges == 3 )
{
Expand Down Expand Up @@ -745,7 +745,7 @@ class ConverterOSG : public StatusCallback
osg::Vec3Array* vertices = new osg::Vec3Array();
for( size_t i_pointset_point = 0; i_pointset_point < pointset_data->points.size(); ++i_pointset_point )
{
carve::geom::vector<3>& carve_point = pointset_data->points[i_pointset_point];
vec3& carve_point = pointset_data->points[i_pointset_point];
vertices->push_back( osg::Vec3d( carve_point.x, carve_point.y, carve_point.z ) );
}

Expand Down
60 changes: 30 additions & 30 deletions IfcPlusPlus/src/ifcpp/geometry/CurveConverter.h
Expand Up @@ -72,40 +72,40 @@ class CurveConverter : public StatusCallback
{
}

void convertIfcCurve2D( const shared_ptr<IfcCurve>& ifc_curve, std::vector<carve::geom::vector<2> >& loops, std::vector<carve::geom::vector<2> >& segment_start_points ) const
void convertIfcCurve2D( const shared_ptr<IfcCurve>& ifc_curve, std::vector<vec2 >& loops, std::vector<vec2 >& segment_start_points ) const
{
std::vector<shared_ptr<IfcTrimmingSelect> > trim1_vec;
std::vector<shared_ptr<IfcTrimmingSelect> > trim2_vec;
convertIfcCurve2D( ifc_curve, loops, segment_start_points, trim1_vec, trim2_vec, true );
}

void convertIfcCurve2D( const shared_ptr<IfcCurve>& ifc_curve, std::vector<carve::geom::vector<2> >& target_vec, std::vector<carve::geom::vector<2> >& segment_start_points,
void convertIfcCurve2D( const shared_ptr<IfcCurve>& ifc_curve, std::vector<vec2 >& target_vec, std::vector<vec2 >& segment_start_points,
std::vector<shared_ptr<IfcTrimmingSelect> >& trim1_vec, std::vector<shared_ptr<IfcTrimmingSelect> >& trim2_vec, bool sense_agreement ) const
{
std::vector<carve::geom::vector<3> > target_vec_3d;
std::vector<carve::geom::vector<3> > segment_start_points_3d;
std::vector<vec3 > target_vec_3d;
std::vector<vec3 > segment_start_points_3d;
convertIfcCurve( ifc_curve, target_vec_3d, segment_start_points_3d, trim1_vec, trim2_vec, sense_agreement );

for( size_t i = 0; i < target_vec_3d.size(); ++i )
{
carve::geom::vector<3>& point_3d = target_vec_3d[i];
vec3& point_3d = target_vec_3d[i];
target_vec.push_back( carve::geom::VECTOR( point_3d.x, point_3d.y ) );
}
for( size_t i = 0; i < segment_start_points_3d.size(); ++i )
{
carve::geom::vector<3>& point_3d = segment_start_points_3d[i];
vec3& point_3d = segment_start_points_3d[i];
segment_start_points.push_back( carve::geom::VECTOR( point_3d.x, point_3d.y ) );
}
}

void convertIfcCurve( const shared_ptr<IfcCurve>& ifc_curve, std::vector<carve::geom::vector<3> >& loops, std::vector<carve::geom::vector<3> >& segment_start_points ) const
void convertIfcCurve( const shared_ptr<IfcCurve>& ifc_curve, std::vector<vec3 >& loops, std::vector<vec3 >& segment_start_points ) const
{
std::vector<shared_ptr<IfcTrimmingSelect> > trim1_vec;
std::vector<shared_ptr<IfcTrimmingSelect> > trim2_vec;
convertIfcCurve( ifc_curve, loops, segment_start_points, trim1_vec, trim2_vec, true );
}

void convertIfcCurve( const shared_ptr<IfcCurve>& ifc_curve, std::vector<carve::geom::vector<3> >& target_vec, std::vector<carve::geom::vector<3> >& segment_start_points,
void convertIfcCurve( const shared_ptr<IfcCurve>& ifc_curve, std::vector<vec3 >& target_vec, std::vector<vec3 >& segment_start_points,
std::vector<shared_ptr<IfcTrimmingSelect> >& trim1_vec, std::vector<shared_ptr<IfcTrimmingSelect> >& trim2_vec, bool sense_agreement ) const
{
double length_factor = m_unit_converter->getLengthInMeterFactor();
Expand All @@ -124,7 +124,7 @@ class CurveConverter : public StatusCallback
shared_ptr<IfcCompositeCurveSegment> segement = vec_segements[i_segments];
shared_ptr<IfcCurve> segement_curve = segement->m_ParentCurve;

std::vector<carve::geom::vector<3> > segment_vec;
std::vector<vec3 > segment_vec;
convertIfcCurve( segement_curve, segment_vec, segment_start_points );
if( segment_vec.size() > 0 )
{
Expand Down Expand Up @@ -154,7 +154,7 @@ class CurveConverter : public StatusCallback
if( trimmed_curve )
{
shared_ptr<IfcCurve> basis_curve = trimmed_curve->m_BasisCurve;
std::vector<carve::geom::vector<3> > basis_curve_points;
std::vector<vec3 > basis_curve_points;
std::vector<shared_ptr<IfcTrimmingSelect> >& curve_trim1_vec = trimmed_curve->m_Trim1;
std::vector<shared_ptr<IfcTrimmingSelect> >& curve_trim2_vec = trimmed_curve->m_Trim2;
bool trimmed_sense_agreement = trimmed_curve->m_SenseAgreement->m_value;
Expand Down Expand Up @@ -204,7 +204,7 @@ class CurveConverter : public StatusCallback
circle_radius = circle->m_Radius->m_value*length_factor;
}

carve::geom::vector<3> circle_center = conic_position_matrix*carve::geom::VECTOR( 0, 0, 0 );
vec3 circle_center = conic_position_matrix*carve::geom::VECTOR( 0, 0, 0 );

double trim_angle1 = 0.0;
double trim_angle2 = M_PI*2.0;
Expand Down Expand Up @@ -235,7 +235,7 @@ class CurveConverter : public StatusCallback
shared_ptr<IfcCartesianPoint> trim_point1;
if( GeomUtils::findFirstInVector( trim1_vec, trim_point1 ) )
{
carve::geom::vector<3> trim_point;
vec3 trim_point;
PointConverter::convertIfcCartesianPoint( trim_point1, trim_point, length_factor );
// TODO: get direction of trim_point to circle_center, get angle. This is more robust in case the trim_point is not exactly on the circle
trim_angle1 = m_point_converter->getAngleOnCircle( circle_center, circle_radius, trim_point );
Expand Down Expand Up @@ -268,7 +268,7 @@ class CurveConverter : public StatusCallback
shared_ptr<IfcCartesianPoint> ifc_trim_point;
if( GeomUtils::findFirstInVector( trim2_vec, ifc_trim_point ) )
{
carve::geom::vector<3> trim_point;
vec3 trim_point;
PointConverter::convertIfcCartesianPoint( ifc_trim_point, trim_point, length_factor );
trim_angle2 = m_point_converter->getAngleOnCircle( circle_center, circle_radius, trim_point );
}
Expand Down Expand Up @@ -322,7 +322,7 @@ class CurveConverter : public StatusCallback
if( num_segments < m_geom_settings->getMinNumVerticesPerArc() ) num_segments = m_geom_settings->getMinNumVerticesPerArc();
const double circle_center_x = 0.0;
const double circle_center_y = 0.0;
std::vector<carve::geom::vector<2> > circle_points;
std::vector<vec2 > circle_points;
if( circle_radius > 0.0 )
{
GeomUtils::addArcWithEndPoint( circle_points, circle_radius, start_angle, opening_angle, circle_center_x, circle_center_y, num_segments );
Expand All @@ -337,8 +337,8 @@ class CurveConverter : public StatusCallback
// apply position
for( size_t i = 0; i < circle_points.size(); ++i )
{
carve::geom::vector<2>& point = circle_points[i];
carve::geom::vector<3> point3d( carve::geom::VECTOR( point.x, point.y, 0 ) );
vec2& point = circle_points[i];
vec3 point3d( carve::geom::VECTOR( point.x, point.y, 0 ) );
point3d = conic_position_matrix * point3d;
point.x = point3d.x;
point.y = point3d.y;
Expand All @@ -364,25 +364,25 @@ class CurveConverter : public StatusCallback

// todo: implement clipping

std::vector<carve::geom::vector<3> > circle_points;
std::vector<vec3 > circle_points;
double angle = 0;
for( int i = 0; i < num_segments; ++i )
{
circle_points.push_back( carve::geom::vector<3>( carve::geom::VECTOR( x_radius * cos( angle ), y_radius * sin( angle ), 0 ) ) );
circle_points.push_back( vec3( carve::geom::VECTOR( x_radius * cos( angle ), y_radius * sin( angle ), 0 ) ) );
angle += 2.0*M_PI / double( num_segments );
}

// apply position
for( size_t i = 0; i < circle_points.size(); ++i )
{
carve::geom::vector<3>& point = circle_points[i];
vec3& point = circle_points[i];
point = conic_position_matrix * point;
}
GeomUtils::appendPointsToCurve( circle_points, target_vec );

//if( segment_start_points != nullptr )
{
carve::geom::vector<3> pt0 = circle_points[0];
vec3 pt0 = circle_points[0];
segment_start_points.push_back( pt0 );
}
}
Expand All @@ -396,7 +396,7 @@ class CurveConverter : public StatusCallback
if( line )
{
shared_ptr<IfcCartesianPoint> ifc_line_point = line->m_Pnt;
carve::geom::vector<3> line_origin;
vec3 line_origin;
if( PointConverter::convertIfcCartesianPoint( ifc_line_point, line_origin, length_factor ) )
{
// line: lambda(u) = line_point + u*line_direction
Expand All @@ -408,7 +408,7 @@ class CurveConverter : public StatusCallback
shared_ptr<IfcDirection> ifc_line_direction = line_vec->m_Orientation;

std::vector<shared_ptr<IfcReal> >& direction_ratios = ifc_line_direction->m_DirectionRatios;
carve::geom::vector<3> line_direction;
vec3 line_direction;
if( direction_ratios.size() > 1 )
{
if( direction_ratios.size() > 2 )
Expand Down Expand Up @@ -438,10 +438,10 @@ class CurveConverter : public StatusCallback
shared_ptr<IfcCartesianPoint> ifc_trim_point;
if( GeomUtils::findFirstInVector( trim1_vec, ifc_trim_point ) )
{
carve::geom::vector<3> trim_point;
vec3 trim_point;
PointConverter::convertIfcCartesianPoint( ifc_trim_point, trim_point, length_factor );

carve::geom::vector<3> closest_point_on_line;
vec3 closest_point_on_line;
GeomUtils::closestPointOnLine( trim_point, line_origin, line_direction, closest_point_on_line );

if( ( closest_point_on_line - trim_point ).length() < 0.0001 )
Expand All @@ -452,7 +452,7 @@ class CurveConverter : public StatusCallback
}
}
// check for trimming at end of line
carve::geom::vector<3> line_end;
vec3 line_end;
shared_ptr<IfcParameterValue> trim_par2;
if( GeomUtils::findFirstInVector( trim2_vec, trim_par2 ) )
{
Expand All @@ -464,10 +464,10 @@ class CurveConverter : public StatusCallback
shared_ptr<IfcCartesianPoint> ifc_trim_point;
if( GeomUtils::findFirstInVector( trim2_vec, ifc_trim_point ) )
{
carve::geom::vector<3> trim_point;
vec3 trim_point;
PointConverter::convertIfcCartesianPoint( ifc_trim_point, trim_point, length_factor );

carve::geom::vector<3> closest_point_on_line;
vec3 closest_point_on_line;
GeomUtils::closestPointOnLine( trim_point, line_origin, line_direction, closest_point_on_line );

if( ( closest_point_on_line - trim_point ).length() < 0.0001 )
Expand All @@ -478,7 +478,7 @@ class CurveConverter : public StatusCallback
}
}

std::vector<carve::geom::vector<3> > points_vec;
std::vector<vec3 > points_vec;
points_vec.push_back( line_origin );
points_vec.push_back( line_end );

Expand Down Expand Up @@ -517,12 +517,12 @@ class CurveConverter : public StatusCallback
}


void convertIfcPolyline( const shared_ptr<IfcPolyline>& poly_line, std::vector<carve::geom::vector<3> >& loop ) const
void convertIfcPolyline( const shared_ptr<IfcPolyline>& poly_line, std::vector<vec3 >& loop ) const
{
m_point_converter->convertIfcCartesianPointVector( poly_line->m_Points, loop );
}

void convertIfcLoop( const shared_ptr<IfcLoop>& loop, std::vector<carve::geom::vector<3> >& loop_points ) const
void convertIfcLoop( const shared_ptr<IfcLoop>& loop, std::vector<vec3 >& loop_points ) const
{
const shared_ptr<IfcPolyLoop> poly_loop = dynamic_pointer_cast<IfcPolyLoop>( loop );
if( poly_loop )
Expand Down

0 comments on commit e09f05d

Please sign in to comment.