Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Automatische Bemaßung

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Automatische Bemaßung (1519 mal gelesen)
Cohixu
Mitglied



Sehen Sie sich das Profil von Cohixu an!   Senden Sie eine Private Message an Cohixu  Schreiben Sie einen Gästebucheintrag für Cohixu

Beiträge: 18
Registriert: 29.10.2008

Catia V5 R18
Win XP SP3

erstellt am: 03. Sep. 2009 09:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von DanielFr. an!   Senden Sie eine Private Message an DanielFr.  Schreiben Sie einen Gästebucheintrag für DanielFr.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Cohixu 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Cohixu an!   Senden Sie eine Private Message an Cohixu  Schreiben Sie einen Gästebucheintrag für Cohixu

Beiträge: 18
Registriert: 29.10.2008

Catia V5 R18
Win XP SP3

erstellt am: 07. Sep. 2009 09:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Cohixu an!   Senden Sie eine Private Message an Cohixu  Schreiben Sie einen Gästebucheintrag für Cohixu

Beiträge: 18
Registriert: 29.10.2008

Catia V5 R18
Win XP SP3

erstellt am: 07. Sep. 2009 09:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi ich nochmal,

ich habe mal versucht alle Variablen als Object zu deklarieren und siehe da es klappt.

Tausen Dank an Daniel für seine Hilfe.


Grüße,

Roland

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DanielFr.
Moderator
Manager


Sehen Sie sich das Profil von DanielFr. an!   Senden Sie eine Private Message an DanielFr.  Schreiben Sie einen Gästebucheintrag für DanielFr.

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Cohixu 10 Unities + Antwort hilfreich

Hallo,

ich sags ja late bindings sind genial zum ausführen. Zum Programmieren aber lieber die early bindings anziehen die sind IMHO (für mich als nicht 10 Finger Tipper :sleep wesentlich schneller 

------------------
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

Bertel
Mitglied



Sehen Sie sich das Profil von Bertel an!   Senden Sie eine Private Message an Bertel  Schreiben Sie einen Gästebucheintrag für Bertel

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Cohixu 10 Unities + Antwort hilfreich

Hallo Cohixu,

freut mich, das es nun klappt.
Würde mich noch mehr freuen, wenn Du Dein Script nochmal hier rein stellst.

Danke.

Gruß
Bertel

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Cohixu
Mitglied



Sehen Sie sich das Profil von Cohixu an!   Senden Sie eine Private Message an Cohixu  Schreiben Sie einen Gästebucheintrag für Cohixu

Beiträge: 18
Registriert: 29.10.2008

Catia V5 R18
Win XP SP3

erstellt am: 14. Sep. 2009 09:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Tstone an!   Senden Sie eine Private Message an Tstone  Schreiben Sie einen Gästebucheintrag für Tstone

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Cohixu 10 Unities + Antwort hilfreich

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz