Java插件IFC Tools Project(二)

Java插件IFC Tools Project(二)

7.数据类型

IFC实体的属性的数据类型可以是:
  IFC类别或类型
  基本数据类型(数字,逻辑,字母数字)
  枚举
  IFC类或基本数据类型的集合
  集合的集合(集合中的…)
工具箱中提供了以下基本数据类型:
  BINARY
  BOOLEAN(布尔)
  DOUBLE(双精度)
  INTEGER(整型)
  LOGICAL(逻辑)
  REAL
  ENUM(枚举)
  STRING (字符串)
工具箱中提供了以下集合:
  SET <?>
  LIST<?>
要获取逻辑或数字数据类型或枚举的值,您必须调用相应数据类型的public属性值:

IfcQuantityArea ifcQuantityArea = ... 
IfcAreaMeasure ifcAreaMeasure = ifcQuantityArea.getAreaValue(); 
double area = ifcAreaMeasure.value; 
IfcFaceBound ifcFaceBound = ... 
boolean orientation = ifcFaceBound.getOrientation().value;

  要获取STRING对象的值,您必须调用getDecodedValue()方法或getEncodedValue()方法,因为字符串是以STEP格式编码的。 第一种方法根据ISO-10303-21(§6.3.3.1-§6.3.3.3)将该对象的值作为解码后的String返回,例如 “ T \ s \ | r”“Tür”。

IfcProject ifcProject = ... 
IfcLabel ifcLabel = ifcProject.getName(); 
String name = ifcLabel.getDecodedValue();

8.向模型添加新的IFC实体实例

  在上一节中,已经显示了如何创建新的IFC实体以及如何更改其属性。 但是,必须将这些对象添加到IfcModel实例中,否则将无法正常导出到IFC文件,或者与模型相关的视图将无法正常工作,因为它们不会被告知有关模型更改的信息!
  第一步是创建实体的新实例。 每个IFC类都有两个构造函数方法:一个标准构造函数和一个构造函数,您必须在其中指定每个属性。 之后,您必须将此新对象添加到模型中:

IfcWall myNewWall = new IfcWall(); 
ifcModel.addIfcObject(myNewWall); 

或者,您也可以向模型添加新实体的集合:

Collection<ClassInterface> newObjects = new ArrayList<>(); 
IfcWall wall1 = new IfcWall(); 
newObjects.add(wall1); 
IfcWall wall2 = new IfcWall(); 
newObjects.add(wall2); 
ifcModel.addIfcObjects(newObjects); 

9.IFC标头信息

  除了IFC实体描述之外,STEP文件还包含标头中包含的常规信息。
  在工具箱的帮助下,您可以访问包含以下内容的标头信息:
    文件描述属性(“视图定义”,“实现级别”),
    文件名属性(文件路径,时间戳,作者,组织,工具箱,应用程序,
授权人)和
    文件架构属性(架构标识符)。
  您可以按以下方式读取标题信息:

File_Description description = ifcModel.getFile_Description(); 
File_Name fileName = ifcModel.getFile_Name(); 
STRING authorization = fileName.getauthorization(); 
STRING name = fileName.getname(); 
... 
File_Schema schema = ifcModel.getFile_Schema();

  如果要编写IFC文件,则可以使用模型或标头类中的相应set方法来指定或修改这些标头属性中的大多数。 但是,在导出之前,某些属性将被忽略并替换为相应的值(例如,文件路径,创建日期,使用的工具箱)。

10.监听模型变化

  有时,有必要在模型发生更改时得到通知(例如,何时将IFC实体添加到模型中)。 然后,例如,必须更新视图。 因此,您可以添加一个模型的监听器,您可以在其中定义如何处理此事件:

ifcModel.addIfcModelListener(new IfcModelListener() { 
public void modelObjectsRemoved(Collection<ClassInterface> objects) {...} 
public void modelObjectsAdded(Collection<ClassInterface> objects) {...} 
public void modelObjectRemoved(ClassInterface object) {...} 
public void modelObjectAdded(ClassInterface object) {...} 
public void modelContentChanged() {...} 
}); 

发生以下情况时,将通知该监听器:
  IFC实体已添加到模型中
  IFC实体已从模型中删除
  模型内容已完全或根本更改
  除了监听模型更改外,如果发生此类事件,IFC实体的属性也可能会更改,并且您希望得到通知。 因此,您必须向每个IFC对象添加一个监听器,其中必须处理此类事件:

IfcWall wall = ... 
wall.addObjectChangeListener(new ObjectChangeListener() { 
public void ifcModelObjectChange(ClassInterface ifcObject) {...} 
});

11.监听文件解析的进度

  由于大型IFC文件的加载过程可能会花费一些时间,因此最好告知应用程序用户有关加载进度的信息。 因此,您可以在模型中添加一个监听器,可以在其中定义,处理进度的方式(例如,在进度栏中显示进度等):

ifcModel.addStepParserProgressListener(new StepParserProgressListener() { 
public void progressActionPerformed(ProgressEvent event) {} 
}); 

  progress事件包含有关当前加载操作步骤以及此步骤的进度(以百分比为单位)的信息。

12.类型集缓存

  如果您经常使用getCollection(Class classType)方法获取特定类型的对象(例如IfcWall.class)的集合,则IfcModel类提供了一个可能有用的缓存选项。 仅当您需要反复快速访问特定对象类型时,此缓存才有用! 否则,它只会消耗内存。 默认情况下,此缓存处于禁用状态。
  您可以使用IfcModel类的相应构造函数或通过调用setTypeCacheEnabled()方法来启用缓存:

//enable type caching at model construction 
IfcModel ifcModel = new IfcModel(true); 
//enable type caching at runtime 
ifcModel.setTypeCacheEnabled(true);

  如果您不再需要缓存,则应禁用缓存以节省内存。 但是,SoftReference用于实现此缓存。 这意味着当可用内存不足时,将重新分配缓存的内存。 在这种情况下,当您调用getCollection方法时将重新构建缓存。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值