Example #1
0
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();
   }
}
Example #2
0
DLLEXPORT OptionManager & indigoGetOptionManager ()
{
   return indigo_option_manager.ref();
}
Example #3
0
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);
}