Selon Xian Chen/³ÂÏÛ <[email protected]>: > Thanks Even. > > After checking the code under dwg and dxf, I believe the relevant error code > to my original error report should be in > ogr/ogrsf_frmts/dxf/ogrdxf_polyline_smooth.cpp. The code in EmitArc() must > consider the case when ogrArcStartAngle > ogrArcEndAngle and bClockWise is > true before calling OGRGeometryFactory::approximateArcAngles() (around line > 265). Here I increase the value of ogrArcEndAngle by 360 degree as follows: > if( bClockwise && (ogrArcStartAngle > ogrArcEndAngle) ) > ogrArcEndAngle += 360.0; > > Then the reported error is corrected. > > Similarly, there are error codes in both ogrdxf_hatch.cpp and > ogrdwg_hatch.cpp as you mentioned. > Line 286-294 in ogrdxf_hatch.cpp are quite suspicious: > if( bCounterClockwise ) > { > double dfTemp = dfStartAngle; > dfStartAngle = dfEndAngle; > dfEndAngle = dfTemp; > } > if( dfStartAngle > dfEndAngle ) > dfEndAngle += 360.0; > > Can anyone explain to me why switching Start Angle and End Angle (this will > reverse the order of the line string!!). Also, if bCounterClockwise, you > won't want to increase dfEndAngle by 360.. > > I've fixed the above code with something like: > if( bCounterClockwise ) > { > dfStartAngle *= -1; > dfEndAngle *= -1; > } > else if( dfStartAngle > dfEndAngle ) > dfEndAngle += 360.0; > > Similar fix-up is made in ogrdwg_hatch.cpp > > Not sure if these are sufficient, yet at least work well with my couple of > sample dwg/dxf files. > > I may want to submit a patch if you and other developers are okay with my > fix-up.
Xian, I'm not familiar with that code, so I am not sure about your proposed fix, but it could be helpful if you attach it to a ticket so it doesn't get lost. Attaching sample .dxf and .dwg files that have the issue that the patch fixes would also be helpfull. Best regards, Even _______________________________________________ gdal-dev mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/gdal-dev
