2012-01-23 17 views
13

Escribí mi propio analizador de archivos ASCII DXF y encuentro un problema con las elipses en algunos documentos en particular.Analizador DXF: dirección de ángulo de los puntos suspensivos

Parece que no hay un "Código de grupo" que defina la dirección del ángulo (en sentido horario o antihorario) para los parámetros de inicio y fin. En la mayoría de casos, es la izquierda, pero no en todos los casos ...

Para simplificar, aquí es un exemple visual:

Ellipse1 Ellipse2

Como se puede ver, el primero tiene una ángulo de inicio de 135, y el segundo un ángulo de inicio de 45 ... Pero las elipses parecen ser idénticas (semicírculo, a la izquierda) ... Esto se debe a que los ángulos de la primera son en el sentido de las agujas del reloj, y los segundos son en sentido contrario a las agujas del reloj ...

Obviamente, ellos aparecen correctamente en AutoCAD, pero con mi programa de análisis, aparecen así:

Ellipse3

Simplemente porque no sé si los ángulos están representados CW o CCW ...

Did Extraño un código de grupo o algo así?

Información: En AutoCAD, puedo ver que la primera elipse "punto final del eje menor" es [200, -200, 0], mientras que la segunda es [-200, 200, 0], supongo que así es como AutoCAD sabe si los ángulos son CW o CCW ... Pero todo lo que tengo en el archivo DXF es el "Extremo principal del eje" y la "Relación mayor a menor eje" (un número)

Aquí está el archivo DXF correspondiente a este ejemplo: http://www.woofiles.com/dl-279966-ZvoMjamr-c.dxf

+3

Resuelto: Olvidé tomar en cuenta el vector de extrusión ... – ingham

+0

Su pregunta es muy clara y está bien documentada. Felicidades! Es bueno verte solucionado el problema tú solo. – cma

+0

@ingham Le sugiero que tome este comentario y lo agregue como respuesta. Esto fue valioso para mí, y quiero votar la respuesta y la pregunta.Si pudieras decir cómo usaste el vector de extrusión para calcular si era en sentido horario o no, sería aún más valioso. – daramarak

Respuesta

1

Resuelto: me olvidó tomar en cuenta el vector de extrusión

cuando es negativo (0,0, -1), los ángulos deben ser tratados como CCW en lugar de CW (y viceversa)

2

La elipse podría no estar en el plano 2D XY, por lo que no es seguro utilizar el signo del componente Z de la dirección de extrusión. Aquí hay un enfoque más general para una elipse 3D:

1) Cree la elipse en el plano XY con el eje principal en la dirección + X y yendo en sentido antihorario desde el parámetro inicial (código de grupo 41) al parámetro final (grupo código 42). Primero asegúrese de que el parámetro final sea mayor que el parámetro de inicio y agregue 2pi si no lo está. A continuación, puede calcular cada punto con:

X = [length of major radius] * cos(angle) 
Y = [length of minor radius] * sin(angle) 

2) Girar a este nuevo sistema de coordenadas:

Direction of new X axis = endpoint of major axis 
Direction of new Z axis = extrusion direction 
Direction of new Y axis = [new Z axis] cross product [new X axis] 

se puede hacer esto mediante la normalización de estos vectores y haciendo una matriz de transformación 3x3 donde cada columna contiene uno de los vectores, luego multiplique esta matriz por cada punto en la elipse creada en el paso 1.

Cuestiones relacionadas