お知らせ

--------------------------------------------------

プログラム作成/コンサルティングの申し込みはこちら

--------------------------------------------------

2010年10月27日水曜日

.NET - 文字列の長さを取得する(AutoCAD 2011)

今日もアンケートでいただいた .NET の質問についてです。

いただいた質問は、文字列の長さを取得する方法は? というものです。
確かに、文字によって文字幅が異なってくるので、文字数を元に求められないですよね。
例えば、同じ 5 文字でも 『iiiii』 と 『WWWWW』 では文字幅違いますし、同じ文字でもフォントによって違いますよね。

ということで、探してみました。
最初は AutoLISP に textbox って関数があるので、それと同じようなものはないかなってことで arxmgd.chm で textbox を探してみたんですが、何も出てきません。
じゃあ、オブジェクトの境界を取得することとかできないかなと思って探してみたら、Entity Properties に GeometricExtents っていうのがありました。

早速それを使ってやってみたらオブジェクトの境界を取得できました。
境界が取得できれば、それから文字列の長さってわかりますよね。(普通は X 方向の値。90°回転しているときは Y 方向の値。それ以外の角度で回転しているときは計算しなきゃいけない。)

試してみた時のコードは、こんな感じです。

'--------------------------------------------------
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database

Using trans As Transaction = db.TransactionManager.StartTransaction
    Try
        Dim ed As Editor = doc.Editor
        Dim selEntID As ObjectId = ed.GetEntity("オブジェクトを選択").ObjectId
        Dim ent As Entity = trans.GetObject(selEntID, OpenMode.ForRead)

        Dim minX As Double = ent.GeometricExtents.MinPoint.X
        Dim minY As Double = ent.GeometricExtents.MinPoint.Y
        Dim maxX As Double = ent.GeometricExtents.MaxPoint.X
        Dim maxY As Double = ent.GeometricExtents.MaxPoint.Y

        MsgBox("選択したオブジェクトの境界は、X = " & (maxX - minX) & "、Y = " & (maxY - minY) & " です。")

    Catch ex As Autodesk.AutoCAD.Runtime.Exception
        Application.ShowAlertDialog(ex.Message)
    End Try
End Using
'--------------------------------------------------

0 件のコメント:

コメントを投稿