Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  Inventor VBA
  getReferenceKey

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  getReferenceKey (2165 mal gelesen)
yamaha
Mitglied
Konstrukteur


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

Beiträge: 384
Registriert: 19.05.2004

Autocad/Inventor 2022, Windows 10 Pro 64Bit

erstellt am: 03. Jul. 2004 17:26    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 Leute,

eine Frage zum ReferenceKey.

Ich wollte per VBA abfragen ob eine ebene Fläche bereits
als Abhängigkeit benutzt wird, und dachte der ReferenceKey
ist dafür wie geschaffen.
Leider bekommen ich von der Fläche keinen ReferenceKey, jedoch
von dem Proxy-Objekt der Fläche kann ich den ReferenceKey abfragen.

Frage:
Wird der ReferenceKey erst vergeben, wenn man das Objekt auch benutzt?
Hat eine Fläche keinen ReferenceKey, oder? (evtl. Fehler in meinem Code?)

Danke für eure Hilfe

------------------
Gruß

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

PaulSchuepbach
Moderator
Programmierer




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

Beiträge: 1005
Registriert: 01.10.2003

erstellt am: 03. Jul. 2004 18:48    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 yamaha 10 Unities + Antwort hilfreich

Hallo Joern,

ReferenceKeys sind was anderes. Wenn Du eine Flaeche referenzierst, um irgendwas zu machen, dann weisst Du nach dem Schliessen und wiedser Oeffnen des PartDocs nicht mehr, welche Flaeche es war. Du kannst z.B. einen ReferenceKey (mittels Code) an eine Flaeche anbringen. Zu einem Spaeteren Zeitpunkt wirst Du (via Code) genau diese Flaeche wiederfinden - so aehnlich wie ein AttributeSet.
Der Untersvchied ist, dass ein AttributeSet - bzw. das Attribut darin - dauerhaft angebracht wird. Du kannst also das File schliessen, IV beenden und Deine Applikation beenden. Nach einem Neustart findest Du die Flaeche wieder.
Der ReferenceKey allerdings ueberdauert das Schliessen und wieder Oeffnen des IV-Files - nicht aber das Beenden Deiner Applikation.

Okay, nun sollten die letzten Klarheiten beseitigt sein...

Die Frage ist eigentlich: WAS willst Du genau vom ReferenceKey ? Du willst Abhaengigkeiten suchen. Das Proxy-objekt hat natuerlich ReferenceKeys - auf jeder Flaeche, an jeder Kante usw.

Warum? Das Proxy-Objekt ist ja 'nur' ein Abbild (instanz) der entsprechenden Flaeche auf dem Bauteil. So arbeiten Assemblys. Diese ReferenceKeys werden von IV vergeben. Du kannst somit von der Proxy-Flaeche aus dem Assembly auf die Originalflaeche des Parts schliessen.
Das hat aber nichts mit den Abhaengigkeiten zu tun.

Du findest ueber die Costraints-Collection fuer jede Costraint die zugehoerigen Elemente. ReferenceKeys sind der falsche Weg.

Ich hoffe, das hilft.


Gruesse,

Paul

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

yamaha
Mitglied
Konstrukteur


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

Beiträge: 384
Registriert: 19.05.2004

Autocad/Inventor 2022, Windows 10 Pro 64Bit

erstellt am: 03. Jul. 2004 20:39    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 Paul,

genau eine solche Erklärung habe ich gesucht.
wiedermal vielen Dank. 

Ich möchte die Information nutzen um automatisiert,
an die Flächen ein anderes Bauteil anzuhängen.
Jetzt hat das Ursprungsbauteil nur zwei dieser Flächen und
wenn ich raus kriegen könnte ob die andere Fläche bereits verwendet
wird, wüßte ich welche der beiden Flächen ich nehmen kann.
Die Information müßte das Schließen und Wiederöffnen des Datei
eigentlich nicht überstehen, von daher könnte ich mit dem ReferenceKey leben.

Deshalb nochmal folgende Fragen:
Gibt es nach dem Öffnen keinen ReferenceKey mehr oder ist der
dann einfach für die "aktuelle Sitzung" ein anderer?
Hat eine Fläche selbst auch einen RefenceKey oder wird
  der ReferenceKey nur an das Proxy-Objekt gehängt?
Ich habe das Problem das ich mit meinem Code von der Original-Fläche keinen ReferenceKey bekomme (aber vom abgeleiteten Proxy-Objekt).
Also ich bräuchte einen eindeutigen Schlüssel von der Original-Fläche. Ich dachte das Inventor intern einen solchen Schlüssel hat.
Wenn nicht muß ich mir wohl mit der Attrbut-Funkltion selber einen
an dei Original-Fläche hängen.

