From 0b3f6503bbe38a129f1f9395c0d3924c4ad87185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Fri, 7 Jan 2011 16:25:15 +0100 Subject: [PATCH] Add basic logical symbols (NOT, AND, OR). --- share/library/Logical/and.lua | 41 ++++++++++++++++++++++++++ share/library/Logical/not.lua | 41 ++++++++++++++++++++++++++ share/library/Logical/or.lua | 55 +++++++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+) create mode 100644 share/library/Logical/and.lua create mode 100644 share/library/Logical/not.lua create mode 100644 share/library/Logical/or.lua diff --git a/share/library/Logical/and.lua b/share/library/Logical/and.lua new file mode 100644 index 0000000..57f7325 --- /dev/null +++ b/share/library/Logical/and.lua @@ -0,0 +1,41 @@ +-- Symbol name +names = +{ + en = "AND", + cs = "AND" +} + +-- Render area in base units (X1, Y1, X2, Y2) +area = {-4, -2, 5, 2} + +-- Terminals +terminals = {{-4, -1}, {-4, 1}, {5, 0}} + +-- Rendering +render = function (cr) + -- The main shape + cr.move_to (-2, -2) + cr.line_to (1, -2) + cr.arc (1, 0, 2, math.pi * 1.5, math.pi * 0.5) + cr.line_to (-2, 2) + cr.close_path () + cr.stroke () + + -- The contacts + cr.move_to (-4, -1) + cr.line_to (-2, -1) + cr.stroke () + + cr.move_to (-4, 1) + cr.line_to (-2, 1) + cr.stroke () + + cr.move_to (3, 0) + cr.line_to (5, 0) + cr.stroke () +end + +-- Register the symbol +logdiag.register ("AND", names, area, terminals, render) + + diff --git a/share/library/Logical/not.lua b/share/library/Logical/not.lua new file mode 100644 index 0000000..94117be --- /dev/null +++ b/share/library/Logical/not.lua @@ -0,0 +1,41 @@ +-- Symbol name +names = +{ + en = "NOT", + cs = "NOT" +} + +-- Render area in base units (X1, Y1, X2, Y2) +area = {-4, -2, 4, 2} + +-- Terminals +terminals = {{-4, 0}, {4, 0}} + +-- Rendering +render = function (cr) + -- The triangle + cr.move_to (-2, -2) + cr.line_to (2, 0) + cr.line_to (-2, 2) + cr.close_path () + cr.stroke () + + -- The circle + cr.new_sub_path () + cr.arc (2.25, 0, 0.25, 0, 2 * math.pi) + cr.stroke () + + -- The contacts + cr.move_to (-4, 0) + cr.line_to (-2, 0) + cr.stroke () + + cr.move_to (2.5, 0) + cr.line_to (4, 0) + cr.stroke () +end + +-- Register the symbol +logdiag.register ("NOT", names, area, terminals, render) + + diff --git a/share/library/Logical/or.lua b/share/library/Logical/or.lua new file mode 100644 index 0000000..b0f76fc --- /dev/null +++ b/share/library/Logical/or.lua @@ -0,0 +1,55 @@ +-- Symbol name +names = +{ + en = "OR", + cs = "OR" +} + +-- Render area in base units (X1, Y1, X2, Y2) +area = {-4, -2, 5, 2} + +-- Terminals +terminals = {{-4, -1}, {-4, 1}, {5, 0}} + +-- Rendering +render = function (cr) + -- The main shape + cr.move_to (-2, -2) + cr.line_to (0, -2) + cr.curve_to (2, -2, 3, 0, 3, 0) + cr.curve_to (3, 0, 2, 2, 0, 2) + cr.line_to (-2, 2) + cr.curve_to (-1, 1, -1, -1, -2, -2) + cr.stroke () + + -- The contacts + cr.save () + + -- Crop the contacts according to + -- the left side of the main shape + cr.move_to (-4, 2) + cr.line_to (-2, 2) + cr.curve_to (-1, 1, -1, -1, -2, -2) + cr.line_to (-4, -2) + cr.close_path () + cr.clip () + + cr.move_to (-4, -1) + cr.line_to (-1, -1) + cr.stroke () + + cr.move_to (-4, 1) + cr.line_to (-1, 1) + cr.stroke () + + cr.restore () + + cr.move_to (3, 0) + cr.line_to (5, 0) + cr.stroke () +end + +-- Register the symbol +logdiag.register ("OR", names, area, terminals, render) + +