Inventor: Skizzenpunkt(e) zum leuchten bringen (Sketchpoint Highlight) mit VBA

Inventor: Skizzenpunkt(e) zum leuchten bringen (Sketchpoint Highlight) mit VBA

Martin-Winkler-Consulting
Advisor Advisor
1.690Aufrufe
9Antworten
Nachricht 1 von 10

Inventor: Skizzenpunkt(e) zum leuchten bringen (Sketchpoint Highlight) mit VBA

Martin-Winkler-Consulting
Advisor
Advisor

Hallo,

hat jemand zufällig einen VBA Code zur Hand mit dem ich Skizzenpunkte zum Beispiel aus einem SelectionSet zum leuchten bringen kann (Highlight). In der API Hilfe finde ich leider nur ein Beispiel wie es mit Faces geht. Ein Punkt hat aber keine Faces.

Google gibt auch nichts her Frustrierte Smiley

 

Code für Faces aus der API Hilfe:

Sub Main()
  ' Check to make sure the active document is a part.
  If ThisApplication.ActiveDocumentType  kPartDocumentObject Then
     MsgBox "A part document must be open."
     End
  End If

  ' Set a reference to the active part document.
  Dim oDoc As PartDocument
  Set oDoc = ThisApplication.ActiveDocument

  ' Arbitrarily get two faces.  (Assumes a model exists that has
  ' at least 3 faces.
  Dim oFace1 As Face
  Dim oFace2 As Face
  Set oFace1 = oDoc.ComponentDefinitions(1).SurfaceBodies(1).Faces(1)
  Set oFace2 = oDoc.ComponentDefinitions(1).SurfaceBodies(1).Faces(3)

  ' Create a highlight set.
  Dim oSet1 As HighlightSet
  Set oSet1 = oDoc.CreateHighlightSet

  ' Add the first face to the highlight set.
   Call oSet1.AddItem(oFace1)

  ' Create another highlight set.
  Dim oSet2 As HighlightSet
  Set oSet2 = oDoc.CreateHighlightSet

  ' Change the color of the highlight set to green.
  oSet2.Color = ThisApplication.TransientObjects.CreateColor(0, 255, 0)

  ' Add the second face to the highlight set.
  Call oSet2.AddItem(oFace2)
End Sub

Weiter heisst es in der API Hilfe:

HighlightSet.AddItem MethodHighlightSet.AddItem( Entity As Object )

Entity Input Autodesk Inventor object that is valid to be highlighted.

 

Was muss ich da als object angeben beim Punkt?

 

Grüße Martin


@Martin-Winkler-Consulting,

Die Themenüberschrift wurde zur besseren Auffindbarkeit editiert von marius.gildehaus
Original: Skizzenpunkt(e) zum leuchten bringen (Sketchpoint Highlight) mit VBA


Martin Winkler
CAD Developer
Did you find this post helpful? Feel free to like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.


EESignature

0 „Gefällt mir“-Angaben
Akzeptierte Lösungen (1)
1.691Aufrufe
9Antworten
Antworten (9)
Nachricht 2 von 10

S_May
Mentor
Mentor

Wo ist den der Dennis, hat der Urlaub?

0 „Gefällt mir“-Angaben
Nachricht 3 von 10

fullevent
Advisor
Advisor

Guten Morgen zusammen,

 

meinst du einen Punkt einer 3D-Skizze @Martin-Winkler-Consulting?

Hier in rot "gehighlighted" 🙂

2018-08-29 09_27_53-Autodesk Inventor Professional 2018 - [Bauteil8].png

 

