Foros CATIA

1 envío / 0 nuevos
Inicie sesión o regístrese para comentar
Gonzalo_M
Desconectado/a
Visto por última vez: Hace 8 años 4 meses
se unió: 07/10/2009 - 12:14
Macro para copiar bodys de un grupo de piezas a otra pieza en un Product

Buenos días,

Soy nuevo por aquí (aunque me registré hace muchos años) y la verdad es que aunque llevo bastantes años trabajando con CATIA, en esto de programar macros la verdad es que no tengo ni idea. Intento hacer algo buscando por internet o grabando macros con la opción de grabar, pero nunca consigo que funcione lo que me propongo.

El caso es que estoy haciendo unos elementos que consisten en un Product que tiene a su vez varios parts, y en uno de ellos estoy creando un body que lo estoy llamando CUT.

Luego, en el diseño tengo que montar muchos de estos elementos y me gustaría hacer una macro que recorriese todos los que hay montados y copiase ese body CUT con link y en contexto a un fichero determinado.

Adjunto una imagen (la he comprimido con RAR ya que con el reescalado de la imagen que hace se veía muy mal) del arbol en cuestión, donde están montados ya los elementos, y donde se ve ese body llamado CUT.

El fichero donde quiero copiar los bodys es el que se llama 6052-0525G0491 (aunque no estaría mal que la macro me pidiese el nombre cada vez, o lo leyese de un parámetro).

Si alguno ha hecho alguna vez una macro parecida y me puede echar una mano le estaría muy agradecido.

Un saludo.


edu

Desconectado/a

Visto por última vez: Hace 4 meses 1 semana

se unió: 02/10/2008 - 13:19

Posts:

Hola Gonzalo

He localizado una macro en CATScript que copia unos puntos que genera en un geometrial set de un part, crea una nueva pieza y los pega.

En tu caso deberias de hacer que copie el body "cut" y lo pegue con paste sepecial as result with link en tus otras piezas. Para poder pegar con link sería:

CATIA.ActiveDocument.Selection.PasteSpecial "CATPrtResult"

 

Sub CATMain()

 

  Dim part1 As PartDocument

  Set part1 = CATIA.Documents.Add("CATPart")    

  Dim ActDoc As Document

  Set ActDoc = CATIA.ActiveDocument             

  Dim HSF As HybridShapeFactory

  Set HSF = part1.Part.HybridShapeFactory       

  

 

  Dim hybridBodies1 As HybridBodies

  Set hybridBodies1 = part1.Part.HybridBodies

  Dim GSet As HybridBody

  Set GSet = hybridBodies1.Add()

  Set GSet = part1.Part.HybridBodies.Item(1)    

  

  Dim Pt1, Pt2, Pt3 As HybridShapePointCoord    

  Set Pt1 = HSF.AddNewPointCoord(10, 20, 30)

  Set Pt2 = HSF.AddNewPointCoord(10, -20, -30)

  Set Pt3 = HSF.AddNewPointCoord(-10, 20, 30)

  GSet.AppendHybridShape Pt1

  GSet.AppendHybridShape Pt2

  GSet.AppendHybridShape Pt3

  part1.Part.Update

  Set ActSel = ActDoc.Selection                 

  ActSel.Add Pt1                                

  ActSel.Add Pt2

  ActSel.Add Pt3

  ActSel.Copy                                   

  ActSel.Clear                                  

  

  Dim part2

  Set part2 = CATIA.Documents.Add("CATPart")    

  Set ActDoc = CATIA.ActiveDocument             

  

  Dim hybridBodies2 As HybridBodies

  Set hybridBodies2 = part2.Part.HybridBodies

  Dim GSet1 As HybridBody

  Set GSet1 = hybridBodies2.Add()

  Set GSet1 = part2.Part.HybridBodies.Item(1)

  Set ActSel = ActDoc.Selection                

  ActSel.Add GSet1                             

  ActSel.Paste                                

  

