Autor
|
Thema: Part Properties (Mass) auslesen (8955 mal gelesen)
|
cerwick Mitglied
Beiträge: 4 Registriert: 07.05.2010
|
erstellt am: 07. Mai. 2010 17:26 <-- editieren / zitieren --> Unities abgeben:
|
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 07. Mai. 2010 18:33 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Hallo Cerwick, Auszug aus V5Automation.chm: Code: ' COPYRIGHT DASSAULT SYSTEMES 2001 Option Explicit' *********************************************************************** ' Purpose : Compute the mass and the center of gravity of a component. ' Assumptions : A CATProduct document should be active and a component selected. ' Author : ' Languages : VBScript ' Locales : English ' CATIA Level : V5R6 ' *********************************************************************** Sub CATMain() ' Retrieve the selected component Dim oSelection As Selection Set oSelection = CATIA.ActiveDocument.Selection Dim oProduct As AnyObject On Error Resume Next Set oProduct = oSelection.FindObject("CATIAProduct") If (Err.Number <> 0) Then MsgBox "No selected product" Else On Error Goto 0 ' Compute the inertia Dim oInertia As AnyObject Set oInertia = oProduct.GetTechnologicalObject("Inertia") ' Read the inertia data Dim dMass As Double dMass = oInertia.Mass Dim dCoordinates(2) oInertia.GetCOGPosition dCoordinates ' Display the results MsgBox oProduct.Name & ": Mass = " & Cstr(dMass) & ", Center of gravity : X = " & _ Cstr(dCoordinates(0)) & ", Y = "+Cstr(dCoordinates(1)) & ", Z = "+Cstr(dCoordinates(2)) End If End Sub
Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cerwick Mitglied
Beiträge: 4 Registriert: 07.05.2010
|
erstellt am: 11. Mai. 2010 15:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, vielen Dank für deine schnelle Antwort! funktionert der "GetTechnologicalObject" nur für CATProduct? Eigentlich wollte ich die CATPart-Masse kopieren und dann in CATPart-benutzer definierten Properties einfügen. mfG Cerwick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 11. Mai. 2010 16:57 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Hallo Cerwick, tausche am Anfang die Zeilen einfach auf folgende aus: Code: ' Dim oSelection As Selection ' Set oSelection = CATIA.ActiveDocument.Selection Dim oProduct As AnyObject On Error Resume Next Set oProduct = CATIA.ActiveDocument.Product
So darf nur ein Part geöffnet sein. So blöd es auch klingt, jeder Part(document) hat auch ein Product. Aber aufpassen. Hast du auch Geometrie außerhalb von PartBody, dann wird dies hier wahrscheinlich mitgemessen. Wenn das ein Problem ist, dann melde dich.Gruß, Zoltan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cerwick Mitglied
Beiträge: 4 Registriert: 07.05.2010
|
erstellt am: 11. Mai. 2010 18:49 <-- editieren / zitieren --> Unities abgeben:
wow! super! es funktionert auch für CATPart Genau, ich habe ein Geometrie (dmu_representation) außerhalb von PartBody --> bitte siehe Anhang was ich bisher habe: ---------------------------------------------------------------------- '*** Selecting Component *** Dim oProduct As AnyObject On Error Resume Next Set oProduct = CATIA.ActiveDocument.Product '*** Compute the inertia *** Dim oInertia As AnyObject Set oInertia = oProduct.GetTechnologicalObject("Inertia") '*** Read the inertia data *** Dim dMass As Double dMass = oInertia.Mass '*** Decimal*** dMass = Round(dMass * 1000, 2) '*** Inserting into AddProperties *** Dim parameters_all As Parameters Set parameters_all = product1.Parameters Dim strParam_weight As StrParam Set strParam_weight = parameters_all.Item(Document1.Product.PartNumber & "\Properties\Weight") strParam_weight.Value = dMass '*** Display the results *** Box = MsgBox (oProduct.Name & ": mass = " & Cstr(dMass) & "g" & Chr(13) & "The mass has been inserted into Properties", 64) ---------------------------------------------------------------------- Kann man das ohne dmu_representation messen? Vielen Dank und herzliche Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 12. Mai. 2010 19:57 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Hallo Cerwick, habe leider keine einfachere Methode gefunden, als Volumen von Partbody zu messen, Dichte abfragen und die beide Werte zu multiplizeren. Inertia geht laut Doku nur für Products. Code ist nicht die schönste, es geht aber. Code: Option ExplicitSub catmain() 'es muss ein Part geöffnet sein 'Fehler nicht abgefangen Dim oDoc As PartDocument Set oDoc = CATIA.ActiveDocument 'Mainbody=PartBody Dim oReference As Reference Set oReference = oDoc.Part.CreateReferenceFromObject(oDoc.Part.MainBody) 'Messobjekt erzeugen Dim TheSPAWorkbench As Workbench Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Dim TheMeasurable As Measurable Set TheMeasurable = TheSPAWorkbench.GetMeasurable(oReference) 'hier muss man aufpassen, da die Einheit zwischen R16 und R19 sich geändert hatte 'Volumen messen Dim dVolume As Double dVolume = TheMeasurable.Volume 'Dichte abfragen 'Fehler nicht abgefangen, falls Material nicht angegeben Dim dDensity As Double Dim oManager As MaterialManager Set oManager = oDoc.Product.GetItem("CATMatManagerVBExt") Dim oMaterial As Material 'Dazu zuert Material von PartBody holen oManager.GetMaterialOnBody oDoc.Part.MainBody, oMaterial 'Und Eigenschaft abfragen 'weiteres im Help unter "exportMaterialLibrary" dDensity = oMaterial.AnalysisMaterial.GetValue("SAMDensity") 'Werte multiplizieren 'Makro liefert unter R19 korrekte Werte (in kg) Dim dMass As Double dMass = dDensity * dVolume MsgBox (dMass) End Sub
Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cerwick Mitglied
Beiträge: 4 Registriert: 07.05.2010
|
erstellt am: 17. Mai. 2010 17:54 <-- editieren / zitieren --> Unities abgeben:
|
camahiahua Mitglied ingenieur
Beiträge: 31 Registriert: 28.09.2010
|
erstellt am: 29. Sep. 2010 08:50 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Hallo allerseits, Ich habe ein ähnliches Problem. Ich habe in einem CATPArt viele "Bodies" und ich soll die Hauptachssysteme (Principal Axis System) von jedem Body Erzeugen. Dein Code funktioniert gut, aber ich bekomme nur das Hauptachsystem von dem ganzen CATPart. die einzige Lösung bisher, war alle Shapes von alle Bodies deaktivieren und dann nur ein Body auf einmal aktivieren und den Befehl GetTechnologicalObject("Inertia")zu nutzen Dies hat gut funktioniert aber wenn ich in einem Body ein dummes Solid (kein Pad) habe (z.B wenn man macht Einfugen "As Result") das kann ich nicht deaktivieren. Was konntet ihr mir empfelen? ich hoffe das mein Deutsch verständlich war Vielen Dank im Voraus.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 29. Sep. 2010 10:51 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
|
camahiahua Mitglied ingenieur
Beiträge: 31 Registriert: 28.09.2010
|
erstellt am: 30. Sep. 2010 08:47 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Hallo, Ich habe auch eine andere Lösung gefunden. Ich habe alle Bodies in einem neuen Body hinzugefügt. So am Ende habe ich nur Bodies die ein Assembly drinnen haben und dieses Assembly kann deaktiviert werden. vielen Dank für deine Idee auch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
panchito Mitglied
Beiträge: 39 Registriert: 31.03.2015 Catia V5
|
erstellt am: 20. Apr. 2015 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Apr. 2015 12:24 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Servus Auf welches Makro beziehst du dich? Ich habe hier keine variable "Mass" gefunden (nur "dMass") Gruß Bernd PS: Bitte keine Doppelposts, siehe auch deinen anderen Beitrag hier. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 20. Mai. 2019 11:00 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Hallo Zoltan, wenn ich innerhalb einer Assembly nach einem Part suche mit: Code: myProductDocK.Selection.Search("(Name='" & a & "' ),all")
Wie kann ich direkt von diesem Selektierten Part Center of Gravity abgreifen, ohne es im neuen Fenster zu öffnen? Ich würde es so schreiben, bräuchte dann aber vorher die Information an welcher Stelle im Assembly sich das Part befindet. Die Zahl würde ich anstelle des Fragezeichens schreiben. Code: myProduct2 = myProduct.Products.Item(?)
Danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Mai. 2019 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Servus Warum denn über die Products-Collection auf das Part zugreifen, wenn du es schon selektiert hast? Code: Set MyPart = myProductDocK.Selection.item2(1).Value
Wie zB zum PartDocument kommst siehe Doku und Watchfenster. Bist du sicher das der Filter für die Suche ausreichend ist? Was ist wenn zB eine Linie so heißt? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 20. Mai. 2019 11:43 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Servus, danke, der Suchname ist abgesichert. Es kann niemals was anderes genauso heißen in diesem Fall. Mit der Zeile myPart = ... funktioniert jetzt der Rest für das Abgreifen von Inertia nicht mehr. Bisher hieß es, weil ich das Part im neuen Fenster geöffnet habe: Code: oProduct = myCatiaApp.ActiveDocument.Product Dim myInertia myInertia = myProduct.GetTechnologicalObject("Inertia")
Mit der letzten Zeile: Code: myInertia = myPartK.GetTechnologicalObject("Inertia")
Kommt die Fehlermeldung: Kein GetTechnologicalObjekt für Part. Warum, es ist nach wie vor dasselbe Part ?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Mai. 2019 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
Servus So lange wie du schon programmierst solltest du dir diese Frage selbst beantworten können. Schau endlich mal in die Doku! Mach dir klar was der Unterschied zwischen Part, PartDocument und Product ist, und wo es die Methode GetTechnologicalObject gibt. Bei dir fehlen sehr viele Grundlagen! Also bitte diese mal nachholen (zB Bücher) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 20. Mai. 2019 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für cerwick
|