LoginSignup
1
3

More than 5 years have passed since last update.

OpenBabel/C++で構造式(png, svg)を描く

Posted at

またOpenBabelのお話。インストールは以下参照。
OpenBabelをc++からいじってみる

画像を表示したいなーーーってなったので、やった。
手抜きコードなのでOBMol経由・・・(やり方理解したら修正します

svg版

cpp/output_svg.cc
#include <iostream>

#include <openbabel/mol.h>
#include <openbabel/obconversion.h>

int main(int argc, char** argv){
  std::string outfile = "test.svg";

  // input molecule using smiles
  std::string smiles = "c1cc(C(=O)N(C)C)c2cc(C(=O)N)ccc2c1";
  std::stringstream ss(smiles);
  OpenBabel::OBConversion conv(&ss);
  conv.SetInFormat("smi");

  OpenBabel::OBMol mol;
  conv.Read(&mol);

  conv.SetOutFormat("svg");
  conv.WriteFile(&mol, outfile.c_str());

  return 0;
}

これでtest.svgが出力できる。

png版

ところで、svgはいろんな所に対応してなかったりいろいろ不便。vector表現なんだけどなー。
ということで、png版も作る。

cpp/output_png.cc
#include <iostream>

#include <openbabel/mol.h>
#include <openbabel/obconversion.h>

int main(int argc, char** argv){
  std::string outfile = "test.png";

  // input molecule using smiles
  std::string smiles = "c1cc(C(=O)N(C)C)c2cc(C(=O)N)ccc2c1";
  std::stringstream ss(smiles);
  OpenBabel::OBConversion conv(&ss);
  conv.SetInFormat("smi");

  OpenBabel::OBMol mol;
  conv.Read(&mol);

  conv.SetOutFormat("_png2"); //単純にpngではないことに注意
  conv.AddOption("w", OpenBabel::OBConversion::OUTOPTIONS, "500"); //出力幅の設定
  conv.AddOption("h", OpenBabel::OBConversion::OUTOPTIONS, "500"); //出力高さの設定

  conv.WriteFile(&mol, outfile.c_str());

  return 0;
}

これならここにも貼れる。
test.png

こんな感じ。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3