Modul:Benutzer:Sivizius/chem
Zeichnen von Strukturformeln:
{{#invoke: Benutzer:Sivizius/chem | render | breite | höhe | structure= strukture }}
- breite bzw. höhe: Breite bzw. Höhe der Zeichenfläche (canvas).
- struktur: Struktur der Verbindung, kann folgende Zeichen(-kombinationen) enthalten:
- 0–9, A–Z, a–z: Werden als solche an der entsprechenden Stelle zentriert gezeichnet.
- _(sub): sub wird tiefgestellt.
- ^(sup): sup wird hochgestellt.
- -, =, #: Einfach-, Doppel- und Dreifachbindung
- <, >: Einfachbindung nach vorn
- <:, :>: Einfachbindung nach hinten
- A-B(-X)-C: Verzweigung (A–B(–X)–C)
- A*n(----): n-gliedriger Ring, A ist die erste Gruppe im Ring. Wenn weniger als n Bindungen angegeben werden, wird der Ring nicht geschlossen.
Nicht alles ist bereits implementiert. Vorschläge gerne gesehen
local package = {}
classPrefix = "chem"
bondHelfLength = 10 --px
bondSeperation = 1 --px
function drawGroup ( text, class )
local inner = mw.html.create ( "p" )
local outer = mw.html.create ( "div" )
inner
:addClass ( classPrefix..class )
:css ( "margin", "0px" )
:css ( "border", "1px solid blue" )
:wikitext ( text )
outer
:css ( "position", "absolute" )
:css ( "display", "flex" )
:css ( "justify-content", "center" )
:css ( "align-items", "center" )
:css ( "width", "0%" )
:css ( "height", "0%" )
:css ( "top", "50%" )
:css ( "left", "50%" )
:css ( "margin", "0px" )
:node ( inner )
return outer
end
function drawSingleBond ( xPos, yPos, angle, left, right )
local inner = mw.html.create ( "div" )
local outer = mw.html.create ( "div" )
local length = tostring ( left + right ) .. "px"
local matrix = "matrix("
.. tostring ( math.cos ( angle )) .. ","
.. tostring ( -math.sin ( angle )) .. ","
.. tostring ( math.sin ( angle )) .. ","
.. tostring ( math.cos ( angle )) .. ","
.. ( xPos - left * math.cos ( angle ) )..","
.. ( yPos - left * math.sin ( angle ) )..","
.. ")"
inner
:addClass ( classPrefix.."SingleBond" )
:css ( "outline", "1px solid" )
outer
:css ( "position", "absolute" )
:css ( "width", length )
:css ( "transform", matrix )
:node ( inner )
end
function package.render ( frame )
local width = mw.text.trim ( frame.args [ 1 ] )
local height = mw.text.trim ( frame.args [ 2 ] )
local structure = tostring ( frame.args [ "structure" ] )
local theWidth = tonumber ( width )
local theHeight = tonumber ( height )
local canvas = mw.html.create( "div" )
canvas
:addClass ( classPrefix.."Canvas" )
:css ( "width", width.."px" )
:css ( "height", height.."px" )
:css ( "position", "relative" )
:css ( "background", "#fff" )
return "»"..structure.."«"..tostring ( canvas )
end
return package