pythonノードを使用して、ファミリのタイプパラメータ値を取り出したい

pythonノードを使用して、ファミリのタイプパラメータ値を取り出したい

seike1189
Advocate Advocate
2,600件の閲覧回数
5件の返信
メッセージ1/6

pythonノードを使用して、ファミリのタイプパラメータ値を取り出したい

seike1189
Advocate
Advocate

いつもお世話になっております。

チャレンジしては失敗していたpythonノードにトライしています。

 

ドアのタイプパラメータをパッケージのノードを使わずに、pythonノードで取り出そうとしています。

作成したのですが、どうしても値が取り出せません。

 

RevitAPIのメソッドと

Revit API using Python - Dictionaryのメソッドの違いもわからずに進めているので、苦労しています。

メソッドの探し方もわかりません。

以前教えていただいたサイトにトライしましたが、エラー出まくりでストップしています。

 

データを添付しますので、どなたか教えていただけませんか?

よろしくお願いします。

0 件のいいね
解決済み
2,601件の閲覧回数
5件の返信
返信 (5)
メッセージ2/6

SUGKJ
Collaborator
Collaborator
解決済み

説明がすごく難しいですね。

ご提示頂きましたコードを加工し、コメントを追記しました。

下記、ご確認ください。

 

 

import sys
import clr

#Comment From SUGKJ
#RevitAPIを使いたい場合は下記3行を追記する
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *

instanceElement = UnwrapElement(IN[0])

# Family Type
l = []
for i in instanceElement:
	l.append(i.Symbol)


#Comment From SUGKJ
#タイプパラメータを取得する場合はファミリではなく
#ファミリタイプが必要なので下記3行は要らない

#f = []
#for j in l:
#	f.append(j.Family)

#   Parameter
param = []

#Comment From SUGKJ
#とりあえず下記URLに書いてあるものを使うとします。
#https://giobel.github.io/Dynamo-Python/#get-parameter-by-name

def GetParamValue(eType, pName):
	paramValue = None
	for i in eType.Parameters:
		if i.Definition.Name == pName:
			#Comment From SUGKJ
			#パラメータの値が文字の場合はAsStringメソッドを使います。
			paramValue = i.AsString()
			break
		else:
			continue
	return paramValue


for k in l:
	param.append(GetParamValue(k,IN[1]))

	#Comment From SUGKJ
	#該当のパラメータが確実にあるのであれば、下記のようにしても動作します。
	#param.append(k.LookupParameter(IN[1]).AsString())

OUT = param

 

 

下図は実行例です。

graph.JPG

 

ちなみに


RevitAPIのメソッドと

Revit API using Python - Dictionaryのメソッドの違いもわからずに

とありますが

Revit API using Python - Dictionary」に書かれているのは

Revit APIをPythonで使う方法を説明しているだけであって

違いがあるというわけではありませんよ。

SUGKJ

EESignature

メッセージ3/6

SUGKJ
Collaborator
Collaborator

追記です。

不明な点がありましたらご遠慮なく聞いてください。

回答がなかなか難しそうですが、できるだけ答えたいと思います。

SUGKJ

EESignature

メッセージ4/6

seike1189
Advocate
Advocate

SUGKJさま

 

いつも解答ありがとうございます。

 

記載された関数の使い方よくわかりました。

Asstringも必要なんですね。

ファミリじゃなくて、ファミリタイプで作業しなきゃいけませんでしたね。

何もかも足りなかったです。

pythonでは、リスト操作しかやったことがないので戸惑う事ばかりです。

 

根本的な質問させてもらっていいでしょうか?

 

1、eType.Parameters の.Parameters はRevitAPIではなくて、Revit用pythonのメソッドなのですか?

 

2、pythonのノードで「.」を入力するとメソッドがプルダウンで現れますが、あれもRevit用pythonのメソッドなのですか?

 

よろしくお願いします。

 

 

 

メッセージ5/6

SUGKJ
Collaborator
Collaborator
解決済み

追加のご質問に回答いたします。

 


1、eType.Parameters の.Parameters はRevitAPIではなくて、Revit用pythonのメソッドなのですか?

下記の通り、RevitAPIにあります(Element class/Parameters Property)。

https://www.revitapidocs.com/2019/7af5d66f-4533-33d2-dd82-d9573eaabf15.htm

 

 

2、pythonのノードで「.」を入力するとメソッドがプルダウンで現れますが、あれもRevit用pythonのメソッドなのですか?

「Revit用pythonのメソッド」という言葉の意味を理解できず申し訳ありませんが、

プルダウン自体はモジュールやライブラリ(今回はRevitAPIのライブラリ)を読み込むと出ますね。

別にDynamoに限ったことではなく、プログラミング用エディタではどれもプルダウンが出てくるものが多いです

SUGKJ

EESignature

メッセージ6/6

seike1189
Advocate
Advocate

SUGKJさま

 

回答ありがとうございます。

 

eType.Parametersは、RevitAPIを読み込まなくても動作したので、別ものかと思ってしまいました。

 

「Revit用pythonのメソッド」という言葉は、Revitのpythonノードでしか使えないもの、という意味でした。

が、そうではないんですね。

 

今は、複数の型の違うパラメータリストを作成して、それを廻そうとしています。

型が違うと

AsString  AsValueString  変えないといけないんですね。

 

今までやってきたPythonは文字も数値もごちゃ混ぜで平気でしたので、戸惑っています。

 

超初心者の質問ばかりで申し訳ないです。

ありがとうございました。

 

 

0 件のいいね