Actualización de modelos cruzados y ajuste de datos estructurales utilizando la interfaz COM
Artículo técnico
Para algunas estructuras, es necesario diseñarlas en diferentes configuraciones. Puede ser que una plataforma de trabajo aérea deba analizarse en su posición en el suelo así como en la posición media y extendida. Dado que tales tareas requieren la creación de varios modelos, que son casi idénticos, la actualización de todos los modelos con un solo clic del ratón es un alivio considerable.
A continuación, se supone que tiene un conocimiento básico de la interfaz COM. Los enlaces proporcionan artículos sobre los conceptos básicos de la programación.
Tarea
El programa debería ajustar automáticamente cualquier dato estructural como nudos, líneas, barras, etc. al hacer clic en un botón determinado. Por ejemplo, las coordenadas del nudo 1 se deben transferir desde un modelo principal a varios modelos secundarios y variantes. Sin embargo, no se deben transferir todos los valores, sino sólo aquellos que el usuario haya definido previamente libremente.
Ejemplo de modelo
Como ejemplo para la función del programa descrito, se modeló una plataforma de trabajo aérea simple. El siguiente modelo se considera como el modelo principal.
Esta plataforma no está parametrizada y está disponible con tres tipos: completamente extendido, en el suelo y en una posición media. El tipo completamente extendido se define como el modelo principal, el del medio como el tipo 1 y el que está en el suelo como el tipo 2.
Consideraciones
Para lograr la tarea, se requiere un tipo de archivo de configuración o una interfaz gráfica de usuario para definir qué modelos se deben comparar entre sí.
Para definir las coordenadas libres o variables de un nudo, se debe usar la función de comentario del elemento respectivo. El programa busca una cadena específica en el comentario y, si la encuentra, modifica o deja las coordenadas correspondientes. Además, sería útil que se crearan nuevos elementos automáticamente en todos los submodelos. Por lo tanto, la estructura se debe hacer de tal manera que el usuario active el modelo deseado en RFEM (editado en primer plano) y el programa abra los modelos requeridos, comparándolos con el modelo principal.
interfaz gráfica de usuario
Se seleccionó el siguiente diseño simple para la interfaz gráfica de usuario.
El usuario puede escribir una ruta en el cuadro de texto o insertarla copiando y pegando. Con "Agregar nuevo modelo" se puede agregar a la lista de modelos para ajustar. Use el botón "Eliminar modelo seleccionado" para eliminar un modelo seleccionado en la lista. El botón "Modificar modelos" inicia el programa.
Flujo básico del programa
Al principio, el programa solo tiene las rutas de los modelos y variantes secundarios y primero necesita la conexión a RFEM. Si se establece la conexión con RFEM, entonces se debe ejecutar un bucle sobre los modelos secundarios. Dado que el programa también debe crear elementos, se debe observar la jerarquía. Por lo tanto, primero se comparan los nudos, luego las líneas, los materiales, las secciones y finalmente las barras. Los nudos representan una excepción, porque aquí se deben adoptar las direcciones x, y, z, si es necesario, o dejarlas como están. Todos los demás elementos se toman completamente o se dejan como están. Sin embargo, debería ser el mismo para todos los elementos que se creen nuevos.
Estructura básica del programa
El método que se ejecuta al hacer clic en el botón "Modificar modelos" tiene la siguiente estructura básica.
private void button_mod_click (remitente del objeto, EventArgs e)
{
//RFEM
//###########################
Dlubal.RFEM5.IModel3 iModel_org = null;
IApp de Dlubal.RFEM5.IApplication = nulo;
probar
{
//obtener la interfaz para la aplicación y abrir el modelo
iApp = Marshal.GetActiveObject ("RFEM5.Application") como Dlubal.RFEM5.IApplication;
iApp.LockLicense ();
iModel_org = iApp.GetActiveModel () como Dlubal.RFEM5.IModel3;
//recorrer los modelos encontrados
Dlubal.RFEM5.IModel iModel_cpy = nulo;
para (int i = 0; i <listBox_models.Items.Count; ++ i)
{
//modelo abierto
iModel_cpy = iApp.OpenModel (listBox_models.Items [i] .ToString ());
//obtener datos estructurales
Dlubal.RFEM5.IModelData2 iModData_org
= iModel_org.GetModelData () como Dlubal.RFEM5.IModelData2;
Dlubal.RFEM5.IModelData2 iModData_cpy
= iModel_cpy.GetModelData () como Dlubal.RFEM5.IModelData2;
//comparar/cambiar nodos
//comparar/cambiar líneas
//comparar/cambiar materiales
//comparar/cambiar secciones
//comparar/cambiar barras
}
}
catch (Excepción por ejemplo)
{
MessageBox.Show (por ejemplo, mensaje, por ejemplo, fuente);
}
finalmente
{
si (iApp! = nulo)
{
iApp.UnlockLicense ();
//Libera el objeto COM - ya no es necesario
//Marshal.ReleaseComObject (iApp);
iApp = nulo;
}
iModel_org = null;
//Limpia el recolector de basura para liberar todas las interfaces y objetos COM.
System.GC.Collect ();
System.GC.WaitForPendingFinalizers ();
}
}
Como ya se ha descrito, la conexión con RFEM se establece primero a través de GetActiveObject ("RFEM5.Application"). Luego, se establece una conexión con el modelo activo a través de GetActiveModel (). Para poder realizar la comparación, los submodelos y sus datos estructurales se abren uno tras otro en un bucle a través de las entradas en el cuadro de lista (GetModelData ()). En este momento, todos los datos geométricos están disponibles y se pueden comparar.
Si hay un problema, por ejemplo, no se puede abrir un modelo, el bloque try-catch detecta el error y se desbloquea el programa.
Comparación de nudos
La comparación de nodos entre el modelo principal y secundario es la siguiente.
Primero, se toman todos los nudos del modelo principal y se inicia un bucle sobre estos nudos. En este bucle, el sistema primero intenta obtener los datos del nudo con el mismo número en el modelo secundario. Si esto falla porque el nudo no existe, el error se detecta con otro bloque try-catch y en el modelo secundario se crea el nudo con los datos del modelo principal.
Si el nudo existe, el comentario se lee y se desmonta por medio del separador ";". Si hay menos de tres partes, los datos se tomarán del modelo principal. Si hay tres partes o más, se evaluarán. Una "f" representa un valor fijo que no se debe sobrescribir. Si no es una "f", el valor se sobrescribe con el valor del modelo principal.
Un ejemplo corto es la cadena "f ;; f1; kkl" en el comentario de un nudo. Una vez desmontadas, resultan las cadenas "f", "", "f1" y "kkl". Por lo tanto, se deja el valor x para el nudo y se sobrescriben los valores y y z, ya que hay una cadena vacía para y y no exactamente "f" sino "f1" para z.
//comparar/cambiar nodos
Dlubal.RFEM5.Node [] nodes_org = iModData_org.GetNodes ();
para (int j = 0; j <nodes_org.Length; ++ j)
{
probar
{
Dlubal.RFEM5.INode iNode = iModData_cpy.GetNode (nudos_org [j] .No, Dlubal.RFEM5.ItemAt.AtNo);
Nodo Dlubal.RFEM5.Node = nuevo Dlubal.RFEM5.Node ();
nudo = iNode.GetData ();
//comprobar, si hay componentes fijos
List <string> defs = (node.Comment) .Split (';'). ToList <string> ();
si (defs.Count> = 3)
{
si (defs [0]! = "f")
nodo.X = nudos_org [j] .X;
si (defs [1]! = "f")
nudo.Y = nudos_org [j] .Y;
si (defs [2]! = "f")
nodo.Z = nudos_org [j] .Z;
}
más
{
nodo.X = nudos_org [j] .X;
nudo.Y = nudos_org [j] .Y;
nodo.Z = nudos_org [j] .Z;
}
//establecer nudo
iModData_cpy.PrepareModification ();
iNode.SetData (nodo);
iModData_cpy.FinishModification ();
}
catch (Excepción por ejemplo)
{
//si los nudos no existen, créelo;
iModData_cpy.PrepareModification ();
iModData_cpy.SetNode (nudos_org [j]);
iModData_cpy.FinishModification ();
}
}
Líneas, materiales y otras comparaciones
Los otros elementos son ligeramente diferentes a la comparación de nudos pero idénticos entre sí.
//comparar/cambiar líneas
Dlubal.RFEM5.Line [] lines_org = iModData_org.GetLines ();
para (int j = 0; j <lines_org.Length; ++ j)
{
probar
{
Dlubal.RFEM5.ILine iLine = iModData_cpy.GetLine (lines_org [j] .No, Dlubal.RFEM5.ItemAt.AtNo);
Línea Dlubal.RFEM5.Line = nuevo Dlubal.RFEM5.Line ();
línea = iLine.GetData ();
//comprobar, si la línea es fija
Lista <cadena> defs = (línea.Comentario) .Split (';'). ToList <cadena> ();
si (defs [0]! = "f")
{
línea = líneas_org [j];
}
//establecer línea
iModData_cpy.PrepareModification ();
iLine.SetData (línea);
iModData_cpy.FinishModification ();
}
catch (Excepción por ejemplo)
{
//si los nudos no existen, créelo;
iModData_cpy.PrepareModification ();
iModData_cpy.SetLine (lines_org [j]);
iModData_cpy.FinishModification ();
}
}
La diferencia con la comparación de nudos es que el elemento se sobrescribe completamente si no se encuentra una "f" en el comentario desensamblado (desensamblado por ";"). Los otros elementos se crean y comparan exactamente de la misma manera. Vea el código fuente en el proyecto de Visual Studio adjunto.
Evaluación
El programa puede implementar los cambios deseados en los modelos secundarios. Cómo funciona se muestra en el video del artículo. El mayor problema es que las entradas incorrectas no se interceptan o solo se interceptan ligeramente.
Resumen y perspectiva
El programa presentado aquí es capaz de actualizar modelos secundarios basados en un modelo principal. Las modificaciones en los nudos y otros elementos hasta las barras se transfieren correctamente.
Lo que falta son rutinas para interceptar entradas incorrectas, que aún podrían agregarse. Otras optimizaciones serían, por ejemplo, el cierre opcional de modelos secundarios, lo que puede conducir a un procesamiento en segundo plano. También puede ser útil agregar más datos estructurales, cargas y combinaciones.
Palabras clave
COM supercombinación Grupos estructurales Modelo cruzado Actualizar Plataforma de trabajo aérea Plataforma de tijera
Descargas
Enlaces
Escribir un comentario...
Escribir un comentario...
- Vistas 547x
- Actualizado 5. enero 2021
Contacte con nosotros
¿Tiene preguntas o necesita asesoramiento?
Contacte con nosotros a través de nuestro servicio de asistencia gratuito por correo electrónico, chat o fórum, o encuentre varias soluciones sugeridas y consejos útiles en nuestra página de preguntas más frecuentes (FAQ).
Eventos recomendados
Vídeos
Modelos para descargar
Artículos de la base de conocimientos

