Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Automatische erstellung und Benennung von Annotations

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 erstellung und Benennung von Annotations (3095 mal gelesen)
Starbirth
Mitglied
Konstrukteur


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

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 27. Okt. 2009 10:16    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 Forum,
ich zerbreche mir nun schon seit einigen Tagen den Kopf ob und wie sich soetwas per VBA Macro machen lässt.

Das Macro soll ein vom User angegebenes Geometrical Set durchsuchen, die Anzahl der darunter befindlichen Sets ermitteln und dann für jedes Set eine Annotation auf der ersten Kurve in diesem Set anlegen, wobei der Name des Sets in die Annotation übernommen wird.

Im Pseudocode habe ich mir das Ganze ungefähr so gedacht:

Code:
UserSelection -> GeoSet_Arbeitsordner
Zähler=0
FOR EACH GeometricalSet in GeoSet_Arbeitsordner
IF Anzahl_der_enthaltenen_Elemente > 0 THEN
Name des GeometricalSets auslesen -> Var: Name
(hier wäre es später evtl noch schön zu testen ob das Set auch wirklich Kurven/Graden enthält)
Punkt in der Mitte der ersten Kurve erzeugen
Annotation auf erzeugtem Punkt anlegen, Inhalt aus Var:Name
Zähler=Zähler+1
ELSE
NEXT
MsgBox: Es wurden %Zähler% Annotations erzeugt

Ist natürlich noch n wenig rudimentär und es gibt noch ein paar Punkte an denen man Fehler abfangen könnte, aber es soll ja erstmal laufen. Verbessern kann man immer noch.

Ich stehe jetzt "nur" noch vor dem Problem das ins CATIAnische zu übersetzen. Die V5Automation.chm will mir da irgendwie noch nicht weiterhelfen. Da blicke ich einfach noch nicht durch.

Die User Auswahl sollte sich ja über

Code:
Dim InputObjectType()
InputObjectType(0)="HybridBody"

Status = selection1.SelectElement2(InputObjectType, "Bitte das Geometrical Set auswählen aus dem die Annotations erstellt werden sollen.", False)


(Quelle: Das Kochbuch V5 Automation)
machen lassen, oder?
Aber selbst wenn ich nur schon mal die Userselection testen will bekomme ich lediglich einen "Run Time Error '9': Subscript out of range" als Ausgabe. Nichts was annähernd so aussieht als könnte man etwas selektieren.

Dann zum Abschluss meine Frage: Wo lerne ich am einsteigerfreundlichsten das Ganze zu übersetzen?

Editiert@10:36h zwecks Rechtschreibung

[Diese Nachricht wurde von Starbirth am 27. Okt. 2009 editiert.]

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: 27. Okt. 2009 13:27    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 Starbirth 10 Unities + Antwort hilfreich


CreateAnnotationSets.zip

 
Hallo Starbirth,

schau mal in meinen Anhang. Ein fertiges Makro das genau macht was du willst. Die Fehlerbehandlung ist auch schon implementiert. Ich gebe zu es ist ein wenig unübersichtlich für einen Anfänger (ich habe selber ein wenig rumexperimentiert) aber mit dem Step-by-Step Debugging im Visaul Basic Editor solltest du hinter die Struktur steigen.

Der Inhalt des angehängten *.zip Files gestaltet sich wie folgt:

1. Baumstruktur.jpg => mit dieser Baumstruktur habe ich getestet
2. CreateAnnotationSets_v1.0_R19.CATPart => Mein Beispiel-Part (allerdings in R19 und deswegen auch der Baumstruktur-Screenshot. Falls du es nicht öffnen kannst)
3. CreateAnnotationSets_v1.bas => Eine Sicherungsdatei aus dem Visual Basic Editor -> Muss in einem vorhanden Projekt über File -> import importiert werden
4. CreateAnnotationSets_v1.CATScript => Falls du keine Visual Basic Editor installiert hast bzw. das Teil auch auf UNIX laufen lassen willst hier eine leicht geändertes CATScript

Jetzt zu deinen Fragen:
[CODE][Dim InputObjectType()
InputObjectType(0)="HybridBody"

Status = selection1.SelectElement2(InputObjectType, "Bitte das Geometrical Set auswählen aus dem die Annotations erstellt werden sollen.", False)/CODE]

Wenn du ein Array ohne feste Länge deklarierst dann musst du ihm bevor du ihm ein Wert zuweist erst eine Länge geben.
Dim InputObjectType() => Eine Array ohne feste Länge
InputObjectType(0)="HybridBody" => Woher soll das Script überhaupt wissen das das Array eine Dimension hat?

Folgendes schafft Abhilfe:
Dim InputObjectType(0) => Ein Array mit der Länge 0
InputObjectType(0)="HybridBody"

oder
Dim InputObjectType() => Eine Array ohne feste Länge
Redim Preserve InputObjectType(0) => Hier wird dem Array die Länge 0 zugewiesen
InputObjectType(0)="HybridBody"

