Autor
|
Thema: Automatische Bemaßung (1519 mal gelesen)
|
Cohixu Mitglied
Beiträge: 18 Registriert: 29.10.2008 Catia V5 R18 Win XP SP3
|
erstellt am: 03. Sep. 2009 09:10 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, mein neuestes Problem bezieht sich auf die automatische Erzeugung von Bemaßungen in einem Drawing. Hierfür gibt es in der Hilfe ein Beispiel: Dim MyView As DrawingView Set MyView = MySheet.Views.ActiveView Dim Fact2D As Factory2D Set Fact2D = MyView.Factory2D Dim Line1 As Line2D Dim Line2 As Line2D Set Line1 = Fact2D.CreateLine(50, 10, 150, 10) Set Line2 = Fact2D.CreateLine(50, 10, 120, 100) Dim Ellipse1 As Ellipse2D Set Ellipse1 = Fact2D.CreateEllipse(-40, 100, 120, 180,120,90,0, 3) Dim Point1 As Point2D Dim Point2 As Point2D Set Point1 = Fact2D.CreatePoint(-10,190) Set Point2 = Fact2D.CreatePoint(-120,90) Dim iType As catDimType iType = catDimAngle Dim myElements1(1) myElements1(1) = Array(Line1,Line2) Dim selpoints(3) selpoints(3) = Array(150, 10, 120, 100) Dim MyDimension1 As DrawingDimension Set MyDimension1 = MyView.Dimensions.Add(iType, myElements1(1), selpoints(3),catDimAuto) iType = catDimLengthCurvilinear Dim myElements2(2) myElements2(2) = Array(Point1,Point2,Ellipse1) selpoints(3) = Array(0, 0, 0, 0) Dim MyDimension2 As DrawingDimension Set MyDimension2 = MyView.Dimensions.Add(iType, myElements2(1), selpoints(3),catDimOffset) Ich habe diese Hilfe versucht zu nutzen, doch ich bekomme jedesmal bezüglich der Funktion "ADD" Fehler: Funktion oder schnitstelle kan nur eingeschränkt verwendet werden.... Ich habe in einigen Threads gelesen das es wohl einige hingekriegt habe und dabei einen Code mit den gleichen Befehlen wie in der Hilfe verwendet haben. Jetzt ist meine Frage was ich eigentlich falsch machje? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 03. Sep. 2009 17:55 <-- editieren / zitieren --> Unities abgeben: Nur für Cohixu
Hallo Cohixu, du machst erstmal gar nichts falsch. Es gibt Funktionen (unter anderem diese und die Selektion) deren Objekt nicht in VBA unterstützt werden. Das heißt wird eine Objekt als DrawingDimension deklariert ist die Funktion "add" entweder eingeschränkt oder gar nicht verfügbar. Um dem Problem jetzt Herr zu werden darfst du das Objekt nicht als DrawingDimension deklarieren (early Binding) sondern als Object (late Binding). Der Unterschied zwischen early und late Binding liegt somit in der Deklaration der Objekt. Beim late Binding wird ein Objekt auch als solches deklariert. Alle anderen Deklarationen (z.B. DrawingDimension, Selektion, Document, etc.) sind nur Ableitungen des Objekts. Wird also das Objekt auch als Object deklariert, dann wird die Funktion auch unterstützt und das Makro kann das machen was es soll . Der Nachteil beim late Binding ist das dir das IntelliSense wegfällt (quasi die Autovervollständigung wenn du eine Methode des Objekts aufrufen willst, etc. ) Die meisten Programmierer programmieren erst mal im early Binding, realeasen das Makro / Programm aber als late Binding (das heißt sie schreiben zum Schluss alle Deklarationen die sich von Objekten herleiten auch als Objekte um). Somit ist man erstens Releaseunabhängigen (z.B. beim externen Zugriff auf Excel, etc.) und zweitens wird jedes Objekt von VB unterstützt. Es gibt auch ein paar die gleich late Binding machen das halte ich aber nicht für sinnvoll weil man mit der Autovervollständigung doch wesentlich schneller ist ------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cohixu Mitglied
Beiträge: 18 Registriert: 29.10.2008 Catia V5 R18 Win XP SP3
|
erstellt am: 07. Sep. 2009 09:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Daniel, erstmal danke für die ausführliche Antwort. Ich habe gemäß deiner Anmerkung den Code umgeschrieben, und "MyDim" nicht als DrawingDimension sondern als Object deklariert: Sub CatMain()
''''''''''''''''''''''''''''''''''''''''''''''## ' Deklaration der Variablen Dim oDoc As DrawingDocument Dim Sheet As DrawingSheet Dim View As DrawingView ''''''''''''''''''''''''''''''''''''''''''''''' 'Erfassen von Dokument bis Ansicht
Set oDoc = CATIA.ActiveDocument Set Sheet = oDoc.Sheets.ActiveSheet Set View = Sheet.Views.ActiveView ''''''''''''''''''''''''''''''''''''''''''''''' ' Zeichnen der Punkte für die bemaßung Dim Fact As Factory2D Dim Point1 As Point2D Dim Point2 As Point2D Dim iType As CatDimType Dim myElements1(1) Dim selpoints(3) Dim MyDim As Object Set Fact = View.Factory2D Set Point1 = Fact.CreatePoint(0, 100) Set Point2 = Fact.CreatePoint(-100, 100) iType = catDimDistance myElements1(1) = Array(Point1, Point2) selpoints(3) = Array(0, 0, 0, 0) Set MyDim = View.Dimensions.Add(iType, myElements1(1), selpoints(3), catDimAuto) End Sub Leider bekomme ich immer noch die gleiche Fehlermeldung: Funktion oder schnittstelle kann nur eingeschränt verwendet werden.... Könnte vieleicht nochmal einer drüberschauen, bitte.
Schonmal im vorraus vielen Dank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cohixu Mitglied
Beiträge: 18 Registriert: 29.10.2008 Catia V5 R18 Win XP SP3
|
erstellt am: 07. Sep. 2009 09:29 <-- editieren / zitieren --> Unities abgeben:
|
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 08. Sep. 2009 18:17 <-- editieren / zitieren --> Unities abgeben: Nur für Cohixu
|
Bertel Mitglied
Beiträge: 300 Registriert: 03.04.2002 CATIA V5 R26SP3HF21 Win10 Lenovo P52 Intel Xenon 16GB Ram NVIDIA Quadro P2000 EUKLID V14 ViCADo 2015
|
erstellt am: 09. Sep. 2009 10:41 <-- editieren / zitieren --> Unities abgeben: Nur für Cohixu
|
Cohixu Mitglied
Beiträge: 18 Registriert: 29.10.2008 Catia V5 R18 Win XP SP3
|
erstellt am: 14. Sep. 2009 09:33 <-- editieren / zitieren --> Unities abgeben:
Hi, wie gewünscht hier das Script: Sub CatMain() ''''''''''''''''''''''''''''''''''''''''''''''## ' Deklaration der Variablen Dim oDoc As Object Dim Sheet As Object Dim View As Object ''''''''''''''''''''''''''''''''''''''''''''''' 'Erfassen von Dokument bis Ansicht
Set oDoc = CATIA.ActiveDocument Set Sheet = oDoc.Sheets.ActiveSheet Set View = Sheet.Views.ActiveView ''''''''''''''''''''''''''''''''''''''''''''''' ' Zeichnen der Punkte für die bemaßung Dim Fact As Object Dim Point1 As Object Dim Point2 As Object Dim iType As CatDimType Dim myElements1(1) Dim selpoints(3) Dim MyDim As Object Set Fact = View.Factory2D Set Point1 = Fact.CreatePoint(0, 100) Set Point2 = Fact.CreatePoint(-100, 100) iType = catDimDistance myElements1(1) = Array(Point1, Point2) selpoints(3) = Array(0, 0, 0, 0) Set MyDim = View.Dimensions.Add(iType, myElements1(1), selpoints(3), catDimAuto) End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tstone Mitglied Werkzeugkonstrukteur
Beiträge: 163 Registriert: 04.06.2003 Dell Precision 470 Intel Xeon CPU 3,00GHz 2GB Ram Microsoft Windows XP Catia V5 R18 SP6 VB2005
|
erstellt am: 14. Sep. 2009 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für Cohixu
Hallo, ich finde es schade, das hier im Forum immer wieder darauf hingewiesen wird das späte Bindung besser sei als frühe Bindung. Sicher gibt es in Catia einige Methoden bestimmter Objekte die ich nur mittels später Bindung aufrufen kann (was an Dassault liegt), aber generell ist späte Bindung der unsichere und langsamere Weg der Objektbindung. Schon allein die Typsicherheit sollte ein ausreichender Grund sein der frühen Bindung den Vorrang zu geben, mal abgesehen von Itellisense, besserer Lesebarkeit von Code, Ausführungsgeschwindigkeit,... siehe auch: [URL=http://support.microsoft.com/kb/245115/de][/URL] Bitte versteht diesen Betrag (der hier sicherlich deplatziert ist) als Lanzenbruch für die frühe Bindung und nicht als Kritik an diesem ausgezeichnetem Forum. ------------------ Grüße TStone "Respektiere die Macht der Worte, wähle sie mit Bedacht!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|