@@ -220,9 +220,7 @@ class CurveConverter : public StatusCallback
220220 if ( bspline_curve )
221221 {
222222 m_spline_converter->convertBSplineCurve (bspline_curve, target_vec, segment_start_points);
223-
224223 // TODO: handle trim points
225-
226224 return ;
227225 }
228226
@@ -844,7 +842,7 @@ class CurveConverter : public StatusCallback
844842 bool p1_success = PointConverter::convertIfcVertex (edge_end, p1, length_factor);
845843
846844
847- // std::cout << "IfcEdgeLoop: IfcPointOnCurve, IfcPointOnSurface not implemented" << std::endl;
845+
848846
849847 bool simpleStraightEdge = false ;
850848 if ( simpleStraightEdge )
@@ -854,14 +852,9 @@ class CurveConverter : public StatusCallback
854852 return ;
855853 }
856854
857-
858- // TODO: try use EdgeStart and EdgeEnd as trimming points
859-
860855 const shared_ptr<IfcOrientedEdge> orientedEdge = dynamic_pointer_cast<IfcOrientedEdge>(edge);
861856 if ( orientedEdge )
862857 {
863- // #3517327= IFCORIENTEDEDGE(*,*,#3517018,.T.);
864-
865858 // shared_ptr<IfcEdge> m_EdgeElement;
866859 // shared_ptr<IfcBoolean> m_Orientation;
867860 bool orientedEdgeOrientation = orientedEdge->m_Orientation ->m_value ;
@@ -878,8 +871,6 @@ class CurveConverter : public StatusCallback
878871 const shared_ptr<IfcSubedge> subEdge = dynamic_pointer_cast<IfcSubedge>(edge);
879872 if ( subEdge )
880873 {
881- // shared_ptr<IfcEdge> m_ParentEdge;
882-
883874 if ( subEdge->m_ParentEdge )
884875 {
885876 std::vector<vec3> loopPointsParentEdge;
@@ -889,7 +880,6 @@ class CurveConverter : public StatusCallback
889880 }
890881 }
891882
892-
893883 const shared_ptr<IfcEdgeCurve> edgeCurve = dynamic_pointer_cast<IfcEdgeCurve>(edge);
894884 if ( edgeCurve )
895885 {
@@ -901,11 +891,6 @@ class CurveConverter : public StatusCallback
901891 edgeSameSense = edgeCurve->m_SameSense ->m_value ;
902892 }
903893
904- // #3517014= IFCBSPLINECURVEWITHKNOTS(3,(#3517000,#3517000,#3517006,#3517008,#3517010,#3517012,#3517003),.UNSPECIFIED.,.F.,.U.,(4,1,1,1,4),(0.,0.166666666666667,0.333333333333333,0.666666666666667,1.),.UNSPECIFIED.);
905- // #3517018= IFCEDGECURVE(#3517002,#3517005,#3517014,.T.);
906- // #3517327= IFCORIENTEDEDGE(*,*,#3517018,.T.);
907- // #3517329= IFCEDGELOOP((#3517326,#3517327,#3517328));
908-
909894 if ( !edgeSameSense )
910895 {
911896 vec3 temp = p0;
@@ -915,12 +900,12 @@ class CurveConverter : public StatusCallback
915900
916901 std::vector<vec3> curvePoints;
917902 std::vector<vec3> segmentStartPoints;
918- const shared_ptr<IfcCurve> edgeCurveCurve = edgeCurve->m_EdgeGeometry ;
903+ const shared_ptr<IfcCurve> edgeCurveGeometry = edgeCurve->m_EdgeGeometry ;
919904 bool senseAgreement = true ;
920905
921- if ( edgeCurveCurve )
906+ if ( edgeCurveGeometry )
922907 {
923- shared_ptr<IfcTrimmedCurve> trimmedCurve = dynamic_pointer_cast<IfcTrimmedCurve>(edgeCurveCurve );
908+ shared_ptr<IfcTrimmedCurve> trimmedCurve = dynamic_pointer_cast<IfcTrimmedCurve>(edgeCurveGeometry );
924909 if ( trimmedCurve )
925910 {
926911 const shared_ptr<IfcCurve> basisCurve = trimmedCurve->m_BasisCurve ;
@@ -931,15 +916,15 @@ class CurveConverter : public StatusCallback
931916 std::vector<shared_ptr<IfcTrimmingSelect> > curve_trim2_vec;
932917
933918 shared_ptr<IfcCartesianPoint> trim1 (new IfcCartesianPoint ());
934- trim1->m_Coordinates [0 ] = p0.x ;
935- trim1->m_Coordinates [1 ] = p0.y ;
936- trim1->m_Coordinates [2 ] = p0.z ;
919+ trim1->m_Coordinates [0 ] = p0.x / length_factor; // in convertIfcCurve, the trim point will be multiplied with length_factor
920+ trim1->m_Coordinates [1 ] = p0.y / length_factor ;
921+ trim1->m_Coordinates [2 ] = p0.z / length_factor ;
937922 curve_trim1_vec.push_back (trim1);
938923
939924 shared_ptr<IfcCartesianPoint> trim2 (new IfcCartesianPoint ());
940- trim2->m_Coordinates [0 ] = p1.x ;
941- trim2->m_Coordinates [1 ] = p1.y ;
942- trim2->m_Coordinates [2 ] = p1.z ;
925+ trim2->m_Coordinates [0 ] = p1.x / length_factor ;
926+ trim2->m_Coordinates [1 ] = p1.y / length_factor ;
927+ trim2->m_Coordinates [2 ] = p1.z / length_factor ;
943928 curve_trim2_vec.push_back (trim2);
944929 convertIfcCurve (basisCurve, curvePoints, segmentStartPoints, curve_trim1_vec, curve_trim2_vec, senseAgreement);
945930 }
@@ -948,7 +933,7 @@ class CurveConverter : public StatusCallback
948933 {
949934 std::vector<shared_ptr<IfcTrimmingSelect> > curve_trim1_vec;
950935 std::vector<shared_ptr<IfcTrimmingSelect> > curve_trim2_vec;
951- convertIfcCurve (edgeCurveCurve , curvePoints, segmentStartPoints, curve_trim1_vec, curve_trim2_vec, senseAgreement);
936+ convertIfcCurve (edgeCurveGeometry , curvePoints, segmentStartPoints, curve_trim1_vec, curve_trim2_vec, senseAgreement);
952937 }
953938 }
954939 else
@@ -977,7 +962,7 @@ class CurveConverter : public StatusCallback
977962 glm::vec4 color (0.5 , 0.5 , 0.5 , 1 );
978963 if ( dist0 > EPS_M6 || dist1 > EPS_M6 )
979964 {
980- GeomDebugDump::dumpPolyline (curvePoints, color, false );
965+ // GeomDebugDump::dumpPolyline(curvePoints, color, false);
981966 }
982967
983968 if ( dist0 > EPS_M6 )
@@ -986,7 +971,7 @@ class CurveConverter : public StatusCallback
986971 // std::cout << std::endl << "check EdgeStart IfcEdgeCurve, dist0 = " << dist0 << ", tag: " << tag << std::endl;
987972
988973 std::vector<vec3> segmentStartEndPoints = { p0, p1 };
989- GeomDebugDump::dumpPolyline (segmentStartEndPoints, color, true );
974+ // GeomDebugDump::dumpPolyline(segmentStartEndPoints, color, true);
990975 }
991976
992977 if ( false )
@@ -1098,22 +1083,18 @@ class CurveConverter : public StatusCallback
10981083
10991084 for ( const shared_ptr<IfcOrientedEdge>& oriented_edge : edge_loop->m_EdgeList )
11001085 {
1101- // shared_ptr<IfcVertex> m_EdgeStart;
1102- // shared_ptr<IfcVertex> m_EdgeEnd;
1103-
11041086 // IfcOrientedEdge -----------------------------------------------------------
11051087 // attributes:
11061088 // shared_ptr<IfcEdge> m_EdgeElement;
11071089 // shared_ptr<IfcBoolean> m_Orientation;
11081090
1109- shared_ptr<IfcEdge> edge = oriented_edge->m_EdgeElement ;
1110-
11111091 bool orientation = true ;
11121092 if ( oriented_edge->m_Orientation )
11131093 {
11141094 orientation = oriented_edge->m_Orientation ->m_value ;
11151095 }
11161096
1097+ shared_ptr<IfcEdge> edge = oriented_edge->m_EdgeElement ;
11171098 std::vector<vec3> edge_points;
11181099 convertIfcEdge (edge, edge_points, length_factor);
11191100
@@ -1125,6 +1106,11 @@ class CurveConverter : public StatusCallback
11251106 {
11261107 std::copy (edge_points.rbegin (), edge_points.rend (), std::back_inserter (loop_points));
11271108 }
1109+
1110+ #ifdef _DEBUG
1111+ // glm::vec4 color(0.5, 0.5, 0.5, 1);
1112+ // GeomDebugDump::dumpPolyline(loop_points, color, false);
1113+ #endif
11281114 }
11291115
11301116 GeomUtils::removeDuplicates (loop_points);
0 commit comments