Dein Problem liegt somit nicht bei CATIA oder der V5Automation.chm sondern eher bei Grundlegenden Sachen aus Visual Basic. Von dem her würde ich dir empfehlen dir hier erst mal ein paar Skills anzueignen um dann tiefer in die CATIA Methodik einzusteigen

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

Starbirth
Mitglied
Konstrukteur


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

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 27. Okt. 2009 13:46    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

Wow, auf den ersten Blick sieht das wirklich super aus. Du hast recht, ein wenig verwirrend, aber ich schneusel mich da schon durch.
Werd dann mal zum testen übergehen und danach sind VB Tutorials dran. Ich hab auch das Gefühl, dass es bereits in den Grundlagen hängt. Aber gut, bin Azubi und hab vorher nie damit gearbeitet. Und auf einmal soll ich Makros schreiben. Das Ergebnis war zu erwarten 

Dir auf jeden Fall herzlichsten Dank.

Gruß,
Starbirth

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

Starbirth
Mitglied
Konstrukteur


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

Beiträge: 119
Registriert: 22.10.2009

Catia V5-6 R24
Windows 7 64bit
Intel Xeon (4x3,5GHz)
32B Ram
Nvidia Quatro K4200

erstellt am: 16. Nov. 2009 14:38    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


Testpart_Annotations.zip

 
Hallo Daniel,
hab endlich Gelegenheit gefunden alles durchzutesten. Schon n ganz schönes Stück Arbeit was du da abgeliefert hast. Und das in der Zeit. Respekt.

Allerdings muss ich sagen, dass noch nicht alles 100%ig so funktioniert wie es soll. Und ich kann mir nicht erklären weshalb.
Ich hänge mal n Zip mit meiner Testdatei an. Dies ist ein wenig komplizierter als deine.
Wenn du es mal damit testest wirst du sehen, dass gar keine Annotation erzeugt wird.
Bei DummyPart1-4 ist das nicht weiter verwunderlich. Die zugrunde liegenden Kurven sind nicht connex und somit gibt es den Mittelpunkt nicht. Wenn man die Kurven vorher händisch per Disassemble auseinander nimmt werden auf DummyPart1-3 Annotations erzeugt (leider in deinem Original eine Annotation pro Teillinie, aber das hatte ich selber schnell im Griff).

Ich versuche grade dein Script so umzubauen, dass in solchen Fällen (Linienzug nicht connex) ein Extremum erzeugt wird, statt eines Mittelpunktes und auf diesem dann die Annotation. Daran hab ich grade gut zu knabbern.

Was mir noch aufgefallen ist, dass auf DummyPart 4+5 nie Annotations erzeugt werden. Dabei ist 5 extra so erstellt, dass es connex ist. Bei 4 bringt auch der Disassemble keinen Erfolg. Das verstehe ich einfach nicht. Könnte es an der Prüfug liegen ob das grade bearbeitet Element eine Kurve ist?
Wobei ja eigentlich auch Kreisbögen als Kurven zählen sollten, so wie Graden.

Ähm, ja. Glaube das wars erstmal. Ich versuch dann mal weiter die richtige Richtung für den Extrempunkt zu finden.

EDIT (17.11.09): Kreisbögen wurden tatsächlich nicht als Kurven erkannt und somit auch nicht bearbeitet. Hab ich jetzt auch angepasst. Obendrein werden jetzt weiße Annotations erzeugt und die Namen ein wenig angepasst.

[Diese Nachricht wurde von Starbirth am 17. Nov. 2009 editiert.]

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: 17. Nov. 2009 10:47    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 Starbirth 10 Unities + Antwort hilfreich

Hallo,

ich werde mir das ganze mal die Tage anschauen. Ich denke es liegt an der Abfrage mit den Kurven da diese IMHO nicht sauber von DS programmiert wurde.

Ich denke es ist sauberer einen eigenen Algorithmus zu entwickeln und die Abfrage damit laufen zu lassen. Das mit den Extrempunkten kann man auch noch implementieren.

Ich melde mich sobald ich Fortschitte mache 

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

Starbirth
Mitglied
Konstrukteur


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

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 20. Nov. 2009 08:52    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


CreateAnnotationSets_v1_work201109.zip

 
Hab jetzt noch ein wenig rum getippt und auch eine in meinen Augen ganz brauchbare Lösung gefunden.
Was mir dabei noch im Weg steht ist die Erzeugung des Extrempunktes.
Hier mal der derzeitige Code:
Code:
Private Function Point_n_Annotation(ByRef iHybShape As HybridShape, ByRef iHybBody As HybridBody, ByRef iPart As Part, ByRef iHybShapeFac As HybridShapeFactory)

'***********Deklaration**********
Dim iRef As Reference
Dim iRefPlane As Reference
Dim iRefPlaneDirection As HybridShapeDirection
Dim iCheckpoint As HybridShapePointOnCurve
Dim iPoint As AnyObject
Dim connex As Boolean
Dim iSelection As Selection

