1# -*- coding: utf-8 -*-2# Copyright 2011 Takeshi KOMIYA3#4# Licensed under the Apache License, Version 2.0 (the "License");5# you may not use this file except in compliance with the License.6# You may obtain a copy of the License at7#8# http://www.apache.org/licenses/LICENSE-2.09#10# Unless required by applicable law or agreed to in writing, software11# distributed under the License is distributed on an "AS IS" BASIS,12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13# See the License for the specific language governing permissions and14# limitations under the License.1516from blockdiag.noderenderer import install_renderer17from blockdiag.noderenderer.base import NodeShape18from blockdiag.utils import XY, Box192021class Dots(NodeShape):22 def render_label(self, drawer, **kwargs):23 pass2425 def render_shape(self, drawer, _, **kwargs):26 if kwargs.get('shadow'):27 return2829 m = self.metrics30 center = m.cell(self.node).center31 dots = [center]32 if self.node.group.orientation == 'landscape':33 pt = XY(center.x, center.y - m.node_height / 2)34 dots.append(pt)3536 pt = XY(center.x, center.y + m.node_height / 2)37 dots.append(pt)38 else:39 pt = XY(center.x - m.node_width / 3, center.y)40 dots.append(pt)4142 pt = XY(center.x + m.node_width / 3, center.y)43 dots.append(pt)4445 r = m.cellsize / 246 for dot in dots:47 box = Box(dot.x - r, dot.y - r, dot.x + r, dot.y + r)48 drawer.ellipse(box, fill=self.node.linecolor,49 outline=self.node.linecolor)505152def setup(self):53 install_renderer('dots', Dots)