Autor Tema: PROYECTO PCB2Dto3D  (Leído 3296 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
PROYECTO PCB2Dto3D
« en: 24 de Agosto de 2009, 15:11:28 »
 :-/

El propósito del proyecto PCB2Dto3D, es crear un programa que genere una imagen 3D a partir de una PCB2D, no solo para EAGLE si no para cualquier otro, sera posible?, pues si, ya tengo la versión alfa del programa PCB2Dto3D.exe , pero requiero la ayuda de vosotros para que el proyecto evolucione

Como no se programar PCs, Suky compañero del foro me ayudo con el programa en Visual BASIC, me gustaría que fuera en un futuro en C# o Java que son lenguajes mas cercanos al C y utilizados en los microcontroladores

Como EAGLE3D solo trabaja con EAGLE y muchos elaboran sus PCBs con otros software y aunque algunos ya tienen la visualizacion3D aun no superan a las imágenes creadas con POV-Ray

El proyecto PCB2Dto3D difiere a EAGLE3D primero por que deseo que sea para todo tipo de software que genere PCBs, para hacer esto posible se debe exportar de la PCB2D un archivo texto con la información del BOARD para luego pasarla a POV-Ray por medio de una aplicación escrita en un lenguaje

La versión para EAGLE del archivo texto que exporta información del BOARD ya esta casi completa esta exporta las coordenadas y rotación de la PCB, coordenadas y rotación de los paquetes, coordenadas y rotación de los pads, coordenadas y rotación de los textos y perforaciones, ademas de el nombre y valor del componente por ejemplo de un resistor  (3K omnios), falta las información de las pistas pistas creo que se forman por polígonos

filename "!Export_BoardInfoOfEagle.ulp"
Código: C
  1. // This ULP export the information of the CircuitBoard of EAGLE, ULP version 0.07 Sep 13 2009
  2. if ( board ) //{
  3.         board( B ) { // board
  4.                 string boardPatch = B.name;
  5.                 string fileName = dlgFileSave( "Save File", filesetext(  boardPatch , "_BoardInfo_softwareEAGLE.dat" ), "*.dat" );
  6.                 if ( fileName == "" )
  7.                         exit( 0 );
  8.  
  9.                 output( fileName ) {
  10.                 printf( "/* This ULP export the information of the CircuitBoard of EAGLE.\n ULP version 0.06a Aug 24 2009\n ftp://ftp.cadsoft.de/eagle/userfiles/doc/ulp_en.pdf */\n"  );
  11.                 printf( "GlobalIdentifiers{ \n" );
  12.                 printf( "   BoardPatch = " + boardPatch + ";\n" );
  13.  
  14.                 // Declaration of GlobalIdentifiers
  15.                 int counter_Packages, counter_PADs, counter_SMD_Top, counter_SMD_Bottom;
  16.                 int counter_Vias, counter_HolesBoard, counter_HolesPackages, counter_Texts, Var01;
  17.  
  18.                 // Initialization of GlobalIdentifiers
  19.                 counter_Packages, counter_PADs = counter_SMD_Top = counter_SMD_Bottom = 0;
  20.                 counter_Vias = counter_HolesBoard = counter_HolesPackages, counter_Texts, Var01 = 0;
  21.  
  22.  
  23.                 B.elements( E ) { // B.elements
  24.                         counter_Packages++;
  25.  
  26.                         E.package.contacts( C ) { // PADs And SMDnumber
  27.                                 if ( C.pad )
  28.                                         counter_PADs++;
  29.  
  30.                                 if ( C.smd && ( C.smd.layer == 1 ) )
  31.                                         counter_SMD_Top++;
  32.  
  33.                                 if ( C.smd && ( C.smd.layer == 16 ) )
  34.                                         counter_SMD_Bottom++;
  35.                         } // End of E.package.contacts
  36.  
  37.                         E.package.holes( H ) { // Packages holes
  38.                                 counter_HolesPackages++;
  39.                         } // End of E.package.holes
  40.  
  41.                 } // End of B.elements
  42.  
  43.                 B.holes( L ) { //  Board holes
  44.                         counter_HolesBoard++;
  45.                 } // End of B.holes
  46.  
  47.                 B.signals( S ) {
  48.  
  49.                         S.vias( V ) {
  50.                                 counter_Vias++;
  51.                         } // End of S.vias
  52.  
  53.                 } // End of B.signals
  54.  
  55.                 B.texts( T ) {
  56.                         counter_Texts++;
  57.                 } // End of B.texts
  58.  
  59.                 string globalVars;
  60.  
  61.                 sprintf( globalVars,
  62.                 "#declare PackagesNumber = %d;\
  63.                 \t#declare PADsNumber = %d;\
  64.                 \t#declare SMDsNumber = %d;\
  65.                 \t#declare SMDsInTop = %d;\
  66.                 \t#declare SMDsInBottom = %d;\
  67.                 \t#declare ViasNumber = %d;\
  68.                 \t#declare HolesPackagesNumber = %d;\
  69.                 \t#declare HolesBoardNumber = %d;\
  70.                 \t#declare DrillsNumber = %d;\
  71.                 \t#declare TextNumber = %d;\
  72.                 \t#declare PolygonsNumber = 0;",
  73.                 counter_Packages, counter_PADs, counter_SMD_Top + counter_SMD_Bottom,  counter_SMD_Top, counter_SMD_Bottom, counter_Vias, counter_HolesPackages, counter_HolesBoard, counter_PADs+counter_Vias+counter_HolesBoard+counter_HolesPackages, counter_Texts );
  74.  
  75.                 dlgDialog( "*** Information of BOARD ***" ) {
  76.                         dlgVBoxLayout {
  77.                                 dlgHBoxLayout {
  78.                                         dlgSpacing( 420 );
  79.                                 }
  80.                                 dlgTextView( globalVars );
  81.                                 dlgPushButton( "+Ok" ) dlgAccept( );
  82.                         }
  83.                 };
  84.  
  85.                 printf( globalVars );
  86.  
  87.                 printf( "\n BoardCoordinates{ // : < X1,Z1 >: < X2,Z2 >: ... : < Xn,Zn >:;\n" );
  88.                 printf( "    :< %d, %d >:< %d, %d >:;\n", B.area.x1, B.area.y1, B.area.x2, B.area.y2 );
  89.                 printf(  "   }\n}\n" );
  90.  
  91.                 // PACKAGES
  92.                 printf(  "Packages{ // : BoardPackageName: PackageName: PackageValue: PackagePosition: PackageRotationY: PackBoardSide: PackLibraryName:;\n" );
  93.  
  94.                 // PACKAGES
  95.                         B.elements( E ) {
  96.                                 string BoardPackageName = E.name;
  97.  
  98.                                 string PackageName = E.package.name;
  99.  
  100.                                 string PackageValue;
  101.                                 if ( E.value == "" )
  102.                                         PackageValue = "Noval";
  103.                                 else
  104.                                         PackageValue = E.value;
  105.  
  106.                                 string xPosition; sprintf( xPosition, "%6.3f", u2mm( E.x ) ); // millimeters
  107.                                 string yPosition; sprintf( yPosition, "%6.3f", u2mm( E.y ) );
  108.  
  109.                                 string PackRotationY; sprintf( PackRotationY, "%6.3f", E.angle );
  110.  
  111.                                 string BoardPackSide;
  112.                                 if (  E.mirror == 0  )
  113.                                         BoardPackSide = "\"Top\"";
  114.                                 else
  115.                                         BoardPackSide = "\"Bottom\"";
  116.  
  117.                                 string PackLibraryName = E.package.library;
  118.  
  119.                                 printf(  "   : \"" + BoardPackageName + "\": " + PackageName + ": \"" + PackageValue + "\": < " + xPosition + ", 0, " + yPosition + " >: -" + PackRotationY + " :" + BoardPackSide + ": \"" + PackLibraryName + ".lbr\":;" + "\n" );
  120.                         }
  121.                         printf( "}\n\n" );
  122.                 // End of PACKAGES
  123.  
  124.                 // TEXT {
  125.                         board( B ) {
  126.                                 printf( "Text{ // : TextName: TextPosition: TextRotationY: TextSize: TextFont: TextLayer:;\n" );
  127.                                 B.texts( T ) {
  128.                                         printf( "   : \"%s\": < %d/10000, 0, %d/10000 >: 0: 3.5: Arial: 0:;\n",T.value, T.x, T.y  );
  129.                                 }
  130.                         }
  131.                         printf( "}\n\n" );
  132.                 // End of TEXT
  133.  
  134.                 // PADS
  135.                         printf( "PADs{ // : PADName: PADPosition: PADdiameterTop: PADdiameterBottom: PADshape:;\n" );
  136.                           board( B ) {
  137.                                 B.elements( ELE ) {
  138.                                         ELE.package.contacts( C ) {
  139.                                         if ( C.pad )
  140.                                                 printf( " : \"%s\": < %d/10000, 0, %d/10000 >: %d/10000: %d/10000: %d:;\n", C.name, C.pad.x, C.pad.y, C.pad.diameter[LAYER_TOP], C.pad.diameter[LAYER_BOTTOM], C.pad.shape[LAYER_BOTTOM] );
  141.                                         }
  142.                                 }
  143.                                 }
  144.                         printf( "}\n\n" );
  145.                 // End of PADS
  146.  
  147.                 // HOLES
  148.                         board( B ) {
  149.                                 printf(  "Holes{ //   : HolePosition: HoleDrill:; \n" );
  150.                                 B.holes( H ) {
  151.                                         printf(  "   : < %d/10000, 0, %d/10000 >: %d/10000:;\n", H.x, H.y, H.drill );
  152.                                 }
  153.                         }
  154.                         printf( "}\n\n" );
  155.                 // End of HOLES
  156.  
  157.  
  158.          // SMD
  159.              printf(  "SMD{ // SMDPCB \n  ::; \n}\n\n" );
  160.          // End of SMD
  161.  
  162.  
  163.          // VIAS
  164.              printf(  "Vias{ // ViasPCB \n  ::; \n}\n\n" );
  165.          // End of VIAS
  166.  
  167.  
  168.          // WIRES
  169.              printf(  "Wires{ // WiresPCB \n  ::;\n}\n\n" );
  170.          // End of WIRES
  171.  
  172.  
  173.          // POLYGONS
  174.               printf(  "Polygons{ // PolygonsPCB \n  ::;\n}\n\n" );
  175.          // End of POLYGONS
  176.         }
  177. } // end of board
  178.  
  179.  
  180. else {
  181.         dlgMessageBox( "\n    Start this ULP in a Board    \n" );
  182.         exit ( 0 );
  183. }
  184.  

Prueben por favor esta ULP con cualquier PCB que hallan realizado y me comentan
Gracias

PD
Por ejemplo la PCB que viene como muestra en EAGLE HEXAPOD.BRD
hexapod_3D


 Genera el siguiente archivo de salida

Código: C
  1. /////////////////////////
  2. /* This ULP export the information of the CircuitBoard of EAGLE.
  3.  ULP version 0.06 Aug 24 2009
  4.  ftp://ftp.cadsoft.de/eagle/userfiles/doc/ulp_en.pdf */
  5. GlobalIdentifiers{
  6.    BoardPatch = C:/Program Files/EAGLE-5.6.0/projects/examples/hexapod/hexapod.brd;
  7. PackagesNumber = 30;    PADsNumber = 338;       SMDsNumber = 0;         SMDsInTop = 0;  SMDsInBottom = 0;       ViasNumber = 141;       HolesPackagesNumber = 2;        HolesBoardNumber = 0;   DrillsNumber = 481;     TextNumber = 4;         PolygonsNumber = 0;     Var01 = 0
  8.  BoardCoordinates{ // : < X1,Z1 >: < X2,Z2 >: ... : < Xn,Zn >:;
  9.     : < 0/10000, -4096/10000 >: < 1153536/10000, 800000/10000 >:;
  10.    }
  11. }
  12. Packages{ // : BoardPackageName: PackageName: PackageValue: PackagePosition: PackageRotationY: PackBoardSide: PackLibraryName:;
  13.    : "B1": FB100: "FB100": < 64.135, 0, 74.295 >: - 0.000: "Top": "RECTIF.lbr":;
  14.    : "BU5": 2X25: "PINHD-2X25": < 50.165, 0,  9.525 >: -180.000: "Top": "PINHEAD.lbr":;
  15.    : "BU6": 2X25: "PINHD-2X25": < 50.165, 0, 55.245 >: -180.000: "Top": "PINHEAD.lbr":;
  16.    : "C1": E35-16: "2200uF/35V": < 33.655, 0, 69.215 >: -180.000: "Top": "ELKO.lbr":;
  17.    : "C2": C5B2,5A: "100nf": < 76.835, 0, 63.500 >: -90.000: "Top": "CAP-WI.lbr":;
  18.    : "C3": E2,5-5: "4,7uf/35V": < 80.645, 0, 45.085 >: -270.000: "Top": "ELKO.lbr":;
  19.    : "C4": E2,5-5: "4,7uf/10V": < 85.090, 0, 38.100 >: -270.000: "Top": "ELKO.lbr":;
  20.    : "C5": E2,5-5: "4,7uf/10V": < 13.970, 0, 17.145 >: -90.000: "Top": "ELKO.lbr":;
  21.    : "C6": E2,5-5: "4,7uf/35V": < 13.970, 0, 32.385 >: -90.000: "Top": "ELKO.lbr":;
  22.    : "D1": DO41Z10: "BZX85": < 85.090, 0, 26.035 >: -90.000: "Top": "diode.lbr":;
  23.    : "IC1": DIL-16: "HCTL2016": < 75.565, 0, 24.765 >: -90.000: "Top": "klaus.lbr":;
  24.    : "IC2": DIL-16: "HCTL2016": < 65.405, 0, 24.765 >: -90.000: "Top": "klaus.lbr":;
  25.    : "IC3": DIL-16: "HCTL2016": < 55.245, 0, 24.765 >: -90.000: "Top": "klaus.lbr":;
  26.    : "IC4": DIL-16: "HCTL2016": < 45.085, 0, 24.765 >: -90.000: "Top": "klaus.lbr":;
  27.    : "IC5": DIL-16: "HCTL2016": < 34.925, 0, 24.765 >: -90.000: "Top": "klaus.lbr":;
  28.    : "IC6": DIL-16: "HCTL2016": < 24.765, 0, 24.765 >: -90.000: "Top": "klaus.lbr":;
  29.    : "IC7": DIL-16: "DS3668": < 66.675, 0, 42.545 >: -180.000: "Top": "klaus.lbr":;
  30.    : "IC8": DIL-16: "DS3668": < 45.085, 0, 42.545 >: -180.000: "Top": "klaus.lbr":;
  31.    : "IC9": DIL-16: "DS3668": < 23.495, 0, 42.545 >: -180.000: "Top": "klaus.lbr":;
  32.    : "JP1": 1X02: "PINHD-1X2": < 54.610, 0, 73.660 >: -270.000: "Top": "PINHEAD.lbr":;
  33.    : "R1": 0207/10: "0207/10": < 86.995, 0,  8.255 >: -90.000: "Top": "R.lbr":;
  34.    : "R2": 0207/10: "0207/10": < 89.535, 0,  8.255 >: -90.000: "Top": "R.lbr":;
  35.    : "R3": 0207/10@1: "10k": < 92.075, 0,  8.255 >: -270.000: "Top": "R.lbr":;
  36.    : "R4": 0207/10: "0207/10": < 94.615, 0,  8.255 >: -90.000: "Top": "R.lbr":;
  37.    : "R5": 0207/10: "0207/10": < 97.155, 0,  8.255 >: -90.000: "Top": "R.lbr":;
  38.    : "ST1": ML16: "PINHD-2X8": <  5.715, 0, 15.875 >: -270.000: "Top": "ST-ML.lbr":;
  39.    : "ST2": ML26: "PINHD-2X13": <  5.715, 0, 57.785 >: -270.000: "Top": "ST-ML.lbr":;
  40.    : "ST3": ML16: "PINHD-2X8": < 93.345, 0, 29.210 >: -90.000: "Top": "ST-ML.lbr":;
  41.    : "U1": TO220H: "78S24": < 100.330, 0, 62.865 >: -270.000: "Top": "LINEAR.lbr":;
  42.    : "U2": TO220H: "7805": < 100.330, 0, 51.435 >: -270.000: "Top": "LINEAR.lbr":;
  43. }
  44.  
  45. Text{ // : TextName: TextPosition: TextRotationY: TextSize: TextFont: TextLayer:;
  46.    : "Hexapod Interface": < 139700/10000, 0, 762000/10000 >: 0: 3.5: Arial: 0:;
  47.    : "kls 01/1999": < 139700/10000, 0, 730250/10000 >: 0: 3.5: Arial: 0:;
  48.    : "TOP": < 31750/10000, 0, 330200/10000 >: 0: 3.5: Arial: 0:;
  49.    : "BOT": < 76200/10000, 0, 330200/10000 >: 0: 3.5: Arial: 0:;
  50. }
  51.  
  52. ...
  53.  

hexapod_2D
« Última modificación: 13 de Septiembre de 2009, 16:20:11 por cdrpo »

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
Re: PROYECTO PCB2Dto3D
« Respuesta #1 en: 26 de Agosto de 2009, 14:42:08 »
 :-/  PCB2Dto3D version alfa 01

http://www.geocities.com/cdavidrp/PovRay/PCB2Dto3D.zip

Nota:
PCB2Dto3D trabaja solo con las versiones superiores a la 3.7beta33 de POV-Ray

Importante: La versión 3.7b33 o superiores de POV-Ray no afectan la instalaciones previas de (POV-Ray 3.6), ya que se instala independientemente y en carpetas diferentes así que no le teman a instalarla. Aproximadamente cada dos meses sale una nueva versión de POV-Ray muy próxima a la versión oficial, por esta razón las betas generan un mensaje de caducidad para que el usuario se actualice a la ultima versión, la caducidad no implica dejar de funcionar

http://www.povray.org/download/
« Última modificación: 07 de Octubre de 2009, 10:36:23 por cdrpo »

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
Re: PROYECTO PCB2Dto3D
« Respuesta #2 en: 16 de Septiembre de 2009, 15:41:48 »
Configurando la escena de la PCB3D

Dentro del archivo Settings_PCB3D.inc

Existe una variable que permite ver la PCB desde la parte de arriba  como de abajo

Código: C
  1. declare CircuitBoardTopViewOn = "true";


"true" es vista desde arriba (top) reemplace  "true"  por  "false" si desea una vista desde abajo (bottom)



Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
Re: PROYECTO PCB2Dto3D
« Respuesta #3 en: 18 de Septiembre de 2009, 20:49:29 »
 :-/  Nuevo lanzamiento de PCB2Dto3D a versión alfa 0.02

Novedad, incorporo HDRI para darle mayor realismo al 3D

http://www.geocities.com/cdavidrp/PovRay/PCB2Dto3D.zip


 :( Nota: solo trabaja con POV-Ray 3.7b33 o 34
http://www.povray.org/redirect/www.povray.org/beta/POV-Ray%20for%20Windows%20v3.7%20beta%2034.msi

Para dar soporte a la 3.6 debo realizar unos cambios en el código fuente, pero no se utilizar el Visual Basic, así que si me ayudan a compilar en Visual Basic u otro lenguaje (C#, Java) la versión de  PCB2Dto3D tendrá compatibilidad con POV-Ray 3.6 y MegaPov

Gracias

Primer PCB3D creada con PCB2Dto3D


Las bibliotecas utilizadas son de un compañero italiano, lo bueno es que también se puede utilizar las bibliotecas de EAGLE3D

EL próximo paso es trabajar con otros programas, como TARGET 3001!

http://server.ibfriedrich.com/wiki/ibfwikien/index.php?title=Bill_of_Material_BOM

« Última modificación: 07 de Octubre de 2009, 15:04:40 por cdrpo »

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
Re: PROYECTO PCB2Dto3D
« Respuesta #4 en: 07 de Octubre de 2009, 19:01:53 »
 :-/  Nuevo lanzamiento de PCB2Dto3D a versión alfa 0.03

Cierta compatibilidad con POV-Ray 3.6

http://www.geocities.com/cdavidrp/PovRay/PCB2Dto3D.zip

Nota, el archivo generado (*.pov) para que sea leido por las versiones de POV-Ray 3.6 se debe:

reemplazar solo dentro del archivo (*.pov) la siguiente línea
Código: [Seleccionar]
#if( PackagesView = "true" ) por
Código: [Seleccionar]
#if( !strcmp( PackagesView, "true" ) )

reemplazar solo dentro del archivo (*.pov) la siguiente línea
Código: [Seleccionar]
#if( PackageParametersOn = "true") por
Código: [Seleccionar]
#if( !strcmp( PackageParametersOn, "true" ) )

Desconectado cdrpo

  • PIC18
  • ****
  • Mensajes: 317
Re: PROYECTO PCB2Dto3D
« Respuesta #5 en: 10 de Octubre de 2009, 13:45:28 »
 :-/ Nuevo lanzamiento de PCB2Dto3D a versión alfa 0.04

Compatibilidad con MegaPOV

http://www.geocities.com/cdavidrp/PovRay/PCB2Dto3D.zip

Configuracion de la escena con MegaPOV
por favor editar Settings_PCB3D.h con:

Código: [Seleccionar]

#declare Software = 1;                           // [0 = Povray 3.6 y 3.7], [1 = MegaPov con Povray 3.6]
#declare RealismOn = "true";                  // Only for Povray 3.7 or MegaPov with Povray 3.6