P.S.
Auf der Heimfahrt diese Woche habe viele neue Ideen entwickelt.
Ich weiß jetzt ja was alles möglich ist, nur ich muß es noch bei Zeiten umsetzten. 

------------------
Gruß

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

drcmda
Mitglied



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

Beiträge: 176
Registriert: 10.07.2002

erstellt am: 06. Jul. 2004 22:01    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 yamaha 10 Unities + Antwort hilfreich


VB.zip

 
hi
jedes objekt hat einen ref-key, bei b-rep objekten brauchst du einen
context den du via "oPart.ReferenceKeyManager.CreateKeyContext" leicht
erstellen kannst.

mal zur struktur des ref-keys - ich versuche soetwas wie den inventor
browser nachzubasteln da jener ja nicht in der APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) abgebildet ist.
an position 8 im ref-key befindet sich ein long welches ein time-stamp
zu sein scheint (siehe attachment). leider wird dieser timestamp von
inventor immer nur einmal bei der erstellung generiert - verschiebe
ich im browser die features bleibt er erhalten und somit bin ich
wieder am ziel vorbei...

gibt es einen weg die timestamps zu aktualisieren?

hier mal ein bsp.
skizze1 - timestamp: 1
extrusion1 - timestamp: 2
rundung1 - timestamp: 3
rundung2 - timestamp: 4

vertausche ich jetzt die verrundungen bleiben die timestamps erhalten
OBWOHL sich der inventor browser ändert... wie läßt sich das
aktualisieren?

---------------------------------------------------------------------
beim vb-projekt einfach in inventor ein bauteil laden und mal laufen lassen

vielen dank,
paul(2)

[Diese Nachricht wurde von drcmda am 06. Jul. 2004 editiert.]

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

yamaha
Mitglied
Konstrukteur


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

Beiträge: 384
Registriert: 19.05.2004

Autocad/Inventor 2022, Windows 10 Pro 64Bit

erstellt am: 07. Jul. 2004 14: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

Hallo drcmda,

vielen Dank für deine Erläuterung, ich muß mir deinen Code
nochmal anschauen befürchte aber das ich dir dabei nicht wirklich
helfen kann. Habe mittlerweile aber trotzdem folgendes Dokument
zum ReferenceKey gefunden: http://inventor.cad.de/university/pdf_zip/MA42-4.pdf

ich habe trotzdem noch folgendes Problem

Ich habe das Problem das ich mit meinem Code von der Original-Fläche keinen ReferenceKey bekomme.

Liegt das evtl. daran, das ich die Fläche von einem Bautteil
nehme. Ich arbeite aber in einer baugruppe:

folgenden Code benutzte ich:
Public Sub Teile_verbinden()
Dim oApp As Inventor.Application
Dim oDoc As Inventor.Document
Set oApp = ThisApplication
Set oDoc = oApp.ActiveDocument

' Set a reference to the assembly component definintion.
Dim oAsmCompDef As AssemblyComponentDefinition
Set oAsmCompDef = oDoc.ComponentDefinition

' Set a reference to the select set.
Dim oSelectSet As Inventor.SelectSet
Set oSelectSet = oDoc.SelectSet

' Validate the correct data is in the select set.
If oSelectSet.Count <> 2 Then
    MsgBox "You must select the two entities valid for mate."
    Exit Sub
End If

' Get the two entities from the select set.
Dim oSelect As Inventor.PartDocument
Dim oTeil1 As Inventor.Face
Dim oTeil2 As Inventor.Face
Dim oSurfaceBody As Inventor.SurfaceBody
Dim oCompDef As Inventor.ComponentDefinition
Dim oFace As Inventor.Face
Dim oRef() As Byte

For s = 1 To 2
    Set oSelect = oSelectSet.Item(s).Definition.Document
    Set oCompDef = oSelect.ComponentDefinition
    For Each oSurfaceBody In oCompDef.SurfaceBodies
        For Each oFace In oSurfaceBody.Faces
            If oFace.SurfaceType = kPlaneSurface Then
                    Puffer_RefKey RefKey_holen(oFace) = "" Then
                    If not Puffer_RefKey = "" Then
                        Msgbox(“Puffer_RefKey”)
                        GoTo Ende:
                    End If
        Next oFace
    Next oSurfaceBody
Nächstes_Teil:
Next s
Ende:


Function RefKey_holen(oFace As Inventor.Face) As String
Dim oApp As Inventor.Application
Dim oDoc As Inventor.Document
Dim oRef() As Byte
Set oApp = ThisApplication
Set oDoc = oApp.ActiveDocument
RefKey_holen = ""
On Error GoTo Ende
oFace.GetReferenceKey oRef(), oDoc.ReferenceKeyManager.CreateKeyContext
For s = 0 To UBound(oRef)
    RefKey_holen = RefKey_holen & (oRef(s))
