From 564d1e06fa0e8c8213505a55310419889a510524 Mon Sep 17 00:00:00 2001 From: cx Date: Wed, 2 Aug 2017 23:59:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 27 +++++++ package.json | 2 +- src/DatabaseServices/Entity.ts | 26 ++++--- src/DatabaseServices/EntityData.quo.ts | 104 +++++++++++++++++++++++++ src/DatabaseServices/EntityData.ts | 96 ++++++----------------- 5 files changed, 170 insertions(+), 85 deletions(-) create mode 100644 src/DatabaseServices/EntityData.quo.ts diff --git a/package-lock.json b/package-lock.json index 9570d6c0d..7b2160d30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -458,6 +458,12 @@ } } }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "asap": { "version": "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz", "integrity": "sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=" @@ -16240,6 +16246,12 @@ } } }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -16275,6 +16287,15 @@ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", "dev": true }, + "v8flags": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.0.tgz", + "integrity": "sha512-AGl+C+4qpeSu2g3JxCD/mGFFOs/vVZ3XREkD3ibQXEqr4Y4zgIrPWW124/IKJFHOIVFIoH8miWrLf0o84HYjwA==", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, "vary": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", @@ -18863,6 +18884,12 @@ } } }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, "zip-object": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/zip-object/-/zip-object-0.1.0.tgz", diff --git a/package.json b/package.json index 1f0bf60b6..295952798 100644 --- a/package.json +++ b/package.json @@ -73,4 +73,4 @@ "js" ] } -} +} \ No newline at end of file diff --git a/src/DatabaseServices/Entity.ts b/src/DatabaseServices/Entity.ts index c585b623d..e27dd2a40 100644 --- a/src/DatabaseServices/Entity.ts +++ b/src/DatabaseServices/Entity.ts @@ -2,7 +2,7 @@ import * as THREE from "three" import { OBB } from '../Geometry/OBB/obb'; import { Database } from './Database'; import { Vector3 } from 'three'; -import { IEntityData, EntityData, LineData } from './EntityData'; +import { IEntityData, EntityData, LineData, ILineData } from './EntityData'; var baseColor = 0x333333; var foundColor = 0x12C0E3; var intersectColor = 0x00D66B; @@ -92,18 +92,16 @@ export class Curve extends Entity export class Line extends Curve { - private m_StartPoint: THREE.Vector3 = new THREE.Vector3(); - private m_EndPoint: THREE.Vector3 = new THREE.Vector3(); constructor(startPt: THREE.Vector3, endPt: THREE.Vector3) { super(); - this.m_StartPoint.copy(startPt); - this.m_EndPoint.copy(endPt); - + let data = this.m_Data; + data.setStartPoint(startPt); + data.setEndPoint(endPt); var geometry = new THREE.Geometry(); - geometry.vertices.push(this.m_StartPoint); - geometry.vertices.push(this.m_EndPoint); + geometry.vertices.push(data.StartPoint); + geometry.vertices.push(data.EndPoint); //create a blue LineBasicMaterial var material = new THREE.LineBasicMaterial(); this.m_ThreeObj = new THREE.Line(geometry, material); @@ -114,11 +112,19 @@ export class Line extends Curve } GetGripPoints(): Array { - return [this.m_StartPoint, this.m_EndPoint]; + return [this.StartPoint, this.EndPoint]; } getStretchPoints(): Array { - return [this.m_StartPoint, this.m_EndPoint]; + return [this.StartPoint, this.EndPoint]; + } + get StartPoint(): THREE.Vector3 + { + return (this.m_Data).StartPoint; + } + get EndPoint(): THREE.Vector3 + { + return (this.m_Data).EndPoint; } //http://jsfiddle.net/hjx3rLmt/1/ diff --git a/src/DatabaseServices/EntityData.quo.ts b/src/DatabaseServices/EntityData.quo.ts new file mode 100644 index 000000000..13df029d5 --- /dev/null +++ b/src/DatabaseServices/EntityData.quo.ts @@ -0,0 +1,104 @@ + +import { LineData, DBData, ILineData, IEntityData, EntityData } from './EntityData'; +import * as mst from 'mobx-state-tree'; +import * as THREE from "three"; +import { autorun } from 'mobx'; + +{ + + let l = LineData.create(); + let db = DBData.create({ enList: [] }); + mst.onPatch(db, + p => + { + console.log(p); + }, + true) + db.addEntity(l); + db.addEntity(LineData.create()); + // db.clearEntity(); + let l2 = db.getEntity(); + + console.log(l.StartPoint); + + l.setSize(1, 2, 3) + l.setStartPoint(new THREE.Vector3(0, 0, 0)) + console.log(mst.getSnapshot(l)); + + + l.setErase(true); + console.log( + db.enList.filter(o => + { + return !o.isErase; + }) + ); + + let snp = mst.getSnapshot(db) + + let l3 = LineData.create(); + db.addEntity(l3); + mst.applySnapshot(db, snp); + console.log(l3.StartPoint); +} + + +class E +{ + m_Data: IEntityData; + constructor() + { + this.initData(); + + autorun(() => + { + this.eraseT(this.m_Data.isErase); + }) + } + initData() + { + this.m_Data = EntityData.create(); + console.log("hello e"); + } + erase(isErase: boolean) + { + this.m_Data.setErase(isErase); + } + private eraseT(isErase: boolean) + { + console.log(isErase); + } +} + +class L extends E +{ + constructor() + { + super() + } + initData() + { + this.m_Data = LineData.create(); + console.log("hello l"); + } +} + +{ + let l = new L() + console.log(mst.getSnapshot(l.m_Data)); + + let snp = mst.getSnapshot(l.m_Data); + + l.erase(true); + l.erase(true); + l.erase(true); + l.erase(true); + l.erase(true); + + console.log(l.m_Data.isErase); + + mst.applySnapshot(l.m_Data, snp); + + console.log(l.m_Data.isErase); +} + diff --git a/src/DatabaseServices/EntityData.ts b/src/DatabaseServices/EntityData.ts index f87a5e960..ed20251eb 100644 --- a/src/DatabaseServices/EntityData.ts +++ b/src/DatabaseServices/EntityData.ts @@ -1,8 +1,5 @@ import * as mst from 'mobx-state-tree'; import * as THREE from "three"; -import { autorun } from 'mobx'; -import { Line } from './Entity'; - const PointData = mst.types.optional(mst.types.array(mst.types.number), [0, 0, 0]); type IPointData = typeof PointData; @@ -26,6 +23,10 @@ export const EntityData = mst.types.model( { this.size = [x, y, z]; }, + setErase(isErase: boolean) + { + this.isErase = isErase; + }, afterCreate() { } @@ -52,13 +53,20 @@ export const LineData = mst.types.compose( { return toVec3(this.startPoint); }, + get EndPoint(): THREE.Vector3 + { + return toVec3(this.entPoint) + } }, { - setStartPoint(pt: THREE.Vector3) { this.startPoint = pt.toArray(); - } + }, + setEndPoint(pt: THREE.Vector3) + { + this.startPoint = pt.toArray(); + }, } ) @@ -75,13 +83,19 @@ export const DBData = mst.types.model( { this.enList.push(ent); }, - removeEntity() + removeEntity(ent: IEntityData) { - this.enList.remove(this.enList[0]) + this.enList.remove(ent) }, clearEntity() { - this.enList = []; + this.enList.forEach(e => + { + if (e.isErase) + { + this.removeEntity(e); + } + }) } , getEntity(): IEntityData @@ -90,69 +104,3 @@ export const DBData = mst.types.model( } } ) - - - -{ - - let l = LineData.create(); - let db = DBData.create({ enList: [] }); - mst.onPatch(db, - p => - { - console.log(p); - }, - true) - db.addEntity(l); - db.addEntity(LineData.create()); - // db.clearEntity(); - let l2 = db.getEntity(); - - autorun(() => - { - let a = l.StartPoint; - console.log(a); - console.log("chang"); - }) - - console.log(l.StartPoint); - - l.setSize(1, 2, 3) - l.setStartPoint(new THREE.Vector3(0, 0, 0)) - console.log(mst.getSnapshot(l)); - -} - - - -class E -{ - m_Data: IEntityData; - constructor() - { - this.initData(); - } - initData() - { - this.m_Data = EntityData.create(); - console.log("hello e"); - } -} - -class L extends E -{ - constructor() - { - super() - } - initData() - { - this.m_Data = LineData.create(); - console.log("hello l"); - } -} - -{ - let l = new L() - console.log(mst.getSnapshot(l.m_Data)); -} \ No newline at end of file