| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
|
Autor
|
Thema: IntersectPointWithSurface (1603 mal gelesen)
|
Soldnerkugel Mitglied
 
 Beiträge: 131 Registriert: 29.01.2010 Win 7, AutoCAD Civil 3D 2015, SketchUp, CarlsonSurvCE
|
erstellt am: 02. Jun. 2010 15:58 <-- editieren / zitieren --> Unities abgeben:         
so, nächste Frage Ich möchte bei der Analyse von DGM's gerne die Methode "IntersectPointWithSurface" verwenden, bekomme da aber einen Laufzeitfehler (siehe screenshot). Ich nehme an, dass es irgendwas mit der Definiton/ Deklaration von "objSurf" als "object" zu tun hat, da es als "object" und nicht als "AeccSurface" deklariert ist. nur funktioniert dann der Rest der Sub nicht mehr, weil ich da "objSurf" als "object" benötige. varStartPt wird richtig übergeben und varDir auch (es sei denn, eine positive Steigung muss man negativ eingeben, aber das kann ich mir 1. nicht vorstellen und würde 2. kein Ergebnis bringen und nicht eine Fehlermeldung. Wie kann man denn "intersectPointWithSurface" nutzen? für euch mögen sich einige meiner Fragen wohl ziemlich nervig anhören, aber ich finde einfach keine hilfreichen Beispiele für viele meiner Probleme. Hier mal ein bisschen meines Quelltextes: Zitat: Option ExplicitPrivate Sub cmdLineSelect_Click() Dim oAcadLine As AcadLine Dim oAcadPoly As AcadLWPolyline Dim oEntity As AcadEntity Dim Point As Variant Dim objSurf As Object Dim varStartPt As Variant, varDir As Variant, varIntPt As Variant Dim darrStart(2) As Double Dim darrDir(2) As Double Dim tAeccApp As Object Set tAeccApp = ThisDrawing.Application.GetInterfaceObject("AeccXUiLand.AeccApplication.7.0") Dim tAeccDoc As Object Set tAeccDoc = tAeccApp.ActiveDocument Set objSurf = tAeccDoc.Surfaces(0) [...] varIntPt = objSurf.IntersectPointWithSurface(varStartPt, varDir) MsgBox "Schnittpunkt: " & varIntPt(0) & ", " & varIntPt(1) & ", " & varIntPt(2) End Sub
------------------ http://www.stupidedia.org/stupi/Rechter_Winkel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Jun. 2010 16:27 <-- editieren / zitieren -->
Hi, hast Du bitte zumindest Werte, die Du in diesem Beispiel mal plazieren kannst, wie sind denn z.B. die Variable 'varStartPt' oder 'varDir' befüllt (in Deinem Beispiel). >> tAeccDoc.Surfaces(0)
Du greifst immer auf das erste DGM, bist Du sicher, dass da auch Daten drin sind? Es könnte ja mehrere DGM's geben, aber gerade bei (0) ist vielleicht keine Datenquelle angegeben. Das DGM ist sichergestellterweise ein Trianguliertes DGM (und nicht etwa Raster- oder Volumen-)? Irre toll für Hilfestellung wäre, ein kleines DGM (3 Punkte reichen) zu machen, dann die Variable hardcoded zu befüllen und dann hier beides zur Verfügung stellen (wenn der Fehler auch damit auftritt).
Eine kleine Beschreibung was das Ziel ist könnte dazu führen, dass vielleicht sogar alternative Vorschläge kommen, mit denen (aus der Sicht des Gesamtproblems) etwas noch einfacher werden könnte. - alfred -
------------------ www.hollaus.at |
Soldnerkugel Mitglied
 
 Beiträge: 131 Registriert: 29.01.2010 Win 7, AutoCAD Civil 3D 2015, SketchUp, CarlsonSurvCE
|
erstellt am: 02. Jun. 2010 16:50 <-- editieren / zitieren --> Unities abgeben:         
dass ich auf das erste DGM zugreife, ist gewollt. (ich habe auch nur eines in der Zeichnung) die Variable varStartPt ist mit UTM-Koordinaten belegt, so wie z.B. varStartPt(0) = 403324.222 varStartPt(1) = 5572164.233 varStartPt(2) = 308.222 (0) und (1) sind UTM-Koordinaten, (2) ist die Geländehöhe + eine Aufbaute (ich bin mir bewusst, dass ich da x/y vertauscht habe...spielt aber keine Rolle) varDir ist ein Vektor, aktuell gefüllt mit etwa varDir(0) = 0 varDir(1) = 1 varDir(2) = 0.29 (der Vektor soll exakt in Richtung Nord zeigen und eine Neigung von ca. 16.5° nach unten aufweisen) ich möchte im Endeffekt von varStartPt aus in Richtung des Vektors varDir den Schnittpunkt mit dem DGM berechnen. Der Vektor entspricht quasi dem Verschattungswinkel, den die Sonne an einem bestimmten Punkt der Erde hat und ich möchte ausrechnen, wo der Punkt - von varStartPt aus exakt in Richtung Norden ist, an dem die Grenze der Verschattung ist. bzgl. des Beispiels: mal schauen, ob ich das heute noch schaff'... ------------------ http://www.stupidedia.org/stupi/Rechter_Winkel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Jun. 2010 17:25 <-- editieren / zitieren -->
Hi, nur vorweg, bevor ich probiere, liegt der Punkt mit dem Z-Wert=308.222 unter oder über Deinem Gelände? Denn bei der Neigung mit varDir(2) = 0.29 zeigt der Vektor nach oben! - alfred - ------------------ www.hollaus.at |
Soldnerkugel Mitglied
 
 Beiträge: 131 Registriert: 29.01.2010 Win 7, AutoCAD Civil 3D 2015, SketchUp, CarlsonSurvCE