Interfaz COM en VBA | 4.2 Optimización de estructuras
La Parte 4.1 de esta serie de artículos describió la conexión del módulo adicional RF-/STEEL EC3 y las barras y combinaciones de cargas que se iban a calcular ya estaban definidas. Esta parte se centrará en la optimización de las secciones en el módulo y la transferencia a RFEM. Los elementos ya explicados en las partes anteriores no se describen de nuevo.
Capturas de pantalla
Artículos de las características de los productos

RF-COM/RS-COM | Capacidad funcional
- Acceso a lectura/escritura de datos estructurales, casos de carga, combinaciones de carga, combinaciones de resultados, así como también de los datos de cálculo
- Control externo del cálculo
- Posibilidad de abrir y editar modelos disponibles o de crear nuevos modelos
- Acceso a todos los resultados tales como deformaciones, esfuerzos internos y reacciones en los apoyos
- Capacidad de interceptar posibles errores por medio de mensajes de error
- Acceso a elementos de control así como de resultados de los siguientes programas:
- RF-/STEEL
- RF-/STEEL EC3
- RF-/ALUMINUM
- RF-/CONCRETE
- RF-STABILITY
- RX-TIMBER Glued-Laminated Beam
- RF-/TIMBER Pro
- RF-/DYNAM Pro
- SUPER-RC
Preguntas frecuentes (FAQ)
- ¿Puedo definir condiciones de soporte no lineales a través de la interfaz COM?
- ¿Qué programas puedo usar para calcular y diseñar centrales eléctricas?
- Estoy intentando importar un modelo de cadwork. Desafortunadamente, no puedo transferir correctamente las secciones de cadwork a RFEM. ¿Tiene algún consejo?
- Al importar un modelo directamente desde AutoCAD, la forma de la "spline" es a veces incorrecta.
- ¿Cómo puedo modelar una estructura de red de cable con el módulo adicional RF-FORM-FINDING?
- Me gustaría exportar la armadura de una losa en formato Nemetschek. Sin embargo, no hay configuraciones disponibles en la siguiente ventana después de seleccionar la superficie.
- ¿Está integrado en RFEM o Autodesk Inventor?
- ¿Cómo puedo importar un modelo IFC en el entorno de RWIND Simulation?
- ¿Cómo puedo crear excentricidades de miembros en RF-COM?
- ¿Cómo puedo crear excentricidades de miembros en RS-COM?