Spaces:
Runtime error
Runtime error
Zai
commited on
Commit
·
b4ef065
1
Parent(s):
39f9c02
try again
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- Dockerfile +5 -6
- Interface/House/__init__.py +0 -0
- Interface/House/__pycache__/__init__.cpython-311.pyc +0 -0
- Interface/House/__pycache__/__init__.cpython-37.pyc +0 -0
- Interface/House/__pycache__/settings.cpython-311.pyc +0 -0
- Interface/House/__pycache__/settings.cpython-37.pyc +0 -0
- Interface/House/__pycache__/urls.cpython-311.pyc +0 -0
- Interface/House/__pycache__/urls.cpython-37.pyc +0 -0
- Interface/House/__pycache__/wsgi.cpython-37.pyc +0 -0
- Interface/House/asgi.py +0 -16
- Interface/House/settings.py +0 -127
- Interface/House/urls.py +0 -37
- Interface/House/wsgi.py +0 -16
- Interface/Houseweb/__init__.py +0 -0
- Interface/Houseweb/__pycache__/__init__.cpython-311.pyc +0 -0
- Interface/Houseweb/__pycache__/__init__.cpython-37.pyc +0 -0
- Interface/Houseweb/__pycache__/create.cpython-37.pyc +0 -0
- Interface/Houseweb/__pycache__/floorplan2.cpython-37.pyc +0 -0
- Interface/Houseweb/__pycache__/network.cpython-37.pyc +0 -0
- Interface/Houseweb/__pycache__/utils.cpython-37.pyc +0 -0
- Interface/Houseweb/__pycache__/utils1.cpython-37.pyc +0 -0
- Interface/Houseweb/__pycache__/views.cpython-311.pyc +0 -0
- Interface/Houseweb/__pycache__/views.cpython-37.pyc +0 -0
- Interface/Houseweb/admin.py +0 -3
- Interface/Houseweb/apps.py +0 -5
- Interface/Houseweb/migrations/__init__.py +0 -0
- Interface/Houseweb/models.py +0 -3
- Interface/Houseweb/tests.py +0 -3
- Interface/Houseweb/views.py +0 -757
- Interface/Img/data.mat.png +0 -0
- Interface/Img/data_test_converted.png +0 -0
- Interface/Img/data_train_converted.png +0 -0
- Interface/Img/interface.jpg +0 -0
- Interface/Img/paper.png +0 -0
- Interface/align_fp/align_adjacent_room3.m +0 -121
- Interface/align_fp/align_fp.m +0 -108
- Interface/align_fp/align_neighbor.m +0 -53
- Interface/align_fp/align_with_boundary.m +0 -29
- Interface/align_fp/find_close_seg.m +0 -74
- Interface/align_fp/find_room_order.m +0 -29
- Interface/align_fp/get_entrance_space.m +0 -14
- Interface/align_fp/get_room_boundary.m +0 -25
- Interface/align_fp/regularize_fp.m +0 -111
- Interface/align_fp/shrink_box.m +0 -61
- Interface/db.sqlite3 +0 -0
- Interface/manage.py +0 -21
- Interface/model/__pycache__/_floorplan2.cpython-37.pyc +0 -0
- Interface/model/__pycache__/add_archs.cpython-37.pyc +0 -0
- Interface/model/__pycache__/box_utils.cpython-37.pyc +0 -0
- Interface/model/__pycache__/crn.cpython-37.pyc +0 -0
Dockerfile
CHANGED
|
@@ -4,18 +4,17 @@ FROM python:3.7
|
|
| 4 |
# Set the working directory to /app
|
| 5 |
WORKDIR /app
|
| 6 |
|
| 7 |
-
# Copy the
|
| 8 |
-
COPY
|
| 9 |
|
| 10 |
# Install any needed packages specified in requirements.txt
|
| 11 |
-
RUN pip install
|
| 12 |
-
RUN pip install django opencv-python scipy pandas shapely -U
|
| 13 |
|
| 14 |
-
#
|
| 15 |
EXPOSE 7860
|
| 16 |
|
| 17 |
# Define environment variable
|
| 18 |
-
ENV NAME
|
| 19 |
|
| 20 |
# Run app.py when the container launches
|
| 21 |
CMD ["python", "manage.py", "runserver", "0.0.0.0:7860"]
|
|
|
|
| 4 |
# Set the working directory to /app
|
| 5 |
WORKDIR /app
|
| 6 |
|
| 7 |
+
# Copy the current directory contents into the container at /app
|
| 8 |
+
COPY . /app
|
| 9 |
|
| 10 |
# Install any needed packages specified in requirements.txt
|
| 11 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
| 12 |
|
| 13 |
+
# Make port 7860 available to the world outside this container
|
| 14 |
EXPOSE 7860
|
| 15 |
|
| 16 |
# Define environment variable
|
| 17 |
+
ENV NAME World
|
| 18 |
|
| 19 |
# Run app.py when the container launches
|
| 20 |
CMD ["python", "manage.py", "runserver", "0.0.0.0:7860"]
|
Interface/House/__init__.py
DELETED
|
File without changes
|
Interface/House/__pycache__/__init__.cpython-311.pyc
DELETED
|
Binary file (191 Bytes)
|
|
|
Interface/House/__pycache__/__init__.cpython-37.pyc
DELETED
|
Binary file (157 Bytes)
|
|
|
Interface/House/__pycache__/settings.cpython-311.pyc
DELETED
|
Binary file (3.1 kB)
|
|
|
Interface/House/__pycache__/settings.cpython-37.pyc
DELETED
|
Binary file (2.38 kB)
|
|
|
Interface/House/__pycache__/urls.cpython-311.pyc
DELETED
|
Binary file (1.92 kB)
|
|
|
Interface/House/__pycache__/urls.cpython-37.pyc
DELETED
|
Binary file (1.4 kB)
|
|
|
Interface/House/__pycache__/wsgi.cpython-37.pyc
DELETED
|
Binary file (536 Bytes)
|
|
|
Interface/House/asgi.py
DELETED
|
@@ -1,16 +0,0 @@
|
|
| 1 |
-
"""
|
| 2 |
-
ASGI config for House project.
|
| 3 |
-
|
| 4 |
-
It exposes the ASGI callable as a module-level variable named ``application``.
|
| 5 |
-
|
| 6 |
-
For more information on this file, see
|
| 7 |
-
https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/
|
| 8 |
-
"""
|
| 9 |
-
|
| 10 |
-
import os
|
| 11 |
-
|
| 12 |
-
from django.core.asgi import get_asgi_application
|
| 13 |
-
|
| 14 |
-
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'House.settings')
|
| 15 |
-
|
| 16 |
-
application = get_asgi_application()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/House/settings.py
DELETED
|
@@ -1,127 +0,0 @@
|
|
| 1 |
-
"""
|
| 2 |
-
Django settings for House project.
|
| 3 |
-
|
| 4 |
-
Generated by 'django-admin startproject' using Django 3.0.2.
|
| 5 |
-
|
| 6 |
-
For more information on this file, see
|
| 7 |
-
https://docs.djangoproject.com/en/3.0/topics/settings/
|
| 8 |
-
|
| 9 |
-
For the full list of settings and their values, see
|
| 10 |
-
https://docs.djangoproject.com/en/3.0/ref/settings/
|
| 11 |
-
"""
|
| 12 |
-
|
| 13 |
-
import os
|
| 14 |
-
|
| 15 |
-
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
| 16 |
-
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
# Quick-start development settings - unsuitable for production
|
| 20 |
-
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
|
| 21 |
-
|
| 22 |
-
# SECURITY WARNING: keep the secret key used in production secret!
|
| 23 |
-
SECRET_KEY = 'y&ol628+upm0r&=8pilr@u_w_0ji!1afp!st*y#ympn3u@!3s%'
|
| 24 |
-
|
| 25 |
-
# SECURITY WARNING: don't run with debug turned on in production!
|
| 26 |
-
DEBUG = True
|
| 27 |
-
|
| 28 |
-
ALLOWED_HOSTS = []
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
# Application definition
|
| 32 |
-
|
| 33 |
-
INSTALLED_APPS = [
|
| 34 |
-
'django.contrib.admin',
|
| 35 |
-
'django.contrib.auth',
|
| 36 |
-
'django.contrib.contenttypes',
|
| 37 |
-
'django.contrib.sessions',
|
| 38 |
-
'django.contrib.messages',
|
| 39 |
-
'django.contrib.staticfiles',
|
| 40 |
-
]
|
| 41 |
-
|
| 42 |
-
MIDDLEWARE = [
|
| 43 |
-
'django.middleware.security.SecurityMiddleware',
|
| 44 |
-
'django.contrib.sessions.middleware.SessionMiddleware',
|
| 45 |
-
'django.middleware.common.CommonMiddleware',
|
| 46 |
-
'django.middleware.csrf.CsrfViewMiddleware',
|
| 47 |
-
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
| 48 |
-
'django.contrib.messages.middleware.MessageMiddleware',
|
| 49 |
-
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
| 50 |
-
]
|
| 51 |
-
|
| 52 |
-
ROOT_URLCONF = 'House.urls'
|
| 53 |
-
|
| 54 |
-
TEMPLATES = [
|
| 55 |
-
{
|
| 56 |
-
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
| 57 |
-
'DIRS': [os.path.join(BASE_DIR, 'templates')]
|
| 58 |
-
,
|
| 59 |
-
'APP_DIRS': True,
|
| 60 |
-
'OPTIONS': {
|
| 61 |
-
'context_processors': [
|
| 62 |
-
'django.template.context_processors.debug',
|
| 63 |
-
'django.template.context_processors.request',
|
| 64 |
-
'django.contrib.auth.context_processors.auth',
|
| 65 |
-
'django.contrib.messages.context_processors.messages',
|
| 66 |
-
],
|
| 67 |
-
},
|
| 68 |
-
},
|
| 69 |
-
]
|
| 70 |
-
|
| 71 |
-
WSGI_APPLICATION = 'House.wsgi.application'
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
# Database
|
| 75 |
-
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
|
| 76 |
-
|
| 77 |
-
DATABASES = {
|
| 78 |
-
'default': {
|
| 79 |
-
'ENGINE': 'django.db.backends.sqlite3',
|
| 80 |
-
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
| 81 |
-
}
|
| 82 |
-
}
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
# Password validation
|
| 86 |
-
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
|
| 87 |
-
|
| 88 |
-
AUTH_PASSWORD_VALIDATORS = [
|
| 89 |
-
{
|
| 90 |
-
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
|
| 91 |
-
},
|
| 92 |
-
{
|
| 93 |
-
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
| 94 |
-
},
|
| 95 |
-
{
|
| 96 |
-
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
|
| 97 |
-
},
|
| 98 |
-
{
|
| 99 |
-
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
|
| 100 |
-
},
|
| 101 |
-
]
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
# Internationalization
|
| 105 |
-
# https://docs.djangoproject.com/en/3.0/topics/i18n/
|
| 106 |
-
|
| 107 |
-
LANGUAGE_CODE = 'en-us'
|
| 108 |
-
|
| 109 |
-
TIME_ZONE = 'UTC'
|
| 110 |
-
|
| 111 |
-
USE_I18N = True
|
| 112 |
-
|
| 113 |
-
USE_L10N = True
|
| 114 |
-
|
| 115 |
-
USE_TZ = True
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
# Static files (CSS, JavaScript, Images)
|
| 119 |
-
# https://docs.djangoproject.com/en/3.0/howto/static-files/
|
| 120 |
-
|
| 121 |
-
STATIC_URL = '/static/'
|
| 122 |
-
HERE = os.path.dirname(os.path.abspath(__file__))
|
| 123 |
-
HERE = os.path.join(HERE, '../')
|
| 124 |
-
STATICFILES_DIRS = (
|
| 125 |
-
os.path.join(HERE, 'static/'),
|
| 126 |
-
)
|
| 127 |
-
ALLOWED_HOSTS = ['*']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/House/urls.py
DELETED
|
@@ -1,37 +0,0 @@
|
|
| 1 |
-
"""House URL Configuration
|
| 2 |
-
|
| 3 |
-
The `urlpatterns` list routes URLs to views. For more information please see:
|
| 4 |
-
https://docs.djangoproject.com/en/3.0/topics/http/urls/
|
| 5 |
-
Examples:
|
| 6 |
-
Function views
|
| 7 |
-
1. Add an import: from my_app import views
|
| 8 |
-
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
| 9 |
-
Class-based views
|
| 10 |
-
1. Add an import: from other_app.views import Home
|
| 11 |
-
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
| 12 |
-
Including another URLconf
|
| 13 |
-
1. Import the include() function: from django.urls import include, path
|
| 14 |
-
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
| 15 |
-
"""
|
| 16 |
-
from django.contrib import admin
|
| 17 |
-
from django.urls import path
|
| 18 |
-
|
| 19 |
-
from Houseweb import views
|
| 20 |
-
|
| 21 |
-
urlpatterns = [
|
| 22 |
-
# path('admin/', admin.site.urls),
|
| 23 |
-
path('index/LoadTestBoundary', views.LoadTestBoundary),
|
| 24 |
-
path('index/NumSearch/', views.NumSearch),
|
| 25 |
-
path(r'index/LoadTrainHouse/', views.LoadTrainHouse),
|
| 26 |
-
path(r'index/TransGraph/', views.TransGraph),
|
| 27 |
-
path(r'index/TransGraph_net/', views.TransGraph_net),
|
| 28 |
-
path(r'index/Init/', views.Init),
|
| 29 |
-
path(r'index/AdjustGraph/', views.AdjustGraph),
|
| 30 |
-
path(r'index/GraphSearch/', views.GraphSearch),
|
| 31 |
-
path(r'index/RelBox/', views.RelBox),
|
| 32 |
-
path(r'index/Save_Editbox/', views.Save_Editbox),
|
| 33 |
-
|
| 34 |
-
path('home', views.home),
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/House/wsgi.py
DELETED
|
@@ -1,16 +0,0 @@
|
|
| 1 |
-
"""
|
| 2 |
-
WSGI config for House project.
|
| 3 |
-
|
| 4 |
-
It exposes the WSGI callable as a module-level variable named ``application``.
|
| 5 |
-
|
| 6 |
-
For more information on this file, see
|
| 7 |
-
https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/
|
| 8 |
-
"""
|
| 9 |
-
|
| 10 |
-
import os
|
| 11 |
-
|
| 12 |
-
from django.core.wsgi import get_wsgi_application
|
| 13 |
-
|
| 14 |
-
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'House.settings')
|
| 15 |
-
|
| 16 |
-
application = get_wsgi_application()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/Houseweb/__init__.py
DELETED
|
File without changes
|
Interface/Houseweb/__pycache__/__init__.cpython-311.pyc
DELETED
|
Binary file (194 Bytes)
|
|
|
Interface/Houseweb/__pycache__/__init__.cpython-37.pyc
DELETED
|
Binary file (160 Bytes)
|
|
|
Interface/Houseweb/__pycache__/create.cpython-37.pyc
DELETED
|
Binary file (3.27 kB)
|
|
|
Interface/Houseweb/__pycache__/floorplan2.cpython-37.pyc
DELETED
|
Binary file (19.5 kB)
|
|
|
Interface/Houseweb/__pycache__/network.cpython-37.pyc
DELETED
|
Binary file (3.89 kB)
|
|
|
Interface/Houseweb/__pycache__/utils.cpython-37.pyc
DELETED
|
Binary file (9.39 kB)
|
|
|
Interface/Houseweb/__pycache__/utils1.cpython-37.pyc
DELETED
|
Binary file (7.52 kB)
|
|
|
Interface/Houseweb/__pycache__/views.cpython-311.pyc
DELETED
|
Binary file (54.4 kB)
|
|
|
Interface/Houseweb/__pycache__/views.cpython-37.pyc
DELETED
|
Binary file (23.6 kB)
|
|
|
Interface/Houseweb/admin.py
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
from django.contrib import admin
|
| 2 |
-
|
| 3 |
-
# Register your models here.
|
|
|
|
|
|
|
|
|
|
|
|
Interface/Houseweb/apps.py
DELETED
|
@@ -1,5 +0,0 @@
|
|
| 1 |
-
from django.apps import AppConfig
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
class HousewebConfig(AppConfig):
|
| 5 |
-
name = 'Houseweb'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/Houseweb/migrations/__init__.py
DELETED
|
File without changes
|
Interface/Houseweb/models.py
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
from django.db import models
|
| 2 |
-
|
| 3 |
-
# Create your models here.
|
|
|
|
|
|
|
|
|
|
|
|
Interface/Houseweb/tests.py
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
from django.test import TestCase
|
| 2 |
-
|
| 3 |
-
# Create your tests here.
|
|
|
|
|
|
|
|
|
|
|
|
Interface/Houseweb/views.py
DELETED
|
@@ -1,757 +0,0 @@
|
|
| 1 |
-
from django.shortcuts import render
|
| 2 |
-
from django.http import HttpResponse, JsonResponse
|
| 3 |
-
import json
|
| 4 |
-
import model.test as mltest
|
| 5 |
-
import model.utils as mdul
|
| 6 |
-
from model.floorplan import *
|
| 7 |
-
import retrieval.retrieval as rt
|
| 8 |
-
import time
|
| 9 |
-
import pickle
|
| 10 |
-
import scipy.io as sio
|
| 11 |
-
import numpy as np
|
| 12 |
-
from model.decorate import *
|
| 13 |
-
import math
|
| 14 |
-
import pandas as pd
|
| 15 |
-
import matlab.engine
|
| 16 |
-
|
| 17 |
-
global test_data, test_data_topk, testNameList, trainNameList
|
| 18 |
-
global train_data, trainNameList, trainTF, train_data_eNum, train_data_rNum
|
| 19 |
-
global engview, model
|
| 20 |
-
global tf_train, centroids, clusters
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
def home(request):
|
| 24 |
-
return render(request, "home.html", )
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
def Init(request):
|
| 28 |
-
start = time.clock()
|
| 29 |
-
getTestData()
|
| 30 |
-
getTrainData()
|
| 31 |
-
loadMatlabEng()
|
| 32 |
-
loadModel()
|
| 33 |
-
loadRetrieval()
|
| 34 |
-
end = time.clock()
|
| 35 |
-
print('Init(model+test+train+engine+retrieval) time: %s Seconds' % (end - start))
|
| 36 |
-
|
| 37 |
-
return HttpResponse(None)
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
def loadMatlabEng():
|
| 41 |
-
startengview = time.clock()
|
| 42 |
-
global engview
|
| 43 |
-
engview = matlab.engine.start_matlab()
|
| 44 |
-
engview.addpath(r'./align_fp/', nargout=0)
|
| 45 |
-
endengview = time.clock()
|
| 46 |
-
print(' matlab.engineview time: %s Seconds' % (endengview - startengview))
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
def loadRetrieval():
|
| 50 |
-
global tf_train, centroids, clusters
|
| 51 |
-
t1 = time.clock()
|
| 52 |
-
tf_train = np.load('./retrieval/tf_train.npy')
|
| 53 |
-
centroids = np.load('./retrieval/centroids_train.npy')
|
| 54 |
-
clusters = np.load('./retrieval/clusters_train.npy')
|
| 55 |
-
t2 = time.clock()
|
| 56 |
-
print('load tf/centroids/clusters', t2 - t1)
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
def getTestData():
|
| 60 |
-
start = time.clock()
|
| 61 |
-
global test_data, testNameList, trainNameList
|
| 62 |
-
|
| 63 |
-
test_data = pickle.load(open('./static/Data/data_test_converted.pkl', 'rb'))
|
| 64 |
-
test_data, testNameList, trainNameList = test_data['data'], list(test_data['testNameList']), list(
|
| 65 |
-
test_data['trainNameList'])
|
| 66 |
-
end = time.clock()
|
| 67 |
-
print('getTestData time: %s Seconds' % (end - start))
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
def getTrainData():
|
| 71 |
-
start = time.clock()
|
| 72 |
-
global train_data, trainNameList, trainTF, train_data_eNum, train_data_rNum
|
| 73 |
-
|
| 74 |
-
train_data = pickle.load(open('./static/Data/data_train_converted.pkl', 'rb'))
|
| 75 |
-
train_data, trainNameList, trainTF = train_data['data'], list(train_data['nameList']), list(train_data['trainTF'])
|
| 76 |
-
|
| 77 |
-
train_data_eNum = pickle.load(open('./static/Data/data_train_eNum.pkl', 'rb'))
|
| 78 |
-
train_data_eNum = train_data_eNum['eNum']
|
| 79 |
-
train_data_rNum = np.load('./static/Data/rNum_train.npy')
|
| 80 |
-
|
| 81 |
-
end = time.clock()
|
| 82 |
-
print('getTrainData time: %s Seconds' % (end - start))
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
def loadModel():
|
| 86 |
-
global model, train_data, trainNameList
|
| 87 |
-
start = time.clock()
|
| 88 |
-
model = mltest.load_model()
|
| 89 |
-
end = time.clock()
|
| 90 |
-
print('loadModel time: %s Seconds' % (end - start))
|
| 91 |
-
start = time.clock()
|
| 92 |
-
test = train_data[trainNameList.index("75119")]
|
| 93 |
-
mltest.test(model, FloorPlan(test, train=True))
|
| 94 |
-
end = time.clock()
|
| 95 |
-
print('test Model time: %s Seconds' % (end - start))
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
def LoadTestBoundary(request):
|
| 99 |
-
start = time.clock()
|
| 100 |
-
testName = request.GET.get('testName').split(".")[0]
|
| 101 |
-
test_index = testNameList.index(testName)
|
| 102 |
-
data = test_data[test_index]
|
| 103 |
-
data_js = {}
|
| 104 |
-
data_js["door"] = str(data.boundary[0][0]) + "," + str(data.boundary[0][1]) + "," + str(
|
| 105 |
-
data.boundary[1][0]) + "," + str(data.boundary[1][1])
|
| 106 |
-
ex = ""
|
| 107 |
-
for i in range(len(data.boundary)):
|
| 108 |
-
ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
|
| 109 |
-
data_js['exterior'] = ex
|
| 110 |
-
end = time.clock()
|
| 111 |
-
print('LoadTestBoundary time: %s Seconds' % (end - start))
|
| 112 |
-
return HttpResponse(json.dumps(data_js), content_type="application/json")
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
def get_filter_func(mask, acc, num):
|
| 116 |
-
filters = [
|
| 117 |
-
None if not mask else (
|
| 118 |
-
np.equal if acc[i] else np.greater_equal
|
| 119 |
-
)
|
| 120 |
-
for i in range(len(mask))
|
| 121 |
-
]
|
| 122 |
-
|
| 123 |
-
def filter_func(data):
|
| 124 |
-
for i in range(len(filters)):
|
| 125 |
-
if (filters[i] is not None) and (not filters[i](data[i], num[i])): return False
|
| 126 |
-
return True
|
| 127 |
-
|
| 128 |
-
return filter_func
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
def filter_graph(graph_):
|
| 132 |
-
filters = graph_
|
| 133 |
-
|
| 134 |
-
def filter_graphfunc(data):
|
| 135 |
-
sub = data - filters
|
| 136 |
-
return ((sub >= 0).all())
|
| 137 |
-
|
| 138 |
-
return filter_graphfunc
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
def NumSearch(request):
|
| 142 |
-
start = time.clock()
|
| 143 |
-
data_new = json.loads(request.GET.get("userInfo"))
|
| 144 |
-
testName = data_new[0].split(".")[0]
|
| 145 |
-
test_index = testNameList.index(testName)
|
| 146 |
-
topkList = []
|
| 147 |
-
topkList.clear()
|
| 148 |
-
data = test_data[test_index]
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
multi_clusters=False
|
| 152 |
-
test_data_topk = rt.retrieval(data, 1000,multi_clusters)
|
| 153 |
-
|
| 154 |
-
if len(data_new) > 1:
|
| 155 |
-
roomactarr = data_new[1]
|
| 156 |
-
roomexaarr = data_new[2]
|
| 157 |
-
roomnumarr = [int(x) for x in data_new[3]]
|
| 158 |
-
|
| 159 |
-
test_num = train_data_rNum[test_data_topk]
|
| 160 |
-
filter_func = get_filter_func(roomactarr, roomexaarr, roomnumarr)
|
| 161 |
-
indices = np.where(list(map(filter_func, test_num)))
|
| 162 |
-
indices = list(indices)
|
| 163 |
-
if len(indices[0]) < 20:
|
| 164 |
-
topk = len(indices[0])
|
| 165 |
-
else:
|
| 166 |
-
topk = 20
|
| 167 |
-
topkList.clear()
|
| 168 |
-
for i in range(topk):
|
| 169 |
-
topkList.append(str(trainNameList[int(test_data_topk[indices[0][i]])]) + ".png")
|
| 170 |
-
end = time.clock()
|
| 171 |
-
print('NumberSearch time: %s Seconds' % (end - start))
|
| 172 |
-
return HttpResponse(json.dumps(topkList), content_type="application/json")
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
def FindTraindata(trainname):
|
| 176 |
-
start = time.clock()
|
| 177 |
-
train_index = trainNameList.index(trainname)
|
| 178 |
-
data = train_data[train_index]
|
| 179 |
-
data_js = {}
|
| 180 |
-
data_js["hsname"] = trainname
|
| 181 |
-
|
| 182 |
-
data_js["door"] = str(data.boundary[0][0]) + "," + str(data.boundary[0][1]) + "," + str(
|
| 183 |
-
data.boundary[1][0]) + "," + str(data.boundary[1][1])
|
| 184 |
-
print("testboundary", data_js["door"])
|
| 185 |
-
ex = ""
|
| 186 |
-
for i in range(len(data.boundary)):
|
| 187 |
-
ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
|
| 188 |
-
data_js['exterior'] = ex
|
| 189 |
-
|
| 190 |
-
data_js["hsedge"] = [[int(u), int(v)] for u, v in data.edge[:, [0, 1]]]
|
| 191 |
-
|
| 192 |
-
hsbox = [[[float(x1), float(y1), float(x2), float(y2)], [mdul.room_label[cate][1]]] for
|
| 193 |
-
x1, y1, x2, y2, cate in data.box[:]]
|
| 194 |
-
external = np.asarray(data.boundary)
|
| 195 |
-
xmin, xmax = np.min(external[:, 0]), np.max(external[:, 0])
|
| 196 |
-
ymin, ymax = np.min(external[:, 1]), np.max(external[:, 1])
|
| 197 |
-
|
| 198 |
-
area_ = (ymax - ymin) * (xmax - xmin)
|
| 199 |
-
|
| 200 |
-
data_js["rmsize"] = [
|
| 201 |
-
[[20 * math.sqrt((float(x2) - float(x1)) * (float(y2) - float(y1)) / float(area_))], [mdul.room_label[cate][1]]]
|
| 202 |
-
for
|
| 203 |
-
x1, y1, x2, y2, cate in data.box[:]]
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
box_order = data.order
|
| 207 |
-
data_js["hsbox"] = []
|
| 208 |
-
for i in range(len(box_order)):
|
| 209 |
-
data_js["hsbox"].append(hsbox[int(float(box_order[i])) - 1])
|
| 210 |
-
|
| 211 |
-
data_js["rmpos"] = [[int(cate), str(mdul.room_label[cate][1]), float((x1 + x2) / 2), float((y1 + y2) / 2)] for
|
| 212 |
-
x1, y1, x2, y2, cate in data.box[:]]
|
| 213 |
-
end = time.clock()
|
| 214 |
-
print('find train data time: %s Seconds' % (end - start))
|
| 215 |
-
return data_js
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
def LoadTrainHouse(request):
|
| 219 |
-
trainname = request.GET.get("roomID").split(".")[0]
|
| 220 |
-
data_js = FindTraindata(trainname)
|
| 221 |
-
return HttpResponse(json.dumps(data_js), content_type="application/json")
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
'''
|
| 225 |
-
transfer the graph of the training data into the graph of the test data
|
| 226 |
-
'''
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
def TransGraph(request):
|
| 230 |
-
start = time.clock()
|
| 231 |
-
userInfo = request.GET.get("userInfo")
|
| 232 |
-
testname = userInfo.split(',')[0]
|
| 233 |
-
trainname = request.GET.get("roomID")
|
| 234 |
-
mlresult = mltest.get_userinfo(testname, trainname)
|
| 235 |
-
|
| 236 |
-
fp_end = mlresult
|
| 237 |
-
|
| 238 |
-
sio.savemat("./static/" + userInfo.split(',')[0].split('.')[0] + ".mat", {"data": fp_end.data})
|
| 239 |
-
|
| 240 |
-
data_js = {}
|
| 241 |
-
# fp_end hsedge
|
| 242 |
-
data_js["hsedge"] = (fp_end.get_triples(tensor=False)[:, [0, 2, 1]]).astype(np.float).tolist()
|
| 243 |
-
|
| 244 |
-
# fp_rmsize
|
| 245 |
-
external = np.asarray(fp_end.data.boundary)
|
| 246 |
-
xmin, xmax = np.min(external[:, 0]), np.max(external[:, 0])
|
| 247 |
-
ymin, ymax = np.min(external[:, 1]), np.max(external[:, 1])
|
| 248 |
-
area_ = (ymax - ymin) * (xmax - xmin)
|
| 249 |
-
data_js["rmsize"] = [
|
| 250 |
-
[[20 * math.sqrt((float(x2) - float(x1)) * (float(y2) - float(y1)) / float(area_))], [mdul.room_label[cate][1]]]
|
| 251 |
-
for
|
| 252 |
-
x1, y1, x2, y2, cate in fp_end.data.box[:]]
|
| 253 |
-
# fp_end rmpos
|
| 254 |
-
|
| 255 |
-
rooms = fp_end.get_rooms(tensor=False)
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
center = [[(x1 + x2) / 2, (y1 + y2) / 2] for x1, y1, x2, y2 in fp_end.data.box[:, :4]]
|
| 259 |
-
|
| 260 |
-
# boxes_pred
|
| 261 |
-
data_js["rmpos"] = []
|
| 262 |
-
for k in range(len(center)):
|
| 263 |
-
node = float(rooms[k]), mdul.room_label[int(rooms[k])][1], center[k][0], center[k][1], float(k)
|
| 264 |
-
data_js["rmpos"].append(node)
|
| 265 |
-
|
| 266 |
-
test_index = testNameList.index(testname.split(".")[0])
|
| 267 |
-
data = test_data[test_index]
|
| 268 |
-
ex = ""
|
| 269 |
-
for i in range(len(data.boundary)):
|
| 270 |
-
ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
|
| 271 |
-
data_js['exterior'] = ex
|
| 272 |
-
data_js["door"] = str(data.boundary[0][0]) + "," + str(data.boundary[0][1]) + "," + str(
|
| 273 |
-
data.boundary[1][0]) + "," + str(data.boundary[1][1])
|
| 274 |
-
end = time.clock()
|
| 275 |
-
print('TransGraph time: %s Seconds' % (end - start))
|
| 276 |
-
return HttpResponse(json.dumps(data_js), content_type="application/json")
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
def AdjustGraph(request):
|
| 280 |
-
start = time.clock()
|
| 281 |
-
# newNode index-typename-cx-cy
|
| 282 |
-
# oldNode index-typename-cx-cy
|
| 283 |
-
# newEdge u-v
|
| 284 |
-
NewGraph = json.loads(request.GET.get("NewGraph"))
|
| 285 |
-
testname = request.GET.get("userRoomID")
|
| 286 |
-
trainname = request.GET.get("adptRoomID")
|
| 287 |
-
s = time.clock()
|
| 288 |
-
mlresult = mltest.get_userinfo_adjust(testname, trainname, NewGraph)
|
| 289 |
-
e = time.clock()
|
| 290 |
-
print('get_userinfo_adjust: %s Seconds' % (e - s))
|
| 291 |
-
fp_end = mlresult[0]
|
| 292 |
-
global boxes_pred
|
| 293 |
-
boxes_pred = mlresult[1]
|
| 294 |
-
|
| 295 |
-
data_js = {}
|
| 296 |
-
data_js["hsedge"] = (fp_end.get_triples(tensor=False)[:, [0, 2, 1]]).astype(np.float).tolist()
|
| 297 |
-
|
| 298 |
-
rooms = fp_end.get_rooms(tensor=False)
|
| 299 |
-
center = [[(x1 + x2) / 2, (y1 + y2) / 2] for x1, y1, x2, y2 in fp_end.data.box[:, :4]]
|
| 300 |
-
|
| 301 |
-
box_order = mlresult[2]
|
| 302 |
-
'''
|
| 303 |
-
handle the information of the room boxes
|
| 304 |
-
boxes_pred: the prediction from net
|
| 305 |
-
box_order: The order in which boxes are drawn
|
| 306 |
-
|
| 307 |
-
'''
|
| 308 |
-
room = []
|
| 309 |
-
for o in range(len(box_order)):
|
| 310 |
-
room.append(float((rooms[int(float(box_order[o][0])) - 1])))
|
| 311 |
-
boxes_end = []
|
| 312 |
-
for i in range(len(box_order)):
|
| 313 |
-
tmp = []
|
| 314 |
-
for j in range(4):
|
| 315 |
-
tmp.append(float(boxes_pred[int(float(box_order[i][0])) - 1][j]))
|
| 316 |
-
boxes_end.append(tmp)
|
| 317 |
-
|
| 318 |
-
data_js['roomret'] = []
|
| 319 |
-
for k in range(len(room)):
|
| 320 |
-
data = boxes_end[k], [mdul.room_label[int(room[k])][1]], box_order[k][0] - 1
|
| 321 |
-
data_js['roomret'].append(data)
|
| 322 |
-
|
| 323 |
-
# change the box size
|
| 324 |
-
global relbox
|
| 325 |
-
relbox = data_js['roomret']
|
| 326 |
-
global reledge
|
| 327 |
-
reledge = data_js["hsedge"]
|
| 328 |
-
|
| 329 |
-
test_index = testNameList.index(testname.split(".")[0])
|
| 330 |
-
data = test_data[test_index]
|
| 331 |
-
ex = ""
|
| 332 |
-
for i in range(len(data.boundary)):
|
| 333 |
-
ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
|
| 334 |
-
data_js['exterior'] = ex
|
| 335 |
-
data_js["door"] = str(data.boundary[0][0]) + "," + str(data.boundary[0][1]) + "," + str(
|
| 336 |
-
data.boundary[1][0]) + "," + str(data.boundary[1][1])
|
| 337 |
-
|
| 338 |
-
external = np.asarray(data.boundary)
|
| 339 |
-
xmin, xmax = np.min(external[:, 0]), np.max(external[:, 0])
|
| 340 |
-
ymin, ymax = np.min(external[:, 1]), np.max(external[:, 1])
|
| 341 |
-
area_ = (ymax - ymin) * (xmax - xmin)
|
| 342 |
-
data_js['rmsize'] = []
|
| 343 |
-
for i in range(len(data_js['roomret'])):
|
| 344 |
-
rmsize = 20 * math.sqrt((float(data_js['roomret'][i][0][2]) - float(data_js['roomret'][i][0][0])) * (
|
| 345 |
-
float(data_js['roomret'][i][0][3]) - float(data_js['roomret'][i][0][1])) / float(area_)), \
|
| 346 |
-
data_js["roomret"][i][1][0]
|
| 347 |
-
data_js["rmsize"].append(rmsize)
|
| 348 |
-
|
| 349 |
-
data_js["rmpos"] = []
|
| 350 |
-
|
| 351 |
-
newGraph = NewGraph[0]
|
| 352 |
-
for i in range(len(data_js['roomret'])):
|
| 353 |
-
for k in range(len(newGraph)):
|
| 354 |
-
if (data_js['roomret'][i][1][0] == newGraph[k][1]):
|
| 355 |
-
x_center = int((data_js['roomret'][i][0][0] + data_js['roomret'][i][0][2]) / 2)
|
| 356 |
-
y_center = int((data_js['roomret'][i][0][1] + data_js['roomret'][i][0][3]) / 2)
|
| 357 |
-
x_graph = newGraph[k][2]
|
| 358 |
-
y_graph = newGraph[k][3]
|
| 359 |
-
if ((int(x_graph - 30) < x_center < int(x_graph + 30))):
|
| 360 |
-
node = float(rooms[k]), newGraph[k][1], x_center, y_center, float(
|
| 361 |
-
newGraph[k][0])
|
| 362 |
-
data_js["rmpos"].append(node)
|
| 363 |
-
newGraph.pop(k)
|
| 364 |
-
break
|
| 365 |
-
if ((int(y_graph - 30) < y_center < int(y_graph + 30))):
|
| 366 |
-
node = float(rooms[k]), newGraph[k][1], x_center, y_center, float(
|
| 367 |
-
newGraph[k][0])
|
| 368 |
-
data_js["rmpos"].append(node)
|
| 369 |
-
newGraph.pop(k)
|
| 370 |
-
|
| 371 |
-
break
|
| 372 |
-
|
| 373 |
-
fp_end.data = add_dw_fp(fp_end.data)
|
| 374 |
-
data_js["indoor"] = []
|
| 375 |
-
|
| 376 |
-
boundary = data.boundary
|
| 377 |
-
|
| 378 |
-
isNew = boundary[:, 3]
|
| 379 |
-
frontDoor = boundary[[0, 1]]
|
| 380 |
-
frontDoor = frontDoor[:, [0, 1]]
|
| 381 |
-
frontsum = frontDoor.sum(axis=1).tolist()
|
| 382 |
-
idx = frontsum.index(min(frontsum))
|
| 383 |
-
wallThickness = 3
|
| 384 |
-
if idx == 1:
|
| 385 |
-
frontDoor = frontDoor[[1, 0], :]
|
| 386 |
-
orient = boundary[0][2]
|
| 387 |
-
if orient == 0 or orient == 2:
|
| 388 |
-
frontDoor[0][0] = frontDoor[0][0] + wallThickness / 4
|
| 389 |
-
frontDoor[1][0] = frontDoor[1][0] - wallThickness / 4
|
| 390 |
-
if orient == 1 or orient == 3:
|
| 391 |
-
frontDoor[0][1] = frontDoor[0][1] + wallThickness / 4
|
| 392 |
-
frontDoor[1][1] = frontDoor[1][1] - wallThickness / 4
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
data_js["windows"] = []
|
| 396 |
-
for indx, x, y, w, h, r in fp_end.data.windows:
|
| 397 |
-
if w != 0:
|
| 398 |
-
tmp = [x + 2, y - 2, w - 2, 4]
|
| 399 |
-
data_js["windows"].append(tmp)
|
| 400 |
-
if h != 0:
|
| 401 |
-
tmp = [x - 2, y, 4, h]
|
| 402 |
-
data_js["windows"].append(tmp)
|
| 403 |
-
data_js["windowsline"] = []
|
| 404 |
-
for indx, x, y, w, h, r in fp_end.data.windows:
|
| 405 |
-
if w != 0:
|
| 406 |
-
tmp = [x + 2, y, w + x, y]
|
| 407 |
-
data_js["windowsline"].append(tmp)
|
| 408 |
-
if h != 0:
|
| 409 |
-
tmp = [x, y, x, h + y]
|
| 410 |
-
data_js["windowsline"].append(tmp)
|
| 411 |
-
|
| 412 |
-
sio.savemat("./static/" + testname.split(',')[0].split('.')[0] + ".mat", {"data": fp_end.data})
|
| 413 |
-
|
| 414 |
-
end = time.clock()
|
| 415 |
-
print('AdjustGraph time: %s Seconds' % (end - start))
|
| 416 |
-
return HttpResponse(json.dumps(data_js), content_type="application/json")
|
| 417 |
-
|
| 418 |
-
|
| 419 |
-
def RelBox(request):
|
| 420 |
-
id = request.GET.get("selectRect")
|
| 421 |
-
print(id)
|
| 422 |
-
global relbox
|
| 423 |
-
global reledge
|
| 424 |
-
rdirgroup=get_dir(id,relbox,reledge)
|
| 425 |
-
return HttpResponse(json.dumps(rdirgroup), content_type="application/json")
|
| 426 |
-
|
| 427 |
-
def get_dir(id,relbox,reledge):
|
| 428 |
-
rel = []
|
| 429 |
-
selectindex = int(id.split("_")[1])
|
| 430 |
-
select = np.zeros(4).astype(int)
|
| 431 |
-
for i in range(len(relbox)):
|
| 432 |
-
a = math.ceil(relbox[i][0][0]), math.ceil(relbox[i][0][1]), math.ceil(relbox[i][0][2]), math.ceil(
|
| 433 |
-
relbox[i][0][3]), int(relbox[i][2])
|
| 434 |
-
rel.append(a)
|
| 435 |
-
if (selectindex == int(relbox[i][2])):
|
| 436 |
-
# select:x1,x0,y0,y1.relbox:x0,y0,x1,y1
|
| 437 |
-
select[0] = math.ceil(relbox[i][0][2])
|
| 438 |
-
select[1] = math.ceil(relbox[i][0][0])
|
| 439 |
-
select[2] = math.ceil(relbox[i][0][1])
|
| 440 |
-
select[3] = math.ceil(relbox[i][0][3])
|
| 441 |
-
rel = np.array(rel)
|
| 442 |
-
df = pd.DataFrame({'x0': rel[:, 0], 'y0': rel[:, 1], 'x1': rel[:, 2], 'y1': rel[:, 3], 'rindex': rel[:, 4]})
|
| 443 |
-
group_label = [(0, 'x1', "right"),
|
| 444 |
-
(1, 'x0', "left"),
|
| 445 |
-
(2, 'y0', "top"),
|
| 446 |
-
(3, 'y1', "down")]
|
| 447 |
-
dfgroup = []
|
| 448 |
-
for i in range(len(group_label)):
|
| 449 |
-
dfgroup.append(df.groupby(group_label[i][1], as_index=True).get_group(name=select[i]))
|
| 450 |
-
rdirgroup = []
|
| 451 |
-
for i in range(len(dfgroup)):
|
| 452 |
-
dir = dfgroup[i]
|
| 453 |
-
rdir = []
|
| 454 |
-
for k in range(len(dir)):
|
| 455 |
-
idx = (dir.loc[dir['rindex'] == (dir.iloc[[k]].values)[0][4]].index.values)[0]
|
| 456 |
-
rdir.append(relbox[idx][1][0].__str__() + "_" + (dir.iloc[[k]].values)[0][4].__str__())
|
| 457 |
-
rdirgroup.append(rdir)
|
| 458 |
-
reledge = np.array(reledge)
|
| 459 |
-
data1 = reledge[np.where((reledge[:, [0]] == selectindex))[0]]
|
| 460 |
-
data2 = reledge[np.where((reledge[:, [1]] == selectindex))[0]]
|
| 461 |
-
reledge1 = np.vstack((data1, data2))
|
| 462 |
-
return rdirgroup
|
| 463 |
-
def Save_Editbox(request):
|
| 464 |
-
global indxlist,boxes_pred
|
| 465 |
-
NewGraph = json.loads(request.GET.get("NewGraph"))
|
| 466 |
-
NewLay = json.loads(request.GET.get("NewLay"))
|
| 467 |
-
userRoomID = request.GET.get("userRoomID")
|
| 468 |
-
adptRoomID = request.GET.get("adptRoomID")
|
| 469 |
-
|
| 470 |
-
NewLay=np.array(NewLay)
|
| 471 |
-
NewLay=NewLay[np.argsort(NewLay[:, 1])][:,2:]
|
| 472 |
-
NewLay=NewLay.astype(float).tolist()
|
| 473 |
-
|
| 474 |
-
test_index = testNameList.index(userRoomID.split(".")[0])
|
| 475 |
-
test_ = test_data[test_index]
|
| 476 |
-
|
| 477 |
-
Boundary = test_.boundary
|
| 478 |
-
boundary=[[float(x),float(y),float(z),float(k)] for x,y,z,k in list(Boundary)]
|
| 479 |
-
test_fp =FloorPlan(test_)
|
| 480 |
-
|
| 481 |
-
train_index = trainNameList.index(adptRoomID.split(".")[0])
|
| 482 |
-
train_ =train_data[train_index]
|
| 483 |
-
train_fp =FloorPlan(train_,train=True)
|
| 484 |
-
fp_end = test_fp.adapt_graph(train_fp)
|
| 485 |
-
fp_end.adjust_graph()
|
| 486 |
-
newNode = NewGraph[0]
|
| 487 |
-
newEdge = NewGraph[1]
|
| 488 |
-
oldNode = NewGraph[2]
|
| 489 |
-
temp = []
|
| 490 |
-
for newindx, newrmname, newx, newy,scalesize in newNode:
|
| 491 |
-
for type, oldrmname, oldx, oldy, oldindx in oldNode:
|
| 492 |
-
if (int(newindx) == oldindx):
|
| 493 |
-
tmp=int(newindx), (newx - oldx), ( newy- oldy),float(scalesize)
|
| 494 |
-
temp.append(tmp)
|
| 495 |
-
newbox=[]
|
| 496 |
-
if mltest.adjust==True:
|
| 497 |
-
oldbox = []
|
| 498 |
-
for i in range(len(boxes_pred)):
|
| 499 |
-
indxtmp=[boxes_pred[i][0],boxes_pred[i][1],boxes_pred[i][2],boxes_pred[i][3],boxes_pred[i][0]]
|
| 500 |
-
oldbox.append(indxtmp)
|
| 501 |
-
if mltest.adjust==False:
|
| 502 |
-
indxlist=[]
|
| 503 |
-
oldbox=fp_end.data.box.tolist()
|
| 504 |
-
for i in range(len(oldbox)):
|
| 505 |
-
indxlist.append([oldbox[i][4]])
|
| 506 |
-
indxlist=np.array(indxlist)
|
| 507 |
-
adjust=True
|
| 508 |
-
oldbox=fp_end.data.box.tolist()
|
| 509 |
-
X=0
|
| 510 |
-
Y=0
|
| 511 |
-
for i in range(len(oldbox)):
|
| 512 |
-
X= X+(oldbox[i][2]-oldbox[i][0])
|
| 513 |
-
Y= Y+(oldbox[i][3]-oldbox[i][1])
|
| 514 |
-
x_ave=(X/len(oldbox))/2
|
| 515 |
-
y_ave=(Y/len(oldbox))/2
|
| 516 |
-
|
| 517 |
-
index_mapping = {}
|
| 518 |
-
# The room that already exists
|
| 519 |
-
# Move: Just by the distance
|
| 520 |
-
for newindx, tempx, tempy,scalesize in temp:
|
| 521 |
-
index_mapping[newindx] = len(newbox)
|
| 522 |
-
tmpbox=[]
|
| 523 |
-
scalesize = int(scalesize)
|
| 524 |
-
if scalesize<1:
|
| 525 |
-
scale = math.sqrt(scalesize)
|
| 526 |
-
scalex = (oldbox[newindx][2] - oldbox[newindx][0]) * (1 - scale) / 2
|
| 527 |
-
scaley = (oldbox[newindx][3] - oldbox[newindx][1]) * (1 - scale) / 2
|
| 528 |
-
tmpbox = [(oldbox[newindx][0] + tempx) + scalex, (oldbox[newindx][1] + tempy)+scaley,
|
| 529 |
-
(oldbox[newindx][2] + tempx) - scalex, (oldbox[newindx][3] + tempy) - scaley, oldbox[newindx][4]]
|
| 530 |
-
if scalesize == 1:
|
| 531 |
-
tmpbox = [(oldbox[newindx][0] + tempx) , (oldbox[newindx][1] + tempy) ,(oldbox[newindx][2] + tempx), (oldbox[newindx][3] + tempy), oldbox[newindx][4]]
|
| 532 |
-
|
| 533 |
-
if scalesize>1:
|
| 534 |
-
scale=math.sqrt(scalesize)
|
| 535 |
-
scalex = (oldbox[newindx][2] - oldbox[newindx][0]) * ( scale-1) / 2
|
| 536 |
-
scaley = (oldbox[newindx][3] - oldbox[newindx][1]) * (scale-1) / 2
|
| 537 |
-
tmpbox = [(oldbox[newindx][0] + tempx) - scalex, (oldbox[newindx][1] + tempy) - scaley,
|
| 538 |
-
(oldbox[newindx][2] + tempx) + scalex, (oldbox[newindx][3] + tempy) + scaley, oldbox[newindx][4]]
|
| 539 |
-
|
| 540 |
-
newbox.append(tmpbox)
|
| 541 |
-
|
| 542 |
-
# The room just added
|
| 543 |
-
# Move: The room node with the average size of the existing room
|
| 544 |
-
for newindx, newrmname, newx, newy,scalesize in newNode:
|
| 545 |
-
if int(newindx)>(len(oldbox)-1):
|
| 546 |
-
scalesize=int(scalesize)
|
| 547 |
-
index_mapping[int(newindx)] = (len(newbox))
|
| 548 |
-
tmpbox=[]
|
| 549 |
-
if scalesize < 1:
|
| 550 |
-
scale = math.sqrt(scalesize)
|
| 551 |
-
scalex = x_ave * (1 - scale) / 2
|
| 552 |
-
scaley = y_ave* (1 - scale) / 2
|
| 553 |
-
tmpbox = [(newx-x_ave) +scalex,(newy-y_ave) +scaley,(newx+x_ave)-scalex,(newy+y_ave)-scaley,vocab['object_name_to_idx'][newrmname]]
|
| 554 |
-
|
| 555 |
-
if scalesize == 1:
|
| 556 |
-
tmpbox = [(newx - x_ave), (newy - y_ave), (newx + x_ave), (newy + y_ave),vocab['object_name_to_idx'][newrmname]]
|
| 557 |
-
if scalesize > 1:
|
| 558 |
-
scale = math.sqrt(scalesize)
|
| 559 |
-
scalex = x_ave * (scale - 1) / 2
|
| 560 |
-
scaley = y_ave * (scale - 1) / 2
|
| 561 |
-
tmpbox = [(newx-x_ave) - scalex, (newy-y_ave) - scaley,(newx+x_ave) + scalex, (newy+y_ave) + scaley,vocab['object_name_to_idx'][newrmname]]
|
| 562 |
-
# tmpboxin = [(newx-x_ave) ,(newy-y_ave) ,(newx+x_ave) ,(newy+y_ave) ,vocab['object_name_to_idx'][newrmname]]
|
| 563 |
-
# print(tmpboxin)
|
| 564 |
-
# print(tmpbox)
|
| 565 |
-
# print(scalesize)
|
| 566 |
-
newbox.append(tmpbox)
|
| 567 |
-
|
| 568 |
-
fp_end.data.box=np.array(newbox)
|
| 569 |
-
|
| 570 |
-
adjust_Edge=[]
|
| 571 |
-
for u, v in newEdge:
|
| 572 |
-
tmp=[index_mapping[int(u)],index_mapping[int(v)], 0]
|
| 573 |
-
adjust_Edge.append(tmp)
|
| 574 |
-
fp_end.data.edge=np.array(adjust_Edge)
|
| 575 |
-
rType = fp_end.get_rooms(tensor=False)
|
| 576 |
-
|
| 577 |
-
rEdge = fp_end.get_triples(tensor=False)[:, [0, 2, 1]]
|
| 578 |
-
Edge = [[float(u), float(v), float(type2)] for u, v, type2 in rEdge]
|
| 579 |
-
Box=NewLay
|
| 580 |
-
boundary_mat = matlab.double(boundary)
|
| 581 |
-
rType_mat = matlab.double(rType.tolist())
|
| 582 |
-
Edge_mat = matlab.double(Edge)
|
| 583 |
-
Box_mat=matlab.double(Box)
|
| 584 |
-
fp_end.data.boundary =np.array(boundary)
|
| 585 |
-
fp_end.data.rType =np.array(rType).astype(int)
|
| 586 |
-
fp_end.data.refineBox=np.array(Box)
|
| 587 |
-
fp_end.data.rEdge=np.array(Edge)
|
| 588 |
-
|
| 589 |
-
box_refine = engview.align_fp(boundary_mat, Box_mat, rType_mat,Edge_mat ,18,False, nargout=3)
|
| 590 |
-
box_out=box_refine[0]
|
| 591 |
-
box_order=box_refine[1]
|
| 592 |
-
rBoundary=box_refine[2]
|
| 593 |
-
fp_end.data.newBox = np.array(box_out)
|
| 594 |
-
fp_end.data.order = np.array(box_order)
|
| 595 |
-
fp_end.data.rBoundary = [np.array(rb) for rb in rBoundary]
|
| 596 |
-
fp_end.data = add_dw_fp(fp_end.data)
|
| 597 |
-
sio.savemat("./static/" + userRoomID + ".mat", {"data": fp_end.data})
|
| 598 |
-
flag=1
|
| 599 |
-
return HttpResponse(json.dumps(flag), content_type="application/json")
|
| 600 |
-
|
| 601 |
-
|
| 602 |
-
def TransGraph_net(request):
|
| 603 |
-
userInfo = request.GET.get("userInfo")
|
| 604 |
-
testname = userInfo.split(',')[0]
|
| 605 |
-
trainname = request.GET.get("roomID")
|
| 606 |
-
mlresult = mltest.get_userinfo_net(testname, trainname)
|
| 607 |
-
|
| 608 |
-
fp_end = mlresult[0]
|
| 609 |
-
boxes_pred = mlresult[1]
|
| 610 |
-
|
| 611 |
-
data_js = {}
|
| 612 |
-
# fp_end hsedge
|
| 613 |
-
data_js["hsedge"] = (fp_end.get_triples(tensor=False)[:, [0, 2, 1]]).astype(np.float).tolist()
|
| 614 |
-
|
| 615 |
-
# fp_end rmpos
|
| 616 |
-
rooms = fp_end.get_rooms(tensor=False)
|
| 617 |
-
room = rooms
|
| 618 |
-
center = [[(x1 + x2) / 2, (y1 + y2) / 2] for x1, y1, x2, y2 in fp_end.data.box[:, :4]]
|
| 619 |
-
|
| 620 |
-
|
| 621 |
-
|
| 622 |
-
# boxes_pred
|
| 623 |
-
data_js["rmpos"] = []
|
| 624 |
-
for k in range(len(center)):
|
| 625 |
-
node = float(room[k]), mdul.room_label[int(room[k])][1], center[k][0], center[k][1]
|
| 626 |
-
data_js["rmpos"].append(node)
|
| 627 |
-
boxes_end = boxes_pred.tolist()
|
| 628 |
-
data_js['roomret'] = []
|
| 629 |
-
for k in range(len(room)):
|
| 630 |
-
data = boxes_end[k], [mdul.room_label[int(room[k])][1]]
|
| 631 |
-
data_js['roomret'].append(data)
|
| 632 |
-
|
| 633 |
-
test_index = testNameList.index(testname.split(".")[0])
|
| 634 |
-
data = test_data[test_index]
|
| 635 |
-
ex = ""
|
| 636 |
-
for i in range(len(data.boundary)):
|
| 637 |
-
ex = ex + str(data.boundary[i][0]) + "," + str(data.boundary[i][1]) + " "
|
| 638 |
-
data_js['exterior'] = ex
|
| 639 |
-
x0, x1 = np.min(data.boundary[:, 0]), np.max(data.boundary[:, 0])
|
| 640 |
-
y0, y1 = np.min(data.boundary[:, 1]), np.max(data.boundary[:, 1])
|
| 641 |
-
data_js['bbxarea'] = float((x1 - x0) * (y1 - y0))
|
| 642 |
-
return HttpResponse(json.dumps(data_js), content_type="application/json")
|
| 643 |
-
|
| 644 |
-
|
| 645 |
-
def GraphSearch(request):
|
| 646 |
-
s=time.clock()
|
| 647 |
-
# Graph
|
| 648 |
-
Searchtype = ["BedRoom", "Bathroom", "Kitchen", "Balcony", "Storage"]
|
| 649 |
-
BedRoomlist = ["MasterRoom", "SecondRoom", "GuestRoom", "ChildRoom", "StudyRoom"]
|
| 650 |
-
NewGraph = json.loads(request.GET.get("NewGraph"))
|
| 651 |
-
|
| 652 |
-
testname = request.GET.get("userRoomID")
|
| 653 |
-
newNode = NewGraph[0]
|
| 654 |
-
newEdge = NewGraph[1]
|
| 655 |
-
r_Num = np.zeros((1, 14)).tolist()
|
| 656 |
-
r_Mask = np.zeros((1, 14)).tolist()
|
| 657 |
-
r_Acc = np.zeros((1, 14)).tolist()
|
| 658 |
-
r_Num[0][0] = 1
|
| 659 |
-
r_Mask[0][0] = 1
|
| 660 |
-
r_Acc[0][0] = 1
|
| 661 |
-
|
| 662 |
-
for indx, rmname, x, y, scalesize in newNode:
|
| 663 |
-
r_Num[0][mdul.vocab['object_name_to_idx'][rmname]] = r_Num[0][mdul.vocab['object_name_to_idx'][rmname]] + 1
|
| 664 |
-
r_Mask[0][mdul.vocab['object_name_to_idx'][rmname]] = 1
|
| 665 |
-
if rmname in BedRoomlist:
|
| 666 |
-
r_Num[0][13] = r_Num[0][13] + 1
|
| 667 |
-
r_Mask[0][13] = 1
|
| 668 |
-
|
| 669 |
-
test_index = testNameList.index(testname.split(".")[0])
|
| 670 |
-
topkList = []
|
| 671 |
-
topkList.clear()
|
| 672 |
-
data = test_data[test_index]
|
| 673 |
-
|
| 674 |
-
Numrooms = json.loads(request.GET.get("Numrooms"))
|
| 675 |
-
|
| 676 |
-
|
| 677 |
-
roomactarr = Numrooms[0]
|
| 678 |
-
roomexaarr = Numrooms[1]
|
| 679 |
-
roomnumarr = [int(x) for x in Numrooms[2]]
|
| 680 |
-
test_data_topk=np.arange(0,74995)
|
| 681 |
-
|
| 682 |
-
if np.sum(roomactarr) != 1 or np.sum(roomexaarr) != 1 or np.sum(roomnumarr) != 1:
|
| 683 |
-
test_num = train_data_rNum[test_data_topk]
|
| 684 |
-
# Number filter
|
| 685 |
-
|
| 686 |
-
filter_func = get_filter_func(roomactarr, roomexaarr, roomnumarr)
|
| 687 |
-
indices = np.where(list(map(filter_func, test_num)))
|
| 688 |
-
# print("np.where(list(map(fil", test_num)
|
| 689 |
-
indices = list(indices)
|
| 690 |
-
test_data_topk = test_data_topk[indices[0]]
|
| 691 |
-
|
| 692 |
-
test_num = train_data_eNum[test_data_topk]
|
| 693 |
-
# Graph filter
|
| 694 |
-
|
| 695 |
-
edgematrix = np.zeros((5, 5))
|
| 696 |
-
for indx1, indx2 in newEdge:
|
| 697 |
-
tmp1 = ""
|
| 698 |
-
tmp2 = ""
|
| 699 |
-
for indx, rmname, x, y, scalesize in newNode:
|
| 700 |
-
if indx1 == indx:
|
| 701 |
-
if rmname in BedRoomlist:
|
| 702 |
-
tmp1 = "BedRoom"
|
| 703 |
-
else:
|
| 704 |
-
tmp1 = rmname
|
| 705 |
-
for indx, rmname, x, y, scalesize in newNode:
|
| 706 |
-
if indx2 == indx:
|
| 707 |
-
if rmname in BedRoomlist:
|
| 708 |
-
tmp2 = "BedRoom"
|
| 709 |
-
else:
|
| 710 |
-
tmp2 = rmname
|
| 711 |
-
if tmp1 != "" and tmp2 != "":
|
| 712 |
-
edgematrix[Searchtype.index(tmp1)][Searchtype.index(tmp2)] = edgematrix[Searchtype.index(tmp1)][
|
| 713 |
-
Searchtype.index(tmp2)] + 1
|
| 714 |
-
edgematrix[Searchtype.index(tmp2)][Searchtype.index(tmp1)] = edgematrix[Searchtype.index(tmp2)][
|
| 715 |
-
Searchtype.index(tmp1)] + 1
|
| 716 |
-
edge = edgematrix.reshape((1, 25))
|
| 717 |
-
filter_graphfunc = filter_graph(edge)
|
| 718 |
-
# rNum_list
|
| 719 |
-
eNumData = []
|
| 720 |
-
|
| 721 |
-
indices = np.where(list(map(filter_graphfunc, test_num)))
|
| 722 |
-
|
| 723 |
-
indices = list(indices)
|
| 724 |
-
tf_trainsub=tf_train[test_data_topk[indices[0]]]
|
| 725 |
-
re_data = train_data[test_data_topk[indices[0]]]
|
| 726 |
-
test_data_tftopk=retrieve_bf(tf_trainsub, data, k=20)
|
| 727 |
-
re_data=re_data[test_data_tftopk]
|
| 728 |
-
if len(re_data) < 20:
|
| 729 |
-
topk = len(re_data)
|
| 730 |
-
else:
|
| 731 |
-
topk = 20
|
| 732 |
-
topkList = []
|
| 733 |
-
for i in range(topk):
|
| 734 |
-
topkList.append(str(re_data[i].name) + ".png")
|
| 735 |
-
|
| 736 |
-
e=time.clock()
|
| 737 |
-
print('Graph Search time: %s Seconds' % (e - s))
|
| 738 |
-
|
| 739 |
-
print("topkList", topkList)
|
| 740 |
-
return HttpResponse(json.dumps(topkList), content_type="application/json")
|
| 741 |
-
|
| 742 |
-
|
| 743 |
-
def retrieve_bf(tf_trainsub, datum, k=20):
|
| 744 |
-
# compute tf for the data boundary
|
| 745 |
-
x, y = rt.compute_tf(datum.boundary)
|
| 746 |
-
y_sampled = rt.sample_tf(x, y, 1000)
|
| 747 |
-
dist = np.linalg.norm(y_sampled - tf_trainsub, axis=1)
|
| 748 |
-
if k > np.log2(len(tf_trainsub)):
|
| 749 |
-
index = np.argsort(dist)[:k]
|
| 750 |
-
else:
|
| 751 |
-
index = np.argpartition(dist, k)[:k]
|
| 752 |
-
index = index[np.argsort(dist[index])]
|
| 753 |
-
return index
|
| 754 |
-
|
| 755 |
-
|
| 756 |
-
if __name__ == "__main__":
|
| 757 |
-
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/Img/data.mat.png
DELETED
|
Binary file (15.1 kB)
|
|
|
Interface/Img/data_test_converted.png
DELETED
|
Binary file (16.8 kB)
|
|
|
Interface/Img/data_train_converted.png
DELETED
|
Binary file (21.9 kB)
|
|
|
Interface/Img/interface.jpg
DELETED
|
Binary file (310 kB)
|
|
|
Interface/Img/paper.png
DELETED
|
Binary file (32.2 kB)
|
|
|
Interface/align_fp/align_adjacent_room3.m
DELETED
|
@@ -1,121 +0,0 @@
|
|
| 1 |
-
function [newBox, constraint] = align_adjacent_room3(box, tempBox, updated, type, threshold)
|
| 2 |
-
% position of box1 relative to box2
|
| 3 |
-
% 0 left-above
|
| 4 |
-
% 1 left-below
|
| 5 |
-
% 2 left-of
|
| 6 |
-
% 3 above
|
| 7 |
-
% 4 inside
|
| 8 |
-
% 5 surrounding
|
| 9 |
-
% 6 below
|
| 10 |
-
% 7 right-of
|
| 11 |
-
% 8 right-above
|
| 12 |
-
% 9 right-below
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
newBox = box;
|
| 16 |
-
constraint = zeros(4, 2);
|
| 17 |
-
idx = 1;
|
| 18 |
-
|
| 19 |
-
if type == 0
|
| 20 |
-
alignV(true);
|
| 21 |
-
alignH(true);
|
| 22 |
-
elseif type == 1
|
| 23 |
-
alignV(true);
|
| 24 |
-
alignH(false);
|
| 25 |
-
elseif type == 2
|
| 26 |
-
align([2,1], [1,3], threshold);
|
| 27 |
-
align([2,2], [1,2], threshold/2);
|
| 28 |
-
align([2,4], [1,4], threshold/2);
|
| 29 |
-
elseif type == 3
|
| 30 |
-
align([2,2], [1,4], threshold);
|
| 31 |
-
align([2,1], [1,1], threshold/2);
|
| 32 |
-
align([2,3], [1,3], threshold/2);
|
| 33 |
-
elseif type == 4
|
| 34 |
-
align([2,1], [1,1], true);
|
| 35 |
-
align([2,2], [1,2], true);
|
| 36 |
-
align([2,3], [1,3], true);
|
| 37 |
-
align([2,4], [1,4], true);
|
| 38 |
-
elseif type == 5
|
| 39 |
-
align([1,1], [2,1], true);
|
| 40 |
-
align([1,2], [2,2], true);
|
| 41 |
-
align([1,3], [2,3], true);
|
| 42 |
-
align([1,4], [2,4], true);
|
| 43 |
-
elseif type == 6
|
| 44 |
-
align([2,4], [1,2], threshold);
|
| 45 |
-
align([2,1], [1,1], threshold/2);
|
| 46 |
-
align([2,3], [1,3], threshold/2);
|
| 47 |
-
elseif type == 7
|
| 48 |
-
align([2,3], [1,1], threshold);
|
| 49 |
-
align([2,2], [1,2], threshold/2);
|
| 50 |
-
align([2,4], [1,4], threshold/2);
|
| 51 |
-
elseif type == 8
|
| 52 |
-
alignV(false);
|
| 53 |
-
alignH(true);
|
| 54 |
-
elseif type == 9
|
| 55 |
-
alignV(false);
|
| 56 |
-
alignH(false);
|
| 57 |
-
end
|
| 58 |
-
|
| 59 |
-
constraint = constraint(1:idx-1, :);
|
| 60 |
-
|
| 61 |
-
function alignV(isLeft)
|
| 62 |
-
if isLeft
|
| 63 |
-
idx1 = 1;
|
| 64 |
-
idx2 = 3;
|
| 65 |
-
else
|
| 66 |
-
idx1 = 3;
|
| 67 |
-
idx2 = 1;
|
| 68 |
-
end
|
| 69 |
-
|
| 70 |
-
if abs(tempBox(2,idx1) - tempBox(1,idx2)) <= abs(tempBox(2,idx2) - tempBox(1,idx2))
|
| 71 |
-
align([2,idx1], [1,idx2], threshold/2)
|
| 72 |
-
else
|
| 73 |
-
align([2,idx2], [1,idx2], threshold/2)
|
| 74 |
-
end
|
| 75 |
-
end
|
| 76 |
-
|
| 77 |
-
function alignH(isAbove)
|
| 78 |
-
if isAbove
|
| 79 |
-
idx1 = 2;
|
| 80 |
-
idx2 = 4;
|
| 81 |
-
else
|
| 82 |
-
idx1 = 4;
|
| 83 |
-
idx2 = 2;
|
| 84 |
-
end
|
| 85 |
-
|
| 86 |
-
if abs(tempBox(2,idx1) - tempBox(1,idx2)) <= abs(tempBox(2,idx2) - tempBox(1,idx2))
|
| 87 |
-
align([2,idx1], [1,idx2], threshold/2)
|
| 88 |
-
else
|
| 89 |
-
align([2,idx2], [1,idx2], threshold/2)
|
| 90 |
-
end
|
| 91 |
-
end
|
| 92 |
-
|
| 93 |
-
function align(idx1, idx2, threshold, attach)
|
| 94 |
-
if nargin < 4
|
| 95 |
-
attach = false;
|
| 96 |
-
end
|
| 97 |
-
if abs(tempBox(idx1(1),idx1(2))- tempBox(idx2(1), idx2(2))) <= threshold
|
| 98 |
-
if updated(idx1(1), idx1(2)) && ~updated(idx2(1), idx2(2))
|
| 99 |
-
newBox(idx2(1), idx2(2)) = newBox(idx1(1),idx1(2));
|
| 100 |
-
elseif updated(idx2(1), idx2(2)) && ~updated(idx1(1), idx1(2))
|
| 101 |
-
newBox(idx1(1), idx1(2)) = newBox(idx2(1),idx2(2));
|
| 102 |
-
elseif ~updated(idx1(1), idx1(2)) && ~updated(idx2(1), idx2(2))
|
| 103 |
-
if attach
|
| 104 |
-
newBox(idx2(1), idx2(2)) = newBox(idx1(1),idx1(2));
|
| 105 |
-
else
|
| 106 |
-
y = (newBox(idx1(1),idx1(2)) + newBox(idx2(1), idx2(2)))/2;
|
| 107 |
-
newBox(idx1(1),idx1(2)) = y;
|
| 108 |
-
newBox(idx2(1), idx2(2)) = y;
|
| 109 |
-
end
|
| 110 |
-
end
|
| 111 |
-
|
| 112 |
-
if idx1(1) == 1
|
| 113 |
-
constraint(idx, :) = [idx1(2) idx2(2)];
|
| 114 |
-
else
|
| 115 |
-
constraint(idx, :) = [idx2(2) idx1(2)];
|
| 116 |
-
end
|
| 117 |
-
idx = idx + 1;
|
| 118 |
-
end
|
| 119 |
-
end
|
| 120 |
-
|
| 121 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/align_fp.m
DELETED
|
@@ -1,108 +0,0 @@
|
|
| 1 |
-
function [newBox, order, rBoundary] = align_fp(boundary, rBox, rType, rEdge, fp, threshold, drawResult)
|
| 2 |
-
% align the neighboring rooms first and then align with the boundary
|
| 3 |
-
|
| 4 |
-
if nargin < 7
|
| 5 |
-
drawResult =false;
|
| 6 |
-
end
|
| 7 |
-
|
| 8 |
-
% pre-processing:
|
| 9 |
-
% move the edge relation w.r.t. living room to the end
|
| 10 |
-
livingIdx = find(rType==0);
|
| 11 |
-
idx = rEdge(:,1) == livingIdx-1 | rEdge(:,2) == livingIdx-1;
|
| 12 |
-
% a = rEdge(~idx, :);
|
| 13 |
-
% b = rEdge(idx, :);
|
| 14 |
-
% rEdge = [a; b];
|
| 15 |
-
rEdge = rEdge(~idx, :);
|
| 16 |
-
entranceBox = get_entrance_space(boundary(1:2, 1:2), boundary(1,3), threshold);
|
| 17 |
-
|
| 18 |
-
if drawResult
|
| 19 |
-
clf
|
| 20 |
-
subplot(2,2,1)
|
| 21 |
-
plot_fp(rBox, boundary, rType, entranceBox);
|
| 22 |
-
title('original');
|
| 23 |
-
end
|
| 24 |
-
|
| 25 |
-
%% option #1: use greedy method: align with boundary first and then neighbor
|
| 26 |
-
% 1. align with boundary after the neighbors have been aligned
|
| 27 |
-
[~, newBox, updated] = align_with_boundary(rBox, boundary, threshold, rType);
|
| 28 |
-
|
| 29 |
-
if drawResult
|
| 30 |
-
subplot(2,2,2)
|
| 31 |
-
plot_fp(newBox, boundary, rType, entranceBox);
|
| 32 |
-
title('Align with boundary');
|
| 33 |
-
end
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
% 2. for each adjacent pair of room,
|
| 37 |
-
[~, newBox, ~] = align_neighbor(newBox, rEdge, updated, threshold+6);
|
| 38 |
-
if drawResult
|
| 39 |
-
subplot(2,2,3)
|
| 40 |
-
plot_fp(newBox, boundary, rType, entranceBox);
|
| 41 |
-
title('Align with neighbors');
|
| 42 |
-
end
|
| 43 |
-
|
| 44 |
-
% 3. regularize fp, include crop using boundary, gap filling
|
| 45 |
-
[newBox, order] = regularize_fp(newBox, boundary, rType);
|
| 46 |
-
|
| 47 |
-
% 4. generate the room polygons
|
| 48 |
-
[newBox, rBoundary] = get_room_boundary(newBox, boundary, order);
|
| 49 |
-
|
| 50 |
-
if drawResult
|
| 51 |
-
subplot(2,2,4)
|
| 52 |
-
plot_fp(newBox(order,:), boundary, rType(order), entranceBox);
|
| 53 |
-
title('Regularize fp');
|
| 54 |
-
end
|
| 55 |
-
|
| 56 |
-
% %% option #2: use optimization to align neighbors, and then align the boundary
|
| 57 |
-
% % 1. get the constraint from the adjacent rooms, and optimize
|
| 58 |
-
% %[constraint1, ~, ~] = align_with_boundary(rBox, boundary, threshold, rNode);
|
| 59 |
-
% [constraint2, ~, ~] = align_neighbor(rBox, rEdge, [], threshold+2);
|
| 60 |
-
% newBox = optimize_fp(rBox, [], constraint2);
|
| 61 |
-
% if drawResult
|
| 62 |
-
% subplot(3,4,6)
|
| 63 |
-
% plot_fp(newBox, boundary, rNode, entranceBox);
|
| 64 |
-
% title('Optimize the neighboring');
|
| 65 |
-
% end
|
| 66 |
-
%
|
| 67 |
-
% % 2. align with boundary after the neighbors have been aligned
|
| 68 |
-
% [constraint1, newBox2, ~] = align_with_boundary(newBox, boundary, threshold, rNode);
|
| 69 |
-
% if drawResult
|
| 70 |
-
% subplot(3,4,7)
|
| 71 |
-
% plot_fp(newBox2, boundary, rNode, entranceBox);
|
| 72 |
-
% title('Align with boundary w/o optimization');
|
| 73 |
-
% end
|
| 74 |
-
%
|
| 75 |
-
% % 3. regularize fp, include crop using boundary, gap filling
|
| 76 |
-
% [newBox2, order] = regularize_fp(newBox2, boundary, rNode);
|
| 77 |
-
% if drawResult
|
| 78 |
-
% subplot(3,4,8)
|
| 79 |
-
% plot_fp(newBox2(order,:), boundary, rNode(order,:), entranceBox);
|
| 80 |
-
% title('Regularize fp');
|
| 81 |
-
% end
|
| 82 |
-
%
|
| 83 |
-
%
|
| 84 |
-
%
|
| 85 |
-
% newBox = optimize_fp(newBox, constraint1, constraint2);
|
| 86 |
-
% if drawResult
|
| 87 |
-
% subplot(3,4,11)
|
| 88 |
-
% plot_fp(newBox, boundary, rNode, entranceBox);
|
| 89 |
-
% title('Align with boundary with optimization');
|
| 90 |
-
% end
|
| 91 |
-
%
|
| 92 |
-
% % 3. regularize fp, include crop using boundary, gap filling
|
| 93 |
-
% [newBox, order] = regularize_fp(newBox, boundary, rNode);
|
| 94 |
-
% if drawResult
|
| 95 |
-
% subplot(3,4,12)
|
| 96 |
-
% plot_fp(newBox(order,:), boundary, rNode(order,:), entranceBox);
|
| 97 |
-
% title('Regularize fp');
|
| 98 |
-
% if ~isempty(figName)
|
| 99 |
-
% saveas(gcf, figName);
|
| 100 |
-
% end
|
| 101 |
-
% end
|
| 102 |
-
%
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
%%
|
| 107 |
-
end
|
| 108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/align_neighbor.m
DELETED
|
@@ -1,53 +0,0 @@
|
|
| 1 |
-
function [constraint, box, updated] = align_neighbor(box, rEdge, updated, threshold)
|
| 2 |
-
|
| 3 |
-
if isempty(updated)
|
| 4 |
-
updated = false(size(box));
|
| 5 |
-
end
|
| 6 |
-
|
| 7 |
-
tempBox = box;
|
| 8 |
-
constraint = zeros(size(rEdge, 1)*3, 2);
|
| 9 |
-
iBegin = 1;
|
| 10 |
-
checked = false(size(rEdge, 1), 1);
|
| 11 |
-
updatedCount = get_updated_count(updated, rEdge);
|
| 12 |
-
for i = 1:size(rEdge, 1)
|
| 13 |
-
I = find(~checked);
|
| 14 |
-
[~, t] = maxk(updatedCount(I), 1);
|
| 15 |
-
checked(I(t)) = true;
|
| 16 |
-
idx = rEdge(I(t),1:2)+1;
|
| 17 |
-
[b, c] = align_adjacent_room3(box(idx, :), tempBox(idx, :), updated(idx,:), rEdge(I(t),3), threshold);
|
| 18 |
-
for j = 1:length(idx)
|
| 19 |
-
|
| 20 |
-
updated(idx(j), c(:,j)) = true;
|
| 21 |
-
|
| 22 |
-
c(:, j) = (c(:,j)-1)*size(box,1) + double(idx(j));
|
| 23 |
-
|
| 24 |
-
if b(j, 1) == b(j, 3)
|
| 25 |
-
b(j, [1 3]) = box(idx(j), [1 3]);
|
| 26 |
-
updated(idx(j), c(:,j)) = false;
|
| 27 |
-
end
|
| 28 |
-
if b(j, 2) == b(j, 4)
|
| 29 |
-
b(j, [2 4]) = box(idx(j), [2 4]);
|
| 30 |
-
updated(idx(j), c(:,j)) = false;
|
| 31 |
-
end
|
| 32 |
-
|
| 33 |
-
end
|
| 34 |
-
box(idx, :) = b;
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
cNum = size(c, 1);
|
| 38 |
-
|
| 39 |
-
constraint(iBegin:iBegin+cNum-1, :) = c;
|
| 40 |
-
iBegin = iBegin+cNum;
|
| 41 |
-
|
| 42 |
-
updatedCount = get_updated_count(updated, rEdge);
|
| 43 |
-
end
|
| 44 |
-
constraint = constraint(1:iBegin-1, :);
|
| 45 |
-
|
| 46 |
-
function updatedCount = get_updated_count(updated, rEdge)
|
| 47 |
-
updatedCount = zeros(size(rEdge, 1), 1);
|
| 48 |
-
for k = 1:size(rEdge, 1)
|
| 49 |
-
index = rEdge(k,1:2)+1;
|
| 50 |
-
updatedCount(k) = sum(sum(updated(index,:)));
|
| 51 |
-
end
|
| 52 |
-
end
|
| 53 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/align_with_boundary.m
DELETED
|
@@ -1,29 +0,0 @@
|
|
| 1 |
-
function [constraint, box, updated] = align_with_boundary(box, boundary, threshold, rType)
|
| 2 |
-
tempBox = box;
|
| 3 |
-
updated = false(size(box));
|
| 4 |
-
closedSeg = zeros(size(box));
|
| 5 |
-
distSeg = zeros(size(box));
|
| 6 |
-
for i = 1:length(box)
|
| 7 |
-
[closedSeg(i,:), distSeg(i,:)] = find_close_seg(box(i,:), boundary);
|
| 8 |
-
end
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
box(distSeg <= threshold) = closedSeg(distSeg <= threshold);
|
| 12 |
-
updated(distSeg <= threshold) = true;
|
| 13 |
-
idx = find(distSeg <= threshold);
|
| 14 |
-
constraint = [idx closedSeg(idx)];
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
% check if any room box blocks the door
|
| 18 |
-
entranceBox = get_entrance_space(boundary(1:2, 1:2), boundary(1,3), threshold);
|
| 19 |
-
entrancePoly = polyshape(entranceBox([1 1 3 3]), entranceBox([2 4 4 2]));
|
| 20 |
-
for i = 1:length(box)
|
| 21 |
-
if rType(i) ~= 10 && rType(i) ~= 0
|
| 22 |
-
roomPoly = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
|
| 23 |
-
if overlaps(entrancePoly, roomPoly)
|
| 24 |
-
box(i,:) = shrink_box(roomPoly, entrancePoly, boundary(1,3));
|
| 25 |
-
updated(i, box(i,:)==tempBox(i,:)) = false;
|
| 26 |
-
updated(i, box(i,:)~=tempBox(i,:)) = true;
|
| 27 |
-
end
|
| 28 |
-
end
|
| 29 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/find_close_seg.m
DELETED
|
@@ -1,74 +0,0 @@
|
|
| 1 |
-
function [closedSeg, distSeg, idx] = find_close_seg(box, boundary)
|
| 2 |
-
|
| 3 |
-
% need to carefully select the closed wall seg for each box
|
| 4 |
-
% cannot introduce a hole inside the boundary
|
| 5 |
-
|
| 6 |
-
isNew = boundary(:,4);
|
| 7 |
-
boundary = double(boundary(~isNew, :));
|
| 8 |
-
|
| 9 |
-
% get the ordered horizontal and vertical segments on the boundary
|
| 10 |
-
bSeg = [boundary(:, 1:2), boundary([2:end 1], 1:2), boundary(:,3)];
|
| 11 |
-
vSeg = bSeg(mod(boundary(:,3), 2)==1, :);
|
| 12 |
-
vSeg(vSeg(:,5)==3, [2 4]) = vSeg(vSeg(:,5)==3, [4 2]);
|
| 13 |
-
[~, I] = sort(vSeg(:,1));
|
| 14 |
-
vSeg = vSeg(I,:);
|
| 15 |
-
|
| 16 |
-
hSeg = bSeg(mod(boundary(:,3), 2)==0, :);
|
| 17 |
-
hSeg(hSeg(:,5)==2, [1 3]) = hSeg(hSeg(:,5)==2, [3 1]);
|
| 18 |
-
[~, I] = sort(hSeg(:,2));
|
| 19 |
-
hSeg = hSeg(I,:);
|
| 20 |
-
|
| 21 |
-
closedSeg = ones(1,4)*256;
|
| 22 |
-
distSeg = ones(1,4)*256;
|
| 23 |
-
idx = zeros(1, 4);
|
| 24 |
-
|
| 25 |
-
% check vertial seg
|
| 26 |
-
for i = 1:size(vSeg,1)
|
| 27 |
-
seg = vSeg(i, :);
|
| 28 |
-
vdist = 0;
|
| 29 |
-
if seg(4) <= box(2)
|
| 30 |
-
vdist = box(2) - seg(4);
|
| 31 |
-
elseif seg(2) >= box(4)
|
| 32 |
-
vdist = seg(2) - box(4);
|
| 33 |
-
end
|
| 34 |
-
|
| 35 |
-
hdist = box([1 3]) - seg(1);
|
| 36 |
-
dist1 = norm(double([hdist(1), vdist]));
|
| 37 |
-
dist3 = norm(double([hdist(2), vdist]));
|
| 38 |
-
|
| 39 |
-
if dist1 < distSeg(1) && dist1 <= dist3 && hdist(1) > 0
|
| 40 |
-
distSeg(1) = dist1;
|
| 41 |
-
idx(1) = i;
|
| 42 |
-
closedSeg(1) = seg(1);
|
| 43 |
-
elseif dist3 < distSeg(3) && hdist(2) < 0
|
| 44 |
-
distSeg(3) = dist3;
|
| 45 |
-
idx(3) = i;
|
| 46 |
-
closedSeg(3) = seg(3);
|
| 47 |
-
end
|
| 48 |
-
end
|
| 49 |
-
|
| 50 |
-
% check horizontal seg
|
| 51 |
-
for i = 1:size(hSeg,1)
|
| 52 |
-
|
| 53 |
-
seg = hSeg(i, :);
|
| 54 |
-
hdist = 0;
|
| 55 |
-
if seg(3) <= box(1)
|
| 56 |
-
hdist = box(1) - seg(3);
|
| 57 |
-
elseif seg(1) >= box(3)
|
| 58 |
-
hdist = seg(1) - box(3);
|
| 59 |
-
end
|
| 60 |
-
|
| 61 |
-
vdist = box([2 4]) - seg(2);
|
| 62 |
-
dist2 = norm(double([vdist(1), hdist]));
|
| 63 |
-
dist4 = norm(double([vdist(2), hdist]));
|
| 64 |
-
|
| 65 |
-
if dist2 <= dist4 && dist2 < distSeg(2) && vdist(1) > 0
|
| 66 |
-
distSeg(2) = dist2;
|
| 67 |
-
idx(2) = i;
|
| 68 |
-
closedSeg(2) = seg(2);
|
| 69 |
-
elseif dist4 < distSeg(4) && vdist(2) < 0
|
| 70 |
-
distSeg(4) = dist4;
|
| 71 |
-
idx(4) = i;
|
| 72 |
-
closedSeg(4) = seg(4);
|
| 73 |
-
end
|
| 74 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/find_room_order.m
DELETED
|
@@ -1,29 +0,0 @@
|
|
| 1 |
-
function order = find_room_order(M)
|
| 2 |
-
|
| 3 |
-
n = size(M,1);
|
| 4 |
-
G = digraph(M);
|
| 5 |
-
name = cell(n,1);
|
| 6 |
-
for i = 1:n
|
| 7 |
-
name{i} = num2str(i);
|
| 8 |
-
end
|
| 9 |
-
G.Nodes.Name = name;
|
| 10 |
-
|
| 11 |
-
order = zeros(n, 1);
|
| 12 |
-
i = 1;
|
| 13 |
-
while i <= n
|
| 14 |
-
D = indegree(G);
|
| 15 |
-
c = find(D==0);
|
| 16 |
-
if isempty(c)
|
| 17 |
-
idx = find(D==1);
|
| 18 |
-
c = setdiff(idx, order);
|
| 19 |
-
order(i) = str2double(G.Nodes.Name{c(1)});
|
| 20 |
-
G = rmnode(G, c(1));
|
| 21 |
-
i = i+1;
|
| 22 |
-
else
|
| 23 |
-
for j = 1:length(c)
|
| 24 |
-
order(i+j-1) = str2double(G.Nodes.Name{c(j)});
|
| 25 |
-
end
|
| 26 |
-
G = rmnode(G, c);
|
| 27 |
-
i = i + length(c);
|
| 28 |
-
end
|
| 29 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/get_entrance_space.m
DELETED
|
@@ -1,14 +0,0 @@
|
|
| 1 |
-
|
| 2 |
-
function doorBox = get_entrance_space(doorSeg, doorOri, threshold)
|
| 3 |
-
|
| 4 |
-
doorBox = [doorSeg(1,:) doorSeg(2,:)];
|
| 5 |
-
if doorOri == 0
|
| 6 |
-
doorBox(4) = doorBox(4) + threshold;
|
| 7 |
-
elseif doorOri == 1
|
| 8 |
-
doorBox(1) = doorBox(1) - threshold;
|
| 9 |
-
elseif doorOri == 2
|
| 10 |
-
doorBox(2) = doorBox(2) - threshold;
|
| 11 |
-
elseif doorOri == 3
|
| 12 |
-
doorBox(3) = doorBox(3) + threshold;
|
| 13 |
-
end
|
| 14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/get_room_boundary.m
DELETED
|
@@ -1,25 +0,0 @@
|
|
| 1 |
-
function [newBox, rBoundary] = get_room_boundary(box, boundary, order)
|
| 2 |
-
|
| 3 |
-
isNew = boundary(:,4);
|
| 4 |
-
polyBoundary = polyshape(boundary(~isNew,1), boundary(~isNew,2));
|
| 5 |
-
|
| 6 |
-
poly = cell(size(box,1), 1);
|
| 7 |
-
for i = 1:size(box,1)
|
| 8 |
-
poly{i} = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
|
| 9 |
-
end
|
| 10 |
-
|
| 11 |
-
newBox = box;
|
| 12 |
-
rBoundary = cell(size(box,1), 1);
|
| 13 |
-
for i = 1:size(box,1)
|
| 14 |
-
idx = order(i);
|
| 15 |
-
|
| 16 |
-
rPoly = intersect(polyBoundary, poly{idx});
|
| 17 |
-
for j = i+1:size(box,1)
|
| 18 |
-
rPoly = subtract(rPoly, poly{order(j)});
|
| 19 |
-
end
|
| 20 |
-
rBoundary{idx} = rPoly.Vertices;
|
| 21 |
-
[xLimit, yLimit]= boundingbox(rPoly);
|
| 22 |
-
if ~isempty(xLimit)
|
| 23 |
-
newBox(idx,:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
|
| 24 |
-
end
|
| 25 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/regularize_fp.m
DELETED
|
@@ -1,111 +0,0 @@
|
|
| 1 |
-
function [box, order] = regularize_fp(box, boundary, rType)
|
| 2 |
-
|
| 3 |
-
% 1. use the boundary to crop each room box
|
| 4 |
-
isNew = boundary(:,4);
|
| 5 |
-
polyBoundary = polyshape(boundary(~isNew,1), boundary(~isNew,2));
|
| 6 |
-
for i = 1:size(box, 1)
|
| 7 |
-
polyRoom = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
|
| 8 |
-
[xLimit, yLimit] = boundingbox(intersect(polyBoundary,polyRoom));
|
| 9 |
-
if isempty(xLimit)
|
| 10 |
-
disp('One room outside the building!');
|
| 11 |
-
else
|
| 12 |
-
box(i,:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
|
| 13 |
-
end
|
| 14 |
-
end
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
% 2. check if there is any overlapped region to determine the layer of boxes
|
| 18 |
-
orderM = false(size(box,1), size(box,1));
|
| 19 |
-
for i = 1:size(box,1)
|
| 20 |
-
polyRoom1 = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
|
| 21 |
-
area1 = area(polyRoom1);
|
| 22 |
-
for j = i+1:size(box,1)
|
| 23 |
-
polyRoom2 = polyshape(box(j, [1 1 3 3]), box(j, [2 4 4 2]));
|
| 24 |
-
area2 = area(polyRoom2);
|
| 25 |
-
inter = intersect(polyRoom1, polyRoom2);
|
| 26 |
-
if inter.NumRegions >= 1
|
| 27 |
-
if area1 <= area2 % may need to add the FP into consideration
|
| 28 |
-
orderM(i,j) = true;
|
| 29 |
-
else
|
| 30 |
-
orderM(j,i) = true;
|
| 31 |
-
end
|
| 32 |
-
end
|
| 33 |
-
end
|
| 34 |
-
end
|
| 35 |
-
order = 1:size(box,1);
|
| 36 |
-
if any(orderM(:))
|
| 37 |
-
order = find_room_order(orderM);
|
| 38 |
-
end
|
| 39 |
-
order = order(end:-1:1);
|
| 40 |
-
|
| 41 |
-
% 3. check if there are more than one uncovered regions inside the building
|
| 42 |
-
livingIdx = find(rType==0);
|
| 43 |
-
for i = 1:size(box, 1)
|
| 44 |
-
if i ~= livingIdx
|
| 45 |
-
if box(i,1)==box(i,3) || box(i,2)==box(i,4)
|
| 46 |
-
disp('Empty box!!!');
|
| 47 |
-
else
|
| 48 |
-
polyRoom = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2]));
|
| 49 |
-
polyBoundary = subtract(polyBoundary,polyRoom);
|
| 50 |
-
end
|
| 51 |
-
|
| 52 |
-
end
|
| 53 |
-
end
|
| 54 |
-
livingPoly = polyshape(box(livingIdx, [1 1 3 3]), box(livingIdx, [2 4 4 2]));
|
| 55 |
-
|
| 56 |
-
gap = polyBoundary;
|
| 57 |
-
if gap.NumRegions == 1
|
| 58 |
-
[xLimit, yLimit] = boundingbox(gap);
|
| 59 |
-
box(livingIdx,:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
|
| 60 |
-
else
|
| 61 |
-
rIdx = find(isnan(gap.Vertices(:,1)));
|
| 62 |
-
rIdx = [rIdx; size(gap.Vertices,1)+1];
|
| 63 |
-
|
| 64 |
-
% for each region, check if it intersects with the living room,
|
| 65 |
-
% otherwise get the room label and find the room that should cover
|
| 66 |
-
% the region
|
| 67 |
-
|
| 68 |
-
region = cell(length(rIdx), 1);
|
| 69 |
-
overlapArea = zeros(length(rIdx), 1);
|
| 70 |
-
closeRoomIdx = zeros(length(rIdx), 1);
|
| 71 |
-
idx = 1;
|
| 72 |
-
for k = 1:length(rIdx)
|
| 73 |
-
regionV = gap.Vertices(idx:rIdx(k)-1, :);
|
| 74 |
-
idx = rIdx(k) + 1;
|
| 75 |
-
region{k} = polyshape(regionV);
|
| 76 |
-
|
| 77 |
-
if overlaps(region{k}, livingPoly)
|
| 78 |
-
iter = intersect(region{k}, livingPoly);
|
| 79 |
-
overlapArea(k) = area(iter);
|
| 80 |
-
end
|
| 81 |
-
|
| 82 |
-
[x, y] = centroid(region{k});
|
| 83 |
-
center = [x, y];
|
| 84 |
-
|
| 85 |
-
dist = 256;
|
| 86 |
-
bIdx = 0;
|
| 87 |
-
for i = 1:size(box, 1)
|
| 88 |
-
b = box(i, :);
|
| 89 |
-
bCenter = double([(b(:,1)+b(:,3))/2, (b(:,2)+b(:,4))/2]);
|
| 90 |
-
d = norm(bCenter-center);
|
| 91 |
-
if d<dist
|
| 92 |
-
dist = d;
|
| 93 |
-
bIdx = i;
|
| 94 |
-
end
|
| 95 |
-
end
|
| 96 |
-
closeRoomIdx(k) = bIdx;
|
| 97 |
-
end
|
| 98 |
-
|
| 99 |
-
[~, lIdx] = max(overlapArea);
|
| 100 |
-
for k = 1:length(closeRoomIdx)
|
| 101 |
-
if k == lIdx
|
| 102 |
-
[xLimit, yLimit] = boundingbox(region{k});
|
| 103 |
-
box(livingIdx,:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
|
| 104 |
-
else
|
| 105 |
-
room = polyshape(box(closeRoomIdx(k), [1 1 3 3]), box(closeRoomIdx(k), [2 4 4 2]));
|
| 106 |
-
[xLimit, yLimit] = boundingbox(union(room, region{k}));
|
| 107 |
-
box(closeRoomIdx(k),:) = [xLimit(1) yLimit(1) xLimit(2), yLimit(2)];
|
| 108 |
-
end
|
| 109 |
-
end
|
| 110 |
-
end
|
| 111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/align_fp/shrink_box.m
DELETED
|
@@ -1,61 +0,0 @@
|
|
| 1 |
-
function box = shrink_box(roomPoly, entrancePoly, doorOrient)
|
| 2 |
-
|
| 3 |
-
[PG, shapeId, ~] = subtract(roomPoly, entrancePoly);
|
| 4 |
-
idx1 = find(shapeId==1);
|
| 5 |
-
d = idx1(2:end) - idx1(1:end-1);
|
| 6 |
-
i = find(d~=1);
|
| 7 |
-
if ~isempty(i)
|
| 8 |
-
idx1 = idx1([i+1:end 1:i]);
|
| 9 |
-
end
|
| 10 |
-
|
| 11 |
-
idx2 = find(shapeId~=1);
|
| 12 |
-
d = idx2(2:end) - idx2(1:end-1);
|
| 13 |
-
i = find(d~=1);
|
| 14 |
-
if ~isempty(i)
|
| 15 |
-
idx2 = idx2([i+1:end 1:i]);
|
| 16 |
-
end
|
| 17 |
-
|
| 18 |
-
remainPoint = length(idx1);
|
| 19 |
-
if remainPoint == 2
|
| 20 |
-
box = [min(PG.Vertices) max(PG.Vertices)];
|
| 21 |
-
elseif remainPoint == 3
|
| 22 |
-
assert(length(idx2) == 3);
|
| 23 |
-
pointSet1 = PG.Vertices([idx1(1:2); idx2(2)], :);
|
| 24 |
-
pointSet2 = PG.Vertices([idx1(2:3); idx2(2)], :);
|
| 25 |
-
if mod(doorOrient, 2) == 0 % door grow vertically
|
| 26 |
-
if pointSet1(1,1) == pointSet1(2,1)
|
| 27 |
-
box = [min(pointSet1) max(pointSet1)];
|
| 28 |
-
else
|
| 29 |
-
box = [min(pointSet2) max(pointSet2)];
|
| 30 |
-
end
|
| 31 |
-
else
|
| 32 |
-
if pointSet1(1,2) == pointSet1(2,2)
|
| 33 |
-
box = [min(pointSet1) max(pointSet1)];
|
| 34 |
-
else
|
| 35 |
-
box = [min(pointSet2) max(pointSet2)];
|
| 36 |
-
end
|
| 37 |
-
end
|
| 38 |
-
elseif remainPoint == 4
|
| 39 |
-
% elseif remainPoint == 4 && length(idx2) == 4
|
| 40 |
-
% pointSet = PG.Vertices([idx1(2:3); idx2(2:3)], :);
|
| 41 |
-
% box = [min(pointSet) max(pointSet)];
|
| 42 |
-
% elseif remainPoint == 4 % door inside the box
|
| 43 |
-
[x1, y1] = centroid(roomPoly);
|
| 44 |
-
[x2, y2] = centroid(entrancePoly);
|
| 45 |
-
box = [min(roomPoly.Vertices) max(roomPoly.Vertices)];
|
| 46 |
-
if mod(doorOrient, 2) == 0 % door grow vertically
|
| 47 |
-
if x1 < x2
|
| 48 |
-
box(3) = min(entrancePoly.Vertices(:,1));
|
| 49 |
-
else
|
| 50 |
-
box(1) = max(entrancePoly.Vertices(:,1));
|
| 51 |
-
end
|
| 52 |
-
else
|
| 53 |
-
if y1 < y2
|
| 54 |
-
box(4) = min(entrancePoly.Vertices(:,2));
|
| 55 |
-
else
|
| 56 |
-
box(2) = max(entrancePoly.Vertices(:,2));
|
| 57 |
-
end
|
| 58 |
-
end
|
| 59 |
-
else
|
| 60 |
-
disp(['There are other cases with point number = ', num2str(length(shapeId))]);
|
| 61 |
-
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/db.sqlite3
DELETED
|
File without changes
|
Interface/manage.py
DELETED
|
@@ -1,21 +0,0 @@
|
|
| 1 |
-
#!/usr/bin/env python
|
| 2 |
-
"""Django's command-line utility for administrative tasks."""
|
| 3 |
-
import os
|
| 4 |
-
import sys
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
def main():
|
| 8 |
-
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'House.settings')
|
| 9 |
-
try:
|
| 10 |
-
from django.core.management import execute_from_command_line
|
| 11 |
-
except ImportError as exc:
|
| 12 |
-
raise ImportError(
|
| 13 |
-
"Couldn't import Django. Are you sure it's installed and "
|
| 14 |
-
"available on your PYTHONPATH environment variable? Did you "
|
| 15 |
-
"forget to activate a virtual environment?"
|
| 16 |
-
) from exc
|
| 17 |
-
execute_from_command_line(sys.argv)
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
if __name__ == '__main__':
|
| 21 |
-
main()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Interface/model/__pycache__/_floorplan2.cpython-37.pyc
DELETED
|
Binary file (2.67 kB)
|
|
|
Interface/model/__pycache__/add_archs.cpython-37.pyc
DELETED
|
Binary file (13.3 kB)
|
|
|
Interface/model/__pycache__/box_utils.cpython-37.pyc
DELETED
|
Binary file (4.07 kB)
|
|
|
Interface/model/__pycache__/crn.cpython-37.pyc
DELETED
|
Binary file (3.06 kB)
|
|
|