Commit 18b80c28 authored by 单奇雲's avatar 单奇雲

merge

parents 66fddfdb b6c2e1bb
{
"dataList": [
{ "id": 1, "thumb": "/a3dres/basicScene/station/thumb.png", "modelURI": "/a3dres/basicScene/station", "name": "station", "descr": "变电站" },
{ "id": 2, "thumb": "/a3dres/basicScene/cola/thumb.png", "modelURI": "/a3dres/basicScene/cola", "name": "cola", "descr": "可乐站" },
{ "id": 3, "thumb": "/a3dres/basicScene/beijing/thumb.png", "modelURI": "/a3dres/basicScene/beijing", "name": "beijing", "descr": "北京换流站" },
{ "id": 4, "thumb": "/a3dres/basicScene/beijing2/thumb.png", "modelURI": "/a3dres/basicScene/beijing2", "name": "beijing2", "descr": "北京换流站" },
{ "id": 5, "thumb": "/a3dres/basicScene/yinan/thumb.png", "modelURI": "/a3dres/basicScene/yinan", "name": "yinan", "descr": "沂南换流站" },
{ "id": 6, "thumb": "/a3dres/basicScene/ccpc/thumb.png", "modelURI": "/a3dres/basicScene/ccpc", "name": "ccpc", "descr": "北大街银行" },
{ "id": 7, "thumb": "/a3dres/basicScene/ccpc-xian/thumb.png", "modelURI": "/a3dres/basicScene/ccpc-xian", "name": "ccpc", "descr": "西安银行" },
{ "id": 8, "thumb": "/a3dres/basicScene/shm/thumb.png", "modelURI": "/a3dres/basicScene/shm", "name": "shm", "descr": "上海庙" }
],
"result": "SUCCESS"
}
This diff is collapsed.
# 目录说明
`index.json` 存放的是所有的元素控件配置信息
`baseScene.json` 存放的是基础场景配置信息
......@@ -60,6 +60,7 @@ const AsyncDifferentiate = props => <AsyncLoader load={import('./../view/bizview
const AsyncAlarmVideoMonitor = props => <AsyncLoader load={import('./../view/bizview/alarmVideoMonitor')} componentProps={props} />;
const AsyncAlarmTestView = props => <AsyncLoader load={import('./../view/bizview/alarm')} componentProps={props} />;
const AsyncCusVizLib = props => <AsyncLoader load={import('./../view/planMgmt/cusVizLib')} componentProps={props} />;
const AsyncGraph3DModel = props => <AsyncLoader load={import('amos-iot-3dgraph/lib/view/modelMgmt')} componentProps={props} />;
const Routes = {
......@@ -116,7 +117,8 @@ const Routes = {
differentiate: AsyncDifferentiate,
alarmVideoMonitor: AsyncAlarmVideoMonitor,
alarmTest: AsyncAlarmTestView,
vizlib: AsyncCusVizLib
vizlib: AsyncCusVizLib,
modelManage: AsyncGraph3DModel
};
const pageCompontent = key => {
......
......@@ -4,7 +4,6 @@ import notFound from 'amos-security/lib/routes/notfound';
import redirect from 'amos-security/lib/routes/notfound/redirect';
import signUp, { signupRouters } from 'amos-security/lib/routes/signUp';
import routerFilter, { checkLogin } from 'amos-security/lib/routes/validateRouter';
import PublishView from './../view/planMgmt/view';
import AutoLogin from './../view/autoLogin/AutoLogin';
import calcRoutes from './calcRoutes';
import addCustomRoutes, { customRoutes, planChildrenRoutes } from './customRoutes';
......@@ -17,10 +16,10 @@ import pageCompontent, {
RegionList
} from './view';
import Iot3DGraphBiz from './../view/planMgmt/iot3DGraph';
import ShareTextPlan from './../view/planMgmt/view/ShareTextPlan';
import PubView from './../view/planMgmt/view/pubview';
import TextPlan from './../view/planMgmt/view/TextPlan';
import PublishApp from 'amos-iot-3dgraph/lib/view/pubview';
import ModelEdit from 'amos-iot-3dgraph/lib/view/modelMgmt/edit/ModelEdit';
const groups = [
'main', 'biz', 'console', 'ruleConfig'
......@@ -32,15 +31,9 @@ const injectRoutes = menus => {
const bizChilds = addCustomRoutes(biz);
const consoleChilds = addCustomRoutes(consoleRoutes);
const routes = [
{
path: 'viz3d/:subjectId',
component: Iot3DGraphBiz
},
// {
// path: 'viz3dpub',
// component: PublishView,
// childRoutes: [...customRoutesPubView]
// },
{ path: 'viz3d/:subjectId', component: Iot3DGraphBiz },
{ path: 'viz3dpub', component: PublishApp },
{ path: 'models/:modelId', component: ModelEdit },
{ path: 'login', component: Login },
{ path: 'autologin', component: AutoLogin },
{ path: 'region', component: RegionList }, // 区域选择
......
......@@ -56,6 +56,7 @@ import RealTimeMonitor from './../view/morphic';
import PublishView from './../view/planMgmt/view';
import ModelManage from './../view/planMgmt/modelManage';
import LeaderStruct from './../view/planMgmt/view/leaderStruct';
import Graph3DModel from 'amos-iot-3dgraph/lib/view/modelMgmt';
const Routes = {
// 添加 rules 路由
......
......@@ -8,3 +8,7 @@ export const getOnlineWeather = (cityKey) => {
const url = `http://wthrcdn.etouch.cn/weather_mini?city=${cityKey}`;
return singleFetch(url);
};
export const conmmonGetService =(url) =>{
return singleFetch(url);
}
......@@ -161,7 +161,7 @@ class RiskSourceModel extends Component {
<FormItem label={<span>参考编号</span>} field="code" {...formItemLayout}>
<Input disabled={disabled} className="risk-model-input" required value={form.code} onChange={e => this.onSelectChange('code', e.target.value)} />
</FormItem>
{ (form.riskLevelId !== 0) &&
{ (form.riskLevelId !== 0 && isEdit) &&
<FormItem label={<span>风险等级</span>} field="riskLevelId" {...formItemLayout}>
<span style={{ lineHeight: '32px' }}>{this.getriskLevel(riskLevelData, form.riskLevelId)}</span>
</FormItem>
......
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { deepCopy } from 'amos-tool';
import A3DDesigner, { r3d, Connect, DESIGNER_CONSTS } from 'amos-3d/lib/designer';
import A3DDesigner, { r3d, Connect, DESIGNER_CONSTS,EVENT_CONSTS } from 'amos-3d/lib/designer';
import { A3DUtil } from 'amos-3d/lib/threeTools';
import WorkerObjContent from 'amos-3d/lib/worker/WorkerObjContent';
import { BaseObjHelper } from 'base-r3d/lib/factory';
import { ELEMENT_TYPE } from 'amos-iot-3dgraph/lib/view/pubview/../design/conf';
import { imageStyles } from 'amos-iot-3dgraph/lib/view/settingpanel/scenery/conf';
import imgStatic from 'amos-iot-3dgraph/lib/consts/imgStatic';
import { Button, Modal, Row, Col } from 'amos-framework';
import { PubSub } from 'ray-eventpool';
import { eventTopics } from './../../../3dview/consts';
import { conmmonGetService } from './../../../../services/commonServices';
import PlayTaskTabs from './taskTabs';
import Play from './play';
const { resizeConnect } = Connect;
const { Tools } = A3DUtil;
const { ANIMATION_CONSTS } = DESIGNER_CONSTS;
const { EVENT_TYPE_CORE } = EVENT_CONSTS;
/**
* 3d 执行器
......@@ -35,9 +39,9 @@ class StageActuator extends Component {
modelModal: false,//详情弹框
modalContent: '',
playing: false, //播放状态
detailData: '',
objs: [],//特效objs
detailData: ''
};
this.objs = [];//特效objs
}
componentDidMount() {
......@@ -241,122 +245,92 @@ class StageActuator extends Component {
this.cameraFactory = cameraFactory;
this.rendererFactory = stagePilot.rendererFactory;
this.r3d = r3d;
//单击
this.r3d.on('click', (evt) => {
console.log('click');
if (evt.object && evt.object.type === 'Mesh') {
const realObj = evt.object.parent;
const userData = realObj.userData;
if(userData && userData.dataConfig && userData.dataConfig.dataDetailUrl){
fetch(userData.dataConfig.dataDetailUrl)
.then(response => response.json())
.then(data => this.setState({ modelModal: true , detailData: data.dataList}));
}
if(userData.bubbleConfig && userData.bubbleConfig.displayMode == 'click'){
//该模型之前顶牌展示状态
userData.clickShow = userData.clickShow == undefined ? true : !userData.clickShow;
if(userData.clickShow){//判断之前是否显示
this.state.objs.find(e => e.uuid == realObj.uuid).baseObjHelper.title = userData.displayName || null;
}else{
this.state.objs.find(e => e.uuid == realObj.uuid).baseObjHelper.title = null;
}
}
}
// 设置 UI
// this.objAnchorHelper = new ObjAnchorHelper({
// r3d,
// cameraFactory,
// sceneFactory
// });
// 鼠标移入
this.r3d.on(EVENT_TYPE_CORE.MouseEnter, evt => {
console.log(evt);
// if (evt.object && evt.object._boh){
// evt.object._boh.style.color = 0xff00ff;
// }
});
// 双击事件
this.r3d.on('dblclick', (evt) => {
// console.log('dblclick');
});
// 鼠标移入事件
this.r3d.on('mouseover', (evt) => {
if (evt.object && evt.object.type === 'Mesh') {
const realObj = evt.object.parent;
const userData = realObj.userData;
//清除其他
this.state.objs.forEach(o => {
if(o.userData.bubbleConfig && o.userData.bubbleConfig.displayMode == 'hover'){
o.baseObjHelper.title = null;
}
});
if(userData.bubbleConfig && userData.bubbleConfig.displayMode == 'hover'){
this.state.objs.find(e => e.uuid == realObj.uuid).baseObjHelper.title = userData.displayName || null;
}
}
// 鼠标移出
this.r3d.on(EVENT_TYPE_CORE.MouseLeave, evt => {
console.log(evt);
// if (evt.object && evt.object._boh){
// evt.object._boh.style.color = null;
// }
});
// 鼠标移出事件
this.r3d.on('mouseout', (evt) => {
// console.log('mouseout');
if (evt.object && evt.object.type === 'Mesh') {
const realObj = evt.object.parent;
const userData = realObj.userData;
if(userData.bubbleConfig && userData.bubbleConfig.displayMode == 'hover'){
this.state.objs.find(e => e.uuid == realObj.uuid).baseObjHelper.title = null;
//单击
this.r3d.on(EVENT_TYPE_CORE.Click, (evt) => {
if (evt.button === 0 && evt.object && evt.object.type === 'Mesh') {
const userData = evt.object.parent.userData;
if(userData && userData.dataConfig && userData.dataConfig.dataDetailUrl){
conmmonGetService(userData.dataConfig.dataDetailUrl).then(
data => {
this.setState({ modelModal: true , detailData: data.dataList});
},
error =>{
console.error(userData.dataConfig.dataDetailUrl + '请求元素详情失败');
}
);
}
}
});
};
afterRender = () => {
}
handleModelParserData = (parser, fmtData) => {
// 将 eid 绑定到 parser 的 node 上
// Object.assign(parser.obj.userData, { eid: fmtData.eid, displayName: fmtData.displayName })
// or
parser.bindUserData(deepCopy(fmtData));
//为模型添加顶牌属性
let obj = parser.obj;
const boh = new BaseObjHelper({ obj });
obj.baseObjHelper = boh;
obj.baseObjHelper.titleConfig = {
// 顶牌平面参数
planeOptions: {
...obj.userData.displayName,
width: 256 * 0.1,
height: 128 * 0.1,
position:{ x: 0, y: 30, z: 0 },
},
canvasOptions: {
fillStyle: 'rgb(51, 51, 51)',
font: '32px sans-serif',
textBaseline: 'middle',
},
imgWidth: 256,
imgHeight: 128,
// 设置顶牌 图片路径
image: `/src/assets/planMgmt/center.png`
};
if(obj.userData.displayName && obj.userData.bubbleConfig && obj.userData.bubbleConfig.displayMode == 'show'){
obj.baseObjHelper.title = obj.userData.displayName;
}else{
obj.baseObjHelper.title = null;
// 将 fmtData 绑定到 parser 的 node.userData 上
// Object.assign(parser.obj.userData, fmtData)
parser.bindUserData(fmtData);
const { sceneryConfig: { visible, position, imgUrlKey } = {},displayName } = fmtData;
const image = imageStyles.filter(image => image.key === imgUrlKey);
const imageUrl = image.length > 0 ? image[0].imgUrl : imgStatic.defaultScenery ;
if (visible) {
parser.objHelper.titleConfig = {
planeOptions: {
width: 256 * 0.1,
height: 128 * 0.1,
// 顶牌相对于 parser 模型的位置
position,
// 是否双面
doubleSide: true
},
canvasOptions: {
fillStyle: 'rgb(51, 51, 51)',
font: '32px sans-serif',
textBaseline: 'middle'
},
// 设置顶牌大小及图片路径
imgWidth: 256,
imgHeight: 128,
image: imageUrl
};
parser.objHelper.title = displayName;
}
this.state.objs.push(obj);
this.objs.push(parser.obj);
}
/** 处理所有的模型解析完毕之后 */
handleModelParserDone = (modelParser) => {
const { content } = this.props;
// const modelExistAttach = content.filter(userData => userData.attachments && userData.attachments.length > 0 );
// 改变模型关联关系
// modelExistAttach.forEach(userData =>{
// const parentObj = modelParser.get(userData.eid);
// userData.attachments.forEach(eid=>{
// const attachModel = modelParser.get(eid);
// attachModel && parentObj.attach(attachModel);
// });
// });
}
/** 处理所有的模型解析完毕之后 */
handleModelParserDone = (modelParser) => {
const { content } = this.props;
const modelExistAttach = content.filter(userData => userData.attachments && userData.attachments.length > 0 );
// 改变模型关联关系
modelExistAttach.forEach(userData =>{
const parentObj = modelParser.get(userData.eid);
userData.attachments.forEach(eid=>{
const attachModel = modelParser.get(eid);
if (attachModel){
// attachModel.node.position.set(0,10,0);
parentObj.attach(attachModel);
}
});
});
}
//model start
getContext = () => {
......@@ -432,6 +406,7 @@ class StageActuator extends Component {
baseObjs={baseObjs}
ref={node => this.a3dRef = node}
disabledEdit
enableObjOutline
enablePen
penProps={penProps}
enableParticles
......
......@@ -21,8 +21,8 @@ class taskTabs extends Component {
this.state = {
taskTabsShow: true,
tabs:[
{key:1, type:'person', icon:'person', models:[]},
{key:2, type:'car', icon:'car', models:[]}
{key:1, type:'human', icon:'person', models:[]},
{key:2, type:'vehicle', icon:'car', models:[]}
],
activeKey: '',
};
......@@ -31,8 +31,8 @@ class taskTabs extends Component {
componentDidMount(){
let { tabs } = this.state;
let models = this.props.content || [];
tabs[0].models = models.filter(e => e.key.indexOf('person') != -1);
tabs[1].models = models.filter(e => e.key.indexOf('car') != -1);
tabs[0].models = models.filter(e => e.stuffType === 'human');
tabs[1].models = models.filter(e => e.stuffType === 'vehicle');
this.setState({ tabs });
this.tabsPubsub = PubSub.subscribe(eventTopics.plan_task_list,function(topic,message){
......@@ -49,8 +49,8 @@ class taskTabs extends Component {
if (!fastDeepEqual(prevProps.content, this.props.content)){
let { tabs } = this.state;
let models = this.props.content|| [];
tabs[0].models = models.filter(e => e.key.indexOf('person') != -1);
tabs[1].models = models.filter(e => e.key.indexOf('car') != -1);
tabs[0].models = models.filter(e => e.stuffType === 'human');
tabs[1].models = models.filter(e => e.stuffType === 'vehicle');
this.setState({ tabs });
}
}
......
......@@ -11,7 +11,6 @@
{ "objName": "ground_01.obj", "mtlName": "ground_01.mtl", "modelLevel": "Park" },
{ "objName": "ground_02.obj", "mtlName": "ground_02.mtl", "modelLevel": "Park"},
{ "objName": "guandao_02.obj", "mtlName": "guandao_02.mtl", "modelLevel": "Park" },
{ "objName": "gis.obj", "mtlName": "gis.mtl", "modelLevel": "Building" },
{ "objName": "gis_guandao_01.obj", "mtlName": "gis_guandao_01.mtl", "modelLevel": "Building" },
{ "objName": "gis_guandao_02.obj", "mtlName": "gis_guandao_02.mtl", "modelLevel": "Building" },
......@@ -29,13 +28,9 @@
{ "objName": "gis_guandao_14.obj", "mtlName": "gis_guandao_14.mtl", "modelLevel": "Building" },
{ "objName": "gis_guandao_15.obj", "mtlName": "gis_guandao_15.mtl", "modelLevel": "Building" },
{ "objName": "gis_guandao_16.obj", "mtlName": "gis_guandao_16.mtl", "modelLevel": "Building" },
{ "objName": "szn_00.obj", "mtlName": "szn_00.mtl", "modelLevel": "Building" },
{ "objName": "szn_01.obj", "mtlName": "szn_01.mtl", "modelLevel": "Building" },
{ "objName": "szn_02.obj", "mtlName": "szn_02.mtl", "modelLevel": "Building" },
{ "objName": "szn_03.obj", "mtlName": "szn_03.mtl", "modelLevel": "Building" },
{ "objName": "szn_04.obj", "mtlName": "szn_04.mtl", "modelLevel": "Building" },
{ "objName": "szn_05.obj", "mtlName": "szn_05.mtl", "modelLevel": "Building" },
{ "objName": "szn_06.obj", "mtlName": "szn_06.mtl", "modelLevel": "Building" },
......@@ -49,24 +44,6 @@
{ "objName": "szn_22.obj", "mtlName": "szn_22.mtl", "modelLevel": "Building" },
{ "objName": "szn_23.obj", "mtlName": "szn_23.mtl", "modelLevel": "Building" },
{ "objName": "szn_24.obj", "mtlName": "szn_24.mtl", "modelLevel": "Building" },
{ "objName": "valve-hall_01.obj", "mtlName": "valve-hall_01.mtl", "modelLevel": "Building", "foreignKey": "valve-hall_01" },
{ "objName": "valve-hall_02.obj", "mtlName": "valve-hall_02.mtl", "modelLevel": "Building", "foreignKey": "valve-hall_02" },
{ "objName": "valve-hall_03.obj", "mtlName": "valve-hall_03.mtl", "modelLevel": "Building", "foreignKey": "valve-hall_03" }
......@@ -114,15 +91,10 @@
]}
],
"asyncModels": [
{ "objName": "hlb_01.obj", "mtlName": "hlb_01.mtl", "modelLevel": "Building" },
{ "objName": "hlb_02.obj", "mtlName": "hlb_02.mtl", "modelLevel": "Building" },
{ "objName": "hlb_03.obj", "mtlName": "hlb_03.mtl", "modelLevel": "Building" },
{ "objName": "hlb_04.obj", "mtlName": "hlb_04.mtl", "modelLevel": "Building" },
{ "objName": "fkl_01.obj", "mtlName": "fkl_01.mtl", "modelLevel": "Building" },
{ "objName": "fkl_02.obj", "mtlName": "fkl_02.mtl", "modelLevel": "Building" },
{ "objName": "fklt_01.obj", "mtlName": "fklt_01.mtl", "modelLevel": "Building" },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment