delphiautomatic-ref-countinganglepolylinechord

How to use this DXF Bulge Arc function getArcDataFromBulge()?


I have a problem to use this bulge arc (dxf parser) function in C++ getArcDataFromBulge().

https://github.com/Embroidermodder/Embroidermodder/blob/master/libembroidery/geom-arc.c

I have my drawArc() function which need 'start angle' and 'sweep angle' parameters from this getArcDataFromBulge() function. My drawArc() function use OpenGL 2D coordinate system with right side zero angle position and when I get values from getArcDataFromBulge() and recalculate it (0+-, 180+-, 360+-) I have something like unexpected opposite angles as results. It looks like clockwise-counterclockwise problem, but I'm think is not, I'm not sure. Do you have some idea what is going on?

For example:

tempBulge.bulge := 0.70;
arcMidAngle := RadToDeg( atan2(tempBulge.arcMidY - tempBulge.arcCenterY, 
tempBulge.arcCenterX - tempBulge.arcMidX) );

After calculaton: arcMidAngle = 179.999 When I add and subtract from this point half of arc chord angle, I get start and end angles of my arc: 90°, 270° but it's not the same arc when I open dxf with some CAD software, it is opposite than origin drawing.


Solution

  • If you have an arc from 0° to 90°, it could be a 1/4 circle or a 3/4 circle.

    You need to parse the $ANGDIR and $ANGBASE variables from the HEADER section which tells you in which direction angles are defined ($ANGDIR) and where the 0° angle starts ($ANGBASE) within that specific DXF file:

    Variable  Group code  Description 
    $ANGBASE  50          Angle 0 direction 
    $ANGDIR   70          1 = Clockwise angles, 0 = Counterclockwise
    

    For DXF, if $ANGBASE = 0, then 0° is on the right of the center, alike Windows.

    Furthermore, in DXF, the positive Y-axis is upwards, in contrast to many Windows API's where the positive Y-axis is downwards.