オブジェクトを作る方法

オブジェクトの作成方法をまとめておきます。

1.入れ物を用意してから属性を追加

詳細はここにあります。

import inkex, simplestyle
...
  layer = inkex.etree.SubElement(self.current_layer, 'g')
  #
  rect = inkex.etree.Element(inkex.addNS('rect','svg'))
  #
  rect.set('x', '0')
  rect.set('y', '0')
  rect.set('width', '100')
  rect.set('height', '100')
  #
  style = {'fill': '#000000'}
  rect.set('style', simplestyle.formatStyle(style))
  #
  layer.append(rect)

レイヤーへ追加した後も属性を付け足していくことが出来ます。

2.属性を用意してから入れ物を作成

詳細はここにあります。

import inkex, simplestyle
...
  layer = inkex.etree.SubElement(self.current_layer, 'g')
  #
  style = {'fill': '#000000'}
  attr = {
    'style'  : simplestyle.formatStyle(style),
    'height' : '100',
    'width'  : '100',
    'x'      : '0',
    'y'      : '0'
  }
  rect = inkex.etree.SubElement(layer, inkex.addNS('rect','svg'), attr)

入れ物を作成した後に(1)の方法で属性を付け足していくことが出来ます。

その他

使い分け

計算処理などが必要な属性値を持つ場合は前者、固定している場合は後者を使うと便利ではないかと個人的に感じています。

名前空間('svg'とか'sodipodi'等)を属性のキーに追加したい

inkex.addNS(key, namespaces)を使います。

import inkex
...
  circle.set(inkex.addNS('cx', 'sodipodi'), '0')
...
  attr = {
    ...
    inkex.addNS('cx', 'sodipodi'): '0',
    ...
  }