End Sub

 


Desconectado/a

Visto por última vez: Hace 8 años 4 meses

se unió: 07/10/2009 - 12:14

Posts:
Hola Edu,

Gracias por el CATscript, el problema que le veo es que son demasiadas cosas diferentes las que necesito hacer yo a las que hace, puesto que no recorre los archivos que hay en un product ya que es una macro para ejecutarla en una sola pieza, y que los copia con un link externo a un fichero nuevo que genera la propia macro.

Como punto de partida seguro que para alguien con algo más de experiencia en Macros le sirve. Yo es que no sé ni por donde empezar a cambiarla para que me haga algo parecido a la que necesito.

Muchas gracias por la aportación.


edu

Desconectado/a

Visto por última vez: Hace 4 meses 1 semana

se unió: 02/10/2008 - 13:19

Posts:

Ok, pensaba que ya te manejabas un poco con las macros.

Lo que necesitas no es muy complicado de hacer, pero será dificil que encuentres algo ya hecho que se ajuste a lo que necesitas.

Con es siguiente codigo consigues seleccionar el part que necesites dentro de la estructura de products, y el body que necesitas copiar, solo tienes que cambiar lo que está en negrita:

Dim documents1 As Documents

Set documents1 = CATIA.Documents

Dim partDocument1 As Document

Set partDocument1 = documents1.Item("Part1.CATPart")

Dim part1 As Part

Set part1 = partDocument1.Part

Dim bodies1 As Bodies

Set bodies1 = part1.Bodies

Dim body1 As Body

Set body1 = bodies1.Item("PartBody")

Luego para poder copiar el bdo primero lo tienes que seleccionar asi:

    Dim MiSeleccion As Selection

    Set MiSeleccion = CATIA.ActiveDocument.Selection

    MiSeleccion.Add body1 

    MiSeleccion.Copy

    MiSeleccion.Clear

 Y por ultimo para poder pegar tienes que seleccionar el part de destino        

Set partDocument1 = documents1.Item("PartDESTINO.CATPart")

Set part1 = partDocument1.Part

    MiSeleccion.Add part1 

    MiSeleccion.PasteSpecial "CATPrtResult"

    MiSeleccion.Clear

Si lo juntas todo dentro de un

Sub CATMain

...

end sub

No lo he probado y no descarto que te de algún error, pero los pasos para sacar lo que necesitas serían esos.

Saludos




Desconectado/a

Visto por última vez: Hace 8 años 4 meses

se unió: 07/10/2009 - 12:14

Posts:

Hola Edu,

 

Muchas gracias, en breve lo pruebo y a ver si consigo que me funcione. Muchísimas gracias.

 

Edit: Bueno, pues lo he probado y funciona, pero sólo me copia el primero que encuentra, no va repitiendo la operacion para todos los elementos que hay en el product. Voy a buscar a ver si encuentro algun CATscript que vaya repitiendo un proceso para ver si puedo extraer algo.

Edit2: Pues nada, no consigo hacer nada. Al final, las piezas que contienen los bodys que quiero copiar pueden tener diferente numeración y a su vez están dentro de otros products que también tienen distinta numeración y puede haber uno o varios de cada product. Vamos, que me parece que lo voy a dejar y hacer las copias a mano como hasta ahora xD. Me parece que esto es bastante más complicado de lo que me pensaba.



Desconectado/a

Visto por última vez: Hace 4 años 2 meses

se unió: 11/04/2014 - 08:28

Posts:

No se si entiendo muy bien lo que quieres hacer, pero puedes partir de algo así:

 

    Dim SelObj As Selection

    Set SelObj = CATIA.ActiveDocument.Selection

    SelObj.Clear

    For Each Ndoc In SelObj.Application.Documents

        If InStr(1, Ndoc.Name, "CATPart") Then 'Si es un part

             Llamada a la rutina de pegado que te funciona, pasando como parametro el nombre de la pieza

       end if

   next Ndoc