1

ObjectARX .Net API を使用して AutoCAD で作業しています。線/曲線/ポリラインを使用してテキストを作成する方法、または既存のテキスト オブジェクトを線/ect に分解する方法はありますか? できれば、既存の AutoCAD テキスト スタイルに基づいて線図を生成できるようにしたいと考えています。

編集:ここで TxtExp コマンドのソースを見つけることができました。しかし、それは AutoCAD 独自の Lisp 言語であり、私はそれについて頭も尻尾も作ることができません。

編集: TxtExp のソースを見ると、テキストを WMF ファイルとしてエクスポートしてからインポートするだけです。残念なことに、WMF ファイルのインポートとエクスポートを行うために公開されている .NET API がないため、その方法を使用してそれを行うことはできません。

4

2 に答える 2

2

と を使ってみましたAcGiWorldGeometryAcGiWorldDraw?私は ObjectArx を使用していませんが、DwgDirect (現在は DWG の Teigha と呼ばれています - http://www.opendesign.com/から入手可能) を使用しており、その一部は ObjectArx のクローンのようなものであると想定されています。ObjectArx ドキュメントを簡単に読んでわかることから、独自のAcGiWorldGeometryオブジェクトを実装しworldDrawてテキストのメソッドに渡すことができるようです。

AcGiGeometryコールバック関数の量を多く指定します。ジオメトリがそれ自体を「ワールド描画」オブジェクトに「描画」すると、さまざまなコールバック関数が呼び出されます。

私が DwgDirect を使用したのと同じように、結果を受け取る方法に応じて、いくつかのコールバックをオーバーライドできます。本質的には、ジオメトリ (この場合はテキスト) の「ベクトル化」または「爆発」をキャプチャするオブジェクトを実装することになります。DwgDirect では、最も単純なケースでは、「ポリライン」機能しか実装できませんでした。どの要素も、「レンダリング」されると、最終的に 1 つまたは複数のポリラインに分解されます。私のプロジェクトでは、たとえば「円」を取得したくない場合、「円」コールバックの実装は、基本実装を呼び出すだけです (または、そのコールバックをまったくオーバーライドしません - 思い出せません) )。これにより、次のレベルの「単純化」が発生し、「ポリゴン」コールバックが呼び出されます。

役立つかもしれない AcGiTextEngine クラスもあります。そのメソッドは「内部使用のみ」とマークされていることに注意してください。そうは言っても、ストローク/爆発/テセレーション機能を提供するように見えるテセレート メソッド (オーバーロード) があります。署名から、テキスト スタイル、テキスト (文字列)、および「PolylineCallback」を指定したように見えます。パラメータに応じてコールバックが呼び出されると思います。

良いコード例がなくて申し訳ありませんが、私が DwgDirect を使用したプロジェクトはずっと前のもので、現在そのコードに簡単にアクセスすることはできません。ObjectArx を直接使用したことがないため、そのコードの例もありません。

私の答えを振り返り、ドキュメント(ここで見つけたもの:http://docs.autodesk.com/ACDMAC/2011/ENU/ObjectARX%20Reference/index.html)をよく見ると、私が探していたようですC++ ドキュメントで。同等の機能が .NET インターフェイスに存在するかどうかはわかりません。

[編集]

私がここで見つけたヘルプ ファイル (http://www.codeproject.com/KB/dotnet/arxref.aspx) によると、.NET バージョンには同様のクラスがあり、それを使用して何をしようとしているかを確認できます。上記で説明しました。WorldGeometry と WorldDraw から開始すると、必要な結果が得られる場合があります。

幸運を!

于 2011-01-07T21:32:20.847 に答える
0

テキストを分解できるかどうかさえわからなかったので、オートデスクのディスカッションページで簡単に検索しました。この投稿を見つけて、AutoCad 2010 で試してみました。テキストが 2D ポリラインの束に分解されました。

ここで .Net ディスカッションで検索を実行しましたが、何も見つかりませんでした。多分あなたはActiveDocument.SendCommand()それを実行するために使うことができます。

これがあなたの質問に答えていないことはわかっていますが、おそらくあなたを動かすでしょう. 楽しむ!

于 2011-01-07T15:21:58.640 に答える