Team:Terrain/Tent Internals

From WHY2025 wiki
Jump to navigation Jump to search

Wet-en-Regelgeving opstelling Zitplaatsen


De inrichting van een besloten ruimte is zodanig dat:

   voor elke persoon zonder zitplaats ten minste 0,25 m2 vloeroppervlakte beschikbaar is;
   voor elke persoon met zitplaats ten minste 0,3 m2 vloeroppervlakte beschikbaar is, indien geen inventaris kan verschuiven of omvallen als gevolg van gedrang;
   voor elke persoon met zitplaats ten minste 0,5 m2 vloeroppervlakte beschikbaar is, indien inventaris kan verschuiven of omvallen als gevolg van gedrang.


Bij de berekening van de per persoon beschikbare vloeroppervlakte wordt uitgegaan van de vloeroppervlakte aan verblijfsruimte na aftrek van de oppervlakte van de inventaris.


Indien op een plaats meer dan 100 zitplaatsen gezamenlijk zijn opgesteld, zijn de zitplaatsen gekoppeld of aan de vloer bevestigd, zodanig dat deze niet kunnen verschuiven of omvallen als gevolg van gedrang, indien die zitplaatsen in een cluster van meer dan 4 rijen van meer dan 4 stoelen zijn opgesteld.


Bij in rijen opgestelde zitplaatsen is tussen de rijen een vrije ruimte aanwezig met een breedte van ten minste 0,4 m, gemeten tussen de loodlijnen op de elkaar dichtst naderende gedeelten van de rijen.


Indien in een rij als bedoeld in het derde lid tussen de zitplaatsen een tafel is geplaatst, bevindt deze zich niet in de vrije ruimte, bedoeld in dat lid.


Een rij zitplaatsen die slechts aan een einde op een gangpad of uitgang uitkomt, heeft niet meer dan 8 zitplaatsen.


Een rij zitplaatsen die aan beide einden op een gangpad of uitgang uitkomt, heeft ten hoogste:


16 zitplaatsen indien de vrije ruimte, bedoeld in het derde lid, niet groter is dan 0,45 m en de breedte van de vrije doorgang van het gangpad of van de uitgang ten minste 0,6 m is;


32 zitplaatsen indien de vrije ruimte, bedoeld in het derde lid, groter is dan 0,45 m en de breedte van de vrije doorgang van het gangpad of van de uitgang ten minste 0,6 m is;


50 zitplaatsen indien de vrije ruimte, bedoeld in het derde lid, groter is dan 0,45 m en de breedte van de vrije doorgang van het gangpad of van de uitgang ten minste 1,1 m is.


Script

from qgis.core import *
from qgis.utils import iface
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QMouseEvent

