Wirklich eim interessantes Problem. Es gibt ja auch zwei Möglichkeiten diese Ausstanzung(keyhole.ide) einzufügen.
Fall 1: Als IFeature
Hier wählt man eine Platzierungsfläche und muß dann per Hand platzieren(Fummelarbeit). Nach Abschluss fügt Inventor eine Skizze ein, aus deren Koordinatensystem man dann die genaue Platzierung auslesen kann.
Fall 2: Mittels Stanzwerkzeug
Hier erstellt man eine Skizze, positioniert auf einen Skizzenpunkt und wählt diese "bösen" Einfügewinkel. Dies erleichtert das Platzieren erheblich. Nun habe ich mir das ComponentDefinition Objekt angesehen, und finde den Einfügewinkel auf wirklich nur in der Parameterliste(an 17. Stelle d16) ohne Beziehung zu anderen Objekten. Es sieht so aus, als müsste man also programmtechnisch raten.
Ein erster Versuch, über die Paramterreihenfolge schlägt fehl, da eine nachträgliche Winkeländerung den entsprechenden Parameter nach hinten setzt. Betracht man sich aber das ComponentDefinition Objekt genauer, fällt auf, daß darin drei Skizzen sind, obwohl der Konstrukteur nur zwei angelegt hat. Und die dritte (sogar namenlos ) ist offenbar diejenige, die Inventor im Fall 1 automatisch einfügt. Nur wie findet man sie?
Ich hole mir die sichtbare Skizze über oiFeatureComponent.Sketches(1).
Die unsichtbare Skizze steht dann in den Dependents dieser Skizze.
Um den Winkel zu berechen hole ich mir dann die Infos über die Koordinatensysteme beider Skizzen.
Jetzt berechene ich den kleinsten Winkel(AngleTo-Methode) zwischen beiden X-Achsen. Über Quadrantenbeziehungen läßt sich nun der korrekte Einfügewinkel ausrechnen.(Sonst z.B. kämme ja bei 270 Grd wieder 90 Grd heraus). Sollten irgendwann mal entgegengesetzte Z-Achsen auftreten, muss noch eine weitere Fallunterscheidung eingefügt werden.
Nur zur Illustration:
Dim sichtbareSkizze As PlanarSketch
Dim unsichtbareSkizze As PlanarSketch
Sub finde_unsichtbareSkizze()
Dim depent As Object
For Each depent In sichtbareSkizze.Dependents
On Error GoTo marke
If depent.Type = kPlanarSketchObject Then
Set unsichtbareSkizze = depent 'TODO TESTE ob wirklich die gesuchte Skizze
End If
marke:
Next depent
End Sub
Sub IFeature_Parameter()
Dim partdoc As PartDocument
Set partdoc = ThisApplication.ActiveDocument
Dim oCompDef As PartComponentDefinition
Set oCompDef = partdoc.ComponentDefinition
Dim oPart As PartFeature
For Each oPart In oCompDef.Features
If oPart.Type = kPunchToolFeatureObject Then
Dim oiFeatureComponent As iFeatureComponent
For Each oiFeatureComponent In oCompDef.ReferenceComponents.iFeatureComponents
If oiFeatureComponent.Name = oPart.Name Then
Set sichtbareSkizze = oiFeatureComponent.Sketches(1)
finde_unsichtbareSkizze
'jetzt die Matrizen
Dim m_sichtbar As Matrix
Dim m_unsichtsichtbar As Matrix
Set m_sichtbar = sichtbareSkizze.SketchToModelTransform
Set m_unsichtbar = unsichtbareSkizze.SketchToModelTransform
'Koordinaten sichtbar
Dim O1 As Point
Dim X1 As Vector
Dim Y1 As Vector
Dim Z1 As Vector
'Koordinaten unsichtbar
Dim O2 As Point
Dim X2 As Vector
Dim Y2 As Vector
Dim Z2 As Vector
Call m_sichtbar.GetCoordinateSystem(O1, X1, Y1, Z1)
Call m_unsichtbar.GetCoordinateSystem(O2, X2, Y2, Z2)
End If
Next oiFeatureComponent
End If
Next oPart
End Sub
Wenn auch kompliziert, ist es vieleicht eine mögliche Lösung. Eine Methode oder Eigenschaft habe ich nicht gefunden. Leider kann man so auch nur den Winkelwert ermitteln, aber nicht den evtuell eingegebenen Parameterausdruck.
Hoffend auf Inventor 11
Carsten
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP