Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  3D Annotations, zugehöriges Element finden

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:  3D Annotations, zugehöriges Element finden (3220 mal gelesen)
MarcDe
Mitglied



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

Beiträge: 137
Registriert: 11.10.2006

CATIA R18 SP2, BN 18, HF 162
Win 7 64Bit

erstellt am: 13. Mrz. 2013 16:36    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 Profis,

ich bin gerade dabei die zugehörige Linie einer 3D Annotaion zu finden. Wenn ich mir da mal die Klassenstrukturen anschaue, dann wäre das hier ja ideal:

Code:

Sub catmain()

Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim annotationSets1 As AnnotationSets
Set annotationSets1 = part1.AnnotationSets

Dim annotationSet1 As AnnotationSet
Set annotationSet1 = annotationSets1.Item("Annotation Set.1")

Dim anno As Annotation
Set anno = annotationSet1.Annotations.Item(1)

Dim dt As DrawingText
Set dt = anno.Text.Get2dAnnot

Dim el As AnyObject
Set el = dt.AssociativeElement

MsgBox el.Name

End Sub


Leider ist die Property "AssociativeElement" => failed.
VBA stellt sich auch an und gibt Interface-Warnungen raus. Das ganze Funktioniert also irgendwie nicht oder ich bin zu blöd 

Die Aufgabe ist es zu der richtigen Linie (beliebig viele) die zugehörige 3D Annotation bzw. den darauf befindlichen Text zu speichern. Hat da jmd. einen Tipp?

Meine andere Idee ist es über

Code:
dt.Leaders.Item(1).GetPoint(1, x, y)

zu gehen, aber die Koordinaten haben keinen wirklichen Bezug zu meinen Koordinaten der Linie (Anfangs + Endpunkt zum Beispiel). Ich kann diese also nicht wirklich zu den 3D-Koordinanten zuordnen, weil die Koordinaten, die GetPoint zurückliefert zwar von der Spitze des Leaders ist, welche sich unmittelbar an der Linie befindet), jedoch diese auf die FrontView der Annotations bezogen sind.

Grüße

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 14. Mrz. 2013 11:13    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 MarcDe 10 Unities + Antwort hilfreich

Hallo MarcDe,

vielleicht hilft Dir das schon weiter:

Grundbedingung für das beispiel: Annotation ist bereits selektiert.

Code:

Public Sub CATMain()

    Dim annoWork        As AnnotationTypeLib.Annotation
    Dim arrVarSurf()    As Variant
    Dim objAnnoWork    As Object
    Dim selWork        As INFITF.Selection
    Dim sName          As String

    Set selWork = CATIA.ActiveDocument.Selection
   
    Set annoWork = selWork.Item2(1).Value
   
    Set objAnnoWork = annoWork

    ReDim arrVarSurf(annoWork.GetSurfacesCount - 1)
    Call objAnnoWork.GetSurfaces(arrVarSurf)
    Call MsgBox(arrVarSurf(0))
   
    sName = CStr(arrVarSurf(0))
    Call selWork.Search("Name=" & Right(sName, Len(sName) - InStrRev(sName, "/")))

End Sub


Edit: Code um die Suche erweitert. Das ist aber noch nicht die Lösung schlechthin, da es mehrere Elemente mit dem namen gibt. In sName steht aber die komplette Struktur, weshalb man sich durchhangeln könnte. Eventuell solltest Du ein neues Thema starten, wie man am besten vom kompletten pfad einer Geometrie zu dessen Objekt kommt. Eventuell über die .Find-Methode des Part.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 14. Mrz. 2013 editiert.]

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

MarcDe
Mitglied



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

Beiträge: 137
Registriert: 11.10.2006

CATIA R18 SP2, BN 18, HF 162
Win 7 64Bit

erstellt am: 15. Mrz. 2013 09:58    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 Henry,

