今日もアンケートでいただいた .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 件のコメント:
コメントを投稿