• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Leggi altro.

Baricentro di sottoassieme

GiGa

Moderatore
Staff Forum
Professione: Progettista/Disegnatore
Software: Mechanical, Inventor, 3DS Max
Regione: Roma
#1
Ho cercato in varie discussioni che trattano l'argomento Baricentro, ma non ho risolto un paio di dubbi...

Ho una tavola incernierata (come sottoassieme) ai due lati e, per dimensionarne gli attuatori devo calcolarne il baricentro...
In ambiente assieme, la visualizzazione del baricentro indica solo il baricentro generale, non quello del sottoassieme tavola. Con le iProperty Collection mi sembra di aver capito che si dovrebbe risolvere il problema, ma per la 2012 sembra non ci siano... esistono ancora?
Nell' idw è possibile indicare il baricentro ma sempre e solo quello generale... è possibile indicare anche quello di un sottoassieme?
Mi sarebbe comodo per indicarne la posizione rispetto a punti predefiniti...
 

pompeo79

Utente Standard
Professione: Digital Prototyping
Software: Inventor - Autocad - Showcase
Regione: Piemonte-Liguria
#2
Ho cercato in varie discussioni che trattano l'argomento Baricentro, ma non ho risolto un paio di dubbi...

Ho una tavola incernierata (come sottoassieme) ai due lati e, per dimensionarne gli attuatori devo calcolarne il baricentro...
In ambiente assieme, la visualizzazione del baricentro indica solo il baricentro generale, non quello del sottoassieme tavola. Con le iProperty Collection mi sembra di aver capito che si dovrebbe risolvere il problema, ma per la 2012 sembra non ci siano... esistono ancora?
Nell' idw è possibile indicare il baricentro ma sempre e solo quello generale... è possibile indicare anche quello di un sottoassieme?
Mi sarebbe comodo per indicarne la posizione rispetto a punti predefiniti...

Ciao Giga,
il disegno è stato fatto con la 2012?

C'è la macro che calcola e mette in tabella i baricentri dei sottoassiemi (anche con i volumi), ma con la 2012 non è applicabile.

Se il disegno fosse fatto con la 2011 (o velocemente riproducibile con la 2011), potevi crearti (o farti creare da chi ha ancora la 2011) il file CSV per poi poterlo usare nelll'idw con la tua versione 2012 attraverso tabella.

Altri metodi non ne vedo.

Potresti, ma assai laborioso, inserire le viste dei sottoassiemi e "assemblarle" in tavola, così facendo potresti rappresentare il cog di ogni (sub)assieme, ma è, purtroppo, solo un escamotage
 

GiGa

Moderatore
Staff Forum
Professione: Progettista/Disegnatore
Software: Mechanical, Inventor, 3DS Max
Regione: Roma
#3
Sì, fatto in 2012... vabbè, alla fine ho risolto con varie viste.
Peccato però che non si possa fare in maniera diretta... forse con il modulo simulazione avrei risolto tutto ma magari avere il tempo di approfondire...
 

AngeloB

Utente Standard
Professione: Ingegnere
Software: Autocad, Inventor, Algor
Regione: Liguria
#4
In Inventor 2012
Piazzo un punto in prossimità del baricentro che mi interessa e poi lo rendo visibile nella messa in tavola.

Io ho anche TOP e con questo applicativo la procedura e automatica. cioè scelgo direttamente nella messa in tavola quale baricentro mostrare.
 

pompeo79

Utente Standard
Professione: Digital Prototyping
Software: Inventor - Autocad - Showcase
Regione: Piemonte-Liguria
#5
In Inventor 2012
Piazzo un punto in prossimità del baricentro che mi interessa e poi lo rendo visibile nella messa in tavola.

Io ho anche TOP e con questo applicativo la procedura e automatica. cioè scelgo direttamente nella messa in tavola quale baricentro mostrare.
Si, ma non risulta associativo al cambiare la tua geometria 3D.

Prova questa macro, dovrebbe andare.



Option Explicit
Public Sub Scan_COG_assembly()
' Set reference to active document.
' This assumes the active document is an assembly
Dim odoc As Inventor.Document
Set odoc = ThisApplication.ActiveDocument
If Not (TypeOf odoc Is AssemblyDocument) Then
MsgBox "Select an assembly first"
Exit Sub
End If

' Get assembly component definition
Dim oCompDef As Inventor.ComponentDefinition
Set oCompDef = odoc.ComponentDefinition

