Hallo Forum,
ich benötige eure Unterstützung.
Mit der Methode GetPointAtParam möchte ich Punkte auf einer Oberfläche ermitteln, was auch ohne Probleme funktioniert.
Zur Einfachheit ist die Fläche ein Rechteck mit 200x100mm.
Mein Problem ist, dass die Min- und Max-Parameter die ich in der Methode GetPointAtParam verwende kleiner bzw. größer sind als die Min- und Max-Koordinaten.
Dadurch werden mit der Methode GetPointAtParam auch Punkte ermittelt, die neben der Fläche liegen.
In meinem Beispiel beträgt die Abweichung genau 1%, was allerdings nicht immer der Fall sein muss.
Es gibt zwar Beispiele in der Inventor Programmierungshilfe und im Forum, die sich mit den entsprechenden Sachverhalten beschäftigen allerdings geht es in diesen Beispielen immer darum den Mittelpunkt einer Fläche zu ermitteln, wobei mein Problem mit den Parameterabweichungen aber nicht auftritt.
Kann mir bitte jemand erklären wie ich vorgehen muss um die Differenzen zu eliminieren bzw. wie die Parameter funktionieren?
Hier mein Quellcode:
Option Explicit
Public Sub SurfaceGeometry()
Dim i As Integer
Dim j As Integer
Dim Faktor1 As Integer
Dim Faktor2 As Integer
Dim Korrekturfaktor1 As Double
Dim Korrekturfaktor2 As Double
Dim oFace As Face
Set oFace = ThisApplication.CommandManager.Pick(kPartFaceFilter, "Bitte Fläche wählen")
Faktor1 = InputBox(Prompt:="Bitte nur ganze Zahlen eingeben.", Default:=5, Title:="Faktor1 eingeben")
Faktor2 = InputBox(Prompt:="Bitte nur ganze Zahlen eingeben.", Default:=5, Title:="Faktor2 eingeben")
' Get the surface evaluator from the face.
Dim oSurfEval As SurfaceEvaluator
Set oSurfEval = oFace.Evaluator
' Get the parametric range of the surface.
Dim oParamRange As Box2d
Set oParamRange = oSurfEval.ParamRangeRect
' Calculate the u-v values at the parametric center of the surface.
' (This code is bigger than it should be to work around a VBA issue.)
Dim adParamCenter(1) As Double
Dim U As Double, V As Double
For i = 0 To Faktor1
For j = 0 To Faktor2
U = oParamRange.MinPoint.x
V = oParamRange.MaxPoint.x
adParamCenter(0) = U + (V - U) / Faktor1 * i
U = oParamRange.MinPoint.y
V = oParamRange.MaxPoint.y
adParamCenter(1) = U + (V - U) / Faktor2 * j
' Get the model space coordinate of the parameter so we
' know where in space the normal was calculated.
Dim adPoint(2) As Double
Call oSurfEval.GetPointAtParam(adParamCenter, adPoint)
Call Punkt_erstellen(adPoint)
Next j
Next i
End Sub
Sub Punkt_erstellen(Koordinatenmatrix)
Dim oWorkPoint As WorkPoint
Dim oTG As TransientGeometry
Dim oOrigin As Point
Set oTG = ThisApplication.TransientGeometry
Set oOrigin = oTG.CreatePoint(Koordinatenmatrix(0), Koordinatenmatrix(1), Koordinatenmatrix(2))
Set oWorkPoint = ThisApplication.ActiveDocument.ComponentDefinition.WorkPoints.AddFixed(oOrigin)
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP