角度保持型引き出し線
引出し線を整えるときに、角度を保持して大きさを調整できると楽だろうなぁと思って作成したプラグイン・オブジェクトです。Ver.12 で動作するバージョンもあります。
動作の流れ
- 引出し線を描画する始点と終点の座標、及び角度、マーカーの種類とサイズの設定
- プラグイン・オブジェクトとして引出し線を描画(VWのバージョンによって関数の使い分けをする)
パラメータの設定
プラグインコマンドは、3点型オブジェクトで新規作成し、コマンド編集で、スクリプトソースをコピペした後、パラメータを下記のように設定してください。この値は、モードバーで変更することができます。
名前 | フィールド名 | 型 | 初期値 |
---|---|---|---|
LineLength | 幅 | Dimension | 1 |
BoxWidth | 高さ | Dimension | 1 |
da | 引出し角度 | Number | 60 |
MarkerArrow | 矢印 | Boolean | True |
MarkerBig | 大サイズ | Boolean | False |
ダウンロード
パラメータやプロパティの設定、アイコン作成が面倒な方は、下記よりダウンロードをお願いします。
- 「角度保持型引き出し線 Ver.2008以降」・・・・・・ ha_AuxLeaderLine-2.vso (フリーウェア)
- 「角度保持型引き出し線 Ver.12用」・・・・・・ ha_AuxLeaderLine-2-01.vso (フリーウェア)
2008以降ソース
{*******************************************************************************
AuxLeaderLine ver.2
角度保持型引き出し線
Copyright 2012 兵藤善紀建築設計事務所
www.hyodo-arch.com
2012.07.07 Ver 2.00 まず最初のバージョン
*******************************************************************************}
{$STRICT 12}
PROCEDURE AuxLeaderLine2;
VAR
objName,dLwStr :STRING; {GCOI で使う変数}
objHand, recHand, wallHand :HANDLE; {GCOI で使うハンドル}
hh1 :Handle; {引出し線のハンドル}
dw, dh, da, dx :REAL; {図形全体の幅、図形全体の高さ、引出し線の角度、交点のX座標}
MarkerArrow, MarkerBig :BOOLEAN; {矢印:True、サイズ大:True}
m_style :LONGINT;
m_angle, m_thickBasis :INTEGER;
m_size, m_width, m_thickness:REAL;
m_visibility, ok :BOOLEAN;
{//////////////////////////// LeaderLine //////////////////////////////}
PROCEDURE LeaderLine;
VAR
appMajor, appMinor, appMaint, platform :INTEGER; {バージョン情報の取得}
BEGIN
Move(0, -dh/2);
Line(dx, dh); {引き出し線}
hh1 := LNewObj;
GetVersion (appMajor, appMinor, appMaint, platform);
If appMajor = 12 Then
SetObjArrow (hh1, m_style, m_size, m_angle, True, False)
Else
ok := SetObjBeginningMarker (hh1, m_style, m_angle, m_size, m_width, m_thickBasis, m_thickness, True);
Line(dw-dx,0);
END;
{////////////////////////////////// MAIN ///////////////////////////////////////}
BEGIN
dw := Abs(PLINELENGTH); {図形全体の幅}
dh := Abs(PBOXWIDTH); {図形全体の高さ}
da := Abs(PDA); {引出し線の角度 Number 60}
MarkerArrow := PMARKERARROW; {マーカーが矢印ならTRUE}
MarkerBig := PMARKERBIG; {マーカーが大サイズならTRUE}
dx := dh*Tan(Deg2Rad(90-da));
If dw-dx < 0 Then dx := dw; {dx が全体の幅を超えないようにする}
If MarkerArrow Then Begin
m_style := 0;
m_angle := 15;
m_size := 2/25.4; {2mm}
m_width := 0;
m_thickBasis := 0;
m_thickness := 0;
End Else Begin
m_style := 2;
m_angle := 0;
m_size := 1/25.4; {1mm}
m_width := 1/25.4;
m_thickBasis := 0;
m_thickness := 0;
End;
If MarkerBig Then Begin
m_size := m_size * 1.5;
m_width := m_width * 1.5;
End;
If GetCustomObjectInfo( objName, objHand, recHand, wallHand ) Then LeaderLine;
END;
Run( AuxLeaderLine2 );
12.5用ソース
{*******************************************************************************
AuxLeaderLine ver.2
角度保持型引き出し線
Copyright 2012 兵藤善紀建築設計事務所
www.hyodo-arch.com
2012.08.01 Ver 2.01 VW12 用ブランチ(SetObjBeginningMarkerは使えない)
2012.07.07 Ver 2.00 まず最初のバージョン
*******************************************************************************}
{$STRICT 12}
PROCEDURE AuxLeaderLine2;
VAR
objName,dLwStr :STRING; {GCOI で使う変数}
objHand, recHand, wallHand :HANDLE; {GCOI で使うハンドル}
hh1 :Handle; {引出し線のハンドル}
dw, dh, da, dx :REAL; {図形全体の幅、図形全体の高さ、引出し線の角度、交点のX座標}
MarkerArrow, MarkerBig :BOOLEAN; {矢印:True、サイズ大:True}
m_style :LONGINT;
m_angle, m_thickBasis :INTEGER;
m_size, m_width, m_thickness:REAL;
m_visibility, ok :BOOLEAN;
{//////////////////////////// LeaderLine //////////////////////////////}
PROCEDURE LeaderLine;
VAR
appMajor, appMinor, appMaint, platform :INTEGER; {バージョン情報の取得}
BEGIN
Move(0, -dh/2);
Line(dx, dh); {引き出し線}
hh1 := LNewObj;
GetVersion (appMajor, appMinor, appMaint, platform);
SetObjArrow (hh1, m_style, m_size, m_angle, True, False);
Line(dw-dx,0);
END;
{////////////////////////////////// MAIN ///////////////////////////////////////}
BEGIN
dw := Abs(PLINELENGTH); {図形全体の幅}
dh := Abs(PBOXWIDTH); {図形全体の高さ}
da := Abs(PDA); {引出し線の角度 Number 60}
MarkerArrow := PMARKERARROW; {マーカーが矢印ならTRUE}
MarkerBig := PMARKERBIG; {マーカーが大サイズならTRUE}
dx := dh*Tan(Deg2Rad(90-da));
If dw-dx < 0 Then dx := dw; {dx が全体の幅を超えないようにする}
If MarkerArrow Then Begin
m_style := 0;
m_angle := 15;
m_size := 2/25.4; {2mm}
m_width := 0;
m_thickBasis := 0;
m_thickness := 0;
End Else Begin
m_style := 3;
m_angle := 0;
m_size := 1/25.4; {1mm}
m_width := 1/25.4;
m_thickBasis := 0;
m_thickness := 0;
End;
If MarkerBig Then Begin
m_size := m_size * 1.5;
m_width := m_width * 1.5;
End;
If GetCustomObjectInfo( objName, objHand, recHand, wallHand ) Then LeaderLine;
END;
Run( AuxLeaderLine2 );