| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Leistungsstarke Strömungssimulation in der Cloud |
Autor
|
Thema: RayIntersection-Methode (1945 mal gelesen)
|
Denver Mitglied Student
Beiträge: 8 Registriert: 11.11.2009
|
erstellt am: 23. Mrz. 2010 18:07 <-- editieren / zitieren --> Unities abgeben:
Hallo, zuerst wollte ich mich für die hilfreichen Antworten bei den letzten Male bedanken. Ich hab wirklich versucht, mir selber die RayIntersection-Methode zu erklären, bevor ich mich wieder an euch wende. Aber ich versteh sie nicht ganz und hoffe, ihr könnt mir wieder helfen. Ziel: Schnittpunkt(e) zw. einem Körper und einem Strahl mit Hilfe eines Makros bestimmen Arbeitsmittel: Solidworks 2009 SP 3 und Visual Basic Methode: result = swModel.RayIntersections((vBody), (vSelPt), (vSelVector), options, nHitRad, nOffset) vBody ist ein beliebig ausgewählte Körper vSelPt ist ein Array von Eingabedaten(vSelPt = Array(x1, y1, z1)) vSelVector auch ( = Array(x2, y2, z2)) options wähle ich unter den Folgenden aus: swRayPtsOptsNORMALS swRayPtsOptsTOPOLS swRayPtsOptsENTRY_EXIT swRayPtsOptsUNBLOCK Const nHitRad As Double = 0.001 Const nOffset As Double = 0.001 Zur Situation: Ich erstelle einen Körper, der wie ein flacher Zylinder (bzw. eine Münze) aussieht(, ist ja eigentlich auch egal). Dann starte ich mein Makro, wo ich die Eingabedaten übergebe(also Punkt und Vektor), in der auch die oben genannte Funktion ausgeführt wird. Über "vIntPt = swModel.GetRayIntersectionsPoints" und "Debug.Print vIntPt(..." lasse ich mir die Informationen ausgeben, und erstelle die Punkte, die "berechnet" wurden. Nun das Problem: Ich wähle meine Werte so, dass der Strahl eigentlich diagonal durch die "Münze" verläuft. Das heisst, eigentlich müssten die Punkte an den flachen Seiten sein. Aber die berechneten Punkte sind an den Kanten. Und dabei habe ich alle Optionen ausprobiert. Könnt ihr mir erklären, wo mein Fehler liegt? Oder habt ihr ein Beispiel, woran ich die Methode verstehen kann? Vielen Dank, Denver Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 24. Mrz. 2010 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für Denver
Hallo Denver, hört sich eigentlich für mich so aus dem Trockenen ganz gut an, wie du es gemacht hast; und auch mal eine sehr ausführliche und informative Aufgabenbeschreibung, das gibt schon mal 10 Punkte Ich hab selbst damit noch nie gearbeitet und auch kein Beispiel zur Hand, vielleicht können wir das Spielchen anders herum machen und du hängst mal dein Beispiel mit Makro an , damit wir auch was zum probieren haben, vielleicht fällt uns etwas auf, woran es liegen könnte. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 24. Mrz. 2010 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für Denver
hi, ich würde zuerst mal nachschauen was der strahl den getroffen hat (intersectionType). also, ob er wirklich eine fläche getroffen hat. dann mal überprüfen ob der gezeichnete punkt auch die richtigen werte hat, nicht das durch eine fangfunktion der punkt verschoben wurde (SketchManager::AddToDB). gruß oliver ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 24. Mrz. 2010 10:50 <-- editieren / zitieren --> Unities abgeben: Nur für Denver
|
Denver Mitglied Student
Beiträge: 8 Registriert: 11.11.2009
|
erstellt am: 24. Mrz. 2010 12:19 <-- editieren / zitieren --> Unities abgeben:
Hi, dann "beantworte" ich mal die Antworten in umgekehrter Reihenfolge: @GDawg: Die Funktion, die dort benutzt wurde, ist auch IRayIntersection. Dort werden auch zwei weitere Eingabedaten verlangt wie Anzahl der Bodies und (ich glaube) die Anzahl der Strahlen. Diese Funktion benutze ich aber nicht. Ist ja auch unnötig bei einem Body. Radius auf 1 hab ich auch schon mal ausprobiert, kein Unterschied. @Jens: Ich komme schon an die Information vom intersection-Type ran, aber ich verstehe nicht, was die Zahl für eine Bedeutung hat. Wo kann ich denn nachschauen, mit welcher Zahl was in Verbindung steht? Beispielsweise : 17, 20 oder 33. Was den Sketchmanager betrifft, so habe ich keine ausdrücklichen Sondereinstellungen gemacht. Oder musst man es ausdrücklich vorher setzen? Achso, nee, der Punkt hat die "richtigen" Werte. Zumindest die Werte, die bei GetRayIntersectionsPoints entstehen. Es sind also keine Beziehungen zwischen Punkt und Körper verknüpft. @Stefan: Ich werd mal heute abend mein Makro hochladen, sobald ich wieder an meinem Solidworksrechner sitze. Dann haben wir alle was zum Spielen. So nebenbei gefragt, wie lernt ihr eigentlich die API/Makroprogrammierung? Durch trial and error? Zumindest werden ja in Solidworks nicht alle Methoden genau erklärt. Und in der Bibliothek der Uni gibt es keine API-Bücher zu Solidworks. Ich möchte mir jetzt auch kein falsches Buch unnötig (online) kaufen, nur weil dort API drauf steht. Viele Grüsse, Denver Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Denver Mitglied Student
Beiträge: 8 Registriert: 11.11.2009
|
erstellt am: 24. Mrz. 2010 18:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, hier ist mein Makro. Vorbedingungen sind ein Körper und eine ausgewählte Fläche darauf, damit mein Makro erkennt, welchen Body er auswählen soll. In dem Makro sind bereits Werte vorinitialisiert, mit einem Punkt bei (3,3,3) und dem Vektor in Richtung Ursprung. Aber ich schätze die Fragen kommen erst, wenn ihr es ausprobiert habt. Viele Grüsse, Denver Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GDawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation
Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 25. Mrz. 2010 07:51 <-- editieren / zitieren --> Unities abgeben: Nur für Denver
|
jens_oliver Mitglied Softwareentwickler
Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 25. Mrz. 2010 09:15 <-- editieren / zitieren --> Unities abgeben: Nur für Denver
moin moin, bei mir funktioniert das makro. es fehlt also noch dein Bauteil, um den fehler zu reproduzieren. ich würde aber immer SketchManager::AddToDB auf true setzten!! SketchManager::AddToDB One of the benefits of adding sketch entities directly to the database is that you can avoid grid and entity snapping. For example, if you create a sketch line whose endpoint is near another entity or near a grid point, the new line endpoint snaps to the other item or grid point. Setting SketchManager::AddToDB to TRUE avoids this behavior during sketch entity creation. gruß ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Denver Mitglied Student
Beiträge: 8 Registriert: 11.11.2009
|
erstellt am: 25. Mrz. 2010 14:40 <-- editieren / zitieren --> Unities abgeben:
Hallo, also, ich starte Solidworks, erstelle ein neues Teil, Skizze, Kreis, wähle eine beliebige Ebene aus, setze auf den Ursprung, Radius auf 20, Features, Linear austragen, Dicke auf 20 und dann hab ich einen Zylinder. Dann klicke ich auf eine Fläche auf dem Körper und starte mein Makro. Was kommt bei euch raus? Gruss, Denver Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 26. Mrz. 2010 10:59 <-- editieren / zitieren --> Unities abgeben: Nur für Denver
bei mir trifft er nichts. result = swModel.RayIntersections(..) ist bei mir immer 0. problem dürfte dein definition der punkte und vektoren sein. vSelPt ist ein Array(Punkte) von Array's(Koordinaten) ' vSelPt = Array(x1, y1, z1) ' vSelVector = Array(x2, y2, z2) geht nicht!!!! Dim EntPoint(2) As Double Dim EntVect(2) As Double EntPoint(0) = x1 EntPoint(1) = y1 EntPoint(2) = z1 vSelPt = EntPoint EntVect(0) = x2 EntVect(1) = y2 EntVect(2) = z2 vSelVector = EntVect probiere es mal damit. gruß ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Denver Mitglied Student
Beiträge: 8 Registriert: 11.11.2009
|
erstellt am: 26. Mrz. 2010 11:56 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|