Civil3D 文字基点の一括移動について

Civil3D 文字基点の一括移動について

a_otgiya
Enthusiast Enthusiast
841件の閲覧回数
7件の返信
メッセージ1/8

Civil3D 文字基点の一括移動について

a_otgiya
Enthusiast
Enthusiast

お世話になります。

 

 

cicil3dで、2D図面からサーフェスを作成するにあたり、”文字を標高に移動”から端点標高をサーフェスに加えたいと思っています。

しかし、添付画像に示す通り、端点標高の本来の位置を示すマーカーから文字基点がランダムに離れており、TINの頂点は文字基点になるので厳密なサーフェスは作成できません。

数十点程度なら手作業でマーカー中心に移動できますが、数が膨大になれば現実的ではないと思います。

 

そこで、文字の基点を任意のオブジェクト(円形のマーカーの中心や、十字線の交点)に寄せるような方法はあるでしょうか

よろしくお願いいたします。

 

b8497d93-ac6a-48ad-884d-fe178aca3027.png

0 件のいいね
解決済み
842件の閲覧回数
7件の返信
返信 (7)
メッセージ2/8

katsuhisa.shibataJUJVG
Collaborator
Collaborator

この件は以前に相当な時間をかけました。本当はAutodeskが提供すべき機能と思うのですが。以下のようにしました。

1. 図面から標高テキストとその位置,端点位置を抽出し,ファイルに書き出す。標高テキストは画層と,テキストが数字と小数点のみでできていること,端点は画層とCircleであることと,その大きさから判断する。
2. 1.の両者を突き合わせて,距離が最短の標高テキストと端点位置を関係づけ,ファイルに書き出す。
3. 2.の関係を線で結んで示す。
4. 2.は単純な処理なので,一つの端点に複数の標高が割り当てられている箇所がある。そのような箇所にマークを付ける。
5. 4.のマークを見ながら割り当てを修正する。5.はオペレーターがマウスで指示を与える対話的プログラム。
6. 結果を読み込み,XYZファイルを作成する。

初めはこれをDynamoでやっていました。が,Dynamoは
1. 必要な機能がない。
2. 動くべきように動かない。
3. 言語DesignScriptはAssociativeという独特な考え方で,自分はExcel的,と解釈している。が,いずれ,行き詰まる。普通の言語の動作であるImperativeに一時的に切り替えることもできるが,ここはImperativeを繰り出さないとダメか,と思うとモチベーションが下がる。
4. 遅い。
5. 落ちる。
と5拍子揃っていますので,見切りをつけ,.NETでやっております。とはいえ,Dynamoを使うのですが,DynamoのPython ScriptとInputとWatchだけを使います。Python Scriptに初めから入っているコードは.NET用にセットアップされています。
「遅い」に関してはサンプルのDynamoを付けました。N×N(N=40)個の正方形を描きます。はじめに(0, 0)と(2800, 1400)を対角線とする長方形を描き,この長方形を画面いっぱいにしておいてから2つのDynamoを実行してみてください。

0 件のいいね
メッセージ3/8

a_otgiya
Enthusiast
Enthusiast

回答ありがとございます。

しかし当方civil 3d初学者でして、dynamoも開いて少しばかり触れてみたのですが、ご回答の手順をこなせるレベルにはありませんでした。(具体には、1.の時点で抽出の方法やファイルの形式がわかりません)

厚かましくて申し訳ないのですが、もう少しかみ砕いた説明をお願いできないでしょうか・・・。

0 件のいいね
メッセージ4/8

katsuhisa.shibataJUJVG
Collaborator
Collaborator
解決済み

当方はプログラミングの経験がありますが,それでも相当の時間をかけましたので,記述したことは誰でも着手すればできるようなものではないと思います。

モデルスペース内のオブジェクトを走査するプログラムを添付します。すべてのオブジェクトについて3行の出力を出しますので,オブジェクト数がごく少ないモデルで実行してください。

ガイドは AutoCADのヘルプ の「ObjectARX: Managed .NET 開発者用ガイド」,リファレンスは AutoCADのヘルプ(英語) の「ObjectARX: Managed .NET Reference Guide」です。リファレンスで主に見るのは Autodesk.AutoCAD.DatabaseServices Namespace です。

作業のための中間ファイルは自分のやりやすいフォーマットで作ればよいです。

0 件のいいね
メッセージ5/8

a_otgiya
Enthusiast
Enthusiast

再度ご回答いただいたのに申し訳ありません。今の自分では手が出ませんでした。

サーフェス作成時の端点標高問題は、自分の環境では必ずと言っていいほどつきまとうので、ご回答いただいた内容を時間をかけて勉強していこうと思います。

お時間割いていただいてありがとうございます。

メッセージ6/8

mari.shimode
Community Manager
Community Manager

@a_otgiya さん、こんにちは。コミュニティのご利用ありがとうございます。

 

お時間をかけて katsuhisa.shibataJUJVG さんからの返信内容を確認されていくとのことですが、同じような質問を持った方が情報を参考にすることができるように、こちらで katsuhisa.shibataJUJVG さんの返信を解決策として承認しました。

 

もし今後、本トピックに関連する質問がありましたら、この投稿へのリンクを含んだ形で新規で質問を投稿してください。

 

またお困りのことがありましたら、コミュニティをご利用ください。

 



Mari Shimode
Community Manager
0 件のいいね
メッセージ7/8

buf_fa
Advocate
Advocate

Lispを使った一個ずつ移動するコマンドのサンプルです。(自己流)

 

(defun c:Text-Move (/ tobj cobj tpnt)
(setq tobj (vlax-ename->vla-object (car (entsel"\n文字を選択: "))))
(setq cobj (vlax-ename->vla-object (car (entsel"\n円を選択: "))))
(setq tpnt (vlax-safearray->list (vlax-variant-value (vla-get-center cobj))))
(vla-put-insertionPoint tobj (vlax-3D-point tpnt))
)

 

コマンドを繰り返せば連続で移動できます。

 

また、一括で移動させるコードは英語のサイトで検索されると見つかるかもしれません。

もちろん、ご自身で改造されるのが一番ですが、頑張ってください。

メッセージ8/8

a_otgiya
Enthusiast
Enthusiast

回答ありがとうございます。

 

恥ずかしながらLispというものを初めて知りました。

楽ですね、手作業での移動に比べて圧倒的に負担が軽いです。

 

katsuhisa.shibataJUJVGさんの回答でも感じましたが、CADでプログラミングが出てくるとは思いませんでした。

しかし扱うことができれば作業効率が格段に上がりますね。Lispについても勉強してみます。

非常に助かりました。ありがとうございます。