Autor
|
Thema: SAFEARRAY (959 mal gelesen)
|
Tellerwaescher Mitglied
Beiträge: 3 Registriert: 07.07.2003
|
erstellt am: 07. Jul. 2003 18:00 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen ! Hat jemand von euch schon Erfahrung mit der Programmierung der COM-Schnittstelle zu CATIA über Visual C++ ? Ich habe immer wieder Probleme mit dem Datentyp CATSAFEVARIANT. Dank jetzt schon für alle Antworten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 08. Sep. 2006 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für Tellerwaescher
Hallo zusammen, ich arbeite mit Visual Basic 2005 und habe auch damit Probleme. Ich finde nämlich keine *.tlb, wo die Type CatSafeVariant deklariert ist. Ich möchte damit Koordinaten aus einem Punkt lesen: Dim a as CatSafeVariant ... point.getcoordinates(a) .... Der Editor meckert sofort, dass der Typ CatSafeVariant nicht bekannt ist, obwohl ich alle *.tlb's eingebunden habe. Hat jemand eine Idee? Klar, ich könnte zur Not über die Measurable gehen, ist aber umständlich und dauert bestimmt länger... ------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
Beiträge: 157 Registriert: 21.04.2006 2x3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1800, Delmia V5R16 SP1, Win XP Prof SP2, Office, VS 2005, VB 6, Inventor (Test), VBExpress .NET 2005 Adminrechte
|
erstellt am: 08. Sep. 2006 15:34 <-- editieren / zitieren --> Unities abgeben: Nur für Tellerwaescher
Hallo Bernd, meines Erachtens müsste es vollkommen ausreichen, wenn Du ein Array vom Typ Variant deklarierst und das an die Funktion GetPosition oder GetComponents übergibst. Bei mir ging es einmal um die Position von Produkten und ich habe es so gelöst (Obj ist der betreffende Produktknoten):
Code: Dim posArr(11) as Variant Obj.Position.GetComponents(posArr)
11 Einträge = 12er-Matrix für die Position bei Bauteilen. Für Punkte habe ich das auch schon einmal gemacht, finde das Makro auf die Schnelle nur nicht. Grüße, oklEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 08. Sep. 2006 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für Tellerwaescher
Hallo okl, vielen Dank für die schnelle Reaktion, habe ich sofort probiert. Allerdings gibt es bei mir nur den Typ VariantType. Leider bekomme ich immer noch die angehängte Fehlermeldung, dass der Typ nicht stimmt. Hier ein Ausschnitt aus dem Listing. .... Dim hybridShapeDirection1, hybridShapeDirection2 As HybridShapeDirection Dim p1, p2, p3 As HybridShapePointOnSurface Dim reference1, reference2 As Reference Dim p1xyz(2), p2xyz(2) As VariantType ...... hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(1, 0, 0) reference1 = MyPart.CreateReferenceFromObject(face) p1 = hybridShapeFactory1.AddNewPointOnSurface(reference1, hybridShapeDirection1, 0) hybridBody1.AppendHybridShape(p1) p2 = hybridShapeFactory1.AddNewPointOnSurface(reference1, hybridShapeDirection1, 1) hybridBody1.AppendHybridShape(p2) p1.GetCoordinates(p1xyz) p2.GetCoordinates(p2xyz) ..... Er scheint unbedingt den Type CatVariant (so steht es in der Api Doku) oder CatSafeVariant (so sieht man es machmal in den Listings von anderen Beiträgen) haben. Das muss doch irgendwie gehen. Haben andere den diesen Typ zur Verfügung? Wenn ja, in welchen TLB's? Ich verwende V5R14SP9. Grüße ------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
Beiträge: 157 Registriert: 21.04.2006 2x3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1800, Delmia V5R16 SP1, Win XP Prof SP2, Office, VS 2005, VB 6, Inventor (Test), VBExpress .NET 2005 Adminrechte
|
erstellt am: 08. Sep. 2006 16:22 <-- editieren / zitieren --> Unities abgeben: Nur für Tellerwaescher
Hm, werde jetzt nicht mehr dazu kommen, schau am WE aber mal in meine alten archivierten Dateien. Vl. finde ich etwas. Trotzdem komisch. Du sagst zwar, dass Du alle Komponenten angezogen hast, ist Dir vl. doch eine durch die Lappen gegangen? Hab gerade kein VS zur Hand und sehe, wie Du die Vars deklarierst. Zieh mal p1xyz in dein Überwachungsfenster und schau Dir mal den Dateitypen an. Vermute, dass da schon ein Problem vorliegt okl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 08. Sep. 2006 17:37 <-- editieren / zitieren --> Unities abgeben: Nur für Tellerwaescher
Hallo okl, klasse, dass Du mich nicht aufgibst. Ich habe Deinen Rat befolgt und die Überwachung mitlaufen lassen. Das Ergebnis siehst Du im Anhang. Sieht eigentlich normal aus, bis auf die Fehlermeldung. Bist Du sicher, dass man "CatVariant" durch "VariantType" ersetzen kann? Das ist bestimmt etwas ganz einfaches, was ich falsch mache, aber ich komme nicht drauf. Da muss es doch noch mehr Anwender geben, die diesen Typ verwenden, oder? Ist doch die einzige Methode um an Koordinaten ranzukommen. Ich bin für jeden Tipp dankbar.... Grüße
------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 08. Sep. 2006 22:05 <-- editieren / zitieren --> Unities abgeben: Nur für Tellerwaescher
Hallo zusammen, tja die Lösung ist denkbar einfach, wie ich mir das schon gedacht hatte. Der Typ "Variant" wurde durch den Typ "Object" ersetzt. Habe ich irgendwo in der Hilfe zu Visual Basic 2005 gefunden. also: Dim p1xyz(2), p2xyz(2) as Object .... und alles läuft. Vielen Dank für die Unterstützung. ------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|