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', ]; } }