123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- import Point from '../../core/point'
- import WallLine from '../../core/wallline'
- import {LineArchClass as LineArch} from '../../architecture/linearch'
- import { _Point, _Line, _window, _door, _column, Data, That, _tagging, _groundCase, _bayCase, _furnColumn, _furnFlue, _slideDoor, _doubledoor } from './index'
- import Door from '../../architecture/door/index'
- import Casement from '../../architecture/casement'
- import Column from '../../architecture/column'
- import Tagging from '../../label/tagging'
- import GroundCase from '../../architecture/groundCase'
- import BayCase from '../../architecture/bayCase'
- import DoubleDoor from '../../architecture/doubleDoor'
- import FurnColumn from '../../furniture/column'
- import FurnFlue from '../../furniture/flue'
- import { FurnClass as Furn } from '../../furniture/furn'
- import SlideDoor from '../../architecture/slideDoor'
- export interface dataApi {
- getNewPointId: () => number
- getNewLineId: () => number
- getLineId: (line: WallLine) => number
- getPointId: (point: Point) => number
- baseArchToData: (ele: LineArch) => _door
- roomArchToData: (ele: Furn) => _furnColumn
- pointToData: (ele: {ele: Point, id: number}) => _Point
- lineToData: (ele: {ele: WallLine, id: number}) => _Line
- doorToData: (ele: {ele: Door}) => _door
- DoubleDoorToData: (ele: {ele: DoubleDoor}) => _doubledoor
- slideDoorToData: (ele: {ele: Door}) => _slideDoor
- caseToData: (ele: {ele: Casement}) => _window
- groundCaseToData: (ele: {ele: GroundCase}) => _groundCase
- BayCaseToData: (ele: {ele: BayCase}) => _bayCase
- columnToData: (ele: {ele: Column}) => _column
- taggingToData: ({ele}: {ele: Tagging}) => _tagging,
- furnColumnToData: (ele: {ele: FurnColumn}) => _furnColumn,
- furnFlueToData: (ele: {ele: FurnFlue}) => _furnFlue
- toData: () => Data
- }
- const numRetain = (n: number, m = 2) => Number(n.toFixed(m))
- export const methods: That = {
- baseArchToData(ele: LineArch) {
- return {
- line: this.getLineId(ele.attachment),
- pos: [
- numRetain(ele.linePoints[0].x), numRetain(ele.linePoints[0].y),
- numRetain(ele.linePoints[1].x), numRetain(ele.linePoints[1].y)
- ],
- top: ele.top,
- bottom: ele.bottom
- }
- },
- roomArchToData(ele: FurnColumn) {
- return {
- pos: [
- numRetain(ele.points[0].x), numRetain(ele.points[0].y),
- numRetain(ele.points[1].x), numRetain(ele.points[1].y),
- numRetain(ele.points[2].x), numRetain(ele.points[2].y),
- numRetain(ele.points[3].x), numRetain(ele.points[3].y)
- ],
- top: ele.top,
- bottom: ele.bottom,
- angle: ele.angle
- }
- },
- pointToData({ele, id}) {
- return {
- id,
- x: numRetain(ele.x), y: numRetain(ele.y)
- }
- },
- lineToData({ele, id, border}) {
- return {
- id,
- p1: this.getPointId(ele.points[0]),
- p2: this.getPointId(ele.points[1]),
- border,
- exterior: ele.exterior
- }
- },
- doorToData ({ele}: {ele: Door}) {
- let data = this.baseArchToData(ele)
- data.within = ele.within
- data.show = ele.show
- data.ctl = [ele.ctl[0].x, -ele.ctl[0].y]
- data.start = ele.start
- return data
- },
- DoubleDoorToData ({ele}: {ele: Door}) {
- let data = this.baseArchToData(ele)
- data.within = ele.within
- data.show = ele.show
- return data
- },
- slideDoorToData ({ele}: {ele: SlideDoor}) {
- let data = this.baseArchToData(ele)
- data.within = ele.within
- data.show = ele.show
- return data
- },
- caseToData ({ele}: {ele: Casement}) {
- return this.baseArchToData(ele)
- },
- groundCaseToData ({ele}: {ele: GroundCase}) {
- return this.baseArchToData(ele)
- },
- BayCaseToData ({ele}: {ele: BayCase}) {
- let data = this.baseArchToData(ele)
- data.within = ele.within
- data.ctl = [ele.ctl[0].x, -ele.ctl[0].y, ele.ctl[1].x, -ele.ctl[1].y]
- return data
- },
- columnToData ({ele}: {ele:Column}) {
- let data = this.baseArchToData(ele)
- return {
- ...data,
- pos: [
- ...data.pos,
- numRetain(ele.points[3].x), numRetain(ele.points[3].y),
- numRetain(ele.points[2].x), numRetain(ele.points[2].y)
- ]
- }
- },
- taggingToData ({ele}: {ele: Tagging}) {
- return {
- pos: [ele.x, ele.y],
- title: ele.title,
- content: ele.content,
- showTitle: ele.showTitle,
- showContent: ele.showContent
- }
- },
- furnColumnToData ({ele}: {ele: FurnColumn}) {
- return this.roomArchToData(ele)
- },
- furnFlueToData ({ele}: {ele: FurnFlue}) {
- return this.roomArchToData(ele)
- },
-
- getNewPointId() {
- if (this.points.length === 0) {
- return 1
- } else {
- return Math.max(...this.points.map(({id}) => id)) + 1
- }
- },
- getNewLineId() {
- if (this.lines.length === 0) {
- return 1
- } else {
- return Math.max(...this.lines.map(({id}) => id)) + 1
- }
- },
- getLineId (line: WallLine) {
- let l = this.lines.find(({ele}) => ele === line)
- return l ? l.id : 0
- },
- getPointId (point: Point) {
- return this.points.find(({ele}) => ele === point).id
- },
- // 将ele转换为data
- toData (): Data {
- let vertex = this.points.map(a => this.pointToData(a))
- let column = this.columns.map(a => this.columnToData(a))
- let window = this.cases.map(a => this.caseToData(a))
- let door = this.doors.map(a => this.doorToData(a))
- let slideDoor = this.slideDoors.map(a => this.slideDoorToData(a))
- let groundCase = this.groundCases.map(a => this.groundCaseToData(a))
- let tagging = this.taggings.map(a => this.taggingToData(a))
- let bayCase = this.bayCases.map(a => this.BayCaseToData(a))
- let doubleDoor = this.doubleDoors.map(a => this.DoubleDoorToData(a))
- let furnColumn = this.furnColumns.map(a => this.furnColumnToData(a))
- let furnFlue = this.furnFlues.map(a => this.furnFlueToData(a))
- let wall = []
- this.lines.forEach(a => {
- try {
- wall.push(this.lineToData(a))
- } catch {
- }
- })
- return {
- id: this.id,
- show: this.show,
- vertex, wall,
- window, door, column,
- surplus: this.data.surplus,
- slideDoor, groundCase, tagging, doubleDoor,
- bayCase, furnColumn, furnFlue,
- dire: this.data.dire
- }
- }
- }
|