-1

我正在研究从头开始构建分子的程序。我的意图是使用vtkMolecule它。然而,虽然很容易通过AppendAtom方法将原子添加到分子中,但似乎没有去除的功能。

这是我的代码:

int main(int, char *[]) {
  vtkSmartPointer<vtkMolecule> molecule =
    vtkSmartPointer<vtkMolecule>::New();   
  molecule->AppendAtom(12, 0.0, 0.0, 0.0);
  molecule->AppendAtom(12, 1.0, 1.0, 1.0);
  molecule->AppendAtom(12, 2.0, 2.0, 2.0);

  molecule->AppendBond(molecule->GetAtom(0), molecule->GetAtom(1), 1);
  molecule->AppendBond(molecule->GetAtom(1), molecule->GetAtom(2), 1);

  //hypothetical code, I want something like this - remove atom by id:
  molecule->RemoveAtom(2)

  vtkSmartPointer<vtkMoleculeMapper> moleculeMapper =
    vtkSmartPointer<vtkMoleculeMapper>::New();
  moleculeMapper->SetInputData(molecule);
  //...rendering etc.
}

vtkMolecule 类参考

我在想一些vtkGraph类似的方法vtkGraph::RemoveVertexInternal,但它(可能由于某种原因)受到保护,因此不能在子类的子类中使用。

我的问题是:

vtkMolecule除了用专门的方法创建子类之外,有没有一种简单的方法可以从分子中删除原子?

先感谢您。

4

1 回答 1

0

你是对的,没有简单的方法可以做到这一点。

受保护意味着它可以从子类使用,但不能在外部使用,这就是为什么您需要创建一个新的公共方法,例如RemoveAtom(id)call RemoveVertexInternal(id)。您应该继承vtkMolecule或只是修补它。

建议您修补并贡献上游:https ://gitlab.kitware.com/vtk/vtk/merge_requests

于 2019-03-14T10:40:32.870 回答