ArchiCAD18用カスタム建具をキープランに対応させる方法

by Michitaka Kiriki · 最終更新日: 2016年4月28日

この記事では、カスタム建具をキープランに対応させる方法について説明します。自作の窓やドアオブジェクトにGDLスクリプトを追加する事で、キープランが表示されるようになります。

以下の手順に従ってください。

1.保存した建具を開き、サブタイプを日本建具に設定します

(例:窓の場合、「ACJX4WindowShoji」。ドアの場合、「ACJX4Door」)。

窓の場合

ドアの場合

自作窓、ドア建具の「マスタスクリプト」に以下のスクリプトを貼り付けます。

 

マスタスクリプト

bShowAddHotspotsForIS = 0
reqShowAddHotspotsForIS = 0

success = LIBRARYGLOBAL ("LG_DWSymbSettings", "AC_bShowAddHotspotsForIS", reqShowAddHotspotsForIS)
if success > 0 then
    if reqShowAddHotspotsForIS & GLOB_CONTEXT = 6 then
        bShowAddHotspotsForIS = reqShowAddHotspotsForIS
    endif
endif

 

2.自作建具の「パラメータスクリプト」に以下のスクリプトを貼り付けます。

窓には「窓用」、ドアには「ドア用」を使用してください。

窓の場合:パラメータスクリプト

!------------ For Window Marker -----------------------
call "ListValuesJPN" parameters all gs_JPNObjectType = 6,  !COMMPARS_WINDOWS1
    gs_is_p6 = 1

!------------ KeyPlan No.+ sub no. --------------------
for ii=10 to 1 step -1
    if type_no<10**ii then no_len=ii
next ii

for ii=10 to 1 step -1
    if type_no_sub<10**ii then no_len_sub=ii
next ii

if no_and_sub = "" then
    if type_no_sub=0 then
        type_no_tx = STR(type_no, no_len, 0)
    else
        type_no_tx = STR(type_no, no_len, 0) + "-" + STR(type_no_sub, no_len_sub, 0)
    endif
else
    type_no_tx = no_and_sub
endif

parameters type_no_tx = type_no_tx
lock "type_no_tx"

 

ドアの場合:ドア用デフォルトパラメータ追加

ドアの場合は以下のデフォルトパラメータを追加する必要があります:

    stSill_Material(テキスト型)
    iSill_Material(整数型)
    stFrame_Material(テキスト型)
    iFrame_Material(整数型)
    p2(長さ型)

パラメータスクリプト

!------------ For Door Marker -----------------------
call "ListValuesJPN" parameters all gs_JPNObjectType = 5, gs_is_p2 = 1

!------------ KeyPlan No.+ sub no.
for ii=10 to 1 step -1
    if type_no<10**ii then no_len=ii
next ii

for ii=10 to 1 step -1
    if type_no_sub<10**ii then no_len_sub=ii
next ii

if no_and_sub = "" then
    if type_no_sub=0 then
        type_no_tx = STR(type_no, no_len, 0)
    else
        type_no_tx = STR(type_no, no_len, 0) + "-" + STR(type_no_sub, no_len_sub, 0)
    endif
else
    type_no_tx = no_and_sub
endif

parameters type_no_tx = type_no_tx
lock "type_no_tx"

自作建具の「2Dスクリプト」に以下のスクリプトを貼り付けます。

窓には「窓用」、ドアには「ドア用」を使用してください。

 

窓の場合:2Dスクリプト

!------------------ キープラン対応部分 -------------------------
if bShowAddHotspotsForIS then
    is_flag = 1
    goto "KeyPlan_Marker"
else
    is_flag = 0
endif

!------------------ キープラン対応部分 -------------------------
"KeyPlan_Marker":
shxx=0
xxx = REQUEST ("window_show_dim", "", shxx)

add2 0, WIDO_SILL

un_id=1000

IF (shxx = 1 and key_mark_flag = 1) OR bShowAddHotspotsForIS then
    if scale_link_label then
        if GLOB_SCALE > detail_high then
            marker_type =0
        else
            marker_type =1
        endif
    else
        if iKey_Mark_Type = 1 then
            marker_type = 0
        else
            marker_type = 1
        endif
    endif

    CALL "AC14_symbol_marker" PARAMETERS k_dia = k_dia , \
        k_line = k_line,
        k_lenb = k_lenb,
        k_lena = k_lena,
        k_lenc = k_lenc,
        fsize_flag = fsize_flag,
        fsize = fsize,
        k_notation1 =k_notation1,
        n_offx1 =n_offx1,
        n_offy1 =n_offy1,
        k_notation2 =k_notation2,
        n_offx2 =n_offx2,
        n_offy2 =n_offy2,
        k_notation3 = k_notation3,
        n_offx3 =n_offx3,
        n_offy3 =n_offy3,
        k_notation4 =k_notation4,
        n_offx4 =n_offx4,
        n_offy4 =n_offy4,
        pen_text = pen_marker,
        pen_symbol = pen_marker,
        pen_fill = pen_marker,
        tfont = tfont,
        type_symbol = stW_Type_Name,
        type_no = type_no_tx,
        globid = GLOB_ID,
        k_idflag = k_idflag,
        fill_flag=flag_zonehider,
        marker_type = marker_type,
        op_height = B,
        is_flag = is_flag, ltype_marker = ltype_marker,
        wd_show_size = wd_show_size,
        size_anno_x = size_anno_x,
        size_anno_y = size_anno_y,
        A = A,
        paper_scale           = paper_scale,
        ex_fsize                = ex_fsize,
        wd_fsize                = wd_fsize,
        k_dia_paper          = k_dia_paper,
        k_lenb_paper  = k_lenb_paper,
        k_lena_paper  = k_lena_paper,
        k_lenc_paper  = k_lenc_paper,
        n_offx1_paper = n_offx1_paper,
        n_offy1_paper = n_offy1_paper,
        n_offx2_paper = n_offx2_paper,
        n_offy2_paper = n_offy2_paper,
        n_offx3_paper = n_offx3_paper,
        n_offy3_paper = n_offy3_paper,
        n_offx4_paper = n_offx4_paper,
        n_offy4_paper = n_offy4_paper,
        size_anno_x_paper = size_anno_x_paper,
        size_anno_y_paper = size_anno_y_paper,
        k_rot_ang=k_rot_ang
    endif

