miércoles, 19 de enero de 2011

Preparación de entorno de trabajo

Herramientas necesarias:
* Qt creator (se puede descargar el SDK completo desde su página web)
* Librerías de OpenCascade

tags a incluir en el makefile.pro:
LIBS += -L/usr/local/lib -L/usr/lib 
LIBS += -lTKernel -lTKGeomBase -lTKTopAlgo -lTKBRep 
LIBS += -lTKMath -lTKGeomBase -lTKTopAlgo -lTKShHealing -lTKBool 
INCLUDEPATH += /usr/include/opencascade 

Instalación en Linux

La versión de Linux que tengo instalada es Ubuntu 10.04
Me había descargado los fuentes de OpenCascade 6.3.0 de www.opencascade.org para compilarlos yo mismo, pero resulta que hay una serie de paquetes listos para ser instalados. Una de mis máximas es "si esta hecho, úsalo (y agradécelo)" así que usaré los paquetes, al menos inicialmente. Si más adelante por alguna razón necesito hacer alguna personalización ya recurriré a la compilación local.

Los paquetes en concreto son, haciendo una búsqueda con apt-cache:
$ sudo apt-cache search opencascade
freecad - An extensible Open Source CAx program (alpha)
freecad-dev - FreeCAD development files
freecad-doc - FreeCAD documentation
libopencascade-dev - OpenCASCADE CAE platform library development files
libopencascade-foundation-6.3.0 - OpenCASCADE CAE platform shared library
libopencascade-foundation-dev - OpenCASCADE CAE platform library development files
libopencascade-modeling-6.3.0 - OpenCASCADE CAE platform shared library
libopencascade-modeling-dev - OpenCASCADE CAE platform library development files
libopencascade-ocaf-6.3.0 - OpenCASCADE CAE platform shared library
libopencascade-ocaf-dev - OpenCASCADE CAE platform library development files
libopencascade-ocaf-lite-6.3.0 - OpenCASCADE CAE platform shared library
libopencascade-ocaf-lite-dev - OpenCASCADE CAE platform library development files
libopencascade-visualization-6.3.0 - OpenCASCADE CAE platform shared library
libopencascade-visualization-dev - OpenCASCADE CAE platform library development files
opencascade-draw - OpenCASCADE CAE platform shared library
opencascade-examples - OpenCASCADE CAE platform library input examples
opencascade-wok - OpenCASCADE CAE platform shared library

la orden sería, para instalarlo todo:

$sudo apt-get install libopencascade-dev libopencascade-foundation-6.3.0 libopencascade-foundation-dev libopencascade-modeling-6.3.0 libopencascade-modeling-dev libopencascade-ocaf-6.3.0 libopencascade-ocaf-dev libopencascade-ocaf-lite-6.3.0 libopencascade-ocaf-lite-dev libopencascade-visualization-6.3.0 libopencascade-visualization-dev opencascade-draw opencascade-examples opencascade-wok

viernes, 14 de enero de 2011

Al generar arcos a partir de tres puntos, intento esta solución:

gp_Pnt p1(data.COX[0], data.COY[0],0.);
gp_Pnt p2(data.COX[1], data.COY[1],0.);
gp_Pnt p3(data.COX[2], data.COY[2],0.);
GC_MakeArcOfCircle arc_maker(p1,p2, p3);

Si arc_maker.IsDone() devuelve true, se ha podido generar el arco, y si no es que los tres puntos están alineados.

Pero con los siguientes datos se produce un error
+ p1 {4683.67; 1267.14; 0} gp_Pnt
+ p2 {4577.44; 1260.13; 0} gp_Pnt
+ p3 {4471.2; 1253.12; 0} gp_Pnt

Son colineares (dentro de una tolerancia), pero los test de gce_makecirc.cxx no son suficientes para detectarlo: no son tan colineares como para pasar el filtro de gp::Resolution() (muy restrictivo), pero sí como para que el producto vectorial que se utiliza para calcular los datos del círculo produzca un error:
gp_Dir dir = Dir1.Crossed(Dir3);


La solución es hacer un test previo de colinearidad. Se ha utilizad:
gp_Lin l1_3(p1 , gp_Dir( gp_Vec( p1 , p2 ) )); //línea entre P1 y P2
if ( l1_3.Distance( p3 )>.1) //es arco