Team:Terrain/Tent Internals

From WHY2025 wiki
Revision as of 19:55, 7 June 2025 by Uglyhack (talk | contribs)
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.")
  1. Create and activate the map tool

tool = SquareDrawTool(iface.mapCanvas()) iface.mapCanvas().setMapTool(tool)

To use:

  • Have qgis
  • Open Plugins -> Python Console
  • 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