Dim sMsg As String
Dim iLeafNodes As Long
Dim iSubAssemblies As Long


Dim outputfile As String
outputfile = ThisApplication.FileLocations.Workspace + "\" + odoc.DisplayName + ".csv"
Open outputfile For Output As #1
On Error GoTo ErrorHandler
Print #1, "Subassembly name", ",", "Cogx", ",", "Cogy", ",", "Cogz"

' Get all occurrences from component definition for Assembly document
Dim oCompOcc As ComponentOccurrence
For Each oCompOcc In oCompDef.Occurrences
' Check if it's child occurrence (leaf node)
If oCompOcc.SubOccurrences.Count = 0 Then
iLeafNodes = iLeafNodes + 1

Else
Call extract_cog(oCompOcc)
iSubAssemblies = iSubAssemblies + 1
Call processAllSubOcc(oCompOcc, _
sMsg, _
iLeafNodes, _
iSubAssemblies) ' subassembly
End If
Next

ErrorHandler:
Close #1
End Sub

' This function is called for processing sub assembly.� It is called recursively
' to iterate through the entire assembly tree.
Private Sub processAllSubOcc(ByVal oCompOcc As ComponentOccurrence, _
ByRef sMsg As String, _
ByRef iLeafNodes As Long, _
ByRef iSubAssemblies As Long)

Dim oSubCompOcc As ComponentOccurrence
For Each oSubCompOcc In oCompOcc.SubOccurrences
' Check if it's child occurrence (leaf node)
If oSubCompOcc.SubOccurrences.Count = 0 Then
iLeafNodes = iLeafNodes + 1

Else
Call extract_cog(oSubCompOcc)
sMsg = sMsg + oSubCompOcc.Name + vbCr
iSubAssemblies = iSubAssemblies + 1

Call processAllSubOcc(oSubCompOcc, _
sMsg, _
iLeafNodes, _
iSubAssemblies)
End If
Next
End Sub

Private Sub extract_cog(ByRef oCompOcc As ComponentOccurrence)
Dim odoc As Object
Set odoc = oCompOcc.Definition.Document
Dim objUOM As UnitsOfMeasure
Dim ocenterofmass As Point
Set objUOM = odoc.UnitsOfMeasure
If odoc.DocumentType = kAssemblyDocumentObject Then
Set ocenterofmass = oCompOcc.MassProperties.CenterOfMass

Dim cogx As String
Dim cogy As String
Dim cogz As String

cogx = objUOM.GetStringFromValue(ocenterofmass.X, UnitsTypeEnum.kDefaultDisplayLengthUnits)
cogy = objUOM.GetStringFromValue(ocenterofmass.Y, UnitsTypeEnum.kDefaultDisplayLengthUnits)
cogz = objUOM.GetStringFromValue(ocenterofmass.Z, UnitsTypeEnum.kDefaultDisplayLengthUnits)

'Write the COG data out as CSV text
Print #1, oCompOcc.Name, ",", cogx, ",", cogy, ",", cogz

End If

End Sub
 

AngeloB

Utente Standard
Professione: Ingegnere
Software: Autocad, Inventor, Algor
Regione: Liguria
#6
Grazie pompeo, io non so come far girare le macro, ma sei stato cortese.

C'è una cosa di Inventor che mi fa perdere molto tempo e non riesco a capire.
In un assime posso creare piani ed assi di riferimento, poi posso mostrarli anche nelle tavole. OK
Ma perche, nella messa in tavola, non posso utilizzarli direttamente per creare una sezione? sono costretto a ripetere un sacco di passaggi inutili.

Ciao
 

pompeo79

Utente Standard
Professione: Digital Prototyping
Software: Inventor - Autocad - Showcase
Regione: Piemonte-Liguria
#7
nell'idw espandi la vista, tasto destro sul piano > includi
 

AngeloB

Utente Standard
Professione: Ingegnere
Software: Autocad, Inventor, Algor
Regione: Liguria
#8
è quello che faccio, ma è una perdita di tempo.
il piano o la linea di riferimento dovrebbero essere, di per se, un riferimento per fare una sezione.
 

pompeo79

Utente Standard
Professione: Digital Prototyping
Software: Inventor - Autocad - Showcase
Regione: Piemonte-Liguria
#9
già. Ma il comando sezione ha bisogno necessariamente di una linea di schizzo per poter funzionare