Sub Highlight_test()
  ' Check to make sure the active document is a part.
  If ThisApplication.ActiveDocumentType <> kPartDocumentObject Then
     MsgBox "A part document must be open."
     End
  End If

  ' Set a reference to the active part document.
  Dim oDoc As PartDocument
  Set oDoc = ThisApplication.ActiveDocument

  ' Arbitrarily get two faces.  (Assumes a model exists that has
  ' at least 3 faces.
  Dim oFace1 As Face
  Dim oFace2 As Face
  Set oFace1 = oDoc.ComponentDefinitions(1).SurfaceBodies(1).Faces(1)
  Set oFace2 = oDoc.ComponentDefinitions(1).SurfaceBodies(1).Faces(3)

  ' Create a highlight set.
  Dim oSet1 As HighlightSet
  Set oSet1 = oDoc.CreateHighlightSet

  ' Add the first face to the highlight set.
   Call oSet1.AddItem(oFace1)

  ' Create another highlight set.
  Dim oSet2 As HighlightSet
  Set oSet2 = oDoc.CreateHighlightSet

  ' Change the color of the highlight set to green.
  oSet2.Color = ThisApplication.TransientObjects.CreateColor(0, 255, 0)

  ' Add the second face to the highlight set.
  Call oSet2.AddItem(oFace2)
  
  Dim oPoint As SketchPoint3D
  Set oPoint = oDoc.ComponentDefinitions(1).Sketches3D(1).SketchPoints3D(1)
  
  ' Create another highlight set.
  Dim oSet3 As HighlightSet
  Set oSet3 = oDoc.CreateHighlightSet

  ' Change the color of the highlight set to green.
  oSet3.Color = ThisApplication.TransientObjects.CreateColor(255, 0, 0)

  ' Add the second face to the highlight set.
  Call oSet3.AddItem(oPoint)
  
  'Stop
End Sub

Viele Grüße,
Aleks


Aleksandar Krstic
Produkt- und Projektmanager

0 „Gefällt mir“-Angaben
Nachricht 4 von 10

Martin-Winkler-Consulting
Advisor
Advisor

Hallo @fullevent,

danke für deine Antwort.

Es geht im meinem Fall darum, dass ich das gerne auf 2D Punkte einer Skizze anwenden würde.

Hintergrund: Ich habe ein Tool programmiert welches Bohrungen wieder herstellt wenn diese durch Parametrik verloren gegangen sind. Das funktioniert auch soweit. Wenn bei abgeleiteten Bohrungsreihen (Punkt als Kreuz) diese zum Beispiel kürzer werden, kopiert Inventor die Bohrungen die dann zuviel sind einfach in die Skizze (grün). Diese möchte ich dann bereiningen (funktioniert auch soweit). Jetzt passiert es aber, das da noch Punkte sind über die das Programm mit Error stolpert beim Versuch diese zu löschen. Im VBA kann ich mir die Objekte anschauen, ich habe aber keine Ahnung um welche Punkte es sich handelt. Um diese Puinkte weiter untersuchen zu können würde ich da gerne Highlight anwenden. Uff, soviel dazu.....

 

Bei mir gibt es dann bei

 Call oSet3.AddItem(oPoint)

eine Fehlermeldung, das das Objekt nicht hinzu gefügt werden kann.

 

Das Ganze nochmal runter gebrochen:

Ich möchte 2D Punkte jeglicher Art (referenziert, nicht referenziert etc.) einem HighlightSet hinzufügen.

 

Grüße Martin

Martin Winkler
CAD Developer
Did you find this post helpful? Feel free to like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.


EESignature

0 „Gefällt mir“-Angaben
Nachricht 5 von 10

fullevent
Advisor
Advisor

ok.. also mit 2D-Punkten sollte es so funktionieren:

 

Sub Highlight_test()
Dim oDoc As PartDocument Set oDoc = ThisApplication.ActiveDocument Dim oPoint As SketchPoint Set oPoint = oDoc.ComponentDefinitions(1).Sketches(1).SketchPoints(1) Dim oSet3 As HighlightSet Set oSet3 = oDoc.CreateHighlightSet oSet3.Color = ThisApplication.TransientObjects.CreateColor(255, 0, 0) Call oSet3.AddItem(oPoint) Stop End Sub

Wobei ich in meinem Beispiel in der Zeile:

oDoc.ComponentDefinitions(1).Sketches(1).SketchPoints(1)

lediglich aus der Skizze1 den ersten Punkt rot markiert habe.

2018-08-29 09_27_53-Autodesk Inventor Professional 2018 - [Bauteil8].png


Hilft dir das so bereits weiter?


Aleksandar Krstic
Produkt- und Projektmanager

0 „Gefällt mir“-Angaben
Nachricht 6 von 10

Martin-Winkler-Consulting
Advisor
Advisor

Hallo @fullevent

Hier mal der Teil der Programmierung die mir die verlorenen Punkte löschen soll:

