From 03b07d8a7690e0f5b152a5b1eaae6a8669d6fc30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 18 Dec 2016 01:15:25 +0100 Subject: [PATCH] add Escalator and EscalatorSlope (with no support for rendermap and buildgraph so far) --- src/c3nav/editor/forms.py | 1 - src/c3nav/editor/static/editor/js/editor.js | 4 +- .../mapdata/migrations/0022_escalator.py | 33 +++++++++++++ .../mapdata/migrations/0023_escalatorslope.py | 32 +++++++++++++ src/c3nav/mapdata/models/geometry.py | 48 +++++++++++++++++++ src/c3nav/mapdata/packageio/const.py | 6 +-- 6 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 src/c3nav/mapdata/migrations/0022_escalator.py create mode 100644 src/c3nav/mapdata/migrations/0023_escalatorslope.py diff --git a/src/c3nav/editor/forms.py b/src/c3nav/editor/forms.py index d7b85b14..f428178f 100644 --- a/src/c3nav/editor/forms.py +++ b/src/c3nav/editor/forms.py @@ -3,7 +3,6 @@ import time from collections import OrderedDict from django.conf import settings -from django.db.models import Field from django.forms import CharField, ModelForm, ValidationError from django.forms.models import ModelChoiceField from django.forms.widgets import HiddenInput diff --git a/src/c3nav/editor/static/editor/js/editor.js b/src/c3nav/editor/static/editor/js/editor.js index be272732..0f400403 100644 --- a/src/c3nav/editor/static/editor/js/editor.js +++ b/src/c3nav/editor/static/editor/js/editor.js @@ -282,7 +282,9 @@ editor = { 'levelconnector': '#FFFF00', 'shadow': '#000000', 'stair': '#FF0000', - 'arealocation': '#0099FF' + 'arealocation': '#0099FF', + 'escalator': '#FF9900', + 'escalatorslope': '#DD7700' }, _line_draw_geometry_style: function(style) { style.stroke = true; diff --git a/src/c3nav/mapdata/migrations/0022_escalator.py b/src/c3nav/mapdata/migrations/0022_escalator.py new file mode 100644 index 00000000..c869ab9c --- /dev/null +++ b/src/c3nav/mapdata/migrations/0022_escalator.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2016-12-17 23:54 +from __future__ import unicode_literals + +import c3nav.mapdata.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mapdata', '0021_auto_20161217_2333'), + ] + + operations = [ + migrations.CreateModel( + name='Escalator', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.SlugField(unique=True, verbose_name='Name')), + ('geometry', c3nav.mapdata.fields.GeometryField()), + ('direction', models.BooleanField(choices=[(True, 'up'), (False, 'down')], verbose_name='direction')), + ('level', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='escalators', to='mapdata.Level', verbose_name='level')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='escalators', to='mapdata.Package', verbose_name='map package')), + ], + options={ + 'verbose_name': 'Escalator', + 'default_related_name': 'escalators', + 'verbose_name_plural': 'Escalators', + }, + ), + ] diff --git a/src/c3nav/mapdata/migrations/0023_escalatorslope.py b/src/c3nav/mapdata/migrations/0023_escalatorslope.py new file mode 100644 index 00000000..0b2fc76c --- /dev/null +++ b/src/c3nav/mapdata/migrations/0023_escalatorslope.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2016-12-18 00:12 +from __future__ import unicode_literals + +import c3nav.mapdata.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mapdata', '0022_escalator'), + ] + + operations = [ + migrations.CreateModel( + name='EscalatorSlope', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.SlugField(unique=True, verbose_name='Name')), + ('geometry', c3nav.mapdata.fields.GeometryField()), + ('level', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='escalatorslopes', to='mapdata.Level', verbose_name='level')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='escalatorslopes', to='mapdata.Package', verbose_name='map package')), + ], + options={ + 'verbose_name': 'Escalator Slope', + 'verbose_name_plural': 'Escalator Slopes', + 'default_related_name': 'escalatorslopes', + }, + ), + ] diff --git a/src/c3nav/mapdata/models/geometry.py b/src/c3nav/mapdata/models/geometry.py index 65e63b22..571ff5b8 100644 --- a/src/c3nav/mapdata/models/geometry.py +++ b/src/c3nav/mapdata/models/geometry.py @@ -165,6 +165,54 @@ class Outside(GeometryMapItemWithLevel): default_related_name = 'outsides' +class Escalator(GeometryMapItemWithLevel): + """ + An escalator area + """ + DIRECTIONS = ( + (True, _('up')), + (False, _('down')), + ) + direction = models.BooleanField(verbose_name=_('direction'), choices=DIRECTIONS) + + geomtype = 'polygon' + + class Meta: + verbose_name = _('Escalator') + verbose_name_plural = _('Escalators') + default_related_name = 'escalators' + + @classmethod + def fromfile(cls, data, file_path): + kwargs = super().fromfile(data, file_path) + + if 'direction' not in data: + raise ValueError('missing direction.') + kwargs['direction'] = data['direction'] + + return kwargs + + def get_geojson_properties(self): + result = super().get_geojson_properties() + result['direction'] = 'up' if self.direction else 'down' + return result + + def tofile(self): + result = super().tofile() + result['direction'] = self.direction + return result + + +class EscalatorSlope(DirectedLineGeometryMapItemWithLevel): + """ + An escalator slope, indicating which side of the escalator is up + """ + class Meta: + verbose_name = _('Escalator Slope') + verbose_name_plural = _('Escalator Slopes') + default_related_name = 'escalatorslopes' + + class Stair(DirectedLineGeometryMapItemWithLevel): """ A stair diff --git a/src/c3nav/mapdata/packageio/const.py b/src/c3nav/mapdata/packageio/const.py index e1dbf69e..15db176f 100644 --- a/src/c3nav/mapdata/packageio/const.py +++ b/src/c3nav/mapdata/packageio/const.py @@ -1,8 +1,8 @@ from c3nav.mapdata.models import AreaLocation, Level, LocationGroup, Package, Source from c3nav.mapdata.models.collections import Elevator -from c3nav.mapdata.models.geometry import (Building, Door, ElevatorLevel, Hole, LevelConnector, LineObstacle, Obstacle, - Outside, Room, Stair) +from c3nav.mapdata.models.geometry import (Building, Door, ElevatorLevel, Escalator, EscalatorSlope, Hole, + LevelConnector, LineObstacle, Obstacle, Outside, Room, Stair) ordered_models = (Package, Level, LevelConnector, Source, Building, Room, Outside, Door, Obstacle, Hole) -ordered_models += (Elevator, ElevatorLevel, LineObstacle, Stair) +ordered_models += (Elevator, ElevatorLevel, LineObstacle, Stair, Escalator, EscalatorSlope) ordered_models += (LocationGroup, AreaLocation)