كيفية تعيين قيمة المعلمة المشتركة مع ربط نوع في Autodesk Revit Architecture 2010؟

StackOverflow https://stackoverflow.com/questions/1492756

  •  18-09-2019
  •  | 
  •  

سؤال

لدي معلمة مشتركة uvalue. ملزمة Wall اكتب مع TypeBinding في Autodesk Revit Architecture 2010.

يمكنني الوصول بسهولة إلى المعلمة مع:

Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.get_Parameter("UValue");

يمكن البحث عن قيمة هذه المعلمة

var u = parameter.AsDouble();

لكن عندما أفعل

parameter.Set(0.8);

أحصل على خطأ:

InvalidOperationException: العملية غير صالحة بسبب الحالة الحالية للكائن.

عند التفتيش، المعلمات ReadOnly تم ضبط الخاصية على false.

هل كانت مفيدة؟

المحلول

حسنا، لقد وجدت المشكلة:

عند استخدام TypeBinding, ، المعلمة ليست في Wall كائن نفسه، ولكن في WallType خاصية. إذا كنت تقوم بذلك بطريقة متعددة الأشكال (ليس فقط جدران، ولكن أيضا أرضيات أو أسطح وما إلى ذلك)، فيمكنك استخدام Element.ObjectType خاصية.

يجب أن يكون الرمز في المرجع نفسه:

Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.ObjectType.get_Parameter("UValue");

يتم استدعاء ذلك من طريقة تمديد، وهي تقنية أنيقة إلى حد ما لإضافة المعلمات لإعادة صياغة الكائنات.

وبالتالي تحديد المعلمة يمكن القيام به مثل هذا:

public static void SetUValue(this Wall self, double uvalue)
{ 
    Parameter parameter = self.ObjectType.get_Parameter("UValue");
    if (parameter != null)
    {
        parameter.Set(uvalue);
    }
    else
    {
        throw new InvalidOperationException(
            "Wall does not contain the parameter 'UValue'");
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top