Geant4学习之CAD模型导入(1)


Geant4中CAD模型导入必要性

三维实体建模方法:
边界表示法(Boundary Pepresentation,BRep)
在这里插入图片描述
构造实体几何表示法(Constructive Solid Geometry,CSG)

在这里插入图片描述
Geant4自带的建模方式为构造实体几何表示法(Constructive Solid Geometry,CSG),对于初学者来说建模不方便,所以可以使用CAD建模软件画图并直接导入Geant4。

CAD模型导入方法

Geant4直接建模方法(这里介绍两种CAD导入方法):

CAD→GDML→Geant4
	CAD数据转换为几何描述标记性语言(GDML)接口导入Geant4(FastRAD、SuperMC、FreeCAD等)
CAD→STL→Geant4
	CAD数据转换为三角面元(mesh)几何文件导入Geant4(CADmesh接口、FreeCAD)

本篇主要讲解如何将CAD模型转换为STL格式文件导入Geant4中自动建模,并实现材料设置,大小变化、坐标迁移等。

CAD模型导入Geant4过程

(一)、CADMesh开源代码

CADMesh的源码链接放在文章结尾处,下载解压后如下图所示:
在这里插入图片描述
首先查看源代码目录下的README.md文件,在CADMesh根目录下的CADMesh.hh头文件,直接拷贝到include目录中,便可以使用CADMesh了,可以调用的格式有STL,PLY,OBJ。

# CADMesh		//讲解了使用CADMesh的方法

Load triangular mesh based CAD files into Geant4 quickly and easily.

```cpp
    #include "CADMesh.hh"		//CADMesh.hh头文件
    ....
    auto mesh = CADMesh::TessellatedMesh::FromPLY("mesh.ply");		//定义mesh变量
    G4VSolid* solid = mesh->GetSolid();								//转化成Solid实体
    ...
    Copy `CADMesh.hh` to the `includes` directory of your project.
	That's it.

(二)、如何修改代码实现CAD模型导入

1.CADMesh.hh

第一步需要将刚刚下载的CADMesh源码目录下的CADMesh.hh复制到自己项目的include目录下,如下图所示:

在这里插入图片描述

2.CMakeLists.txt

第二步在CADMesh根目录下的meshes文件夹内找到扩展名为.stl的box_solidworks.stl,复制到自己项目的根目录下,然后按照下图所示修改CMakeLists.txt,将box_solidworks.stl添加到(test_SCRIPTS)中,如下图所示:
在这里插入图片描述

3.DetectorConstruction.cc

在DetectorConstruction.cc内加入 #inlcude CADMesh.hh,如下图所示:
在这里插入图片描述然后在DetectorConstruction.cc引入实体:

   // CADMesh :: STL //
	auto test = CADMesh::TessellatedMesh::FromSTL("./box_solidworks.stl");
	test->SetScale(1);											//设置模型大小比例
	test->SetOffset(0,0,0);										//设置模型与坐标原点的相对位置
    auto logicaltest = new G4LogicalVolume( test->GetSolid()
                                             , Al								//引入logicalvolume,设置材料
                                             , "logical"
                                             , 0, 0, 0);
    new G4PVPlacement( 0
                     , G4ThreeVector()
                     , logicaltest
                     , "test"
                     , logicWorld
                     , false, 0);

4.运行编译

编译程序,运行,如下图所示:
在这里插入图片描述
在这里插入图片描述

总结&&CADMesh源码链接

按照以上步骤便可实现CAD模型直接导入Geant4中,关于STL格式文件如何生成将在后续的文章中更新,如需文章中展示的项目源码,可在评论区或私信联系我。如果觉得对您有所帮助,记得点个赞哦!
附上CADMesh源码链接提取码:LGY6

  • 24
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
Geant4 B1例程是Geant4官方提供的一个基础的粒子物理模拟程序,用于介绍Geant4的基本概念和使用方法。下面是对B1例程的详细解读: 1. 主程序:B1.cc B1.cc是B1例程的主程序。在主程序中,定义了一个B1DetectorConstruction类和一个B1ActionInitialization类的实例,并调用了G4RunManager类的Initialize()和BeamOn()函数,完成Geant4模拟运行的初始化和运行操作。 2. B1DetectorConstruction类 B1DetectorConstruction类是B1例程中的探测器构建类。在该类中,定义了一个立方体探测器,并设置了其材料、大小和位置等属性。同时,还定义了一个世界空间,并将该立方体探测器置于其中。在Geant4模拟运行中,该类用于构建探测器几何结构。 3. B1PrimaryGeneratorAction类 B1PrimaryGeneratorAction类用于定义粒子源。在该类中,定义了一个粒子源,并设置了其位置和初始动量等属性。在Geant4模拟运行中,该类用于生成初始粒子。 4. B1RunAction类 B1RunAction类用于定义每次模拟运行结束后的操作。在该类中,定义了输出模拟结果的操作,并将模拟结果保存到文件中。在Geant4模拟运行中,该类用于输出模拟结果。 5. B1EventAction类 B1EventAction类用于定义每个事件结束后的操作。在该类中,定义了统计能量沉积和计数器等操作,并将结果保存到B1Analysis类中。在Geant4模拟运行中,该类用于统计每个事件的能量沉积。 6. B1SteppingAction类 B1SteppingAction类用于定义每个粒子每次运动结束后的操作。在该类中,定义了统计能量沉积和计数器等操作,并将结果保存到B1Analysis类中。在Geant4模拟运行中,该类用于统计每个粒子每次运动的能量沉积。 7. B1ActionInitialization类 B1ActionInitialization类用于初始化B1例程中的所有动作类。在该类中,初始化了B1PrimaryGeneratorAction、B1RunAction、B1EventAction和B1SteppingAction类的实例,并将其传递给G4VUserActionInitialization类。 8. B1Analysis类 B1Analysis类用于定义模拟结果的输出格式和保存方法。在该类中,定义了输出文件的格式和存储路径,并提供了将模拟结果保存到文件的方法。在Geant4模拟运行中,该类用于保存模拟结果。 总之,B1例程是一个基础的Geant4粒子物理模拟程序,包含了探测器构建、粒子源定义、模拟结果输出和统计等基本内容。通过学习B1例程,可以了解Geant4的基本概念和使用方法,并且可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leekuangyee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值