Next
Ende:
Call oDoc.ReferenceKeyManager.BindKeyToObject(oRef(), oDoc.ReferenceKeyManager.CreateKeyContext, oFace)
End Function

End Sub

------------------
Gruß Jörn

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

waldi
Mitglied
 Softwerker


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

Beiträge: 272
Registriert: 07.08.2001

erstellt am: 07. Jul. 2004 14:49    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 yamaha 10 Unities + Antwort hilfreich

Hi,

wenn ich dich richtig verstehe, willst du doch nur eine bestimmte Fläche eindeutig identifizieren. Ich nehm dazu immer einen Punkt (z.B. den Mittelpunkt des uv-Space der Fläche) auf der Fläche und den Normalenvektor der Fläche. Dann brauchst du die Refkeys nicht, und diese Werte sind eindeutig, auch nach dem Speichern und öffnen eines Teiles.

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

yamaha
Mitglied
Konstrukteur


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

Beiträge: 384
Registriert: 19.05.2004

Autocad/Inventor 2022, Windows 10 Pro 64Bit

erstellt am: 07. Jul. 2004 16:43    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 Waldi,

1. hört sich gut an. Hats du mal ein Beispiel?
2. Wie schon oben erwähnt möchte in den Abhängigkeiten
  der Baugruppe nachschauen ob die Fläche schon verwendet wird.
  Geht das auch mit deiner Methode?

------------------
Gruß Jörn

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

waldi
Mitglied
 Softwerker


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

Beiträge: 272
Registriert: 07.08.2001

erstellt am: 07. Jul. 2004 20:02    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 yamaha 10 Unities + Antwort hilfreich

Hi,

hier ein Beispiel, wie du an einen Punkt auf einer Fläche und den Normalenvektor in diesem Punkt kommst:
---------------------------------
Sub getFaceData()
    Dim faceNormal As UnitVector
    Dim facePoint As point
   
    ' get active part doc
    Dim myDoc As PartDocument
    Set myDoc = ThisApplication.ActiveDocument
   
    ' get selection set
    Dim selSet As SelectSet
    Set selSet = myDoc.SelectSet
   
    ' get selected object
    If (selSet.Count > 0) Then
        Dim myFace As Face
        Set myFace = selSet.Item(1)
       
        ' get surface evaluator
        Dim surfEval As SurfaceEvaluator
        Set surfEval = myFace.Evaluator
       
        ' get param range
        Dim paramRange As Box2d
        Set paramRange = surfEval.ParamRangeRect
       
        ' get normal at min point (may be any other point in the patram range)
        Dim normal(2) As Double
        Dim point(2) As Double
        Dim params(1) As Double
        paramRange.MinPoint.GetPointData params
        surfEval.GetNormal params, normal
       
        ' get 3d point at param values
        surfEval.GetPointAtParam params, point
       
        ' create point and unit vector object
        Set facePoint = ThisApplication.TransientGeometry.CreatePoint(point(0), point(1), point(2))
        Set faceNormal = ThisApplication.TransientGeometry.CreateUnitVector(normal(0), normal(1), normal(2))
       
    End If

End Sub
----------------------------------------------

UnitVector und Point haben jeweils eine Methode IsEqualTo, damit kannst du dann auf Gleichheit prüfen.

Wenn du über die AssemblyConstraints gehts, hat jedes Constraint die Properties GetGeometryOne und GetGeometryTwo. Dann hast du die Face/FaceProxy. Beim Proxy noch mit GetNativeObject, dann hast du die Face.
Dann jeweils die Normalenvektoren/Punkte mit deiner selektierten Fläche vergleichen, das sollte es gewesen sein.

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

yamaha
Mitglied
Konstrukteur


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

Beiträge: 384
Registriert: 19.05.2004

Autocad/Inventor 2022, Windows 10 Pro 64Bit

erstellt am: 18. Aug. 2004 10: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 Waldi,

tschuldigung nochmal für meine Nicht-Reaktion.
Danke für den Code, ein paar Units habe ich natürlich auch vergeben.

Muß jetzt aber auch gestehen, das ich mit diesem Problem jetzt
auch bisschen zurück bin, da ich Urlaub hatte und die Programmiererei
auch nur nebenbei betreibe, so das ich manchmal nicht dazu komme.

Ich werde das aber auf jeden Fall testen und dir dann nochmal meine
Ergebnisse berichten, falls erzählenswert.
Kann nur noch etwas dauern bei mir.

------------------
Gruß Jörn

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)2025 CAD.de | Impressum | Datenschutz