erstmal mega vielen Dank für den Code, das ist ja wirklich schon fast die Lösung  . Ich teste gerade damit und es klappt gut, zumindest solange die Annotation erstellt wurde, indem auf ein Element geklickt und diese nicht bezugslos erstellt wurde (logisch). Ich habe mir in C# schon mal eine Linq-Erweiterungsmethode geschrieben, die genau diesen Pfad, der in "arrVarSurf(0)" drin steht als Parameter bekommt und mir gleich das Objekt zurückliefert, damit ich nicht so viel schreiben muss :-) a la "HybridBodies.Item(x).Hybrid....

Allerdings wie du bereits gesagt hast, gibt es diesbezüglich ein Problem, wenn es Namen doppelt gibt. Das ist dann aber so. Es wäre natürlich schöner, wenn man irgendwie aus der Annotation ohne Umwege das Objekt an sich bekommen würde ohne es sich noch suchen zu müssen 

Ich hab aber noch ein viel blöderes Problem und zwar: Teilweise sind die Annotations auf einen Punkt referenziert, welcher sich in einer Skizze befindet und ich bekomme dann so einen Pfad:

../Inner Spar Upper Bolting Layouts/Bay 10 Upr/Sketch_BAY-10/Vertex

Jetzt muss ich irgendwie an die Koordinaten von diesem Vertex herankommen, um mein ursprüngliches Problem weiter verfolgen zu können  Unterhalb der Skizze im Baum ist z. B. dieser Vertex in "Geometry" als "Point.14" aufgelistet, aber das kriege ich natürlich aus dem zurückgelieferten String von GetSurfaces nicht raus. Ich befürchte fast hier ist Endstation? 

Viele Grüße
Marc

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 15. Mrz. 2013 15:14    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 MarcDe 10 Unities + Antwort hilfreich

Das würde ich generell über die SPAWorkbench machen und dann davon .GetMeasurable() und dann das messen.

http://ww3.cad.de/foren/ubb/Forum137/HTML/004946.shtml#000001


Denke, das sollte schon helfen, ansonsten wird's etwas kniffeliger, aber sollte auch Lösungen dafür geben.
Oder ist das Problem, dass Du aus dem Pfad kein Objekt bekommst?
Dann müssen wir schauen, ob wir daraus vielleicht eine Referenz bilden können, sieht mir aus wie eine, und diese dann messen können oder zur Not über die Selection selektieren und dann das Objekt dort wieder raus holen.