class SquareDrawTool(QgsMapTool):
    def __init__(self, canvas):
        super().__init__(canvas)
        self.canvas = canvas
        self.layer = iface.activeLayer()
        self.tentwidth = 20.0
        self.tentlength = 25.0
        self.stagewidth = 8.0
        self.stagedepth = 4.0
        self.islewidth=3.7 # Width of the center isle
        self.surroundwidth = 2.0
        self.stage_to_chairs = 1.55
        self.chairwidth = 0.45
        self.chairheight = 0.45
        self.chairisle = 0.55 # space between chairs, front to back

    def canvasPressEvent(self, event: QMouseEvent):
        self.layer.startEditing()
        # Get the clicked point's map coordinates
        point = self.canvas.getCoordinateTransform().toMapCoordinates(event.pos())
        
        # Draw the outline
        self.add_square_from_point(
        point,
        0,
        0,
        self.tentwidth,
        self.tentlength)
        
        center_x = self.tentwidth/2.0
        center_y = self.tentlength/2
        
        # draw the stage
        self.add_square_from_point(
            point,
            center_x - self.stagewidth/2.0,
            0.0,
            self.stagewidth, self.stagedepth)
         
        # These points all refer to the bottom left of the chair block   
        chair_min_y = self.stagedepth + self.stage_to_chairs
        chair_max_y = self.tentlength - self.surroundwidth - self.chairheight
        chair_left_min_x = self.surroundwidth
        chair_left_max_x = center_x - self.islewidth/2 - self.chairwidth
        # Don't need to do the right block of chairs, as they will be mirrored
        
        #draw the chairs
        draw_x = chair_left_max_x
        while (draw_x > chair_left_min_x):
            mirror_x = (draw_x - center_x)* -1 + center_x - self.chairwidth
            draw_y = chair_min_y
            while (draw_y <= chair_max_y):
                self.add_square_from_point(
                    point,
                    draw_x,
                    draw_y,
                    self.chairwidth,
                    self.chairheight)
                self.add_square_from_point(
                    point,
                    mirror_x,
                    draw_y,
                    self.chairwidth,
                    self.chairheight)
                draw_y += self.chairheight + self.chairisle
            draw_x -= self.chairwidth
        # draw side isle width
        self.add_dimension(point,
                0,
                center_y,
                draw_x+self.chairwidth,
                center_y
        )
        # draw isle height
        self.add_dimension(point,
                center_x/2,
                draw_y-self.chairisle,
                center_x/2,
                self.tentlength
        )
        
        # Add dimensions
        # tent dims
        self.add_dimension(point,
            -1,
            0,
            -1,
            self.tentlength
        )
        self.add_dimension(point,
            0,
            -1,
            self.tentwidth,
            -1
        )
        
        # stage
        self.add_dimension(point,
            center_x,
            0,
            center_x,
            self.stagedepth)
        self.add_dimension(point,
            center_x - self.stagewidth/2,
            self.stagedepth/2,
            center_x + self.stagewidth/2,
            self.stagedepth/2)
        # Isle width
        self.add_dimension(point,
            center_x-self.islewidth/2,
            center_y,
            center_x+self.islewidth/2,
            center_y
            )
        
        self.add_dimension(point,
            center_x/2,
            chair_min_y+self.chairheight,
            center_x/2,
            chair_min_y+self.chairheight+self.chairisle
        )

        # Commit the changes
        self.layer.commitChanges()   
        # Refresh the layer
        self.layer.triggerRepaint()
   
    def add_dimension(self, start_point, start_x, start_y, end_x, end_y, type="length"):
        points = [
        QgsPointXY(
            start_point.x()+start_x,
            start_point.y()+start_y),
        QgsPointXY(
            start_point.x()+end_x,
            start_point.y()+end_y)
        ]
        line = QgsGeometry.fromPolylineXY(points)
        if self.layer and self.layer.type() == QgsMapLayer.VectorLayer:
            # Create a new feature and set its geometry
            feature = QgsFeature(self.layer.fields())
            feature.setGeometry(line)
            feature.setAttribute('type', type)

        # Add the feature to the layer
        self.layer.addFeature(feature)
        
    def add_square_from_point(self, start_point, offset_x, offset_y, width, length, type=""):
        # Define the coordinates of the square based on the selected point (bottom-left corner)
        square_points = [
            QgsPointXY(
                start_point.x()+offset_x,
                start_point.y()+offset_y),           # Bottom-left
            QgsPointXY(
                start_point.x() +offset_x+ width,
                start_point.y()+offset_y),   # Bottom-right
            QgsPointXY(
                start_point.x() +offset_x+ width,
                start_point.y() +offset_y+ length),  # Top-right
            QgsPointXY(
                start_point.x()+offset_x, 
                start_point.y()+offset_y+ length),   # Top-left
            QgsPointXY(
                start_point.x()+offset_x,
                start_point.y()+offset_y)           # Closing the square
        ]

        # Create a polygon geometry for the square
        square_geometry = QgsGeometry.fromPolylineXY(square_points)

        if self.layer and self.layer.type() == QgsMapLayer.VectorLayer:
            # Create a new feature and set its geometry
            feature = QgsFeature(self.layer.fields())
            feature.setGeometry(square_geometry)
            feature.setAttribute('type', type)
            
            # Add the feature to the layer
            self.layer.addFeature(feature)
            
        else:
            print("No valid vector layer selected.")

# Create and activate the map tool
tool = SquareDrawTool(iface.mapCanvas())
iface.mapCanvas().setMapTool(tool)

To use:

  • Have qgis
  • Open Plugins -> Python Console
  • Select "Show Editor"
  • Create a new script
  • Paste the code in
  • Edit the parameters (e.g. tent width and length)
  • Save
  • Select the tent internals layer
  • Press green arrow to run
  • Click somewhere on field to place
  • Enter edit mode on tent internals layer
  • Select all the objects of this tent
  • Use move and rotate tools to move to the right place
  • Save the changes to the layer