Sub Refresh_Hole()
'Löschen aller Skizzenpunkte die als HoleCenter verwendet werden können (Kreuz in Skizze) und die
'nicht referenziert sind
'On Error Resume Next
Dim oDoc As Document
Set oDoc = ThisApplication.ActiveDocument
Dim oSketches As PlanarSketches
Set oSketches = oDoc.ComponentDefinition.Sketches
Dim oSketchPoints As SketchPoints
Dim itemSketch As Sketch
Dim itemSketchPoint As SketchPoint
Dim HLSet As HighlightSet
Set HLSet = oDoc.CreateHighlightSet()
HLSet.Color = ThisApplication.TransientObjects.CreateColor(255, 0, 0)
For Each itemSketch In oSketches
 Set oSketchPoints = itemSketch.SketchPoints
 For Each itemSketchPoint In oSketchPoints
  If itemSketchPoint.HoleCenter = True Then
   If itemSketchPoint.Reference = True Then
    'referenzierte Punkte neu verknüpfen
   Else
    'nicht referenzierte Punkte löschen
     HLSet.AddItem (itemSketchPoint)
     'Call itemSketchPoint.Delete
   End If
  End If
 Next
Next

End Sub

Wenn du das mit der beigefügten ipt ausführst kommt ein Fehler bei HLSet.AddItem

Wenn du diese Zeile auskommentierst und bei Call itemSketchPoint.Delete die Auskommentierung raus nimmst werden, in diesem Fall, die Punkte gelöscht.

Bei näherer Betrachtung von oSketchPoints stellt man fest, das dort 9 (!) Punkte drin sind. Sehen tue ich nur 5 (!?)

Bei anderen Beispielen die ich jetzt hier auf die schnelle nicht posten kann sind in oSketchPoints Punkte drin die sich nicht löschen lassen.

Das Highlight wäre also wichtig um diese Punkte weiter untersuchen zu können.

 

Martin Winkler
CAD Developer
Did you find this post helpful? Feel free to like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.


EESignature

0 „Gefällt mir“-Angaben
Nachricht 7 von 10

fullevent
Advisor
Advisor

Danke für den Code und die Datei..

Auf den ersten Blick würde ich sagen die "fehlenden" vier Punkte sind jeweils die beiden Start- und Endpunkte der Konstruktionslinien.

Aber ich schau mich das gleich in Verbindung mit dem Marko etwas genauer an.


Aleksandar Krstic
Produkt- und Projektmanager

0 „Gefällt mir“-Angaben
Nachricht 8 von 10

fullevent
Advisor
Advisor
Akzeptierte Lösung

@Martin-Winkler-Consulting

 

So auf den Zweiten Blick würde ich sagen bei der Zeile fehlt ein Call 🙂

das könnte auch schon die Lösung gewesen sein..


Testen kann ich leider erst später.

 

Edit:

Call HLSet.AddItem (itemSketchPoint)

 

Grüße,
Aleks


Aleksandar Krstic
Produkt- und Projektmanager

0 „Gefällt mir“-Angaben
Nachricht 9 von 10

Martin-Winkler-Consulting
Advisor
Advisor

@fullevent ja natürlich....Brett vorm Kopf.....mit Call funktioniert es.

Bei .Net braucht man das nicht, deswegen vergess ich das dann gerne in VBA.

Danke Dir! Dann kann ich meine Punkte ja versuchen weiter zu analysieren.

Grüße Martin

 

Martin Winkler
CAD Developer
Did you find this post helpful? Feel free to like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.


EESignature

Nachricht 10 von 10

fullevent
Advisor
Advisor

Das passiert mir auch soooo oft.. kenne ich nur zu gut.
Hilft dir vielleicht dieser Beitrag vom Jürgen bei deiner Analyse weiter?

 

Anfangs hatte ich bei deinem Post mit dem Makro "Info_auslesen" gearbeitet. Also z.B. den 3D-Point "gehighlighted" (quasi selektiert) und dann damit geschaut von welchem Typ das Objekt ist.
Wie du anfangs schon gepostet hast, ist das in den Inventor APIs nicht detailliert beschrieben.

 

Ich benutze es auch für andere Dinge und finde es sehr nützlich.

Wenn du es noch nicht kennst, hilft es dir ja vielleicht auch weiter.

 

Ansonsten noch viel Erfolg @Martin-Winkler-Consulting

 

Grüße,
Aleks


Aleksandar Krstic
Produkt- und Projektmanager

0 „Gefällt mir“-Angaben