123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- namespace App\BO;
- use App\Models\Enums\BimFileModelType;
- use Ramsey\Uuid\Uuid;
- class BimFileBO
- {
- public string $name;
- public string $initiatingUser;
- public string $extension;
- public bool $isCAD;
- public string $uniqueCode;
- public int $priority;
- public string $modelDownloadUrl;
- public array $pointCloudConfigJson;
- public string $modelType;
- public string $gisType;
- public array $configJson; //轻量化配置
- public function __construct(
- string $extension,
- string $name,
- string $initiatingUser = '',
- string $gisType = '',
- int $priority = 205,
- string $modelDownloadUrl = ''
- ) {
- $this->extension = $extension;
- $this->name = $name;
- $this->initiatingUser = $initiatingUser;
- $this->isCAD = in_array($this->extension, ['dwg', 'dwf', 'dws', 'dwt']);
- $this->uniqueCode = Uuid::uuid4();
- $this->priority = $priority;
- $this->modelDownloadUrl = $modelDownloadUrl;
- $this->gisType = $gisType;
- $this->configJson = [];
- $this->modelType = $this->guessModelType();
- }
- private function guessModelType(): string
- {
- if ($this->isCAD) {
- return BimFileModelType::CAD->value;
- }
- if (in_array($this->extension, config('bim.extensions'))) {
- return BimFileModelType::BIM->value;
- }
- if (in_array($this->extension, config('bim.gis_extensions')) || !empty($this->gisType)) {
- return BimFileModelType::GIS->value;
- }
- return '';
- }
- /**
- * 设置点云GIS相关信息
- * @param array $pointCloudConfig
- * @return void
- */
- public function setPointCloudConfigJson(array $pointCloudConfig)
- {
- // epsg代码,指定空间参考,格式如:"EPSG:3857"
- if (isset($pointCloudConfig['srs'])) {
- $this->pointCloudConfigJson['srs'] = $pointCloudConfig['srs'];
- }
- // 指定数据原点相对空间参考的偏移量,分为xyz三个方向,单位米,默认为不偏移[0,0,0],设置此值可以让数据往相应的方向偏移
- if (isset($pointCloudConfig['origin'])) {
- $this->pointCloudConfigJson['origin'] = $pointCloudConfig['origin'];
- }
- // 经度 弧度制
- if (isset($pointCloudConfig['longitude'])) {
- $this->pointCloudConfigJson['longitude'] = $pointCloudConfig['longitude'];
- }
- // 纬度 弧度制
- if (isset($pointCloudConfig['latitude'])) {
- $this->pointCloudConfigJson['latitude'] = $pointCloudConfig['latitude'];
- }
- // 高度
- if (isset($pointCloudConfig['height'])) {
- $this->pointCloudConfigJson['height'] = $pointCloudConfig['height'];
- }
- }
- public function setConfigJson($config)
- {
- if (empty($config)) {
- return;
- }
- $fields = array_keys(self::configJsonRules());
- foreach ($config as $key => $value) {
- if (in_array($key, $fields)) {
- $this->configJson[$key] = $config[$key];
- }
- }
- }
- public static function configJsonRules()
- {
- return [
- "style" => 'in:0,1', //轻量化模式 0:着色模式 1:真实模式 仅适用于 revit 格式的模型
- "zGrid" => 'in:0,1', //轴网设置 0:不导出轴网 1:导出轴网 仅适用于 revit 格式的模型
- "viewStyle" => 'in:0,1', //多视图设置 0:不导出多个视图 1:导出多视图 仅适用于 revit 格式的模型
- "drawing" => 'in:0,1', //模型图纸 0:不导出图纸 1:导出图纸 (需要授权二三维等功能)仅适用于 revit 和 tekla 格式的模型
- "accuracy" => 'in:1,2,3,4,5,6,7,8,9,10',//轻量化精度 值越大转出模型越精细,范围1~10; 默认值为5; 仅适用于 revit 和 bentley 格式的模型
- // "locationType" => 'in:0,1,3',//定位方式 0:内部原点到内部原点;1:通过共享坐标;3:项目基点到项目基点 默认为3,仅适用于 revit 格式的模型
- // "materialType" => 'in:0,1',//默认值0,表示轻量化用PBR材质还是普通材质,1表示(普通材质)云渲染版引擎需将materialType设置为0
- "isLod" => 'in:0,1',//是否启用Lod轻量化 0:不启用LOD,1:启用LOD
- "srs" => '',//坐标系对应EPSG代号
- "type" => 'in:2,4',//模型坐标偏移类型: 2:将模型中心点偏移为0点。 4:根据偏移量(offsetX,offsetY,offsetZ)偏移模型坐标。默认值为2
- "offsetX" => 'numeric',
- "offsetY" => 'numeric',
- "offsetZ" => 'numeric',
- 'srsOrigin' => 'array'
- ];
- }
- }
|