@@ -220,9 +220,7 @@ class CurveConverter : public StatusCallback
220
220
if ( bspline_curve )
221
221
{
222
222
m_spline_converter->convertBSplineCurve (bspline_curve, target_vec, segment_start_points);
223
-
224
223
// TODO: handle trim points
225
-
226
224
return ;
227
225
}
228
226
@@ -844,7 +842,7 @@ class CurveConverter : public StatusCallback
844
842
bool p1_success = PointConverter::convertIfcVertex (edge_end, p1, length_factor);
845
843
846
844
847
- // std::cout << "IfcEdgeLoop: IfcPointOnCurve, IfcPointOnSurface not implemented" << std::endl;
845
+
848
846
849
847
bool simpleStraightEdge = false ;
850
848
if ( simpleStraightEdge )
@@ -854,14 +852,9 @@ class CurveConverter : public StatusCallback
854
852
return ;
855
853
}
856
854
857
-
858
- // TODO: try use EdgeStart and EdgeEnd as trimming points
859
-
860
855
const shared_ptr<IfcOrientedEdge> orientedEdge = dynamic_pointer_cast<IfcOrientedEdge>(edge);
861
856
if ( orientedEdge )
862
857
{
863
- // #3517327= IFCORIENTEDEDGE(*,*,#3517018,.T.);
864
-
865
858
// shared_ptr<IfcEdge> m_EdgeElement;
866
859
// shared_ptr<IfcBoolean> m_Orientation;
867
860
bool orientedEdgeOrientation = orientedEdge->m_Orientation ->m_value ;
@@ -878,8 +871,6 @@ class CurveConverter : public StatusCallback
878
871
const shared_ptr<IfcSubedge> subEdge = dynamic_pointer_cast<IfcSubedge>(edge);
879
872
if ( subEdge )
880
873
{
881
- // shared_ptr<IfcEdge> m_ParentEdge;
882
-
883
874
if ( subEdge->m_ParentEdge )
884
875
{
885
876
std::vector<vec3> loopPointsParentEdge;
@@ -889,7 +880,6 @@ class CurveConverter : public StatusCallback
889
880
}
890
881
}
891
882
892
-
893
883
const shared_ptr<IfcEdgeCurve> edgeCurve = dynamic_pointer_cast<IfcEdgeCurve>(edge);
894
884
if ( edgeCurve )
895
885
{
@@ -901,11 +891,6 @@ class CurveConverter : public StatusCallback
901
891
edgeSameSense = edgeCurve->m_SameSense ->m_value ;
902
892
}
903
893
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
-
909
894
if ( !edgeSameSense )
910
895
{
911
896
vec3 temp = p0;
@@ -915,12 +900,12 @@ class CurveConverter : public StatusCallback
915
900
916
901
std::vector<vec3> curvePoints;
917
902
std::vector<vec3> segmentStartPoints;
918
- const shared_ptr<IfcCurve> edgeCurveCurve = edgeCurve->m_EdgeGeometry ;
903
+ const shared_ptr<IfcCurve> edgeCurveGeometry = edgeCurve->m_EdgeGeometry ;
919
904
bool senseAgreement = true ;
920
905
921
- if ( edgeCurveCurve )
906
+ if ( edgeCurveGeometry )
922
907
{
923
- shared_ptr<IfcTrimmedCurve> trimmedCurve = dynamic_pointer_cast<IfcTrimmedCurve>(edgeCurveCurve );
908
+ shared_ptr<IfcTrimmedCurve> trimmedCurve = dynamic_pointer_cast<IfcTrimmedCurve>(edgeCurveGeometry );
924
909
if ( trimmedCurve )
925
910
{
926
911
const shared_ptr<IfcCurve> basisCurve = trimmedCurve->m_BasisCurve ;
@@ -931,15 +916,15 @@ class CurveConverter : public StatusCallback
931
916
std::vector<shared_ptr<IfcTrimmingSelect> > curve_trim2_vec;
932
917
933
918
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 ;
937
922
curve_trim1_vec.push_back (trim1);
938
923
939
924
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 ;
943
928
curve_trim2_vec.push_back (trim2);
944
929
convertIfcCurve (basisCurve, curvePoints, segmentStartPoints, curve_trim1_vec, curve_trim2_vec, senseAgreement);
945
930
}
@@ -948,7 +933,7 @@ class CurveConverter : public StatusCallback
948
933
{
949
934
std::vector<shared_ptr<IfcTrimmingSelect> > curve_trim1_vec;
950
935
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);
952
937
}
953
938
}
954
939
else
@@ -977,7 +962,7 @@ class CurveConverter : public StatusCallback
977
962
glm::vec4 color (0.5 , 0.5 , 0.5 , 1 );
978
963
if ( dist0 > EPS_M6 || dist1 > EPS_M6 )
979
964
{
980
- GeomDebugDump::dumpPolyline (curvePoints, color, false );
965
+ // GeomDebugDump::dumpPolyline(curvePoints, color, false);
981
966
}
982
967
983
968
if ( dist0 > EPS_M6 )
@@ -986,7 +971,7 @@ class CurveConverter : public StatusCallback
986
971
// std::cout << std::endl << "check EdgeStart IfcEdgeCurve, dist0 = " << dist0 << ", tag: " << tag << std::endl;
987
972
988
973
std::vector<vec3> segmentStartEndPoints = { p0, p1 };
989
- GeomDebugDump::dumpPolyline (segmentStartEndPoints, color, true );
974
+ // GeomDebugDump::dumpPolyline(segmentStartEndPoints, color, true);
990
975
}
991
976
992
977
if ( false )
@@ -1098,22 +1083,18 @@ class CurveConverter : public StatusCallback
1098
1083
1099
1084
for ( const shared_ptr<IfcOrientedEdge>& oriented_edge : edge_loop->m_EdgeList )
1100
1085
{
1101
- // shared_ptr<IfcVertex> m_EdgeStart;
1102
- // shared_ptr<IfcVertex> m_EdgeEnd;
1103
-
1104
1086
// IfcOrientedEdge -----------------------------------------------------------
1105
1087
// attributes:
1106
1088
// shared_ptr<IfcEdge> m_EdgeElement;
1107
1089
// shared_ptr<IfcBoolean> m_Orientation;
1108
1090
1109
- shared_ptr<IfcEdge> edge = oriented_edge->m_EdgeElement ;
1110
-
1111
1091
bool orientation = true ;
1112
1092
if ( oriented_edge->m_Orientation )
1113
1093
{
1114
1094
orientation = oriented_edge->m_Orientation ->m_value ;
1115
1095
}
1116
1096
1097
+ shared_ptr<IfcEdge> edge = oriented_edge->m_EdgeElement ;
1117
1098
std::vector<vec3> edge_points;
1118
1099
convertIfcEdge (edge, edge_points, length_factor);
1119
1100
@@ -1125,6 +1106,11 @@ class CurveConverter : public StatusCallback
1125
1106
{
1126
1107
std::copy (edge_points.rbegin (), edge_points.rend (), std::back_inserter (loop_points));
1127
1108
}
1109
+
1110
+ #ifdef _DEBUG
1111
+ // glm::vec4 color(0.5, 0.5, 0.5, 1);
1112
+ // GeomDebugDump::dumpPolyline(loop_points, color, false);
1113
+ #endif
1128
1114
}
1129
1115
1130
1116
GeomUtils::removeDuplicates (loop_points);
0 commit comments