Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  iIndex / Name Ansprechbarkeit

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:  iIndex / Name Ansprechbarkeit (1134 mal gelesen)
xSalazar
Mitglied


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

Beiträge: 3
Registriert: 12.08.2019

CATIA V5 Release 27

erstellt am: 12. Aug. 2019 13:35    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,

Ich hätte eine größere Frage.

1. Gibt es die Möglichkeit sich über die Benennung eines z.B. Punktes den zugehörigen Index im Geometrischen Set ausgeben zu lassen?
Über .Item("Testpunkt") könnte sich ja ein Punkt ansprechen lassen. Nun würde mich interessieren, welcher Index (Zahl) denselben Punkt im Set anspricht.

2. Problemstellung (Worauf das Ganze eigentlich hinaus läuft)
Wie unterscheidet Catia doppelt benannte Punkte? Wenn ich 2 Punkte erzeuge (P1 und dann nochmal P1), kann ich über aktiven Mausklick die Punktunterscheidung bewerkstelligen. Wenn ich jedoch über .Item("P1") arbeite, wird immer zuerst der oberste Punkt angewählt und verwendet. Ist Prinzipiell logisch da "P1" nur den String übergibt und keine weitere Information über die genaue Lage im Geometrischen Set.
Der unten liegende P1 ist nicht per Macro ansprechbar.

Wenn ich, über Selection, eine Suche nach P1 laufen lasse, kann ich innerhalb der Suche über .Item(1) und .Item(2) beide Punkte explizit ansprechen. Wie genau könnte ich diese Punkte nun zur Ebenenerzeugung verwenden?

Beispiel:
Per Macro eine Ebene durch 3 Punkte erzeugen. Die Punkte haben die Benennungen (P1,P2,P1).

Wäre super, wenn mir hier jemand mit einem kleinen "Denkanstoss" weiterhelfen könnte. 


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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 12. Aug. 2019 13:51    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 xSalazar 10 Unities + Antwort hilfreich

Servus

Willkommen im Forum. Bitte Systeminfo ausfüllen.
zu 1):
Das ist der Grund warum per Name auf eine Element zugreifen recht fehleranfällig ist. Den Index heraus bekommen geht vermutlich nur über eine Schleife aller HybridShapes des GeoSets. Dann für jedes Element den Elementen Typ und den Namen vergleichen.

zu 2):
Wenn du die Punkte selektiert hast kannst du diese doch direkt verwenden (oder gleich die Referenz dazu (Code ungetestet)):

Code:
'Ebene Erzeugen, zwei Punkte sind selektiert, vom dritten Punkt wird auf andere Weise die Referenz gebildet

Set oRefFirstPoint = oSel.Item2(1).Reference
Set oRefSecondPoint = oSel.Item2(2).Reference
Set oRefThirdPoint = oPart.CreateReferenceFromObject(oPoint)

Set oPlane = oHybridShapeFactory.AddNewPlane3Points(oRefFirstPoint, oRefSecondPoint, oRefThirdPoint)


Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

xSalazar
Mitglied


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

Beiträge: 3
Registriert: 12.08.2019

CATIA V5 Release 27

erstellt am: 12. Aug. 2019 14:25    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 Bernd,

Vielen Dank schonmal für die Info.

Ich sollte das Beispiel wohl doch etwas anders mehr am eigentlichen Problem aufbauen.
Ich habe folgende Punktwolke:
P01
P03
P05
P04
P02

Und möchte diese, ohne die Position der Punkte im Baum zu verändern, nun spiegeln.
Zu:
P05
P03
P01
P02
P04

Ich hatte das Ganze momentan so gemacht, das ich die Punkte ("String", daher der Fehler) in ein Array geschrieben habe, das Array alphabetisch geordnet habe, und über dieses Array eine Schleife laufen lasse (Quasi P01-05, wird P05-01).
Dabei benennt er mir P05 im Baum zu P01 um.

Code:
.HybridShapes.Item(Ziel(Z,0)).Name="P0" & Z + 1

Wenn er dann aber auf .Item("P01") zugreifen will, greift er mir auf das in der Schleife eben erstellte P01 (ehemals P05) zu und lässt den eigentlichen P01 unberührt, da dieser natürlich doppelt benannt ist.

