Autor
|
Thema: Catia V5 Drawing: Is Detail Sheet? (2106 mal gelesen)
|
michse02 Mitglied
Beiträge: 13 Registriert: 12.03.2009 Catia V5R16-R19
|
erstellt am: 03. Jul. 2009 10:22 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe folgendes Problem: Ich habe eine VB.NET Anwendung welche auf Catia V5 zugreift. Dabei prüfe ich, ob ein Sheet ein Detail Sheet ist:
Code: If Not sheet.IsDetail Then
Wenn ich die Anwendung als Exe Datei ausführe funktioniert das super. Wenn ich die Anwendung als Class Library erstelle und diese direkt aus Catia über ein Catvba starte ist das Ergebnis immer true, egal ob es ein Detail sheet ist oder nicht. Also IsDetail ist immer true. Jemand ne Idee wie ich da ein richtiges Ergebnis bekomme oder wie ich anderweitig sicher feststellen kann ob es sich um ein Detail Sheet handelt oder eben nicht? Gruß michse02 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 03. Jul. 2009 10:36 <-- editieren / zitieren --> Unities abgeben: Nur für michse02
Hallo, ich kann dir leider keine Lösung anbieten, aber ich kann dir zumindestens sagen das du mit dem Problem nicht alleine bist. Ich hatte genau das selbe Phänomen. Wenn ich das Programm aus dem VB Editor heraus aufrufe funktioniert es, als DLL nicht. Wäre auch an einer Lösung/Erklärung interessiert. ------------------ MfG Randle ! It's not a bug, it's a feature ! 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: 03. Jul. 2009 18:09 <-- editieren / zitieren --> Unities abgeben: Nur für michse02
Hallo, ich selber hatte mit einige Funktionen in VBA Probleme, die einen Boolean Wert zurückgeben. Negieren wurde einfach nicht ausgeführt. Die Probleme gab es sowohl mit CATIA, als auch mit Scripting.Filesystemobject. Erklären kann ich es nicht. Ich habe dort einfach die Bedingung im if umgekehrt. Also anstatt Code: If Not sheet.IsDetail Then 'Code hier Endif
praktisch Code: If sheet.IsDetail Then else 'Code hier end if
Ist zwar keine schöne Lösung, hat mir aber geholfen. Ich habe die Vermutung, dass die Verhalten zusammenhängen.Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michse02 Mitglied
Beiträge: 13 Registriert: 12.03.2009 Catia V5R16-R19
|
erstellt am: 06. Jul. 2009 09:27 <-- editieren / zitieren --> Unities abgeben:
|
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 06. Jul. 2009 09:44 <-- editieren / zitieren --> Unities abgeben: Nur für michse02
|
michse02 Mitglied
Beiträge: 13 Registriert: 12.03.2009 Catia V5R16-R19
|
erstellt am: 06. Jul. 2009 10:06 <-- editieren / zitieren --> Unities abgeben:
|
michse02 Mitglied
Beiträge: 13 Registriert: 12.03.2009 Catia V5R16-R19
|
erstellt am: 09. Jul. 2009 13:20 <-- editieren / zitieren --> Unities abgeben:
Falls jemand nochmal ein Ähnliches Problem hat, ich habe es wie folgt gelöst: ein VBA Script erstellt mit dem Code:
Code: Function IsDetailSheet(sheet As DrawingSheet) IsDetailSheet = sheet.IsDetail End Function
und das über die Com API aufgerufen und das Sheet als Parameter.nicht schön, aber funktioniert wenigstens... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 09. Jul. 2009 18:22 <-- editieren / zitieren --> Unities abgeben: Nur für michse02
Hallo, auch nicht schlecht eine Funktion um eine Funktion zu nutzen. :-) CATIA = Chaotische Anwendung Trotz Immenser Anstrengungen Werd ich bei nächster Gelegenheit mal austesten. Vielen Dank für diese Lösung. Wieder was dazu gelernt. ------------------ MfG Randle ! It's not a bug, it's a feature ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
C-R Mitglied Dipl.-Ing. Maschinenbau-Konstruktion
Beiträge: 8 Registriert: 16.07.2009
|
erstellt am: 17. Jul. 2009 00:03 <-- editieren / zitieren --> Unities abgeben: Nur für michse02
Hallo, dieses Problem ist mir auch schon bei mindestens einer weiteren Funktion/Methode begeignet, weiß leider gerade nicht mehr, welche es war. Ich meine FileExists in FileSystems. Es liegt wohl daran, dass VB, VB Script / CATScript und VBA für das boolsche wahr/true den wert -1 und für falsch/false den Wert 0 nutzen (bringt den Vorteil mit sich, bei Operationen wie UND und ODER nicht zwischen logischen und bitweisen Operationen unterscheiden zu müssen). Alle anderen mir bekannten Sprachen, wie die Sprache C++, in der CATIA selbst geschrieben ist, benutzen für falsch/false ebenfalls den Wert 0, alle anderen Werte werden als wahr/true interpretiert. Das Problem kann man am besten umgehen, indem man den Rückgabewert immer mit False vergleicht:
Code:
If oSheet.IsDetail = False Then ... End If
bzw.
Code:
If oSheet.IsDetail <> False Then ... End If
Nachprüfen kann man dies zumindest in VBA, indem man den Rückgabewert einer Variable zuweist, deren Typ explicit als Long deklariert ist, der Wert sollte dann +1 betragen. Bei Deklaration ohne Typ zeigt der Debugger als Typ ein Bool in einem Variant gekapselt an, dessen Wert dann Korrekt interpretiert wird, weshalb dieser Fehler etwas tricky zu finden ist. Bsp.:
Code:
Dim lResult As Long lResult = oSheet.IsDetail
Gruß Carsten 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: 24. Jul. 2009 18:55 <-- editieren / zitieren --> Unities abgeben: Nur für michse02
|