====== Preguntas más frecuentes sobre Booleanas ====== > **Resumen:** //Entender los misterios de las operaciones booleanas: cómo funcionan, por qué fallan, cómo solucionar problemas y hacer que funcionen de manera más coherente, cómo funcionan en objetos abiertos.// Las operaciones booleanas pueden ser un gran ahorro de tiempo en la creación de objetos en Rhino. Pero, para el principiante, a menudo fallan misteriosamente y es difícil entender por qué. Esperamos que esta explicación de preguntas frecuentes aclare un poco más el tema. Si no desea leer toda información completa, también puede consultar el artículo [[rhino:jbbooleanfix|Solución de problemas con operaciones booleanas]] de John Brock. **//Para entender por qué fallan las booleanas, primero debe entender cómo funcionan.//** No son una herramienta mágica para unir objetos. Simplemente son operaciones semiautomáticas que combinan varios comandos manuales en un solo proceso. Las operaciones booleanas básicamente hacen cuatro cosas: * **Intersecar** dos o más objetos * **Partirlos** en las intersecciones encontradas * **Eliminar** (descartar) las partes no deseadas * **Unirlo** todo de nuevo Todo lo que puede hacer con operaciones booleanas también se puede hacer manualmente utilizando los cuatro comandos anteriores. Usar una operación booleana es un modo de acelerar el procedimiento, cuando funciona... Entonces, lo primero que debe tener en cuenta es que es necesario un entendimiento **//sólido//** de cómo funcionan los componentes de las operaciones booleanas. Cuando estas fallan, puede obtener los mismos resultados con estos comandos: **Intersecar**, **Partir**, **Eliminar** y **Unir**. Intente deshacer una operación booleana correcta y vuelva a hacerla manualmente usando esos comandos. Puede estar tranquilo con el hecho de que con este procedimiento siempre obtendrá el resultado que quiera, incluso si sus operaciones booleanas fallan. =====Error en operación booleana...===== ¿Por qué las operaciones booleanas fallan? En primer lugar, la operación de intersección es la que determinará el éxito o el fracaso de una operación booleana. Si se encuentra una intersección correcta, el resto es fácil. Pero si Rhino tiene problemas para encontrar la intersección, la operación booleana fallará. La clave es ayudar a Rhino a encontrar una intersección buena y completa. Para hacerlo, configure su modelo y archivo correctamente, y tenga en cuenta algunas de las peculiaridades y limitaciones de Rhino. La intersección de dos objetos cerrados (sólidos) debe producir al menos una curva de intersección completamente cerrada (es decir, un bucle). Es posible que haya más de un bucle si el objeto se cruza en varios puntos; no hay problema si todos son cerrados. Sin embargo, si uno es abierto, la operación booleana fallará. El motivo es que la curva de intersección no corta completamente los objetos. Rhino no sabe cómo terminar el corte, por lo que se detiene y muestra un mensaje de error. > **Nota:** //También es posible realizar operaciones booleanas en objetos abiertos, pero es un poco más complicado, por lo que daremos por supuesto que todos los objetos son cerrados. Los objetos abiertos se tratarán posteriormente.// Entonces, teniendo en cuenta lo anterior, si su operación booleana falla, lo primero que debe hacer es verificar la intersección de los objetos. Seleccione los objetos y ejecute el comando Intersecar. Primero, observe cada curva de intersección en la pantalla. ¿Se ven bien? ¿Hay espacios visibles, segmentos sobrantes u otras cosas extrañas? Si es así, averigüe por qué. Si la intersección se ve bien, pero la operación booleana sigue fallando mientras la curva de intersección todavía está seleccionada, vaya a //Propiedades > Detalles// o utilice el comando **Info**. El cuadro de información resultante le mostrará todo lo que necesita saber sobre la curva. ¿Dice que la curva es abierta? Entonces ahí está el problema. ¿Hay más de una curva? Necesita averiguar por qué hay espacios o superposiciones en la intersección. =====Problemas de intersección, soluciones y limitaciones===== ¿Qué causa espacios o problemas en la intersección? Hay muchas posibilidades. Algunas se deben a errores de modelado o imprecisiones. Otras se deben a las limitaciones de Rhino. Primero veamos los errores comunes: Si cree que su intersección debe ser cerrada pero no lo es, seleccione la curva y ejecute el comando **InicioCrv**, que coloca un punto al inicio de la curva. Normalmente se corresponderá con un lado del espacio. Utilice el **Zoom** para acercarse y ver el espacio en la pantalla. ¿Por qué hay un espacio ahí? Tal vez crea que sus objetos son cerrados, pero en realidad no lo son. La intersección puede cruzar un espacio entre las superficies, causando una curva abierta. Si ha forzado la unión de su objeto con el comando **UnirBorde**, eso también puede ocurrir, aunque el objeto sea cerrado. Otra cosa que hay que comprobar son las tolerancias de modelado ([[rhino:faqtolerances|vea Comprender las tolerancias]]). El hecho de que sean demasiado elevadas puede evitar que la función de intersección encuentre una intersección completa, aunque todo lo demás esté bien. Intente ajustar sus tolerancias y ejecutar la operación booleana nuevamente. Una vez que obtenga una intersección completa cerrada, la operación debería funcionar. Si no puede lograr que Rhino genere automáticamente una curva de intersección cerrada, incluso después de haber arreglado su objeto lo mejor posible, puede que tenga que volver al modo manual. Obtenga la mejor curva de intersección que pueda e intente editarla hasta que tenga un objeto cerrado. Es posible que necesite agregar o cambiar un segmento, editar algunos puntos, eliminar segmentos superpuestos o similar. Una vez que tenga esta curva, puede intentar recortar sus objetos individualmente. Debe descomponer las polisuperficies para recortar con la curva de intersección. Recorte las partes que no quiera y únalo todo de nuevo. ====Limitaciones conocidas de Rhino==== **Costuras coincidentes**: todos los objetos tienen costuras. A veces, cuando las costuras de dos objetos están exactamente en el mismo lugar, Rhino tiene problemas con la intersección. Solución: intente mover solo un poquito la costura o un objeto (si es posible, sin quitarle precisión al modelo). O bien, intente hacer la operación manualmente. ** Caras coplanares**: si dos caras de un objeto están en el mismo plano, es posible que Rhino no pueda calcular la intersección. Este problema es bastante frecuente. Si puede, evite crear su modelo de este modo. Solución: como se indica más arriba, mueva el objeto ligeramente si es posible. De lo contrario, puede que tenga que hacer esta operación manualmente. **Superficies casi tangentes**: como la intersección de dos tubos de igual diámetro en un ángulo. La intersección a menudo falla en el punto donde las superficies son tangentes. Actualmente, este problema no tiene una solución fácil. **Objetos no válidos**: si uno de los objetos con los que intenta trabajar no es válido, las operaciones booleanas fallarán a menudo. Compruebe si hay objetos no válidos con el comando **SelObjetosErróneos**. Si se indica que hay alguno, debe arreglarlo primero antes de continuar. También es recomendable activar la comprobación automática de objetos. Si se crean (o importan) objetos no válidos en el transcurso de su trabajo, Rhino le informará de inmediato. Para hacerlo, simplemente escriba **ComprobarNuevosObjetos**. Este comando es un conmutador, si vuelve a ejecutarlo se desactiva la función. **Polisuperficies no múltiples**: aunque Rhino actualmente no marca estos objetos como erróneos, pueden causar errores. Rhino //no debería// crear estos tipos de estructuras, pero en algunas condiciones sí lo hace, especialmente con la V4. La única forma de encontrarlos es verificar las propiedades del objeto. =====A veces es necesario crear y editar manualmente===== Ilustraciones animadas que muestran la creación y edición manual de superficies cuando las operaciones booleanas fallan: **[[http://wiki.mcneel.com/_media/legacy/en/boolean_problem-1.swf|How to Manually Edit Surfaces with Coplanar Faces and Nearly Tangent Surfaces]]** **[[http://wiki.mcneel.com/_media/legacy/en/Solids_that_Dont_boolean_2a.pdf|How to Manually Edit Surfaces with Coplanar Faces II]]** Este es un ejemplo de un sólido que no se puede construir con primitivas de sólido y se requieren técnicas de edición de superficies. * El problema principal es la condición de las superficies laterales que son coincidentes y no comparten un volumen con la pieza sólida principal. Cuando las operaciones booleanas fallan, confíe en las técnicas de edición de superficies descritas en los pasos del documento del enlace. * Descargue el [[http://wiki.mcneel.com/_media/legacy/en/part1-r3.3dm|modelo.]] {{:legacy:en:t.JPG}} ---- =====Operaciones booleanas en objetos abiertos===== Como hemos mencionado anteriormente, las operaciones booleanas también se pueden realizar en objetos abiertos. El principio es el mismo, pero como los objetos no son cerrados, es necesario hacer y entender un par de cosas más. Rhino V4 y las versiones posteriores proporcionan una herramienta que facilita mucho el siguiente procedimiento si solo tiene dos objetos. Vea el comando: [[rhino:boolean2objects|Booleana2Objetos]] ==== Dirección de la superficie ==== En primer lugar, es necesario entender el concepto de dirección y normales de superficie. Cada objeto de superficie tiene una "lateralidad", es decir, un lado frontal y un lado posterior. En Rhino se denomina "dirección" y se puede mostrar con el comando **Dir**. Ejecute el comando **Dir** en varias superficies y vea qué sucede. Las flechas de dirección apuntan hacia el exterior de la superficie y también muestran la dirección normal local, es decir, están a 90º de la superficie localmente. Es posible invertir la dirección de las normales de cada superficie (es decir, invertir la lateralidad de la superficie). Para hacerlo, mientras esté en el comando **Dir**, escriba **F** y haga clic en Intro o simplemente haga clic una vez en la superficie. Verá que las flechas de dirección cambian de lado. También puede hacerlo sin estar en el comando **Dir**, simplemente utilizando el comando **Invertir** (aunque no verá ninguna flecha). {{:legacy:en:Directions.gif}} > **Nota:** //Las curvas en Rhino también tienen una dirección que se puede mostrar con el comando **Dir**. En este caso, **Invertir** intercambia los puntos inicial y final e invierte la dirección de la curva.// Cuando las superficies se unen, Rhino intenta estandarizar las normales de superficie del objeto. Es decir, intenta mantener todas las superficies adyacentes con la misma orientación frontal/posterior. Por lo tanto, cuando tiene un conjunto abierto de superficies unidas (una polisuperficie abierta), seguirá teniendo una parte frontal/posterior uniforme y no será un conjunto de retazos de superficies orientadas en diferentes direcciones. > **Experimento 1:** // Dibuje un cuadrado. Extrúyalo para crear una caja abierta de 4 lados. Descompóngalo en superficies separadas. Utilice el comando **Dir** para invertir las dos de las direcciones de las superficies hacia el interior. Ahora selecciónelas todas por ventana y utilice el comando **Unir** para volver a convertirlas en una polisuperficie de 4 lados. Luego utilice de nuevo el comando **Dir** para ver las direcciones de superficie.// Cuando un objeto en Rhino es cerrado, el programa inverte automáticamente todas las superficies hacia el exterior. Asume que el interior no nos importa, porque el objeto es cerrado (sólido). Las polisuperficies cerradas no pueden tener las normales orientadas hacia el interior. Si logra invertir las normales de una polisuperficie cerrada hacia el interior, o bien la polisuperficie no es realmente cerrada, o bien se trata de un error del programa (muy raro). > ** Experimento 2: ** //Dibuje un cubo. Descompóngalo en superficies separadas. Utilice el comando **Dir** para invertir las algunas de las direcciones de las superficies hacia el interior. Ahora selecciónelas todas por ventana y utilice el comando **Unir** para volver a convertirlas en una polisuperficie y ver qué pasa con las direcciones de superficie.// ====Cómo afecta la dirección de las superficies a las operaciones booleanas==== Ahora ya comprende mejor el funcionamiento de las normales y la dirección de las superficies. ¿Por qué es importante en las operaciones booleanas? Cuando se le indica a Rhino que realice una operación booleana, observa las normales de la superficie para determinar qué partes conservar y qué partes desechar. Esencialmente, la unión, la diferencia y la intersección booleanas son la misma operación. Solo que se conservan diferentes partes de los objetos. Con la unión booleana, por ejemplo, las partes que se superponen se descartan y el resto se unen. Con la intersección, pasa exactamente lo opuesto. Las operaciones booleanas con sólidos (polisuperficies cerradas) son predecibles porque todas las normales de superficie siempre apuntan al exterior. Pero con las polisuperficies abiertas los resultados son impredecibles, ya que no sabemos cuál es la parte frontal y la parte posterior de cada objeto sin usar el comando **Dir**. > **Nota:** //Si está realizando operaciones booleanas en polisuperficies cerradas y no reaccionan como cree que deberían (es decir, las partes incorrectas desaparecen), probablemente uno o más de los objetos no sean realmente cerrados y tengan las normales apuntando hacia adentro. Utilice el comando **Dir** para comprobarlo.// > **Consejo:** //Una forma de saber siempre hacia dónde están orientadas las superficies es configurar la pantalla para que muestre las caras posteriores y las frontales en diferentes colores. En la **V3**, utilice el comando ** Visualización avanzada > Color de caras posteriores** para configurar esta opción. En la **V4**, vaya a **Opciones > Apariencia > Configuración avanzada > Sombreado > Configuración de cara posterior**. En **V5**, vaya a ** Opciones > Vista > Modos de visualización > Sombreado > Configuración de cara posterior**. Luego elija **Definir un color para todas las caras posteriores** y seleccione un color. Tenga en cuenta que esta opción solo funciona si trabaja en modo sombreado. En modo alámbrico, semitransparente o renderizado no se puede ver.// Imaginemos la operación booleana abierta más simple. Tiene una polisuperficie sólida y cerrada que se cruza totalmente con una superficie. Puede hacerlo fácilmente creando cualquier tipo de objeto sólido, y luego usando el comando **PlanoDeCorte** y dibujando una línea de corte a través del objeto en cualquier dirección. Ahora, pruebe el comando **DiferenciaBooleana**. Seleccione el sólido como primer conjunto y el plano de corte como segundo. Un lado u otro del sólido se cortará y el agujero quedará ocupado por el plano. ¿Pero qué lado? No se puede saber a menos que ejecute el comando **Dir** en la superficie. Mire la dirección de la normal de la superficie. Entonces ejecute la diferencia. Deshaga, invierta la dirección de la superficie con el comando **Dir** y, a continuación, ejecute de nuevo la diferencia. La dirección de la normal de superficie del plano determina qué parte queda. En general, si desea que la diferencia booleana entre una superficie abierta (poli) y un sólido funcione como si fueran dos sólidos, las normales de superficie del objeto abierto deben apuntar hacia el objeto sólido, como si también fuera un sólido. {{:legacy:en:BooleanDiff1.gif}} {{:legacy:en:BooleanDiff2.gif}} Desde Rhino V4 en adelante, [[rhino: boolean2objects|Booleana2Objetos]] permite probar todas las posibilidades de las diferentes operaciones booleanas y ver el resultado en pantalla. Y después puede elegir el resultado que desee. Actualmente, esta opción solo funciona con dos objetos.