//
// (C) Copyright 2003-2013 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted,
// provided that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.DB.ExtensibleStorage;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.ExtensibleStorage.Framework.Attributes;
using Autodesk.Revit.UI.ExtensibleStorage.Framework;
using Autodesk.Revit.UI.ExtensibleStorage;
using CodeCheckingConcreteExample.ConcreteTypes;
using CodeCheckingConcreteExample.Properties;
using CodeCheckingConcreteExample.Main;
#pragma warning disable 1591
namespace CodeCheckingConcreteExample.Server
{
[Autodesk.Revit.DB.CodeChecking.Attributes.CalculationParamsStructure(typeof(CalculationParameter))]
[Autodesk.Revit.DB.CodeChecking.Attributes.LabelStructure(typeof(LabelBeam), BuiltInCategory.OST_BeamAnalytical, Autodesk.Revit.DB.StructuralAssetClass.Concrete)]
[Autodesk.Revit.DB.CodeChecking.Attributes.LabelStructure(typeof(LabelColumn), BuiltInCategory.OST_ColumnAnalytical, Autodesk.Revit.DB.StructuralAssetClass.Concrete)]
///
[Autodesk.Revit.DB.CodeChecking.Attributes.LabelStructure(typeof(LabelFloor), BuiltInCategory.OST_FloorAnalytical, Autodesk.Revit.DB.StructuralAssetClass.Concrete)]
[Autodesk.Revit.DB.CodeChecking.Attributes.LabelStructure(typeof(LabelFloor), BuiltInCategory.OST_FoundationSlabAnalytical, Autodesk.Revit.DB.StructuralAssetClass.Concrete)]
[Autodesk.Revit.DB.CodeChecking.Attributes.LabelStructure(typeof(LabelWall), BuiltInCategory.OST_WallAnalytical, Autodesk.Revit.DB.StructuralAssetClass.Concrete)]
///
public class ServerUI : Autodesk.Revit.UI.CodeChecking.MultiStructureServer
{
#region ICodeCheckingServerUI Members
public override string GetResource(string key, string context)
{
string txt = "";
string resname = "";
if (context != null)
{
switch (context)
{
default:
break;
case "ColumnLabel":
{
switch (key)
{
case "FX":
case "FY":
case "FZ":
case "MX":
case "MY":
case "MZ":
resname = "Column" + key;
break;
}
break;
}
case "BeamLabel":
{
switch (key)
{
case "FX":
case "FY":
case "FZ":
case "MX":
case "MY":
case "MZ":
resname = "Beam" + key;
break;
}
break;
}
///
case "FloorLabel":
switch (key)
{
default:
break;
case "FX":
resname = "FloorF";
break;
case "MY":
resname = "FloorM";
break;
case "FZ":
resname = "FloorQ";
break;
}
break;
case "WallLabel":
switch (key)
{
default:
break;
case "FX":
resname = "WallF";
break;
case "MY":
resname = "WallM";
break;
case "FZ":
resname = "WallQ";
break;
}
break;
///
}
}
if (!string.IsNullOrEmpty(resname))
txt = Resources.ResourceManager.GetString(resname);
if (string.IsNullOrEmpty(txt))
txt = Resources.ResourceManager.GetString(key);
if (!string.IsNullOrEmpty(txt))
return txt;
return key;
}
public override Uri GetResourceImage(string key, string context)
{
String contextKey = "";
if (context != null)
{
switch (context)
{
default:
break;
case "ColumnLabel":
{
switch (key)
{
case "FX":
contextKey = "CFX_32";
break;
case "FY":
contextKey = "CFY_32";
break;
case "FZ":
contextKey = "CFZ_32";
break;
case "MX":
contextKey = "CMX_32";
break;
case "MY":
contextKey = "CMY_32";
break;
case "MZ":
contextKey = "CMZ_32";
break;
case "DirectionY":
contextKey = "buckling_Y";
break;
case "DirectionZ":
contextKey = "buckling_Z";
break;
}
break;
}
case "BeamLabel":
{
switch (key)
{
case "FX":
contextKey = "BFX_32";
break;
case "FY":
contextKey = "BFY_32";
break;
case "FZ":
contextKey = "BFZ_32";
break;
case "MX":
contextKey = "BMX_32";
break;
case "MY":
contextKey = "BMY_32";
break;
case "MZ":
contextKey = "BMZ_32";
break;
}
break;
}
///
case "FloorLabel":
{
switch (key)
{
case "FX":
case "MY":
contextKey = "F" + key + "_32";
break;
default:
contextKey = null;
break;
}
break;
}
case "WallLabel":
{
switch (key)
{
case "FX":
case "FY":
case "MY":
contextKey = "W" + key + "_32";
break;
default:
contextKey = null;
break;
}
break;
}
}
}
if (contextKey == "")
{
switch (key)
{
case "WithSlabBeamInteraction":
contextKey = "BWithSlabBeamInteraction";
break;
case "WithoutSlabBeamInteraction":
contextKey = "BWithoutSlabBeamInteraction";
break;
default:
contextKey = context != null ? context + key : key;
break;
}
}
String currAssemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString();
return contextKey==null ? null : new Uri("pack://application:,,,/" + currAssemblyName + ";component/UIComponents/ICons/" + contextKey + ".png");
}
public override void LayoutInitialized(object sender, Autodesk.Revit.UI.ExtensibleStorage.Framework.LayoutInitializedEventArgs e)
{
onChange(e);
base.LayoutInitialized(sender, e);
}
public override void ValueChanged(object sender, Autodesk.Revit.UI.ExtensibleStorage.Framework.ValueChangedEventArgs e)
{
onChange(e);
}
private void onChange(Autodesk.Revit.UI.ExtensibleStorage.Framework.SchemaEditorEventArgs e)
{
String elementTypeName = e.Editor.GetEntity().Schema.SchemaName;
if (elementTypeName == "LabelColumn")
{
LabelColumn obj = new LabelColumn();
obj.SetProperties(e.Entity as Autodesk.Revit.DB.ExtensibleStorage.Entity, e.Document);
e.Editor.SetAttribute("LengthCoefficientY", FieldUIAttribute.PropertyIsEnabled, obj.BucklingDirectionY, DisplayUnitType.DUT_UNDEFINED);
e.Editor.SetAttribute("ColumnStructureTypeY", FieldUIAttribute.PropertyIsEnabled, obj.BucklingDirectionY, DisplayUnitType.DUT_UNDEFINED);
e.Editor.SetAttribute("LengthCoefficientZ", FieldUIAttribute.PropertyIsEnabled, obj.BucklingDirectionZ, DisplayUnitType.DUT_UNDEFINED);
e.Editor.SetAttribute("ColumnStructureTypeZ", FieldUIAttribute.PropertyIsEnabled, obj.BucklingDirectionZ, DisplayUnitType.DUT_UNDEFINED);
}
}
public override Layout BuildLabelLayout(Schema schema, Document document)
{
Layout layout = null;
if (schema.SchemaName == "LabelBeam")
{
layout = Layout.Build(typeof(LabelBeam), this);
}
if (schema.SchemaName == "LabelColumn")
{
layout = Layout.Build(typeof(LabelColumn), this);
if (layout != null)
{
Autodesk.Revit.UI.ExtensibleStorage.Framework.Category category = layout.GetCategory("Buckling");
String currAssemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString();
Image image = new Image() { Source = new Uri("pack://application:,,,/" + currAssemblyName + ";component/UIComponents/ICons/" + "buckling.png"), Index = 1 };
category.Controls.Add(image);
layout.SortIndexBased();
}
}
///
if (schema.SchemaName == "LabelWall")
{
layout = Layout.Build(typeof(LabelWall), this);
}
if (schema.SchemaName == "LabelFloor")
{
layout = Layout.Build(typeof(LabelFloor), this);
}
///
return layout;
}
public override System.Collections.IList GetDataSource(string key, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.DisplayUnitType unitType)
{
return base.GetDataSource(key, document, unitType);
}
#endregion
}
}