!________________________ Regulation marker __________________

if reg_mark_flag = 1 and iW_Regulations <> 5 and iW_Regulations <> 4 then
    CALL "AC14_regulation_marker" PARAMETERS r_dia = r_dia, \
        r_lenb = r_lenb,
        r_lena = r_lena,
        paper_scale           = paper_scale,
        r_dia_paper = r_dia_paper,
        r_lenb_paper = r_lenb_paper,
        r_lena_paper = r_lena_paper,
        pen_text = pen_marker,
        pen_symbol = pen_marker,
        pen_fill = mark_fill_pen,
        type_fill = mark_fill_type,
        fill_flag = mark_fill_flag,
        tfont = tfont,
        stW_Regulations = stW_Regulations, iW_Regulations = iW_Regulations,
        kaj_door_ident = kaj_door_ident,
        is_flag = is_flag, ltype_marker = ltype_marker
endif

del top

 

ドアの場合:2Dスクリプト

!------------------ キープラン対応部分 -------------------------
if bShowAddHotspotsForIS then
    is_flag = 1
    goto "KeyPlan_Marker"
else
    is_flag = 0
endif

!------------------ キープラン対応部分 -------------------------
"KeyPlan_Marker":
xxx = REQUEST ("door_show_dim", "", shxx)

add2 0, WIDO_SILL

if (shxx = 1 and key_mark_flag = 1) OR bShowAddHotspotsForIS then
    if scale_link_label then
        if GLOB_SCALE > 50 then
            marker_type =0
        else
            marker_type =1
        endif
    else
        if iKey_Mark_Type = 1 then
            marker_type = 0
        else
            marker_type = 1
        endif
    endif

    CALL "AC14_symbol_marker" PARAMETERS k_dia = k_dia , \
        k_line = k_line,
        k_lenb = k_lenb,
        k_lena = k_lena,
        k_lenc = k_lenc,
        fsize_flag = fsize_flag,
        fsize = fsize,
        k_notation1 =k_notation1,
        n_offx1 =n_offx1,
        n_offy1 =n_offy1,
        k_notation2 =k_notation2,
        n_offx2 =n_offx2,
        n_offy2 =n_offy2,
        k_notation3 = k_notation3,
        n_offx3 =n_offx3,
        n_offy3 =n_offy3,
        k_notation4 =k_notation4,
        n_offx4 =n_offx4,
        n_offy4 =n_offy4,
        pen_text = pen_marker,
        pen_symbol = pen_marker,
        pen_fill = pen_marker,
        tfont = tfont,
        type_symbol = stD_Type_Name,
        type_no = type_no_tx,
        globid = GLOB_ID,
        k_idflag = k_idflag,
        fill_flag=flag_zonehider,
        marker_type = marker_type,
        op_height = B,
        is_flag = is_flag, ltype_marker = ltype_marker,
        wd_show_size = wd_show_size,
        size_anno_x = size_anno_x,
        size_anno_y = size_anno_y,
        A = A,
        paper_scale           = paper_scale,
        ex_fsize                = ex_fsize,
        wd_fsize                = wd_fsize,
        k_dia_paper          = k_dia_paper,
        k_lenb_paper  = k_lenb_paper,
        k_lena_paper  = k_lena_paper,
        k_lenc_paper  = k_lenc_paper,
        n_offx1_paper = n_offx1_paper,
        n_offy1_paper = n_offy1_paper,
        n_offx2_paper = n_offx2_paper,
        n_offy2_paper = n_offy2_paper,
        n_offx3_paper = n_offx3_paper,
        n_offy3_paper = n_offy3_paper,
        n_offx4_paper = n_offx4_paper,
        n_offy4_paper = n_offy4_paper,
        size_anno_x_paper = size_anno_x_paper,
        size_anno_y_paper = size_anno_y_paper,
        k_rot_ang=k_rot_ang
endif

!________________________ Regulation marker __________________

if reg_mark_flag = 1 and iD_Regulations <> 15 and iD_Regulations <> 14 then
    CALL "AC14_regulation_marker" PARAMETERS r_dia = r_dia, \
        r_lenb = r_lenb,
        r_lena = r_lena,
        pen_text = pen_marker,
        pen_symbol = pen_marker,
        pen_fill = mark_fill_pen,
        type_fill = mark_fill_type,
        fill_flag = mark_fill_flag,
        tfont = tfont,
        stD_Regulations = stD_Regulations, iD_Regulations = iD_Regulations,
        kaj_door_ident = kaj_door_ident,
        is_flag = is_flag, ltype_marker = ltype_marker
endif

del top