角度保持型引き出し線

引出し線を整えるときに、角度を保持して大きさを調整できると楽だろうなぁと思って作成したプラグイン・オブジェクトです。Ver.12 で動作するバージョンもあります。

動作の流れ

  1. 引出し線を描画する始点と終点の座標、及び角度、マーカーの種類とサイズの設定
  2. プラグイン・オブジェクトとして引出し線を描画(VWのバージョンによって関数の使い分けをする)

パラメータの設定

プラグインコマンドは、3点型オブジェクトで新規作成し、コマンド編集で、スクリプトソースをコピペした後、パラメータを下記のように設定してください。この値は、モードバーで変更することができます。

名前フィールド名初期値
LineLengthDimension1
BoxWidth高さDimension1
da引出し角度Number60
MarkerArrow矢印BooleanTrue
MarkerBig大サイズBooleanFalse

ダウンロード

パラメータやプロパティの設定、アイコン作成が面倒な方は、下記よりダウンロードをお願いします。

  • 「角度保持型引き出し線 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 );