'***********Connex Check***********
Set iRef = iPart.CreateReferenceFromObject(iHybShape)
Set iCheckpoint = iHybShapeFac.AddNewPointOnCurveFromPercent(iRef, 0.5, False)
iHybBody.AppendHybridShape iCheckpoint
On Error Resume Next
iPart.Update
If Err.Number <> 0 Then
    connex = False
Else
    connex = True
    Set iSelection = CATIA.ActiveDocument.Selection
    iSelection.Clear
    iSelection.Add iCheckpoint
    iSelection.Delete
End If
On Error GoTo 0

'***********Punkt erstellen**********
If connex = True Then
    Set iRef = iPart.CreateReferenceFromObject(iHybShape)
    Set iPoint = iHybShapeFac.AddNewPointOnCurveFromPercent(iRef, 0.5, False)
Else
    Set iRef = iPart.CreateReferenceFromObject(iHybShape)
    Set iRefPlane = iPart.CreateReferenceFromObject(iPart.OriginElements.PlaneYZ)
    Set iRefPlaneDirection = iHybShapeFac.AddNewDirection(iRefPlane)
    Set iPoint = iHybridShapeFac.AddNewExtremum(iRef, iRefPlaneDirection, 1)
End If
iHybBody.AppendHybridShape iPoint
iPoint.Name = "Punkt_fuer_Annotation"

Set iSelection = CATIA.ActiveDocument.Selection
iSelection.Clear
iSelection.Add iPoint
iSelection.VisProperties.SetShow catVisPropertyNoShowAttr



In der fett hervorgehobenen Zeile steigt er dann mit "Run-Time Error 424: Object required" aus.
So wie ich die V5Automation.chm lese hab ich alles angegeben was benötigt wird.
Auch hab ich das ganze mit dem Macro Recorder aufgezeichnet und angepasst.
Wer kann mir sagen wo mein Fehler ist.

EDIT: Hab auf Wunsch noch n eine aktuelle .bas angehangen.

EDIT2: Neue .bas angehängt. Code zur Erzeugung der Annotation ist jetzt auch mit drin.

[Diese Nachricht wurde von Starbirth am 20. Nov. 2009 editiert.]

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: 21. Nov. 2009 11:16    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 Starbirth 10 Unities + Antwort hilfreich

Hallo,

das ist nur ein simpler Tippfehler  . Die Fehlmeldung weißt dich darauf hin das die Methode AddNewExtremum nicht auf das Object iHybridShapeFac angewendet werden kann da dieses nicht existiert.

Tipp mal folgendes ab  :

Set iPoint = iHybShapeFac.AddNewExtremum(iRef, iRefPlaneDirection, 1)

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

Starbirth
Mitglied
Konstrukteur


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

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 23. Nov. 2009 10:38    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


CreateAnnotationSets_v1.1_Final.bas.zip

 
Autsch. Das ist peinlich. Dachte ich hätte in die Richtung alles 3x gecheckt.
Jetzt hab ich endlich mein Extremum. Juhu. Läuft auch alles wie es soll.

Stelle gleich noch die aktuelle .bas rein. Kann ja sein, dass noch jemand anderes Verwendung dafür hat.

EDIT: .bas angehangen

An dieser Stelle noch mal meinen herzlichsten Dank an dich, Daniel, für die tatkräftige Unterstützung und die geniale Vorarbeit ohne die ich sicherlich verloren gewesen wäre.
Unities sind auf dem Weg (kann man da irgendwie mehr als 10 pro Beitrag vergeben?).

[Diese Nachricht wurde von Starbirth am 23. Nov. 2009 editiert.]

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: 23. Nov. 2009 14:16    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 Starbirth 10 Unities + Antwort hilfreich

Hallo,

nein geht IMHO nicht 

Danke für die *.bas. Wird sicherlich jemand auch noch brauchen können 

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

Starbirth
Mitglied
Konstrukteur


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

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 24. Nov. 2009 13:05    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

Jaja, Annotation bedeuten ewiges Rätselraten...

N paar Sachen gibts da jetzt noch anzupassen.
Vor allem Positionierung und Stil.
Positionierung versuch ich mal selber sobald ich es hin bekommen habe dem (Mittel-/Extrem-)Punkt seine Koordinaten zu entlocken.

Aber beim Stil schauts wirklich schlecht aus.
Prinzipiell brauchen diese Dinger nur noch einen geschlossenen Pfeil und alle wären glücklich.
Hab mit ein bisschen Recherche das hier gefunden. Ist da und in der Automation.chm zwar aufs Drawing beschränkt, aber das muss man ja nicht so eng sehen. Denkste  

Kurz: Kennt jemand eine vergleichbare Funktion für Annotations?
(Der Macrorecorder gibt an dieser Stelle leider lediglich ein leeres Script zurück).

EDIT:
Anscheinend lag ich mit meiner Idee doch nicht so falsch. Wie es wirklich gemacht wird wurde mir dann hier gezeigt.

[Diese Nachricht wurde von Starbirth am 15. Dez. 2009 editiert.]

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