You are currently reviewing an older revision of this page.
合并imodel文件专题
用于将数据导入iModel的基类,用户可以根据需要重写子类。
实例代码如下所示:
//用户自定义基类,重写若干基类函数,以实现自己的需求。 class MyIModelImporter extends IModelImporter { public constructor(targetDb: IModelDb, options?: IModelImportOptions) { super(targetDb, options); } //重写基类函数,当插入一个模型的时候被调用; protected onInsertModel(modelProps: ModelProps): Id64String { console.log("添加了一个model"); return super.onInsertModel(modelProps); } //重写基类函数,当插入一个元素的时候被调用; protected onInsertElement(elementProps: ElementProps): Id64String { console.log("添加了一个元素,其class=" + elementProps.classFullName); return super.onInsertElement(elementProps); } //重写基类函数,当删除一个元素的时候被调用; protected onDeleteElement(elementId: Id64String): void { console.log("删除的元素的id为:" + elementId); super.onDeleteElement(elementId); } } export async function IModelTransformer_IModelImporter() { //首先创建一个测试imodel文件,因为使用openFile打开是只读的。 //所以,我们通过createFrom基于种子imodel文件创建一个可读可写的iMode文件。 const seedFileName = "./data3/CompatibilityTestSeed.bim"; const seedDb = SnapshotDb.openFile(seedFileName); const sourceFileName = "./data3/TargetIModel.bim"; if (IModelJsFs.existsSync(sourceFileName)) { IModelJsFs.removeSync(sourceFileName); } //注意,我们所创建的imodel文件设置了密码为'abcdef123456'. let TargetIModel = SnapshotDb.createFrom(seedDb, sourceFileName, { password: "abcdef123456", }); //创建成功之后,即可关闭种子文件。 seedDb.close(); //检测一下,新创建的imodel文件是否可读可写。 if (TargetIModel.isReadonly) { console.log("只读"); } else { console.log("可读可写"); } //创建一个MyIModelImporter实例,然后进行一下操作: const MyImporter = new MyIModelImporter(TargetIModel); const subjectId = TargetIModel.elements.getRootSubject().id; //创建两个建模元素分区属性; const partitionProps: InformationPartitionElementProps = { classFullName: DefinitionPartition.classFullName, model: IModel.repositoryModelId, parent: new SubjectOwnsPartitionElements(subjectId), code: DefinitionPartition.createCode(TargetIModel, subjectId, "AddModel"), }; const partitionProps2: InformationPartitionElementProps = { classFullName: DefinitionPartition.classFullName, model: IModel.repositoryModelId, parent: new SubjectOwnsPartitionElements(subjectId), code: DefinitionPartition.createCode(TargetIModel, subjectId, "TestRemove"), }; //先导入2个建模元素; const partitionId = MyImporter.importElement(partitionProps); const partitionId2 = MyImporter.importElement(partitionProps2); //创建一个DefinitionModel属性,注意其建模元素id是之前所插入的建模元素id。 const modelProps: ModelProps = { classFullName: DefinitionModel.classFullName, modeledElement: { id: partitionId }, id: partitionId, name: "TestModel", }; MyImporter.importModel(modelProps); //删除id为partitionId2的建模元素。 MyImporter.deleteElement(partitionId2); TargetIModel.close(); //测试所插入的模型是否存在。 const testDb = SnapshotDb.openFile(sourceFileName, { password: "abcdef123456", }); const modelP = testDb.models.tryGetModelProps(partitionId); if (modelP) { console.log("测试成功"); console.log( "name = " + modelProps.name + "classfullName = " + modelProps.classFullName ); } }