我正在研究从头开始构建分子的程序。我的意图是使用vtkMolecule
。然而,虽然通过AppendAtom
方法很容易将Atom添加到分子中,但似乎没有去除功能。
这是我的代码:
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.
}
我正在考虑一些vtkGraph
方法,如vtkGraph::RemoveVertexInternal
,但它(可能由于某种原因)受到保护,因此不适用于儿童班的孩子。
我的问题是:
除了用专门的方法创建vtkMolecule
的子类以外,有没有简单的方法从分子中删除原子?
先感谢您。
你是对的,没有简单的方法可以做到这一点。
受保护意味着它可以从子类中使用,但不能从外部使用,这就是为什么需要创建一个调用RemoveAtom(id)
的新公共方法,如RemoveVertexInternal(id)
。您应该子类化vtkMolecule
或只是修补它。
建议你补丁并向上游贡献:https://gitlab.kitware.com/vtk/vtk/merge_requests