お知らせ

2024 年 12月中に 10 年以上前に投稿されたコンテンツをアーカイブすることとなりました。詳しくは FAQ ページをご覧ください。

部屋タグの引出線のエルボ(中間点)位置を書き換えたい

t_kumasawa
Contributor
Contributor

部屋タグの引出線のエルボ(中間点)位置を書き換えたい

t_kumasawa
Contributor
Contributor

お世話になっています。使用のバージョンはRevit2023です。

 

ビュー上の部屋タグの引出線のエルボの座標を書き換えたいと思って試行しているのですが、

うまくいきません。下記の手順で実行しています。

 

①アクティブビュー上の部屋タグを取得

②引出線がある部屋タグのみ、リストに追加

③LeaderElbowプロパティに新しい値を代入(新しいXYZ座標)

 

上記の要領で実行すると、ビュー上の引出線位置は変わらないままなのですが、

部屋タグをクリックして少し動かすと、エルボの位置が一瞬で変わるような変な挙動になります。

 

対象がTextNoteとIndependentTagの場合は、正常に座標の書き換えができるのですが、

何か足りない操作があるのでしょうか。

ご存知の方がいましたら、宜しくお願い致します。

 

t_kumasawa_0-1732784127155.png

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication 
app = uiapp.Application 
uidoc = uiapp.ActiveUIDocument

activeview = doc.ActiveView
vid = activeview.Id

Roomtags = []

All_Roomtags = FilteredElementCollector(doc,vid).OfCategory(BuiltInCategory.OST_RoomTags)

for i in All_Roomtags:
    if i.HasLeader == True:
        Roomtags.append(i)
    
    else:
        pass
        
TransactionManager.Instance.EnsureInTransaction(doc)        
        
for tag in Roomtags:
    tag.LeaderElbow = XYZ(100,100,0)  

 
TransactionManager.Instance.TransactionTaskDone()

 

 

 

0 件のいいね
返信
解決済み
162件の閲覧回数
4件の返信
返信 (4)

miura_tVXDLF
Contributor
Contributor

@t_kumasawa さま

タグにのエルボを動かしていない状態だと反応します

0 件のいいね

AITS-miura
Advocate
Advocate

@t_kumasawa さま
こちらでも部屋タグの動きを確認したところ、初期位置では正常に動き、エルボを動かすと、タグエレメントに何かしらの変更を加えないと更新されないことを確認しました。

RevitAPIが特定の条件のみで変更を反映するためかと思われます。

参考までに確認のため使用したスクリプトを記載しておきます。何かしらのご参考になれば幸いです。

 

 

import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitServices')
from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager


doc = DocumentManager.Instance.CurrentDBDocument


def get_room_tags(doc):
    collector = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_RoomTags).WhereElementIsNotElementType()
    return collector.ToElements()


def move_elbow_position(tag, offset):
    elbow_position = tag.LeaderElbow
    new_elbow_position = XYZ(elbow_position.X, elbow_position.Y + offset, elbow_position.Z)
    tag.LeaderElbow = new_elbow_position


def move_tag_position(tag, offset):
    location = tag.Location
    if isinstance(location, LocationPoint):
        point = location.Point
        new_point = XYZ(point.X + offset, point.Y, point.Z)
        location.Point = new_point

TransactionManager.Instance.EnsureInTransaction(doc)


room_tags = get_room_tags(doc)
errors = []
debug_messages = []
for tag in room_tags:
    try:
        move_elbow_position(tag, 1000)  # エルボー位置を1000のオフセットで移動
        move_tag_position(tag, 0.1)  # タグ位置を少し移動して変更をトリガー
        debug_messages.append(f"Moved elbow and tag position for tag {tag.Id}")
    except Exception as e:
        errors.append(f"Error moving elbow and tag position for tag {tag.Id}: {e}")


TransactionManager.Instance.TransactionTaskDone()


OUT = {"errors": errors, "debug": debug_messages} if errors else "Successfully moved elbow and tag positions"

 

 

AITS-miura
Advocate
Advocate
解決済み

@t_kumasawa さま
こちらでも部屋タグの動きを確認したところ、初期位置では正常に動き、エルボを動かすと、タグエレメントに何かしらの変更を加えないと更新されないことを確認しました。

RevitAPIが特定の条件のみで変更を反映するためかと思われます。少しタグをスクリプトで動かすと動作します。

確認用のスクリプトは乗せれないようなのでコメントで失礼します。

 

 

t_kumasawa
Contributor
Contributor

@AITS-miura 様

お世話になっています。

早速ですが、教えて頂きました動作を確認してみました。

部屋タグ自体の位置を動かすようにすれば、タグエルボの位置が変更できました。

スクリプトの中に、部屋タグ位置をコントロールする部分も加えてみようと思います。

貴重なご意見ありがとうございました!