Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  GetProjectedCurve GetProjectedCurve

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:  GetProjectedCurve GetProjectedCurve (1658 mal gelesen)
Christian Blei
Mitglied



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

Beiträge: 124
Registriert: 23.06.2008

Thinkpad W520, 16GB
Win 7,Autocad 2012, ProStructures V8i4+5 , VBA, VB.NET,

erstellt am: 13. Jan. 2010 14:04    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

Hi, allen ein gutes Neues Jahr!, besonders natürlich dir Alfred..............

bei mir haben sich ein ein kleine Dinge angesammelt:

Unter Anderem:

1. GetProjectedCurve
Ich habe versucht eine Polyline2D auf eine Ebene zu projizieren. Da kommt bei mir nur Schrott raus. Es wird projiziert, aber nicht dahin wo die Ebene ist. Im Lokal- Fenster sieht alles gut aus, Ebene stimmt und Projektionsrichtung stimmt auch, habe ich Alles gecheckt. Ich habe die Funktion jetzt nicht mit anderen Kurven ausprobiert. Mich würde interessieren, ob User im Forum erfahrungen mit dieser Funktion haben. Im User Forum gibt es dazu zwei nicht so aussagekräftige Threads.....Einer fragt nach bulges, der Zweite meint bug. Die Funktion ist ja von Curve geerbt, da müsste ja eigentlich Alles gehen.

2. Is planar
Ich habe mittels Projektion 4 Punkte in einer Ebene erzeugt und daraus eine Polyline3D gebaut. Bei der Abfrage bekomme ich jetzt isplanar=false und einen Abflug bei .getplane zwangsweise....
Kennt jemand solche Probleme. Ich hatte auch schon (in VBA) beim Offsetten von ebenen Splines das Problem, dass die Offsets nicht mehr planar sein sollten. Geht eigentlich auch nicht. Was sind das für Probleme und wie kann ich damit umgehen?

Alfred, Danke schonmal........

Grüsse
Christian Blei 

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


Ex-Mitglied

erstellt am: 13. Jan. 2010 14:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Christian,

>> 1. GetProjectedCurve .... Ich habe versucht eine Polyline2D

Dass (fast) alle Objektarten zu Curve zu casten sind, ist für vieles gut, für manches schlecht. In diesem Fall gibt's schon mal die Nachteilige Situation, dass im Falle von Polylinien mit Bögen aus eine nicht-senkrechten Projektion elliptische Bögen entstehen müssten, und damit müssten die resultierenden Polylinien aus Segmentarten zusammengesetzt sein, die AutoCAD nicht kann.
Nur sicherheitshalber: sollte es nicht mit Bögen zusammenhängen, dann bitte um Zeichnung, welche bei Dir nicht funktionieren und wie die Projektionsrichtung in Deinem Code definiert ist. Obiges ist eine Annahme, die aus meiner begrenzten Sicht 'logisch' wäre, aber probiert hab ich's jetzt gerade nicht.


>>  Is planar ... und daraus eine Polyline3D

Da ist noch nicht alles aus ObjectARX herausgezogen (über Wrapper zugänglich), in ObjectARX gibt es noch zusätzlich (optional) eine Toleranz anzugeben. IMHO könnte es an der letzten Dezimalstelle liegen (gerade im Mathematikbereich von 3D-Vektoren eigentlich normal), die das Objekt dann als nicht-planar errechnen.

D.h. entweder einen Wrapper selbst definieren (vorsicht, Code wird dann möglicherweise nicht mehr kompatibel zwischen 32bit und 64bit) oder eine Funktion machen, die das anders prüft. Eine Vorgehensweise könnte sein, eine eigene Ebene auf Basis von 3 bekannten Punkte der 3D-Poly definieren und dann für alle anderen Punkte den Z-Wert bezogen auf diese Ebene ermitteln.

- alfred -

------------------
www.hollaus.at

Christian Blei
Mitglied



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

Beiträge: 124
Registriert: 23.06.2008

Thinkpad W520, 16GB
Win 7,Autocad 2012, ProStructures V8i4+5 , VBA, VB.NET,

erstellt am: 13. Jan. 2010 14:45    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

Alfred, Danke.......

Wegen1. Ich denke zumindesten mit Polyline2d gibt es da Probleme. Ich habe eigentlich, was notwenig ist geprüft, dh. Polyline liegt nicht in der Ebene, Projektionsvektor weder senkrecht zur Polylinienebenennormalen  noch senkrtecht zur EbenenNormalen.
Wenn ich ein bisschen mehr Zeit habe, werde ich mit der Funktion rumspielen.

wegen2.

Hast du für den Wrapper zufällig ein Code Snippet irgendwo?

Ich baue gerade schon Methode2, Ebene aus 3 Vertices und den Rest drauf projizieren.
Mal sehen ob das funzt.

Gruss
Christian

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


Ex-Mitglied

erstellt am: 13. Jan. 2010 14:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Hast du für den Wrapper zufällig ein Code Snippet irgendwo?

Nein, und da sitzt man mangels Docu von Autodesk auch ein wenig mit Try&Error spielen, da die managed Objekte in unmanaged umzuwandeln, dann ein INVOKE ins (fast) Niavana zu senden um dann das Ergebnis wieder rückzuwandeln.
Ich hätte wegen eben dieser Umwege eher Variante mit Ebene gemacht, das bedeutet weniger Zeit bei der Erstellung des Code, möglicherweise mehr Zeit im Programmablauf, aber jedenfalls ist das Ergebnis 'sicherer' und 32/64bit-unabhängig!

Wenn Du nicht weiterkommst, lass es mich wissen.

- alfred -

