Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Face Evaluator

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
Autor Thema:  Face Evaluator (1254 mal gelesen)
Charlie1111
Mitglied


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

Beiträge: 4
Registriert: 12.05.2015

erstellt am: 12. Mai. 2015 21:20    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


Beispiel.JPG

 
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

BernoAn
Mitglied



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

Beiträge: 164
Registriert: 16.01.2014

erstellt am: 15. Mai. 2015 09:46    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 Charlie1111 10 Unities + Antwort hilfreich

Hallo

Schau dir mal dieses Beispiel an
das funktioniert, du mußt nur noch deinen Faktor einbauen!

Code:

Sub PlaceParametricPoints()
    Dim oDoc As PartDocument
    Set oDoc = ThisApplication.ActiveDocument

    Dim oFace As Face
    Set oFace = ThisApplication.Commandmanager.Pick(kPartFaceFilter, "Bitte Fläche wählen")
   
    Dim oCompDef As PartComponentDefinition
    Set oCompDef = oDoc.ComponentDefinition
   
    Dim oWPs As WorkPoints
    Set oWPs = oCompDef.WorkPoints
   
    Dim oEdgeLoop As EdgeLoop
    For Each oEdgeLoop In oFace.EdgeLoops
        Dim oEdgeUse As EdgeUse
        For Each oEdgeUse In oEdgeLoop.EdgeUses
            Dim oEval As Curve2dEvaluator
            Set oEval = oEdgeUse.Evaluator
           
            ' Get min and max point in
            ' parametric space of curve
            Dim oMinU As Double
            Dim oMaxU As Double
            Call oEval.GetParamExtents(oMinU, oMaxU)
           
            ' Get the same points in the parametric
            ' space of the face
            Dim oParams(1) As Double
            Dim oFaceUV() As Double
            oParams(0) = oMinU
            oParams(1) = oMaxU
            Call oEval.GetPointAtParam(oParams, oFaceUV)
           
            ' Get the same points in the model coordinate
            ' system
            Dim oModel() As Double
            Call oFace.Evaluator.GetPointAtParam(oFaceUV, oModel)
           
            Dim oTG As TransientGeometry
            Set oTG = ThisApplication.TransientGeometry
           

            Call oWPs.AddFixed(oTG.CreatePoint( _
                oModel(0), oModel(1), oModel(2)))
           
            Debug.Print _
                "> Min Point >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + vbCrLf + _
                " Edge  u = " + Str(oMinU) + vbCrLf + _
                " Face  u = " + Str(oFaceUV(0)) + _
                ", v = " + Str(oFaceUV(1)) + vbCrLf + _
                " Model x = " + Str(oModel(0)) + _
                ", y = " + Str(oModel(1)) + _
                ", z = " + Str(oModel(2)) + vbCrLf + _
                "> Max Point >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + vbCrLf + _
                " Edge  u  = " + Str(oMaxU) + vbCrLf + _
                " Face  u  = " + Str(oFaceUV(2)) + _
                ", v = " + Str(oFaceUV(3)) + vbCrLf + _
                " Model x = " + Str(oModel(3)) + _
                ", y = " + Str(oModel(4)) + _
                ", z = " + Str(oModel(5))
        Next
    Next
End Sub



Gruß Berno

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

Charlie1111
Mitglied


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

Beiträge: 4
Registriert: 12.05.2015

erstellt am: 15. Mai. 2015 12:31    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 Berno,

danke für deinen Beitrag.
Ich werde es testen.

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

Charlie1111
Mitglied


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

Beiträge: 4
Registriert: 12.05.2015

erstellt am: 15. Mai. 2015 14:14    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 Berno,

gerade habe ich dein Programm getestet.
Der Ansatz ist zwar interessant aber nicht genau das was ich suche.
Dein Programm legt Punkte auf alle Kante, die die Fläche begrenzen.
Mein Ziel ist aber Punkte auf der kompletten Fläche zu ermitteln.

Wie komme ich jetzt von den Kanten zur Fläche?
Solange die Fläche nur ein Rechteck ist kann ich es noch nachvollziehen.
Wenn aber weitere Bohrungen oder Aussparungen enthalten sind komme ich nicht mehr zum Ziel.

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

Charlie1111
Mitglied


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

Beiträge: 4
Registriert: 12.05.2015

erstellt am: 26. Mai. 2015 09: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

Hallo Forum,

kann mir wirklich niemand meine Frage beantworten?
Vielleicht muss ich die Frage etwas genauer forumlieren.
Mein eigentliches Ziel ist es Punkte auf jeder Art von Oberfläche zu ermitteln.

Wie kann man Punkte auf einer Splineoberfläche ermitteln und diese dann im CAD darstellen? Die Punkte sollen dabei alle auf der Oberfläche liegen.

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