本文整理汇总了C#中ExporterIFC.PushExportState方法的典型用法代码示例。如果您正苦于以下问题:C# ExporterIFC.PushExportState方法的具体用法?C# ExporterIFC.PushExportState怎么用?C# ExporterIFC.PushExportState使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExporterIFC
的用法示例。
在下文中一共展示了ExporterIFC.PushExportState方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ExportSpatialElement2ndLevel
/// <summary>
/// Exports spatial elements, including rooms, areas and spaces. 2nd level space boundaries.
/// </summary>
/// <param name="ifcExporter">The Exporter object.</param>
/// <param name="exporterIFC"> The ExporterIFC object.</param>
/// <param name="document">The Revit document.</param>
/// <returns>The set of exported spaces. This is used to try to export using the standard routine for spaces that failed.</returns>
public static ISet<ElementId> ExportSpatialElement2ndLevel(Revit.IFC.Export.Exporter.Exporter ifcExporter, ExporterIFC exporterIFC, Document document)
{
ISet<ElementId> exportedSpaceIds = new HashSet<ElementId>();
using (SubTransaction st = new SubTransaction(document))
{
st.Start();
EnergyAnalysisDetailModel model = null;
try
{
View filterView = ExporterCacheManager.ExportOptionsCache.FilterViewForExport;
IFCFile file = exporterIFC.GetFile();
using (IFCTransaction transaction = new IFCTransaction(file))
{
EnergyAnalysisDetailModelOptions options = new EnergyAnalysisDetailModelOptions();
options.Tier = EnergyAnalysisDetailModelTier.SecondLevelBoundaries; //2nd level space boundaries
options.SimplifyCurtainSystems = true;
try
{
model = EnergyAnalysisDetailModel.Create(document, options);
}
catch (System.Exception)
{
return exportedSpaceIds;
}
IList<EnergyAnalysisSpace> spaces = model.GetAnalyticalSpaces();
foreach (EnergyAnalysisSpace space in spaces)
{
SpatialElement spatialElement = document.GetElement(space.CADObjectUniqueId) as SpatialElement;
if (spatialElement == null)
continue;
//current view only
if (!ElementFilteringUtil.IsElementVisible(spatialElement))
continue;
if (!ElementFilteringUtil.ShouldElementBeExported(exporterIFC, spatialElement, false))
continue;
if (ElementFilteringUtil.IsRoomInInvalidPhase(spatialElement))
continue;
Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();
View ownerView = spatialElement.Document.GetElement(spatialElement.OwnerViewId) as View;
if (ownerView != null)
geomOptions.View = ownerView;
GeometryElement geomElem = spatialElement.get_Geometry(geomOptions);
try
{
exporterIFC.PushExportState(spatialElement, geomElem);
using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))
{
using (PlacementSetter setter = PlacementSetter.Create(exporterIFC, spatialElement))
{
// We won't use the SpatialElementGeometryResults, as these are 1st level boundaries, not 2nd level.
SpatialElementGeometryResults results = null;
if (!CreateIFCSpace(exporterIFC, spatialElement, productWrapper, setter, out results))
continue;
exportedSpaceIds.Add(spatialElement.Id);
XYZ offset = GetSpaceBoundaryOffset(setter);
//get boundary information from surfaces
IList<EnergyAnalysisSurface> surfaces = space.GetAnalyticalSurfaces();
foreach (EnergyAnalysisSurface surface in surfaces)
{
Element boundingElement = GetBoundaryElement(document, surface.CADLinkUniqueId, surface.CADObjectUniqueId);
IList<EnergyAnalysisOpening> openings = surface.GetAnalyticalOpenings();
IFCAnyHandle connectionGeometry = CreateConnectionSurfaceGeometry(exporterIFC, surface, openings, offset);
CreateIFCSpaceBoundary(file, exporterIFC, spatialElement, boundingElement, setter.LevelId, connectionGeometry);
// try to add doors and windows for host objects if appropriate.
if (boundingElement is HostObject)
{
foreach (EnergyAnalysisOpening opening in openings)
{
Element openingBoundingElem = GetBoundaryElement(document, opening.CADLinkUniqueId, opening.CADObjectUniqueId);
IFCAnyHandle openingConnectionGeom = CreateConnectionSurfaceGeometry(exporterIFC, opening, offset);
CreateIFCSpaceBoundary(file, exporterIFC, spatialElement, openingBoundingElem, setter.LevelId, openingConnectionGeom);
}
}
}
CreateZoneInfos(exporterIFC, file, spatialElement, productWrapper);
CreateSpaceOccupantInfo(exporterIFC, file, spatialElement, productWrapper);
//.........这里部分代码省略.........
示例2: ExportElementImpl
/// <summary>
/// Implements the export of element.
/// </summary>
/// <param name="exporterIFC">The IFC exporter object.</param>
/// <param name="element">The element to export.</param>
/// <param name="productWrapper">The ProductWrapper object.</param>
public virtual void ExportElementImpl(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)
{
Options options;
View ownerView = element.Document.GetElement(element.OwnerViewId) as View;
if (ownerView == null)
{
options = GeometryUtil.GetIFCExportGeometryOptions();
}
else
{
options = new Options();
options.View = ownerView;
}
GeometryElement geomElem = element.get_Geometry(options);
// Default: we don't preserve the element parameter cache after export.
bool shouldPreserveParameterCache = false;
try
{
exporterIFC.PushExportState(element, geomElem);
Autodesk.Revit.DB.Document doc = element.Document;
using (SubTransaction st = new SubTransaction(doc))
{
st.Start();
// A long list of supported elements. Please keep in alphabetical order.
if (element is AreaReinforcement || element is PathReinforcement || element is Rebar)
{
RebarExporter.Export(exporterIFC, element, productWrapper);
}
else if (element is AreaScheme)
{
AreaSchemeExporter.ExportAreaScheme(exporterIFC, element as AreaScheme, productWrapper);
}
else if (element is AssemblyInstance)
{
AssemblyInstance assemblyInstance = element as AssemblyInstance;
AssemblyInstanceExporter.ExportAssemblyInstanceElement(exporterIFC, assemblyInstance, productWrapper);
}
else if (element is BeamSystem)
{
if (ExporterCacheManager.BeamSystemCache.Contains(element.Id))
AssemblyInstanceExporter.ExportBeamSystem(exporterIFC, element as BeamSystem, productWrapper);
else
{
ExporterCacheManager.BeamSystemCache.Add(element.Id);
shouldPreserveParameterCache = true;
}
}
else if (element is Ceiling)
{
Ceiling ceiling = element as Ceiling;
CeilingExporter.ExportCeilingElement(exporterIFC, ceiling, geomElem, productWrapper);
}
else if (element is CeilingAndFloor || element is Floor)
{
// This covers both Floors and Building Pads.
CeilingAndFloor hostObject = element as CeilingAndFloor;
FloorExporter.ExportCeilingAndFloorElement(exporterIFC, hostObject, geomElem, productWrapper);
}
else if (element is ContFooting)
{
ContFooting footing = element as ContFooting;
FootingExporter.ExportFootingElement(exporterIFC, footing, geomElem, productWrapper);
}
else if (element is CurveElement)
{
CurveElement curveElem = element as CurveElement;
CurveElementExporter.ExportCurveElement(exporterIFC, curveElem, geomElem, productWrapper);
}
else if (element is CurtainSystem)
{
CurtainSystem curtainSystem = element as CurtainSystem;
CurtainSystemExporter.ExportCurtainSystem(exporterIFC, curtainSystem, productWrapper);
}
else if (CurtainSystemExporter.IsLegacyCurtainElement(element))
{
CurtainSystemExporter.ExportLegacyCurtainElement(exporterIFC, element, productWrapper);
}
else if (element is DuctInsulation)
{
DuctInsulation ductInsulation = element as DuctInsulation;
DuctInsulationExporter.ExportDuctInsulation(exporterIFC, ductInsulation, geomElem, productWrapper);
}
else if (element is DuctLining)
{
DuctLining ductLining = element as DuctLining;
DuctLiningExporter.ExportDuctLining(exporterIFC, ductLining, geomElem, productWrapper);
}
else if (element is ElectricalSystem)
{
ExporterCacheManager.SystemsCache.AddElectricalSystem(element.Id);
//.........这里部分代码省略.........
示例3: ExportSpatialElement2ndLevel
/// <summary>
/// Exports spatial elements, including rooms, areas and spaces. 2nd level space boundaries.
/// </summary>
/// <param name="ifcExporter">
/// The Exporter object.
/// </param>
/// <param name="exporterIFC">
/// The ExporterIFC object.
/// </param>
/// <param name="document">
/// The Revit document.
/// </param>
/// <param name="filterView">
/// The view not exported.
/// </param>
/// <param name="spaceExported">
/// The output boolean value indicates if exported successfully.
/// </param>
public static void ExportSpatialElement2ndLevel(BIM.IFC.Exporter.Exporter ifcExporter, ExporterIFC exporterIFC, Document document, View filterView, ref bool spaceExported)
{
using (SubTransaction st = new SubTransaction(document))
{
st.Start();
EnergyAnalysisDetailModel model = null;
try
{
IFCFile file = exporterIFC.GetFile();
using (IFCTransaction transaction = new IFCTransaction(file))
{
EnergyAnalysisDetailModelOptions options = new EnergyAnalysisDetailModelOptions();
options.Tier = EnergyAnalysisDetailModelTier.SecondLevelBoundaries; //2nd level space boundaries
options.SimplifyCurtainSystems = true;
try
{
model = EnergyAnalysisDetailModel.Create(document, options);
}
catch (System.Exception)
{
spaceExported = false;
return;
}
IList<EnergyAnalysisSpace> spaces = model.GetAnalyticalSpaces();
spaceExported = true;
foreach (EnergyAnalysisSpace space in spaces)
{
SpatialElement spatialElement = document.GetElement(space.SpatialElementId) as SpatialElement;
if (spatialElement == null)
continue;
//quick reject
bool isArea = spatialElement is Area;
if (isArea)
{
if (!IsAreaGrossInterior(exporterIFC, spatialElement))
continue;
}
//current view only
if (filterView != null && !ElementFilteringUtil.IsElementVisible(filterView, spatialElement))
continue;
//
if (!ElementFilteringUtil.ShouldCategoryBeExported(exporterIFC, spatialElement))
continue;
Options geomOptions = GeometryUtil.GetIFCExportGeometryOptions();
View ownerView = spatialElement.Document.GetElement(spatialElement.OwnerViewId) as View;
if (ownerView != null)
geomOptions.View = ownerView;
GeometryElement geomElem = spatialElement.get_Geometry(geomOptions);
try
{
exporterIFC.PushExportState(spatialElement, geomElem);
using (ProductWrapper productWrapper = ProductWrapper.Create(exporterIFC, true))
{
ElementId levelId = spatialElement.Level != null ? spatialElement.Level.Id : ElementId.InvalidElementId;
using (IFCPlacementSetter setter = IFCPlacementSetter.Create(exporterIFC, spatialElement, null, null, levelId))
{
if (!CreateIFCSpace(exporterIFC, spatialElement, productWrapper, setter))
continue;
XYZ offset = GetSapceBoundaryOffset(setter);
//get boundary information from surfaces
IList<EnergyAnalysisSurface> surfaces = space.GetAnalyticalSurfaces();
foreach (EnergyAnalysisSurface surface in surfaces)
{
Element boundingElement = GetBoundaryElement(document, surface.OriginatingElementId);
IList<EnergyAnalysisOpening> openings = surface.GetAnalyticalOpenings();
IFCAnyHandle connectionGeometry = CreateConnectionSurfaceGeometry(file, surface, openings, offset);
CreateIFCSpaceBoundary(file, exporterIFC, spatialElement, boundingElement, setter.LevelId, connectionGeometry);
//.........这里部分代码省略.........
示例4: ExportSpatialElement2ndLevel
/// <summary>
/// Export spatial elements, including rooms, areas and spaces. 2nd level space boundaries.
/// </summary>
/// <param name="ifcExporter">
/// The Exporter object.
/// </param>
/// <param name="exporterIFC">
/// The ExporterIFC object.
/// </param>
/// <param name="document">
/// The Revit document.
/// </param>
/// <param name="filterView">
/// The view not exported.
/// </param>
/// <param name="spaceExported">
/// The output boolean value indicates if exported successfully.
/// </param>
public static void ExportSpatialElement2ndLevel(BIM.IFC.Exporter.Exporter ifcExporter, ExporterIFC exporterIFC, Document document, View filterView)
{
using (SubTransaction st = new SubTransaction(document))
{
st.Start();
bool createEnergyAnalysisDetailModelFailed = false;
EnergyAnalysisDetailModel model = null;
try
{
IFCFile file = exporterIFC.GetFile();
using (IFCTransaction tr = new IFCTransaction(file))
{
EnergyAnalysisDetailModelOptions options = new EnergyAnalysisDetailModelOptions();
options.Tier = EnergyAnalysisDetailModelTier.SecondLevelBoundaries; //2nd level space boundaries
options.SimplifyCurtainSystems = true;
try
{
model = EnergyAnalysisDetailModel.Create(document, options);
}
catch (Exception)
{
createEnergyAnalysisDetailModelFailed = true;
throw;
}
IList<EnergyAnalysisSpace> spaces = model.GetAnalyticalSpaces();
foreach (EnergyAnalysisSpace space in spaces)
{
SpatialElement spatialElement = document.get_Element(space.SpatialElementId) as SpatialElement;
if (spatialElement == null)
continue;
//quick reject
bool isArea = spatialElement is Area;
if (isArea)
{
if (!IsAreaGrossInterior(exporterIFC, spatialElement))
continue;
}
//current view only
if (filterView != null && !ElementFilteringUtil.IsElementVisible(filterView, spatialElement))
continue;
//
if (!ElementFilteringUtil.ShouldCategoryBeExported(exporterIFC, spatialElement))
continue;
Options geomOptions = new Options();
View ownerView = spatialElement.Document.get_Element(spatialElement.OwnerViewId) as View;
if (ownerView != null)
geomOptions.View = ownerView;
GeometryElement geomElem = spatialElement.get_Geometry(geomOptions);
try
{
exporterIFC.PushExportState(spatialElement, geomElem);
using (IFCProductWrapper productWrapper = IFCProductWrapper.Create(exporterIFC, true))
{
ElementId levelId = spatialElement.Level != null ? spatialElement.Level.Id : ElementId.InvalidElementId;
using (IFCPlacementSetter setter = IFCPlacementSetter.Create(exporterIFC, spatialElement, null, null, levelId))
{
try
{
CreateIFCSpace(exporterIFC, spatialElement, productWrapper, setter);
}
catch (System.Exception)
{
continue;
}
//get boundary information from surfaces
IList<EnergyAnalysisSurface> surfaces = space.GetAnalyticalSurfaces();
foreach (EnergyAnalysisSurface surface in surfaces)
{
Element boundingElement = GetBoundaryElement(document, surface.OriginatingElementId);
if (boundingElement == null)
continue;
//.........这里部分代码省略.........
示例5: ExportElementImpl
/// <summary>
/// Implements the export of element.
/// </summary>
/// <param name="exporterIFC">The IFC exporter object.</param>
/// <param name="element">The element to export.</param>
/// <param name="filterView">The view to export, if it exists.</param>
/// <param name="productWrapper">The ProductWrapper object.</param>
public virtual void ExportElementImpl(ExporterIFC exporterIFC, Element element, Autodesk.Revit.DB.View filterView,
ProductWrapper productWrapper)
{
Options options;
View ownerView = element.Document.GetElement(element.OwnerViewId) as View;
if (ownerView == null)
{
options = GeometryUtil.GetIFCExportGeometryOptions();
}
else
{
options = new Options();
options.View = ownerView;
}
GeometryElement geomElem = element.get_Geometry(options);
try
{
exporterIFC.PushExportState(element, geomElem);
using (SubTransaction st = new SubTransaction(element.Document))
{
st.Start();
if (element is AssemblyInstance)
{
AssemblyInstance assemblyInstance = element as AssemblyInstance;
AssemblyInstanceExporter.ExportAssemblyInstanceElement(exporterIFC, assemblyInstance, productWrapper);
}
else if (element is Ceiling)
{
Ceiling ceiling = element as Ceiling;
CeilingExporter.ExportCeilingElement(exporterIFC, ceiling, geomElem, productWrapper);
}
else if (element is CeilingAndFloor || element is Floor)
{
// This covers both Floors and Building Pads.
HostObject hostObject = element as HostObject;
FloorExporter.Export(exporterIFC, hostObject, geomElem, productWrapper);
}
else if (element is ContFooting)
{
ContFooting footing = element as ContFooting;
FootingExporter.ExportFootingElement(exporterIFC, footing, geomElem, productWrapper);
}
else if (element is CurveElement)
{
CurveElement curveElem = element as CurveElement;
CurveElementExporter.ExportCurveElement(exporterIFC, curveElem, geomElem, productWrapper);
}
else if (element is DuctInsulation)
{
DuctInsulation ductInsulation = element as DuctInsulation;
DuctInsulationExporter.ExportDuctInsulation(exporterIFC, ductInsulation, geomElem, productWrapper);
}
else if (element is DuctLining)
{
DuctLining ductLining = element as DuctLining;
DuctLiningExporter.ExportDuctLining(exporterIFC, ductLining, geomElem, productWrapper);
}
else if (element is FamilyInstance)
{
FamilyInstance familyInstanceElem = element as FamilyInstance;
FamilyInstanceExporter.ExportFamilyInstanceElement(exporterIFC, familyInstanceElem, geomElem, productWrapper);
}
else if (element is FilledRegion)
{
FilledRegion filledRegion = element as FilledRegion;
FilledRegionExporter.Export(exporterIFC, filledRegion, geomElem, productWrapper);
}
else if (element is Grid)
{
ExporterCacheManager.GridCache.Add(element);
}
else if (element is HostedSweep)
{
HostedSweep hostedSweep = element as HostedSweep;
HostedSweepExporter.Export(exporterIFC, hostedSweep, geomElem, productWrapper);
}
else if (element is Part)
{
Part part = element as Part;
if (ExporterCacheManager.ExportOptionsCache.ExportPartsAsBuildingElements)
PartExporter.ExportPartAsBuildingElement(exporterIFC, part, geomElem, productWrapper);
else
PartExporter.ExportStandalonePart(exporterIFC, part, geomElem, productWrapper);
}
else if (element is Railing)
{
if (ExporterCacheManager.RailingCache.Contains(element.Id))
RailingExporter.ExportRailingElement(exporterIFC, element as Railing, productWrapper);
else
{
//.........这里部分代码省略.........
示例6: ExportElementImpl
/// <summary>
/// Implements the export of element.
/// </summary>
/// <param name="exporterIFC">The IFC exporter object.</param>
/// <param name="element ">The element to export.</param>
/// <param name="productWrapper">The IFCProductWrapper object.</param>
private void ExportElementImpl(ExporterIFC exporterIFC, Element element, IFCProductWrapper productWrapper)
{
Options options = new Options();
View ownerView = element.Document.get_Element(element.OwnerViewId) as View;
if (ownerView != null)
options.View = ownerView;
GeometryElement geomElem = element.get_Geometry(options);
try
{
exporterIFC.PushExportState(element, geomElem);
using (SubTransaction st = new SubTransaction(element.Document))
{
st.Start();
if (element is CurveElement)
{
CurveElement curveElem = element as CurveElement;
CurveElementExporter.ExportCurveElement(exporterIFC, curveElem, geomElem, productWrapper, m_CurveAnnotationCache);
}
else if (element is FamilyInstance)
{
FamilyInstance familyInstanceElem = element as FamilyInstance;
FamilyInstanceExporter.ExportFamilyInstanceElement(exporterIFC, familyInstanceElem, geomElem, productWrapper);
}
else if (element is Floor)
{
Floor floorElem = element as Floor;
FloorExporter.ExportFloor(exporterIFC, floorElem, geomElem, productWrapper);
}
else if (element is SpatialElement)
{
SpatialElement spatialElem = element as SpatialElement;
SpatialElementExporter.ExportSpatialElement(exporterIFC, spatialElem, productWrapper);
}
else if (element is TextNote)
{
TextNote textNote = element as TextNote;
TextNoteExporter.Export(exporterIFC, textNote, productWrapper, m_PresentationStyleCache);
}
else if (element is Wall)
{
Wall wallElem = element as Wall;
WallExporter.Export(exporterIFC, wallElem, geomElem, productWrapper);
}
else if (IsMEPType(exporterIFC, element))
{
GenericMEPExporter.Export(exporterIFC, element, geomElem, productWrapper);
}
else if (element is FilledRegion)
{
// FilledRegion is still handled by internal Revit code, but the get_Geometry call makes sure
// that the Owner view is clean before we get the region's GeometryElement.
ExporterIFCUtils.ExportElementInternal(exporterIFC, element, productWrapper);
}
st.RollBack();
}
}
finally
{
exporterIFC.PopExportState();
}
}
示例7: ExportElementImpl
/// <summary>
/// Implements the export of element.
/// </summary>
/// <param name="exporterIFC">The IFC exporter object.</param>
/// <param name="element">The element to export.</param>
/// <param name="productWrapper">The ProductWrapper object.</param>
public virtual void ExportElementImpl(ExporterIFC exporterIFC, Element element, ProductWrapper productWrapper)
{
Options options;
View ownerView = null;
ownerView = element.Document.GetElement(element.OwnerViewId) as View;
if (ExporterCacheManager.ExportOptionsCache.UseActiveViewGeometry)
{
ownerView = ExporterCacheManager.ExportOptionsCache.ActiveView;
}
else
{
ownerView = element.Document.GetElement(element.OwnerViewId) as View;
}
if (ownerView == null)
{
options = GeometryUtil.GetIFCExportGeometryOptions();
}
else
{
options = new Options();
options.View = ownerView;
}
GeometryElement geomElem = element.get_Geometry(options);
// Default: we don't preserve the element parameter cache after export.
bool shouldPreserveParameterCache = false;
try
{
exporterIFC.PushExportState(element, geomElem);
Autodesk.Revit.DB.Document doc = element.Document;
using (SubTransaction st = new SubTransaction(doc))
{
st.Start();
// A long list of supported elements. Please keep in alphabetical order by the first item in the list..
if (element is AreaScheme)
{
AreaSchemeExporter.ExportAreaScheme(exporterIFC, element as AreaScheme, productWrapper);
}
else if (element is AssemblyInstance)
{
AssemblyInstance assemblyInstance = element as AssemblyInstance;
AssemblyInstanceExporter.ExportAssemblyInstanceElement(exporterIFC, assemblyInstance, productWrapper);
}
else if (element is BeamSystem)
{
if (ExporterCacheManager.BeamSystemCache.Contains(element.Id))
AssemblyInstanceExporter.ExportBeamSystem(exporterIFC, element as BeamSystem, productWrapper);
else
{
ExporterCacheManager.BeamSystemCache.Add(element.Id);
shouldPreserveParameterCache = true;
}
}
else if (element is Ceiling)
{
Ceiling ceiling = element as Ceiling;
CeilingExporter.ExportCeilingElement(exporterIFC, ceiling, geomElem, productWrapper);
}
else if (element is CeilingAndFloor || element is Floor)
{
// This covers both Floors and Building Pads.
CeilingAndFloor hostObject = element as CeilingAndFloor;
FloorExporter.ExportCeilingAndFloorElement(exporterIFC, hostObject, geomElem, productWrapper);
}
else if (element is ContFooting)
{
ContFooting footing = element as ContFooting;
FootingExporter.ExportFootingElement(exporterIFC, footing, geomElem, productWrapper);
}
else if (element is CurveElement)
{
CurveElement curveElem = element as CurveElement;
CurveElementExporter.ExportCurveElement(exporterIFC, curveElem, geomElem, productWrapper);
}
else if (element is CurtainSystem)
{
CurtainSystem curtainSystem = element as CurtainSystem;
CurtainSystemExporter.ExportCurtainSystem(exporterIFC, curtainSystem, productWrapper);
}
else if (CurtainSystemExporter.IsLegacyCurtainElement(element))
{
CurtainSystemExporter.ExportLegacyCurtainElement(exporterIFC, element, productWrapper);
}
else if (element is DuctInsulation)
{
DuctInsulation ductInsulation = element as DuctInsulation;
DuctInsulationExporter.ExportDuctInsulation(exporterIFC, ductInsulation, geomElem, productWrapper);
}
//.........这里部分代码省略.........