|
erstellt am: 03. Jun. 2010 13:33 <-- editieren / zitieren --> Unities abgeben:         
der Punkt liegt über dem gelände, der Vektor sollte richtigerweise eigentlich nach unten zeigen, also ein Minus davor haben (so zumindest war/ist das von mir gewollt). "Leider" ist heute Feiertag und ich bin morgen erst wieder im Büro, hoffentlich ist das nicht der Fehler. ------------------ http://www.stupidedia.org/stupi/Rechter_Winkel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 03. Jun. 2010 19:55 <-- editieren / zitieren -->
Hi, so jetzt hatte ich etwas Zeit, und damit auch gleich die Aussage, die Richtung des Vektors ist egal, dieser wird wie ein Strahl in beide Richtungen interpretiert. Mein Beispiel (ohne Fehlerhandling) funktioniert so:
Code: Dim tAeccApp As AeccApplication Set tAeccApp = New AeccApplication Dim tAeccDoc As AeccDocument Set tAeccDoc = tAeccApp.ActiveDocument Dim tSurf As AeccSurface Set tSurf = tAeccDoc.Surfaces("Urgelaende") Dim tPnt(2) As Double tPnt(0) = 4838987.2653 tPnt(1) = 315722.4474 tPnt(2) = 121.1978 Dim tDir(2) As Double tDir(0) = 0 tDir(1) = 0 tDir(2) = -1 'hier darf auch +1 stehen, kommt zum gleichen Ergebnis Dim tRes As Variant tRes = tSurf.IntersectPointWithSurface(tPnt, tDir)
(Civil 3D 2010) Dazu noch eine Info: es scheint dem Civil nicht egal zu sein, ob Du Punkt und Richtung als Array-of-Doubles oder als Variant deklarierst (>>>hier zu lesen<<<), vielleicht hilft ja dieses. - alfred - ------------------ www.hollaus.at |
Soldnerkugel Mitglied
 
 Beiträge: 131 Registriert: 29.01.2010 Win 7, AutoCAD Civil 3D 2015, SketchUp, CarlsonSurvCE
|
erstellt am: 07. Jun. 2010 09:04 <-- editieren / zitieren --> Unities abgeben:         
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 07. Jun. 2010 09:14 <-- editieren / zitieren --> Unities abgeben:          Nur für Soldnerkugel
Zitat: Original erstellt von Soldnerkugel: ... Weiß hier zufällig jemand, wo ich mir die AeccXUiLand.AeccApplication.8.0 runterladen kann?
AeccXUiLand.AeccApplication.8.0 ist Bestandateil der Installation von Civil 3D 2011. Du arbeitest lauf SysInfo doch mit Civil 3D 2010. Civil 3D 2011 kann man am Einfachsten über das Subscriptionscenter von Autodesk beziehen. Der von dir verlinkte Beitrag wies lediglich darauf hin, das in der x64 Version von C3D2011 nicht alle notwendigen Verweise zu den TypeLibraries in der Regiry gesetzt sind und über das angehängte Reg-File nachgetragen werden können.
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Soldnerkugel Mitglied
 
 Beiträge: 131 Registriert: 29.01.2010 Win 7, AutoCAD Civil 3D 2015, SketchUp, CarlsonSurvCE
|
erstellt am: 07. Jun. 2010 09:32 <-- editieren / zitieren --> Unities abgeben:         
ja, C3D 2011 hab' ich schon bezogen über Subscription...nur leider kann ich das aufgrund von Trägheit bei Autodesk noch nicht freischalten, ich warte da seit mehreren Wochen & Nachfragen immer noch auf meine Zugangsdaten. muß ich wohl noch ein bisschen warten. ------------------ http://www.stupidedia.org/stupi/Rechter_Winkel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Jun. 2010 19:46 <-- editieren / zitieren -->
Hi, >> C3D 2011 hab' ich schon bezogen über Subscription...nur leider kann ich ... >> noch nicht freischalten Macht nix, der Code von oben läuft genauso mit 2010. Im VBA-Projekt die richtigen Verweise setzen (aud die Bibliotheken, die ja, wie Udo auch schon mitgeteilt hat, bereits mit Civil3D installiert sind), dann funktionierts. Oder geht irgendwas davon nicht? - alfred -
------------------ www.hollaus.at |

| |
Soldnerkugel Mitglied
 
 Beiträge: 131 Registriert: 29.01.2010 Win 7, AutoCAD Civil 3D 2015, SketchUp, CarlsonSurvCE
|
erstellt am: 08. Jun. 2010 09:08 <-- editieren / zitieren --> Unities abgeben:         
also ich hab' beim Debuggen halt einfach mal alle Zeilen einzeln getestet, es gab nur bei einer Zeile (diejenige mit "= New AeccApplication") eine Fehlermeldung. Daraufhin habe ich gegoogled und bin auf diese 64bit-Geschichte gestossen und habe darauf nachgeschaut und dann festgestellt, dass ich die AeccXUiLand.AeccApplication.8.0 nicht habe (Menüleiste Extras -> Verweise) (die 7.0 schon) ------------------ http://www.stupidedia.org/stupi/Rechter_Winkel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |