void MoleculeInChIUtils::_ensureLabelsInitialized () { // Double-checked locking if (_atom_lables_sorted.size() == 0) { static ThreadSafeStaticObj<OsLock> lock; OsLocker locker(lock.ref()); if (_atom_lables_sorted.size() == 0) _initializeAtomLabels(); } }
DLLEXPORT OptionManager & indigoGetOptionManager () { return indigo_option_manager.ref(); }
void RenderParamInterface::render (RenderParams& params) { // Disable multithreaded SVG rendering due to the Cairo issue. See IND-482 OsLock *render_lock = 0; if (params.rOpt.mode == MODE_SVG) { static ThreadSafeStaticObj<OsLock> svg_lock; render_lock = svg_lock.ptr(); } OsLockerNullable locker(render_lock); if (params.rmode == RENDER_NONE) throw Error("No object to render specified"); RenderContext rc(params.rOpt, params.relativeThickness, params.bondLineWidthFactor); bool bondLengthSet = params.cnvOpt.bondLength > 0; int bondLength = (int)(bondLengthSet ? params.cnvOpt.bondLength : 100); rc.setDefaultScale((float)bondLength); // TODO: fix bondLength type RenderItemFactory factory(rc); int obj = -1; Array<int> objs; Array<int> titles; if (params.rmode == RENDER_MOL) { if (params.mols.size() == 0) { obj = factory.addItemMolecule(); BaseMolecule& bm = params.mol.ref(); _prepareMolecule(params, bm); factory.getItemMolecule(obj).mol = &bm; } else { for (int i = 0; i < params.mols.size(); ++i) { int mol = factory.addItemMolecule(); BaseMolecule& bm = *params.mols[i]; _prepareMolecule(params, bm); factory.getItemMolecule(mol).mol = &bm; objs.push(mol); if (params.titles.size() > 0) { int title = factory.addItemAuxiliary(); factory.getItemAuxiliary(title).type = RenderItemAuxiliary::AUX_TITLE; factory.getItemAuxiliary(title).text.copy(params.titles[i]); titles.push(title); } } } } else if (params.rmode == RENDER_RXN) { if (params.rxns.size() == 0) { obj = factory.addItemReaction(); factory.getItemReaction(obj); BaseReaction& rxn = params.rxn.ref(); _prepareReaction(params, rxn); factory.getItemReaction(obj).rxn = &rxn; } else { for (int i = 0; i < params.rxns.size(); ++i) { int rxn = factory.addItemReaction(); BaseReaction& br = *params.rxns[i]; _prepareReaction(params, br); factory.getItemReaction(rxn).rxn = &br; objs.push(rxn); if (params.titles.size() > 0) { int title = factory.addItemAuxiliary(); factory.getItemAuxiliary(title).type = RenderItemAuxiliary::AUX_TITLE; factory.getItemAuxiliary(title).text.copy(params.titles[i]); titles.push(title); } } } } else { throw Error("Invalid rendering mode: %i", params.rmode); } int comment = -1; if (params.cnvOpt.comment.size() > 0) { comment = factory.addItemAuxiliary(); factory.getItemAuxiliary(comment).type = RenderItemAuxiliary::AUX_COMMENT; factory.getItemAuxiliary(comment).text.copy(params.cnvOpt.comment); } // Render into other formats after objects has been prepared (layout, etc.) if (params.rOpt.mode == MODE_CDXML) { // Render into CDXML format RenderParamCdxmlInterface::render(params); return; } if (obj >= 0) { RenderSingle render(rc, factory, params.cnvOpt, bondLength, bondLengthSet); render.obj = obj; render.comment = comment; render.draw(); } else { RenderGrid render(rc, factory, params.cnvOpt, bondLength, bondLengthSet); render.objs.copy(objs); render.comment = comment; render.titles.copy(titles); render.refAtoms.copy(params.refAtoms); render.draw(); } rc.closeContext(false); }