| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Koordinaten von Flaeche exportieren (4723 mal gelesen)
|
nofigu Mitglied Doktorand & Ex-Entwicklungsingenieur (Dipl.-Ing.(FH))
Beiträge: 5 Registriert: 17.12.2014 MS Windows 7 Enterprise Intel i7-3370 @3.40GHz-16GB Inventor Professional 2015
|
erstellt am: 17. Dez. 2014 19:08 <-- editieren / zitieren --> Unities abgeben:
Ich habe eine beliebige Oberflaeche in Inventor 2015 und brauche die Koordinaten dieser Oberflaeche, um diese in Matlab weiterzuverarbeiten. Sprich ich braeuchte eine Moeglichkeit die Flaeche in ein gleichmaessiges Gitter zu diskretisieren, um sie als z=f(x,y) NxM Matrix weiterverwenden zu koennen. Ich habe schon versucht per iLogic eine Funktion zu schreiben, die beliebig viele Arbeitspunkte auf dieser Oberflaeche erstellt und dann den Abstand dieser Arbeitspunkte zu einer Ursprungsebene misst, leider bis jetzt erfolglos. Gibt es denn eine Moeglichkeit xyz Koordinaten einer Oberflaeche zu exportieren? Ich wurde die Oberflaechmatrix ja gern direkt in Matlab erzeugen, das gelingt auch, falls ich die Funktion kenne (z.B. f(x,y)=x^2+y^2), allerdings moechte ich einige unstetige Freiformflaechen untersuchen. Und dazu ist es eben einfacher die Geometrie mit Inventor als Solid oder Oberflaeche zu erzeugen und anschliessend zu diskretisieren. Jetzt weiss ich leider nur nicht wie ich aus dieser CAD-Oberflaeche eine Matrix erstellen kann? Im Anhang ist ein Beispiel zu finden - der Verstaendlichkeit wegen. In diesem Beispiel wird die Beispielflaeche in eine 15x15 Matrix diskretisiert. Ich hoffe meine Fragestellung ist verstaendlich, und jemand kann mir helfen. Ich freue mich auf eure Antworten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6051 Registriert: 16.09.2004 Inventor Prof. bis 2022
|
erstellt am: 18. Dez. 2014 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für nofigu
Hallo, Als eine erste Idee: ich habe mal zu Testzwecken in IV eine Erhebungsfläche zwischen zwei Splines erstellt, diese nach AutoCAD (als .dwg) exportiert, die dort angekommene Surface mit Ursprung zerlegt. Blieben übrig die begrenzenden Konturen. Aus diesen Konturen mittels Kantob viele kleine 3DFlächen erzeugt (Dichte läßt sich steuern). Von diesen 3DFlächen kann man die Koordinaten der Eckpunkte abfragen und weiterverarbeiten. Ob dieser Weg bei Dir funktionieren kann hängt gewiß auch von der Form der zu diskretisierenden Fläche ab. Und einiger Aufwand (LISP für das Abfragen der Eckpunktkoordinaten und deren Aufbereitung) muß natürlich auch noch reingesteckt werden. Jürgen ------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9780 Registriert: 01.12.2003 AutoCAD 2.5 - 2024, Inventor AIP 4-2024.2 Windows 11 i7, 96 GB, SSD, Quadro P2200
|
erstellt am: 18. Dez. 2014 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für nofigu
|
Michael Puschner Moderator Rentner
Beiträge: 13003 Registriert: 29.08.2003 Toshiba Encore mit MS Office Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton)
|
erstellt am: 18. Dez. 2014 13:40 <-- editieren / zitieren --> Unities abgeben: Nur für nofigu
Zitat: Original erstellt von nofigu: ... Sprich ich braeuchte eine Moeglichkeit die Flaeche in ein gleichmaessiges Gitter zu diskretisieren, um sie als z=f(x,y) NxM Matrix weiterverwenden zu koennen. ...
Willkommen bei CAD.DE und AUGCE! Vier wichtige Links für den problemlosen Einstieg: Richtig Fragen - Nettiquette - Suchfunktion - System-Info Eine einfache Möglichkeit wäre diese:
- Eine 2D-Skizze auf der xy-Ebene oder einer hierzu parallelen Ebene erstellen
- Hierauf einen Punkt Rasterursprung skizzieren
- Aus diesem Punkt mit der "Rechteckigen Anordnung" das gewünschte Raster erzeugen
- Die 2D-Skizze schließen und eine 3D-Skizze erstellen
- In der 3D-Skizze mit dem Befehl "Auf Fläche projizieren" Ausgabeoption "Entlang des Vektors projizieren" die Punkte in z-Richtung auf der Fläche abbilden (als Kurven werden hierbei auch Punkte akzeptiert, am besten die Fensterauswahl verwenden)
- Die 3D-Skizze schließen
- Das Makro von Igor (daywa1k3r) aus diesem Beitrag
http://forum.cad.de/foren/ubb/Forum50/HTML/029433.shtml#000007 verwenden, das die 3D-Punkte als CSV ausgibt
- Achtung: Die Ausgabe erfolgt in der Einheit cm, obwohl mm als Text im Makro steht.
Begründung und Korrektur siehe hier: http://forum.cad.de/foren/ubb/Forum50/HTML/029433.shtml#000013 allerdings für oFace.Geometry.CenterPoint statt für die hier gebrauchten oSketchPoint3D.Geometry
Nun muss man nur noch aus den Werten die Matrix erstellen, z.B. in Excel, oder das Makro entsprechende anpassen. Zitat: Original erstellt von CAD-Huebner: Ungetestet -evt. Kann man den STL Export mit einem Texteditor leicht umarbeiten
Das war auch mein erster Gedanke. Die Eckpunkte der Tesselierungsdreiecke ergeben aber nicht das geforderte gleichmaessige Gitter für die Matrix. ------------------ Michael Puschner Autodesk Inventor Certified Expert Autodesk Inventor Certified Professional Mensch und Maschine Scholle GmbH Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nofigu Mitglied Doktorand & Ex-Entwicklungsingenieur (Dipl.-Ing.(FH))
Beiträge: 5 Registriert: 17.12.2014
|
erstellt am: 18. Dez. 2014 13:59 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank fuer all die schnellen Antworten! Zitat: Ungetestet -evt. Kann man den STL Export mit einem Texteditor leicht umarbeiten
Das habe ich schon versucht. Allerdings ist das Problem - wie von Michael erwaehnt - die Triangulierung. Die Methode von Michael klingt gut und einfach. Ich werde das ganze gleich Mal ausprobieren. Das einzige Problem koennte die Feinheit des Gitters sein. Falls ich 500x500 Punkte braeuchte, koennte Inventor zu streiken beginnen :-) Vielen Dank nochmals. Falls das ganze klappt, werde ich mich nochmals melden. Gruesse aus Southampton, nofigu Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nofigu Mitglied Doktorand & Ex-Entwicklungsingenieur (Dipl.-Ing.(FH))
Beiträge: 5 Registriert: 17.12.2014 MS Windows 7 Enterprise Intel i7-3370 @3.40GHz-16GB Inventor Professional 2015
|
erstellt am: 19. Dez. 2014 15:04 <-- editieren / zitieren --> Unities abgeben:
So, das ganze funktioniert nun einwandfrei! Das einzige "Problem" ist - wie ich schon vermutet hatte - die Rechenzeit. Bei 100x100 Punkten funktioniert das ganze gerade noch so. Mehr ist allerdings nicht drin. Vielleicht kann ich das ganze noch optimieren indem ich einen iLogic/vba code schreibe, der die Punkterstellung fuer mich uebernimmt, sodass Inventor die vielen Punkte garnicht erst anzeigen muss. Die Anzeige ist denke ich der Verursacher der langen Rechenzeit ... Gruesse, nofigu Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012 64Bi
|
erstellt am: 20. Dez. 2014 10:35 <-- editieren / zitieren --> Unities abgeben: Nur für nofigu
Zitat: Original erstellt von nofigu: ...Vielleicht kann ich das ganze noch optimieren indem ich einen iLogic/vba code schreibe...
Das Makro sollte dem Zweck dienen und da es gut anpassbar ist kannst du es als Sandkasten benutzen: Code:
' Ein Bauteil in die Baugruppe platzieren (auf positive Z Achse) und Makro starten. ' Das Bauteil wird auf die XY Ebene projiziert ' Auf der Projektion wird ein Raster (xCount x yCount) erstellt ' Die Strahlen werden von dem Raster in +Z Richtung (0, 0, 1) geschickt (optional Arbeitsachse erstellt) ' Wenn ein Strahl das Bauteil trifft wird ein Punkt erstellt (optional Arbeitspunkt) ' Die X, Y und Z Koordinaten sowie die Entfernung zur Baugruppen Ursprung werden gemerkt ' Die Resultate werden in "C:\Temp\ScanCoords.csv" gespeichert (csv Semikola separiert) ' Die Datei wird mit Standardanwendung geöffnet' FX64 daywa1k3r, Igor Zupevc, 20.12.2014 Sub WriteScanCoordsToFile() Dim oAsm As AssemblyDocument Set oAsm = ThisApplication.ActiveDocument ' Sollte immer das erste Bauteil in der Baugurppe sein Dim oProbe As ComponentOccurrence Set oProbe = oAsm.ComponentDefinition.Occurrences.Item(1) ' Rastergröße 2 dimensional - falls x und y immer gleich sind kann das hier vereinfacht werden Dim xCount, yCount As Double xCount = 20 yCount = 20 ' Raster Offset in x und y Richtung Dim xOffset, yOffset As Double xOffset = (oProbe.RangeBox.MaxPoint.X - oProbe.RangeBox.MinPoint.X) / xCount yOffset = (oProbe.RangeBox.MaxPoint.Y - oProbe.RangeBox.MinPoint.Y) / yCount ' Verschiebe Vektor in x und y Richtung Dim xVector, yVector As Vector Set xVector = ThisApplication.TransientGeometry.CreateVector((oProbe.RangeBox.MaxPoint.X - oProbe.RangeBox.MinPoint.X) / xCount, 0, 0) Set yVector = ThisApplication.TransientGeometry.CreateVector(0, (oProbe.RangeBox.MaxPoint.Y - oProbe.RangeBox.MinPoint.Y) / yCount, 0) ' Strahl Ursprung - einer der Punkte auf dem Raster Dim vOrigin As Point Set vOrigin = oProbe.RangeBox.MinPoint ' Strahl Richtung - immer +Z - So gesehen immer senkrecht zur Scanebene Dim vDirection As UnitVector Set vDirection = ThisApplication.TransientGeometry.CreateVector(0, 0, 1).AsUnitVector ' Für Raytracing benötigten Objekte Dim oObjects As ObjectsEnumerator Dim oHits As ObjectsEnumerator Dim oHit As Point Dim sOut As String sOut = "X (mm);Y (mm);Z (mm);Distance (mm)" & vbCrLf Dim i, j As Integer ' Aus jedem Punkt im Raster ein Strahl in Richtun Bauteil schicken For i = 0 To xCount For j = 0 To yCount ' oAsm.ComponentDefinition.WorkAxes.AddFixed vOrigin, vDirection ' Debug Ray ' Finden von Objekten die der Strahl getroffen hat oAsm.ComponentDefinition.FindUsingRay vOrigin, vDirection, 0.01, oObjects, oHits, False ' Die Hits für die Ausgabe ablegen For Each oHit In oHits ' oAsm.ComponentDefinition.WorkPoints.AddFixed oHit ' Debug Point sOut = sOut & Round(oHit.X * 10, 4) & ";" _ & Round(oHit.Y * 10, 4) & ";" _ & Round(oHit.Z * 10, 4) & ";" _ & Round(oHit.DistanceTo(oAsm.ComponentDefinition.WorkPoints.Item(1).Point) * 10, 4) & vbCrLf Next ' Zum nächsten Y Punkt verschieben vOrigin.TranslateBy yVector Next ' Neue Reihe - Y zurücksetzen vOrigin.Y = oProbe.RangeBox.MinPoint.Y ' Zum nächsten X Punkt verschieben vOrigin.TranslateBy xVector Next ' Datei erstellen Dim sFilePath As String sFilePath = "C:\Temp\ScanCoords.csv" Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim oFile As Object Set oFile = fso.CreateTextFile(sFilePath) ' Ergebnise in die Datei schreiben oFile.WriteLine sOut oFile.Close Set fso = Nothing Set oFile = Nothing ' Datei mit Standardapplikation öffnen Dim oShell As Object Set oShell = CreateObject("Shell.Application") oShell.Open (sFilePath) End Sub
------------------ Grüße Igor
FX64 Software Solutions - Inventor Tools FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|