Files

363 lines
14 KiB
C#
Raw Permalink Normal View History

//
// (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;
namespace ExtensibleStorageUI
{
//A serie of field formater classes
/// <summary>
/// UV field formater
/// </summary>
class ValueFormatUV:Autodesk.Revit.DB.ExtensibleStorage.Framework.IFieldFormat
{
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType)
{
return value;
}
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit)
{
return value.ToString();
}
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType)
{
if (!value.StartsWith("("))
return null;
if (!value.EndsWith(")"))
return null;
value = value.TrimStart('(');
value = value.TrimEnd(')');
string[] uv = value.Split(',');
if (uv.Length != 2)
return null;
double tempu;
double tempv;
if (!double.TryParse(uv[0], out tempu))
return null;
if (!double.TryParse(uv[1], out tempv))
return null;
return new UV(tempu, tempv);
}
}
/// <summary>
/// XYZ filed formater
/// </summary>
class ValueFormatXYZ : Autodesk.Revit.DB.ExtensibleStorage.Framework.IFieldFormat
{
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType)
{
return value;
}
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit)
{
return value.ToString();
}
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType)
{
if (!value.StartsWith("("))
return null;
if (!value.EndsWith(")"))
return null;
value = value.TrimStart('(');
value = value.TrimEnd(')');
string[] xyz = value.Split(',');
if (xyz.Length != 3)
return null;
double tempx;
double tempy;
double tempz;
if (!double.TryParse(xyz[0], out tempx))
return null;
if (!double.TryParse(xyz[1], out tempy))
return null;
if (!double.TryParse(xyz[2], out tempz))
return null;
return new XYZ(tempx, tempy,tempz);
}
}
/// <summary>
/// Guid formater
/// </summary>
class ValueFormatGuid : Autodesk.Revit.DB.ExtensibleStorage.Framework.IFieldFormat
{
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType)
{
return value;
}
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit)
{
return value.ToString();
}
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType)
{
Guid tempguid;
if (!Guid.TryParse(value, out tempguid))
return null;
return new Guid(value);
}
}
/// <summary>
/// ElementId formater
/// </summary>
class ValueFormatElementId : Autodesk.Revit.DB.ExtensibleStorage.Framework.IFieldFormat
{
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType)
{
return value;
}
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit)
{
return value.ToString();
}
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType)
{
2023-04-26 14:47:47 +02:00
ElementId eid;
if(!ElementId.TryParse(value, out eid))
return null;
Element e = document.GetElement(eid);
if (e == null)
return null;
return eid;
}
}
/// <summary>
/// UV list formater
/// </summary>
class ValueFormatListUV : Autodesk.Revit.DB.ExtensibleStorage.Framework.IFieldFormat
{
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType)
{
return value;
}
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit)
{
List<UV > uvs = value as List<UV>;
string tempstring = "";
for (int i=0; i < uvs.Count; i++)
{
tempstring += uvs[i].ToString();
tempstring += ";";
}
if (tempstring.EndsWith(";"))
tempstring = tempstring.TrimEnd(';');
return tempstring;
}
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType)
{
string[] uvmain = value.Split(';');
List<UV> uvs = new List<UV>();
for (int i = 0; i < uvmain.Length; i++)
{
if (!uvmain[i].StartsWith("("))
return null;
if (!uvmain[i].EndsWith(")"))
return null;
uvmain[i] = uvmain[i].TrimStart('(');
uvmain[i] = uvmain[i].TrimEnd(')');
string[] uv = uvmain[i].Split(',');
if (uv.Length != 2)
return null;
double tempu;
double tempv;
if (!double.TryParse(uv[0], out tempu))
return null;
if (!double.TryParse(uv[1], out tempv))
return null;
uvs.Add(new UV(tempu, tempv));
}
return uvs;
}
}
/// <summary>
/// XYZ list formater
/// </summary>
class ValueFormatListXYZ : Autodesk.Revit.DB.ExtensibleStorage.Framework.IFieldFormat
{
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType)
{
return value;
}
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit)
{
List<XYZ> xyzs = value as List<XYZ>;
string tempstring = "";
for (int i = 0; i < xyzs.Count; i++)
{
tempstring += xyzs[i].ToString();
tempstring += ";";
}
if (tempstring.EndsWith(";"))
tempstring = tempstring.TrimEnd(';');
return tempstring;
}
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType)
{
string[] xyzmain = value.Split(';');
List<XYZ> xyzs = new List<XYZ>();
for (int i = 0; i < xyzmain.Length; i++)
{
if (!xyzmain[i].StartsWith("("))
return null;
if (!xyzmain[i].EndsWith(")"))
return null;
xyzmain[i] = xyzmain[i].TrimStart('(');
xyzmain[i] = xyzmain[i].TrimEnd(')');
string[] xyz = xyzmain[i].Split(',');
if (xyz.Length != 3)
return null;
double tempx;
double tempy;
double tempz;
if (!double.TryParse(xyz[0], out tempx))
return null;
if (!double.TryParse(xyz[1], out tempy))
return null;
if (!double.TryParse(xyz[2], out tempz))
return null;
xyzs.Add(new XYZ(tempx, tempy, tempz));
}
return xyzs;
}
}
/// <summary>
/// Guid list formater
/// </summary>
class ValueFormatListGuid : Autodesk.Revit.DB.ExtensibleStorage.Framework.IFieldFormat
{
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType)
{
return value;
}
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit)
{
List<Guid> guids = value as List<Guid>;
string tempstring = "";
for (int i = 0; i < guids.Count; i++)
{
tempstring += guids[i].ToString();
tempstring += ";";
}
if (tempstring.EndsWith(";"))
tempstring = tempstring.TrimEnd(';');
return tempstring;
}
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType)
{
string[] guidmain = value.Split(';');
List<Guid> guids = new List<Guid>();
for (int i = 0; i < guidmain.Length; i++)
{
Guid tempguid;
if (!Guid.TryParse(guidmain[i].ToString(), out tempguid))
return null;
guids.Add(tempguid);
}
return guids;
}
}
/// <summary>
/// Element ID formater
/// </summary>
class ValueFormatListElementId : Autodesk.Revit.DB.ExtensibleStorage.Framework.IFieldFormat
{
public object Convert(object value, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputUnitType, Autodesk.Revit.DB.DisplayUnitType outputUnitType)
{
return value;
}
public string Format(object value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType inputDisplayUnitType, bool edit)
{
List<ElementId> elementids = value as List<ElementId>;
string tempstring = "";
for (int i = 0; i < elementids.Count; i++)
{
tempstring += elementids[i].ToString();
tempstring += ";";
}
if (tempstring.EndsWith(";"))
tempstring = tempstring.TrimEnd(';');
return tempstring;
}
public object Parse(string value, Autodesk.Revit.DB.Document document, Autodesk.Revit.DB.UnitType unitType, Autodesk.Revit.DB.DisplayUnitType outputDisplayUnitType)
{
string[] elementidmain = value.Split(';');
List<ElementId> elementids = new List<ElementId>();
for (int i = 0; i < elementidmain.Length; i++)
{
2023-04-26 14:47:47 +02:00
ElementId eid;
if (!ElementId.TryParse(elementidmain[i].ToString() , out eid))
return null;
Element e = document.GetElement(eid);
if (e == null)
return null;
elementids.Add(eid);
}
return elementids;
}
}
}