2011-01-06 11 views
1

Ich arbeite in AutoCAD mit dem ObjectARX. NET API. Gibt es eine Möglichkeit, entweder Text mit Linien/Kurven/Polylinien zu erstellen oder ein vorhandenes Textobjekt in Linien/ect zu zerlegen? Ich würde gerne in der Lage sein, Linework basierend auf einem existenten AutoCAD-Textstil zu generieren.Erstellen von Liniengrafiken/Geometrie mit Hilfe von Textstil in AutoCAD

Edit: Ich konnte die Quelle für den TxtExp-Befehl here finden. Allerdings ist es in AutoCADs eigene Lisp-Sprache, und ich kann nicht Kopf oder Zahl davon machen.

Edit: Betrachtet man die Quelle von TxtExp, exportiert es nur den Text als WMF-Datei und importiert sie dann. Unerwarteterweise gibt es keine .NET API, die für den Import und Export von WMF-Dateien verfügbar gemacht wird. Daher kann ich diese Methode nicht verwenden.

Antwort

0

Ich habe gerade eine kurze Suche auf der Autodesk Diskussionsseite durchgeführt, da ich nicht einmal sicher war, ob man Text explodieren lassen könnte. Ich fand this Post und versuchte es in AutoCad 2010. Es explodierte den Text in eine Reihe von 2D-Polylinien.

Ich führte eine Suche here ad die in den .Net-Diskussionen und fand nichts. Vielleicht könnten Sie ActiveDocument.SendCommand() verwenden, um es auszuführen.

Ich weiß, dass dies Ihre Frage nicht beantwortet, aber vielleicht wird es Sie in Bewegung bringen. Habe Spaß!

+0

Ja, ich kann den TxtExp-Befehl nicht verwenden, meistens weil ich alles außerhalb des Bildschirms mache. Obwohl TxtExp Teil des Express Tools-Add-Ins ist, gibt es mir Hoffnung, dass es möglich ist. Ich brauche nur die Quelle! – Kratz

2

Haben Sie versucht mit AcGiWorldGeometry und AcGiWorldDraw? Ich habe ObjectArx nicht benutzt, aber ich habe DwgDirect verwendet (jetzt Teigha für DWG genannt - verfügbar von http://www.opendesign.com/), von denen Teile eine Art Klon von ObjectArx sein sollen. Von dem, was ich durch kurzes Lesen der ObjectArx-Dokumente feststellen kann, scheint es, dass Sie in der Lage sein könnten, Ihr eigenes AcGiWorldGeometry Objekt zu implementieren und es an die worldDraw Methode Ihres Textes zu übergeben.

AcGiGeometry gibt viele, was zu Callback-Funktionen. Wenn sich die Geometrie in das Objekt "Welt zeichnen" "hineinzieht", werden die verschiedenen Callback-Funktionen aufgerufen.

In der Weise, dass ich DwgDirect verwendet habe, konnten Sie einige der Rückrufe überschreiben, je nachdem, wie Sie die Ergebnisse erhalten möchten. Im Wesentlichen würden Sie ein Objekt implementieren, um die "Vektorisierung" oder "Explodieren" der Geometrie (in Ihrem Fall Text) zu erfassen. In DwgDirect konnte ich im einfachsten Fall nur die "Polyline" -Funktion implementieren. Jedes Element, wenn "gerendert" würde letztlich zu einer oder mehreren Polylinien zusammenbrechen. Wenn ich beispielsweise in meinem Projekt keinen "Kreis" bekommen wollte, würde ich den Rückruf "Kreis" verwenden, um einfach die Basisimplementierung aufzurufen (oder ich würde diesen Rückruf überhaupt nicht überschreiben - ich kann mich nicht erinnern). Das würde die nächste Stufe der "Vereinfachung" auslösen und meinen "Polygon" Callback aufrufen. Ich könnte dann den Kreis als "gestrichenes" Polygon erfassen.

Es gibt auch die AcGiTextEngine-Klasse, die helfen könnte. Beachten Sie, dass seine Methoden "nur für den internen Gebrauch" markiert sind. Allerdings gibt es eine Methode (überladen), die die Fähigkeit zum streichen/explodieren/tesellieren bietet. Von der Signatur aus sieht es so aus, als ob Sie ihm einen Textstil, einen Text (String) und ein "PolylineCallback" geben würden, und ich nehme an, dass es den Callback entsprechend den Parametern aufrufen wird.

Es tut mir leid, dass ich kein gutes Codebeispiel für Sie habe, aber das Projekt, in dem ich DwgDirect verwendet habe, war lange her und ich habe jetzt keinen einfachen Zugriff auf diesen Code. Ich habe ObjectArx nicht direkt verwendet, daher habe ich auch keine Beispiele für diesen Code.

Nachdem ich meine Antwort zurückverfolgt und mir die Dokumentation genauer angeschaut habe (die ich hier gefunden habe: http://docs.autodesk.com/ACDMAC/2011/ENU/ObjectARX%20Reference/index.html), sieht es so aus, als hätte ich mir die C++ - Dokumente angeschaut.Ich weiß nicht, ob eine äquivalente Funktionalität in der .NET-Schnittstelle existiert.

[EDIT]

Nach der Hilfe-Datei, die ich hier gefunden (http://www.codeproject.com/KB/dotnet/arxref.aspx), sieht es aus gibt es ähnliche Klassen in der. NET-Version, mit der Sie versuchen könnten, das zu tun, was ich oben beschrieben habe. Beginnen Sie mit WorldGeometry und WorldDraw, und Sie können möglicherweise das gewünschte Ergebnis erzielen.

Viel Glück!

+0

Das klingt, als würde es funktionieren. Es sieht nicht so aus, als ob die .NET-Schnittstelle genügend der Klassen und Funktionen freigibt, die benötigt werden, um dies zu ermöglichen. Ich muss vielleicht versuchen, es in C++ zu tun und es von .Net aus aufrufen. – Kratz