Das Ganze soll am Ende als Grundlage für eine Spline gelten. Da hier während der Konstruktion auch nachträglich Punkte hinzukommen können, eingefügt werden, vielleicht noch ein paar Konstruktionspunkte vorhanden sind, möchte ich hier nicht rein über die Reihenfolgen im Baum gehen sondern möchte gerne aktiv ,über den Namen, die Reihenfolge der Punkte festlegen.

Oder wenn wir beim Ebenen Problem bleiben wollen, wenn nur der im Baum unterhalb stehende P1 Punkt für die Ebenenerstellung verwendet werden soll. Wie würde man diesen ansprechen?

[Diese Nachricht wurde von xSalazar am 12. Aug. 2019 editiert.]

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 12. Aug. 2019 15:18    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 xSalazar 10 Unities + Antwort hilfreich

Servus

Ich verstehe nicht ganz was du in dem Zusammenhang mit "spiegeln" meinst oder was das sortieren bezwecken soll.
Du könntest doch

  • auf die Elemente nur per Index zugreifen (des Hybridshapes oder eines Arrays)
  • die Elemente zuvor alle temporär umbenennen (Postfix oder Präfix hinzufügen, dann klappt auch das Ansprechen über diesen (temporären) Namen

Zu deinem Beispiel mit der Ebene: es ist doch egal wo der Punkt im Baum ist, Hauptsache er kann eindeutig angesprochenen werden (Index, Userselektion , Name (falls dieser wirklich eindeutig ist), zuvor erzeugter Punkt der noch in einer Variabel/Object gespeichert ist, ...)

Gruß
Bernd

EDIT: Wenn du zu einem HybridShape dessen Index im GeoSet benötigst: so könnte das gehen

Code:
Sub CATMain()

    Set partDocument1 = CATIA.ActiveDocument
    Set part1 = partDocument1.Part
    Set hybridBodies1 = part1.HybridBodies

    Set hybridBody1 = hybridBodies1.Item(1)
    Set MyPoint = hybridBody1.HybridShapes.item(3)

    dim i as Integer

    i = GetIndexOfHybridShape(MyPoint, hybridBody1)

    if i <> 0 then
        MsgBox "Gefunden: " & CStr(i)
    end if

End Sub


Function GetIndexOfHybridShape(oSearchItem as HybridShape, oHBody as Hybribody) as Integer

    Dim oHybridShape as HybridShape
   
    for i = 1 to oHBody.HybridShapes.Count
        Set oHybridShape = oHBody.HybridShapes.Item(i)
        if oHybridShape Is oSearchItem then
            GetIndexOfHybridShape = i
            exit Function
        end if
    next

    GetIndexOfHybridShape = 0
   
End Function


------------------
Warum einfach, wenn es auch kompliziert geht.

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

xSalazar
Mitglied


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

Beiträge: 3
Registriert: 12.08.2019

CATIA V5 Release 27

erstellt am: 13. Aug. 2019 11:22    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


Listbox.jpg

 
Hallo Bernd,

Vielen Dank für den Denkanstoss.

Habe jetzt meinen Code von sämtlichen Strings befreit und ziehe in sämtlichen Arrays, Referenzen, Vergleichen direkt die Objekte selbst an. Dann funktioniert das Ganze einwandfrei.

Als kleines Problem habe ich noch das ich per Listbox eine Sortier- & Umbenennfunktion gebaut habe.
Wenn ich quasi P01-P05 habe und zwischen P01 und P02 einen neuen P02 einfügen will, müsste ich alle nachfolgenden Punkte umbenennen um P01-P06 zu bekommen. Das wollte ich automatisieren.

Nachdem die zwei P01 aber einmal in der Listbox sind, hat man keine Übersicht mehr, welcher jetzt welcher war.
Hier muss ich entweder noch irgendwas mit einem Prefix bauen oder den Index auslesen und  hier noch eine 2te Zeile einfügen, das es P01 mit Index 2 gibt und P01 mit Index 3.

Trotzdem Vielen Dank für deine Hilfe.
Hat mich sehr weitergebracht.

[Diese Nachricht wurde von xSalazar am 13. Aug. 2019 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