Blender+Geant4一文入门3D模型文件导入

December 17, 2023
测试
测试
测试
测试
5 分钟阅读

与专业3D建模软件相比,geant4的3D绘制低效且不直观。如果你既想要3D的灵活设计,又想Geant4把它用起来,做到从图1到图2的效果:

图1. 一个通用编码成像模型

图2. 将3D模型导入Geant4

目录

1. Blender绘制3D模型并导出为*.obj格式文件

2. Geant4导入*.obj文件并抽取3D模体

3. 总结与展望

1. Blender绘制3D模型并导出为*.obj格式文件

a. Blender简单介绍

官网www.blender.org,开源3D设计软件,功能强大,入门学习资料见

https://docs.blender.org/manual/en/latest/。

b. 建模操作入门

Blender默认长度单位为m,可在“Properties”栏目->Scene->Units->Length中,更改长度显示单位。

图3. 更改Blender显示长度单位

c. 巧用阵列修改器,构建自己想要的规律排布阵列

我们来看如何创建一个10*10的长条阵列,单元尺寸2*2*15mm3,单元间隔2.5mm:

1. 创建一个单元尺寸长条:

快捷键N/n调出场景属性栏,Item->Dimensions中设置长条几何,然后View->ClipStart设置的小一点如0.01mm,表示场景视野的可显示最小尺度(再小就不予显示)。

图4 长条几何与显示设置

2. 添加阵列修改器,并添加材质属性:

选中长条以后,在“Properties”栏目->Add Modifier->Array中,总共添加X/Y方向两个Array偏移,形成阵列。

图5-1 给长条添加X和Y方向的阵列偏移

将阵列Item->Location调整到中心位置处,并在属性栏中材质选项添加材质显示效果。此外快捷键shift+A添加一个或多个光源Light,来优化视觉效果,菜单栏->Render可以渲染当前场景。

图5-2 添加材质

3. 给目标模体命名:

在”Scene Collection”->Collection图层中,对模体重命名,包括实体和顶点编辑组。

图6 模体名字修改

4. 导出*.obj文件:

一同默认导出的还有*.mtl材质文件,G4中用不到。菜单栏中File->Export->Wavefront(.obj)导出*.obj文件。

图7 *.obj文件导出

2. Geant4导入*.obj文件并抽取3D模体

a. CADMesh基本操作

https://github.com/christopherpoole/CADMesh,

1) 将CADMesh.hh拷贝到/B1/include/下

2) 将*.obj模型文件存入/B1/下

3) 在/B1/B1DetectorConstruction.cc中#include ”CADMesh.hh”

4) 导入模型

b. Geant4导入操作

1. 参见Blender中对不同模体的命名:

图8 不同模体的命名

2. 导出文件名为20200708-mura19camera.obj,存入/B1/,vi *.obj打开看一看:

图9 vi打开*.obj

可以在vi命令模式下搜索:/mask19、:/baso4,确保三个模体命名没问题。

3. Geant4中/B1/B1DetectorConstruction.cc的具体代码实现:

auto mesh =CADMesh::TessellatedMesh::FromOBJ("20200708-mura19camera.obj");
mesh->SetScale(1000.0);
//to change the Blender default basic unit(m) to mm
G4VSolid*solid[3];
G4Stringmeshname[3]={"mask19","baso4","scintillator"};
G4LogicalVolume*logic[3];
for (inti=0;i<3;i++)
{ 
    solid[i] =mesh->GetSolid(meshname[i]);          
    logic[i]=newG4LogicalVolume(solid[i],env_mat,meshname[i]);             
    new G4PVPlacement(0,G4ThreeVector(),logic[i],meshname[i],logicWorld,false,0,checkOverlaps);
//此段代码仅作演示,实际上solid[2]需要放置到solid[1]当中。
}

注意:当采用默认G4ThreeVector()时,三者的相对及绝对位置与Blender一致,事实上很多情况下反而会带来麻烦,我们本希望每个抽取的solid的中心默认位置为(0,0,0)。

4. 总结与展望

从Blender建模到导入Geant4可以概括为以下几点:

  1. 在Blender中建立模型,注意模体命名包括实体及顶点编辑组;
  2. 在Geant4中按名字导入solid,注意单位换算,solid初始默认位置与Blender一致。

展望:

通过官网学习资料,对于Blender达到基本的几何建模要求少则几天,且配合其动画演示可以丰富自己设计的展示。*.obj格式将3D几何存储为纯文本ASCII文件,可以打开查看,每个模体名字后跟随其相关的顶点和面坐标。待熟练整个流程后,便是简单的Blender建模加Geant4使用。

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多