------------------
www.hollaus.at

Christian Blei
Mitglied



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

Beiträge: 124
Registriert: 23.06.2008

Thinkpad W520, 16GB
Win 7,Autocad 2012, ProStructures V8i4+5 , VBA, VB.NET,

erstellt am: 13. Jan. 2010 16:11    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

Hello Alfred,

not so easy....
Ich benütze die Polylinien zum Loften. Ich habe versucht, wie skizziert, die Z Werte zu korrigieren, indem ich die Punkte auf die Ebene der Polylinie projiziere. Geht nicht, danach ist planar immer noch false....
Und ich bekomme beim Loften Abflüge mit {"eIllegalEntityType"}.
jetzt werde ich die Polylinie mal in die XY- Ebene transformieren und dann das gleiche Spiel nochmals machen. Wenn das nicht geht, mache ich dann eine 2D Polylinie draus, die müsste eben sein........

Ein Problem ist vielleicht, das die Koordinaten der Elemente, mit denen mein Kunde arbeitet, im Millionenbereich sind ( ca. 4.5) also etwa Kapstadt, dafür die Z- Richtungen minimal wackeln. Vielleicht kommen die Daten ja aus einem anderen Programm. Das riecht nach Fliesskommaproblematik, oder?

Hast du bessere Ideen dazu?

Merci,
Christian

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


Ex-Mitglied

erstellt am: 13. Jan. 2010 16:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> die Koordinaten der Elemente... im Millionenbereich ( ca. 4.5) also etwa Kapstadt

Nee, nachdem ich immer in Meter denke, jenseits den Monds. 

In solchen Fällen mach ein ein .Clone des Objekts, diese Kopie schiebe ich nach 0,0,0 und das Ergebnisobjekt schieb ich dann wieder um den negativen Vektor zurück.


>> die Polylinien zum Loften. Ich habe versucht, wie skizziert, die Z Werte zu korrigieren

Hast Du dann nach Modifikation der Vertizes und VOR Abfrage .IsPlanar ein TransAction.Commit gemacht? Könnte sein, dass das Property erst upgedatet wird, wenn die Vertizes zurück in der Datenbank sind (nur Möglichkeit, wäre jedenfalls nicht schön).

Ich hätte in diesem Fall aber gar nicht erst versucht, Punkte der 3DPoly zu modifizieren, sondern hätte mir die 3DPoly-Vertizes genommen, die Punkte auf eine Zielebene projiziert und mit diesen Punkten dann eine LWPoly (oder 2DPoly oder Region) erzeugt. Vielleicht bist Du gerade auf dem Weg dorthin, das hab ich dann nicht ganz herausgelesen.

- alfred -

------------------
www.hollaus.at

Christian Blei
Mitglied



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

Beiträge: 124
Registriert: 23.06.2008

Thinkpad W520, 16GB
Win 7,Autocad 2012, ProStructures V8i4+5 , VBA, VB.NET,

erstellt am: 13. Jan. 2010 23:00    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

Hi Alfred,


ich habe jetzt 2DPolys gebaut. Interessant war auf dem Weg dahin zu sehen, dass bei den Koordinatenwerten mit denen ich arbeite auch die damit erzeugten Matrizen zum Teil verrückt spielen. Die inverse Matrix einer "Verschiebe"- Matrix passt so gar nicht zur Ursprungsmatrix etc. Ich habe zuerst verschoben und dann gedreht, in zwei Schritten.

(Mit der Polyline3d hatte es nicht funktioniert. Auch nach dem Projizieren der Vertices auf die Ebene und Neuerzeugung einer Polyline3d war diese immer noch planar= false. Da mir dann klar war, dass ich auf die xy-Ebene gehen muss, habe ich glei eine Polyline2d gebaut)

Mit dem Casten auf Curve hast du wohl recht. Splitcurves funktioniert bei einer Gerade z.B. auch dann nicht immer, wenn die Splitpunkte eindeutig auf der Geraden liegen....(.getPointatParam) etc.
Erfahrung ist eben auch zu lernen, wo überall exceptions lauern. ....

Kapstadt war übrigens völlig daneben. 4.5 mio mm sind schlappe 4.5 km, also von mir bis zum Bahnhof.... Ein etwas grösseres Gebäude also, das muss man schon noch packen.

Gruss, Christian

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


Ex-Mitglied

erstellt am: 13. Jan. 2010 23:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Christian,

hast Du's mit 2DPoly jetzt hinbekommen?


>> schlappe 4.5 km, also von mir bis zum Bahnhof

Leider interessiert sich AutoCAD nur an den unglücklichen Positionen (ich hätte jetzt fast schon gesagt 'an den falschen Stellen', uiii ) für die Einheiten. Intern für die Rechnung sind die Einheiten aber uninteressant, da zählt nur, mit wie viel Stellen der Double-Wert belastet ist. Ob das 10Mio km oder 10Mio mm sind, ist eben irrelevant.

Schönen Abend noch, - alfred -

------------------
www.hollaus.at

Christian Blei
Mitglied



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

Beiträge: 124
Registriert: 23.06.2008

Thinkpad W520, 16GB
Win 7,Autocad 2012, ProStructures V8i4+5 , VBA, VB.NET,

erstellt am: 13. Jan. 2010 23:38    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

Alfred,

2D hat funktioniert.

Dir auch noch eine schönen Abend. Ich trinke noch ein Gläschen Wein und lese etwas. Wahnsinnig, wie die Zeit beim Programmieren vergeht!
Ich wollte zwischendurch mal spazierengehen, da hat es aber geschneit. Dann war es plötzlich 22.00.....

Gruss,
Christian

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