使用
FamilyManager其他的与普通添加参数与标注没区别。[TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class cmdAddParam : IExternalCommand
{
public Result Execute(ExternalCommandData
commandData,
ref string messages, ElementSet elements)
{
UIApplication app = commandData.Application;
Document doc = app.ActiveUIDocument.Document;
Transaction ts =
new Transaction(doc,
"NewDimension");
ts.Start();
//添加参数
FamilyManager m_familyMgr = doc.FamilyManager;
bool isInstance =
false;
FamilyParameter paramTw = m_familyMgr.AddParameter(
"Tw", BuiltInParameterGroup.PG_GEOMETRY, ParameterType.Length, isInstance);
double tw = Util.mmToFeet(
150.0);
m_familyMgr.Set(paramTw, tw);
m_familyMgr.SetFormula(paramTw,
"Width / 4.0");
//公式
//添加尺寸标注
View pViewPlan = Util.findElement(doc,
typeof(ViewPlan),
"Lower Ref. Level")
as View;
ReferencePlane ref1 = Util.findElement(doc,
typeof(ReferencePlane),
"Left")
as ReferencePlane;
ReferencePlane ref2 = Util.findElement(doc,
typeof(ReferencePlane),
"offsetV")
as ReferencePlane;
ReferenceArray pRefArray =
new ReferenceArray();
pRefArray.Append(ref1.Reference);
pRefArray.Append(ref2.Reference);
XYZ p0 = ref1.FreeEnd;
XYZ p1 = ref2.FreeEnd;
Line pLine = app.Application.Create.NewLineBound(p0, p1);
Dimension pDimTw = doc.FamilyCreate.NewDimension(pViewPlan, pLine, pRefArray);
pDimTw.Label = m_familyMgr.get_Parameter(
"Tw");
ts.Commit();
return Result.Succeeded;
}
}
public class Util
{
//Revit内部单位feet转化为mm即毫米
public static double mmToFeet(
double val) {
return val /
304.8; }
public static double feetToMm(
double val) {
return val *
304.8; }
//通过类型与名称找Element
public static Element findElement(Document _rvtDoc, Type targetType,
string targetName)
{
// get the elements of the given type
//
FilteredElementCollector collector =
new FilteredElementCollector(_rvtDoc);
collector.WherePasses(
new ElementClassFilter(targetType));
// parse the collection for the given name
// using LINQ query here.
//
var targetElems =
from element
in collector
where element.Name.Equals(targetName)
select element;
List<Element> elems = targetElems.ToList<Element>();
if (elems.Count >
0)
{
// we should have only one with the given name.
return elems[
0];
}
// cannot find it.
return null;
}
#region Formatting and message handlers
public const string Caption =
"Revit Family API Labs";
/// <summary>
/// MessageBox wrapper for informational message.
/// </summary>
public static void InfoMsg(
string msg)
{
System.Diagnostics.Debug.WriteLine(msg);
WinForm.MessageBox.Show(msg, Caption, WinForm.MessageBoxButtons.OK, WinForm.MessageBoxIcon.Information);
}
/// <summary>
/// MessageBox wrapper for error message.
/// </summary>
public static void ErrorMsg(
string msg)
{
WinForm.MessageBox.Show(msg, Caption, WinForm.MessageBoxButtons.OK, WinForm.MessageBoxIcon.Error);
}
#endregion // Formatting and message handlers}url:http://greatverve.cnb
logs.com/p/revit-family-api-param.html