Autor
|
Thema: Analyze.Volume (1940 mal gelesen)
|
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 09. Okt. 2003 11:37 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich versuche gerade das Volumen eines gesamten Products (mehrere Parts) zu bestimmen). Auszug: Sub catmain() Dim myproduct As Product Dim myanalyse As Analyze Set myproduct = CATIA.ActiveDocument.Product Set myanalyze = myproduct.Analyze MsgBox myanalyze.Volume End Sub Das funtkioniert auch soweit sehr gut nur werden leider in den einzelnen Parts nur die Hauptkörper beachtet, ein zusätzlicher vom Nutzer hinzugefügter Block in einem zusätzlichen Körper deselben Parts wird hingegen völlig ignoriert. So verhält es sich über alle Parts. Gibts es eine Möglichkeit dies auf alle Körper umzuschalten? Sei es nun durch eine analyze eigenschaft(sorry aber die automation.chm ist an der stelle wieder etwas dürftig mit erklärungen) oder durch eine innerhalb von Catia selbst zu setzende generelle eigenschaft? Oder gibt es noch eine ganz andere Möglichkeite das volumen zu bestimmen? Hoffe ich habe mich einigermaßen verständlich ausgedrückt. Ich weiss dass hier irgendwo die Beschreibung von "measurable" rumschwirrt mit dem es auch gehen soll. nur finde ich leider immer nur Verweise darauf aber kein Funktionierendes Beispiel in dem mal das Volumen bestimmt wird. Vielen Dank ------------------ gr33t7 Ronny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bernds Mitglied
Beiträge: 17 Registriert: 11.09.2003
|
erstellt am: 09. Okt. 2003 17:37 <-- editieren / zitieren --> Unities abgeben: Nur für RonnyS
Hallo Ronny, ich hab Dir ein Skript angehängt, um das Volumen eines Hauptkörpers zu ermitteln. Ich habs mit R11 getestet. Gruß Bernd Sub CATMain()
Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set bodies1 = part1.Bodies Set body1 = bodies1.Item("Hauptkörper") Set referenceObject = part1.CreateReferenceFromObject(body1) Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set TheMeasurable = TheSPAWorkbench.GetMeasurable(referenceObject) vol = TheMeasurable.Volume Box = MsgBox ("Volumen = " & vol & " mm^2") End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 09. Okt. 2003 20:15 <-- editieren / zitieren --> Unities abgeben:
|
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 13. Okt. 2003 08:56 <-- editieren / zitieren --> Unities abgeben:
Hum klappt leider noch nicht so ganz. Habs 1:1 kopiert und sowohl mal in VBA (mit den ganzen Dims zusätzlich) und als catscript getestet... Leider kommt immer wenn ich versuche .Volume zu machen Method "volume" of object "measurable" failed. Ich hab mir zum Testen ledigich ein PartDocument mit einem einzelnen Block im Hauptkörper angelegt. Die Automation.chm war mir keien grosse Hilfe da in deren Code an der Stelle noch ein zuätzlicher fehler drin ist... Was mache ich verkehrt? PS: Hab mal noch die anderen Properties getestet und jedesmal wieder eine analoge Fehlermeldung erhalten??? Muzss also irgendwie ein systemfehler sein??? ------------------ gr33t7 Ronny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 13. Okt. 2003 09:30 <-- editieren / zitieren --> Unities abgeben:
hab mal weitergespielt.... wenn ich ein bestimmtes pad oder pocket als referenz angeb funzt es ohne probleme. Dert haken ist nur das nützt mir relativ wenig da ich dann nur die einzelvolumen habe und 2 pads die sich schneiden nunmal weniger raum einnehmen als wenn ich die einzelvolumen addiere Weisst du wie das für ganze Körper oder parts geht so dass ich halt nur das reale Volumen bekomm? ------------------ gr33t7 Ronny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bernds Mitglied
Beiträge: 17 Registriert: 11.09.2003
|
erstellt am: 13. Okt. 2003 14:58 <-- editieren / zitieren --> Unities abgeben: Nur für RonnyS
Hallo Ronny, ich hab mit dem Measurable auch lange gekämpft, um Ergebnisse zu erhalten. Zu Deiner Frage kann ich Dir allerdings im Moment auch nicht weiterhelfen. Falls ich was finde, lass ichs Dir auf jeden fall zukommen. Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 13. Okt. 2003 15:17 <-- editieren / zitieren --> Unities abgeben:
|
bernds Mitglied
Beiträge: 17 Registriert: 11.09.2003
|
erstellt am: 13. Okt. 2003 17:12 <-- editieren / zitieren --> Unities abgeben: Nur für RonnyS
|
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 14. Okt. 2003 08:32 <-- editieren / zitieren --> Unities abgeben:
|
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 14. Okt. 2003 16:24 <-- editieren / zitieren --> Unities abgeben:
Falls es en intressiert es geht doch!!! was berndS schrieb Mein fehler war nur das ich es in einem leeren document versucht hab, sobald ein Körper drin war, war das volumen != 0 und es ging *froi* kein runtime fehler mehr :-) ich versteh zwar net wo da eigentlich das Problem ist aber egal ------------------ gr33t7 Ronny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stoffel Mitglied Student
Beiträge: 322 Registriert: 09.10.2002 R6/V2010
|
erstellt am: 16. Okt. 2003 10:36 <-- editieren / zitieren --> Unities abgeben: Nur für RonnyS
|
Knoutsch Mitglied Teamleiter Rapid Prototyping
Beiträge: 6 Registriert: 01.04.2008
|
erstellt am: 30. Aug. 2018 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für RonnyS
Hallo zusammen, ich habe ein ähnliches Problem, bei dem ich nicht weiterkomme: Ich habe mehrere Körper in einem Part und möchte das Volumen der Körper bestimmen, die im Show sind. Was ich inzwischen kann, ist das Volumen eines Parts zu bestimmen und ausgeben zu lassen: Sub CATMain() Dim myproduct As Product Set myproduct = CATIA.ActiveDocument.Product Volumen = myproduct.Analyze.volume MsgBox Volumen End Sub (ist ähnlich wie oben von RonnyS beschrieben) Das bezieht sich aber auf alle Bodies in meinem Part. Ich bekomme es auch hin, die Körper in einem Part zu selektieren, die im Show sind: Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set selection1 = partDocument1.Selection selection1.Search "(((((CATStFreeStyleSearch.BodyFeature + CATPrtSearch.BodyFeature) + CATGmoSearch.BodyFeature) + CATSpdSearch.SpdBodyRef) + CATSpdSearch.BodyFeature) & Visibility=Visible),all" Was ich nun nicht hinbekomme ist es, diese Funktionen miteinander zu verbinden, also das Gesamtvolumen aller Körper auszugeben, die im Show sind. Wäre schön, wenn mir hier jemand helfen könnte. Gruß Jochen 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: 31. Aug. 2018 09:11 <-- editieren / zitieren --> Unities abgeben: Nur für RonnyS
Servus Jochen Du könntest die selektierten Körper per Schleife abarbeiten, per SPA-Workbench das Volumen messen und die Einzelvolumen addieren: Code: Sub CATMain()Dim oPartDoc as PartDocument Dim oSel as Selection Dim oBody as BodyFeature Dim oSPAWorkbench as SPAWorkbench Dim oMeasurable as Measureable Dim oRef as Reference Dim dVolume as Double Dim i as Integer Set oPartDoc = CATIA.ActiveDocument Set oSel = oPartDoc.Selection dVolume = 0 Set oSPAWorkbench = oPartDoc.GetWorkbench("SPAWorkbench") oSel.Search "CATGmoSearch.BodyFeature & Visibility=Visible,all" if oSel.Count2 <> 0 then for i = 1 to oSel.Count2 Set oBody = oSel.item2(i).Value Set oRef = oPartDoc.Part.CreateReferenceFromObject(oBody) Set oMeasurable = oSPAWorkbench.GetMeasurable(oRef) dVolume = dVolume + oMeasurable.Volume next end if MsgBox "Volumen = " & dVolume & " m³" End Sub
Eventuell werden Körper von Boole'schen Operationen auch mitgemessen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Knoutsch Mitglied Teamleiter Rapid Prototyping
Beiträge: 6 Registriert: 01.04.2008
|
erstellt am: 31. Aug. 2018 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für RonnyS
Hallo Bernd, vielen Dank! Funktioniert soweit. Mit den Bool'schen Operationen hast du aber leider recht. Die misst es tatsächlich mit. Kann ich hier noch nach Strukturebenen filtern, dass mir nur die Bodies auf der ersten Ebene addiert werden? Gruß Jochen 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: 31. Aug. 2018 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für RonnyS
Servus Schau dir mal die Methode InBooleanOperation an, um vor der Messung die Körper zu prüfen und eventuell auszuschließen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |