はじめての実用VBPついに 組み込み関数のヘルプを書き上げたぞー

2011年05月23日

実用VBP第2弾

 Paoには図郭とトンボの自動作成機能がない。
 一応、汎用CADというポリシーがあるので・・・

 そこで、測量座標系がちゃんと設定されている図面で、図枠の下書きからXY座標軸が付いた図郭を自動作成するマクロを作りました。

CreateXYFrame

座標軸を書き込むのは結構面倒な作業なので、これだけでも随分便利です。

'矩形を選択して座標値付きの図郭を作成
Sub CreateXYFrame()
  If Selection.Count <> 1 Then Exit Sub
  If Selection.First.FeatureType <> hoc_Polyline Then Exit Sub
  '座標値文字のフォント設定
  With FontSeting
    .Height = 4.0
    .Width = 4.0
    .FontName = "MS 明朝"
  End With

  '内側の枠を作る
  PenNo = 1
  LineKind = 1
  Set Verts1 = New CoordList
'頂点座標リスト
  Verts1.Add Selection.First.Verts(0)
'右下
  Verts1.Add Selection.First.Verts(1)
'左下
  Verts1.Add Selection.First.Verts(2)
'左上
  Verts1.Add Selection.First.Verts(3)
'右上
  DrawPolyline Verts1, hoc_oc_Close
 
'左下角の測量座標値を計算する
  Set SvyLeftBottom1 = GroupInfo(0).PosToSvyCoord(Selection.First.Verts(1))
 
  'X座標値の書き出し
  BaseX1 = Fix(SvyLeftBottom1.X / 100) * 100
  Set LeftBase1 = GroupInfo(0).SvyCoordToPos(CoordXY(BaseX1, SvyLeftBottom1.Y))
  Set RightBase1 = CoordXY(Verts1.Item(0).X, LeftBase1.Y)
  While LeftBase1.Y < Verts1.Item(2).Y  
    DrawLine LeftBase1, CoordXY(LeftBase1.X - 15, LeftBase1.Y)
    DrawText CoordXY(LeftBase1.X - 7.5, LeftBase1.Y), CStr(BaseX1)
    DrawLine RightBase1, CoordXY(RightBase1.X + 15, RightBase1.Y)
    DrawText CoordXY(RightBase1.X + 7.5, RightBase1.Y), CStr(BaseX1)
    LeftBase1.Offset 0, 100 * 1000 * GroupScale(0)
    RightBase1.Offset 0, 100 * 1000 * GroupScale(0)
    BaseX1 = BaseX1 + 100
  Wend  
  BaseY1 = Fix(SvyLeftBottom1.Y / 100) * 100 + 100
  Set BottomBase1 = GroupInfo(0).SvyCoordToPos(CoordXY(SvyLeftBottom1.X, BaseY1))
  Set TopBase1 = CoordXY(BottomBase1.X, Verts1.Item(2).Y)

  'Y座標値の書き出し
  While BottomBase1.X < Verts1.Item(0).X  
    DrawLine BottomBase1, CoordXY(BottomBase1.X, BottomBase1.Y - 15)
    DrawText CoordXY(BottomBase1.X, BottomBase1.Y - 7.5), CStr(BaseY1), 270
    DrawLine TopBase1, CoordXY(TopBase1.X, TopBase1.Y + 15)
    DrawText CoordXY(TopBase1.X, TopBase1.Y + 7.5), CStr(BaseY1), 270
    BottomBase1.Offset 100 * 1000 * GroupScale(0), 0
    TopBase1.Offset 100 * 1000 * GroupScale(0), 0
    BaseY1 = BaseY1 + 100
  Wend  

  '外側の枠を作る
  PenNo = 2
  Verts1.Item(0).Offset 15, -15
  Verts1.Item(1).Offset -15, -15
  Verts1.Item(2).Offset -15, 15
  Verts1.Item(3).Offset 15, 15
  DrawPolyline Verts1, hoc_oc_Close

End Sub

 こうして、サンプルとしてではなく、実際に使用するものを作成してみると、作りづらいところがよく見えてきます。
 その都度 チューニングしつつ、だいぶそれなりにコーディングできるようになってきました。
今は、とにかくVBPのヘルプが直ぐに表示されるようにしたので、それだけでだいぶ楽になりました。

 今はこれを「マイマクロ」に置いていますが、こういったユーティリティマクロが増えていくと、やっぱりアドインマクロのような機能が欲しくなります。 これは まあ 後々の課題で・・・

 まだバグもちらほら 見つかりますが、もうかなりレアケースのバグばかりになってきました。 
 Pao自体は、ほぼ自分中での「こういうCADだったらいいなー」というものになって来た感じです。
 あとはVBPのヘルプを完成させるのみ!



ho_cad at 21:06│Comments(2)TrackBack(0)

トラックバックURL

この記事へのコメント

1. Posted by g   2011年05月23日 23:00
開発日記をずっと観覧してますが。

Paoは測量系に特化したCADで進んで行くの

でしょうか?

建築系のCADには進まないのであれば

別のCADに進みたいと思うのですが。

方向性が知りたいですね。
2. Posted by AMORE   2011年05月25日 21:14
Pao は前から測量系CADでした。建築系には特化しないです。

コメントする

名前
 
  絵文字
 
 
はじめての実用VBPついに 組み込み関数のヘルプを書き上げたぞー