public DocumentExporter(Application app)
 {
     Container = new Va3cContainer();
     ElementExporter.Initial();
     MaterialExporter.Initial(app);
     GeometryExporter.Initial();
     PropertyExporter.Initial();
 }
    static private bool ExportFamily(KeyValuePair <string, List <Element> > familyElements, ref Va3cContainer.Va3cObject categoryObject)
    {
        if (familyElements.Value.Count == 0)
        {
            return(false);
        }

        Va3cContainer.Va3cObject familyObject = new Va3cContainer.Va3cObject();
        familyObject.uuid = StringConverter.NewGuid();
        familyObject.type = "Family";
        familyObject.name = familyElements.Key;

        Dictionary <string, List <Element> > familySymbolElementsDic = new Dictionary <string, List <Element> >();
        List <Element> noFamilySymbolElementsList = new List <Element>();

        foreach (Element element in familyElements.Value)
        {
            string familySymbolName;
            if (GetElementFamilySymbolName(element, out familySymbolName))
            {
                if (familySymbolElementsDic.ContainsKey(familySymbolName))
                {
                    familySymbolElementsDic[familySymbolName].Add(element);
                }
                else
                {
                    familySymbolElementsDic.Add(familySymbolName, new List <Element> {
                            element
                        });
                }
            }
            else
            {
                noFamilySymbolElementsList.Add(element);
            }
        }
        ExportFamilySymbols(familySymbolElementsDic, ref familyObject);

        foreach (Element element in noFamilySymbolElementsList)
        {
            if (!ElementExporter.ExportElement(element, ref familyObject))
            {     /*log*/
            }
        }

        if (familyObject.children.Count > 0)
        {
            categoryObject.children.Add(familyObject);
        }

        return(true);
    }
static private bool ExportFamilySymbol(KeyValuePair <string, List <Element> > familySymbolElements, ref Va3cContainer.Va3cObject familyObject)
{
    Va3cContainer.Va3cObject familySymbolObject = new Va3cContainer.Va3cObject();
    familySymbolObject.uuid = StringConverter.NewGuid();
    familySymbolObject.type = "Family Symbol";
    familySymbolObject.name = familySymbolElements.Key;

    foreach (Element element in familySymbolElements.Value)
    {
        if (!ElementExporter.ExportElement(element, ref familySymbolObject))
        {         /*log*/
        }
    }

    if (familySymbolObject.children.Count > 0)
    {
        familyObject.children.Add(familySymbolObject);
    }

    return(true);
}
    static private bool ExportCategory(KeyValuePair <ElementId, List <Element> > categoryElements, ref Va3cContainer.Va3cObject rootObject, Document activeDocument)
    {
        if (categoryElements.Value.Count == 0)
        {
            return(false);
        }

        Va3cContainer.Va3cObject categoryObject = new Va3cContainer.Va3cObject();
        categoryObject.uuid = StringConverter.NewGuid();
        categoryObject.type = "Category";

        Category category = Category.GetCategory(activeDocument, categoryElements.Key);

        if (category == null)
        {
            categoryObject.name = "无类别";
        }
        else
        {
            categoryObject.name = category.Name;
        }

        Dictionary <string, List <Element> > familyElementsDic = new Dictionary <string, List <Element> >();
        List <Element> noFamilyElementsList = new List <Element>();

        foreach (Element element in categoryElements.Value)
        {
            string familyName;
            if (GetElementFamilyName(element, out familyName))
            {
                if (familyElementsDic.ContainsKey(familyName))
                {
                    familyElementsDic[familyName].Add(element);
                }
                else
                {
                    familyElementsDic.Add(familyName, new List <Element> {
                            element
                        });
                }
            }
            else
            {
                noFamilyElementsList.Add(element);
            }
        }
        FamilyExporter.ExportFamilys(familyElementsDic, ref categoryObject);

        foreach (Element element in noFamilyElementsList)
        {
            if (!ElementExporter.ExportElement(element, ref categoryObject))
            {     /*log*/
            }
        }

        if (categoryObject.children.Count > 0)
        {
            rootObject.children.Add(categoryObject);
        }

        return(true);
    }