また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;
}
こんな感じ。