Ja das FTA-Modul sieht mir so aus, als hätte es ein Praktikant geschrieben, wie ich immer sage, da passt nix zusammen und keine Schnittstelle ist gut und auch nichts richtig dokumentiert... Ich würde mir als Unternehmen auch eher das Geld dafür sparen und lieber eine eigene Workbench bauen… - leider ist die Welt nicht so einfach… :-(

Über die .GetTopologicalObject() und .GetItem() Methoden lässt sich oft noch was rausholen, aber dafür muss man wissen wie die Klassen heißen… :-(

Mit doppelten Namen sollte es kein problem geben, wenn Du eine Methode / Funktion hast, die sich anhand des Pfades durch die Struktur hangelt. Habe nur noch keine Funktion dafür geschrieben, ist ja auch nicht ganz trivial, aber nützlich.

Edit: Noch ne Idee - vielleicht lässt sich aus den UserProfiles etwas rausholen, die muss man, glaube ich, vor der Annotation aus der Geometrie erzeugen um dann die Annotation darauf zu referenzieren.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 15. Mrz. 2013 editiert.]

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

MarcDe
Mitglied



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

Beiträge: 137
Registriert: 11.10.2006

CATIA R18 SP2, BN 18, HF 162
Win 7 64Bit

erstellt am: 15. Mrz. 2013 15: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


AnnotationLineProblem.png

 
Hey zurück,

naja ich kann ja erst etwas messen, wenn ich das Objekt besitze und aus dem String: "../Inner Spar Upper Bolting Layouts/Bay 10 Upr/Sketch_BAY-10/Vertex" kann ich kein Objekt bilden bzw nur bis zur Skizze, aber "Vertex" sagt nichts aus, außer dass es ein Punkt/Vertex ist. Aber welcher Punkt in der Sketch ist nicht klar, es gibt da mehrere.

Ich glaube ich muss etwas ausholen und das Problem etwas im Detail beschreiben. Dazu habe ich mal das Bild angehängt. Ich möchte herausfinden zu welcher Linie die Annotation gehört. Die Annotation klebt jedoch an dem Punkt einer Sketch und in der Sketch gibt es mehrere Punkte und GetSurfaces liefert mir den String (s. oben) zur Sketch bzw. zu einem Vertex in der Sketch, aber welcher das ist, ist nicht klar. Der Punkt der Sketch liegt jedoch direkt auf der Linie! Die Lösung oder besser gesagt eine Lösung wäre, wenn ich an die Koordinaten des Vertex herankommen könnte d.h. daraus ein Objekt erstellen könnte, dann könnte ich den Punkt und die Linie messen und wenn Abstand=0mm+Toleranz, dann hätte ich meine Zuordnung zur Linie und der Annotation und damit gewonnen.

Zitat:

Mit doppelten Namen sollte es kein problem geben, wenn Du eine Methode / Funktion hast, die sich anhand des Pfades durch die Struktur hangelt. Habe nur noch keine Funktion dafür geschrieben, ist ja auch nicht ganz trivial, aber nützlich.

Wieso sollte es da kein Problem geben? Wenn der Pfad mich als Beispiel zu einem Geoset bringt und darunter das Element "ABC" heißt und es zufällig in dem Set zwei oder mehrere Elemente mit "ABC" gibt, dann bekomme ich über Hybridshapes.Item("ABC") natürlich nur das erste und nicht u. U. das zweite oder dritte, was möglicherweise gemeint war. Es sei denn ich hab die Nummer/Position des Elements innerhalb des Sets, aber diese liefert mir "../Inner Spar Upper Bolting Layouts/Bay 10 Upr/Sketch_BAY-10/Vertex" ja nicht, sondern nur den Namen. Oder versteh ich da etwas falsch?

BTW: Ich kann meine C# Linqmethode gerne demnächst mal publizieren, sieh ist echt geil und erleichtert einem die Zugriffe auf Sets und Elemente in verschachtelten und tiefen Strukturen erheblich, denn alles kann in einer Zeile mit "\\" getrennt angegeben werden und außerdem bekommt man eine vernünftige Meldung (und nicht "Mitglied nicht gefunden", wenn ein Set oder Element nicht gefunden wurde, weil der Konstrukteur es umbenannt hat (das alte Problem, jeder kennt es). Und diese Methode integriert sich automatisch ins Intellisense, d.h. sie ist an der richtigen Stelle nämlich als Api-Extension der Klasse "HybridBodies" verfügbar und verhält sich so, als wäre sie von DS selbst dort implementiert. Sehr angenehm :)

Zitat:
Noch ne Idee - vielleicht lässt sich aus den UserProfiles etwas rausholen, die muss man, glaube ich, vor der Annotation aus der Geometrie erzeugen um dann die Annotation darauf zu referenzieren.

Das sagt mir jetzt mal gar nichts  Ich habe nur eine View "Front View" und die Notes unter dem Hauptknoten "Annotation" im Baum.

Ich sag mal so: Das Problem der Zuordnung wäre unter der Bedingung, dass es keine Elemente mit doppeltem Namen gibt und die Annotation im Bild nicht auf den Punkt der Sketch sondern direkt auf die Linie bezogen wäre gelöst, da GetSurfaces dann den String bis zum Element zurückgibt und ich mich zum Element mit dem Namen durchhangeln kann. Aber dieser Fall ist hier anders.

Mit der Selektion eine Referenz bilden klingt gut ja, aber wie aus dem obigen String von GetSurfaces eine Referenz bilden, also in diesem Fall aus dem Vertex?  Wenn das gehen würde, dann könnte ich ja auch messen und/oder Koordinaten zum Vergleich heranziehen, ob der Punkt auf der Linie liegt oder nicht.

Vielen Dank nochmal für deine Tips. Vielleicht kriegen wirs ja noch hin 

Grüße
Marc

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