我需要创建维管树模型的样条线或折线表示(请参见下文)。

该模型采用STL格式,因此我具有所有顶点的xyz坐标。这些线应该穿过血管网格的中心,因此我认为最好的方法是通过顶点云进行样条回归。另外,如果我可以在给定的点(例如,折线的坐标)上获得容器的半径,那将是很好的。

我浏览了这个论坛和VTK网站(假设他们对这种事情有一个简单的实现),但是到目前为止,我还没有找到可以使用的东西。有谁知道可以做到这一点的Python模块或VTK类(我会从Python调用它)?我在此找到的python模块全部用于2D数据。
非常感谢!
编辑:我遇到了一个名为VMTK的库,该库几乎专门处理血管分割,并具有所谓的“ 中心线计算 ”功能。但是,它们通常要求在其末端“切割”船只并定义“源点”。但是,在我的模型中,可以看到端点被“封顶”,这使事情变得更加复杂。如果找到解决方案,请在此处发布
我已经定义了这个模板类结构:
template<typename T> struct Outer {
struct Inner { /* ...some stuff... */ };
};
Run Code Online (Sandbox Code Playgroud)
我想将Inner对象放入一个unordered_map(实际上,不是直接将它们而是它们的容器,因此直接在模板参数上指定散列对象的方法unordered_map不是一个好主意),因此我想hash为这些项目专门化类。
这将不起作用,因为编译器无法与Outer<T>::Inner实例化时指定的类型匹配hash:
namespace std {
template<typename T> struct hash<typename Outer<T>::Inner > {
size_t operator ()( typename Outer<T>::Inner const & obj )
{ /* ...some stuff... */ }
};
};
Run Code Online (Sandbox Code Playgroud)
有谁知道这个问题的解决方案?
我在共享库中有这个类:
class Interface {
int m_ref;
public:
FOO_EXPORT virtual ~Interface();
virtual void foo() = 0;
protected:
void ref() { ++m_ref; }
bool deref() { return --m_ref; }
};
// cpp file:
Interface::~Interface() {}
Run Code Online (Sandbox Code Playgroud)
哪里FOO_EXPORT是__attribute__((visibility=default))GCC 的,我正在使用-fvisibiliy=hidden -fvisibility-inlines-hidden.
但是当我使用Interface另一个库中的 时,我得到了 typeinfo 和 vtable 的未定义引用。
在 MSVC 上,其中FOO_EXPORT) declspec(dllexport/dllimport` 工作正常,因为导出虚拟函数时会导出 vtable。
我当然可以导出整个班级:
类 FOO_EXPORT 接口 {
但这也导出所有内联方法。
是否有一个中间立场,仅导出~Interface()vtable,而没有其他内容?
如果您知道:为什么 GCC 与 MSVC 不兼容?
所以,为了允许代码如
auto vect = ...;
auto it = vect.begin(), end = vect.end(); // want const_iterator, getting iterator
Run Code Online (Sandbox Code Playgroud)
挑右超载begin()和end(),即使对于非const的容器中,更明确的cbegin()/ cend()添加功能.
为何停在那里?
关联容器具有find()相同问题的方法.序列容器有,front()并且back()同样存在同样的问题.
这些遗漏的显式const版本是遗漏还是设计?
考虑
// https://godbolt.org/z/z5M9b9jzx
#include <memory>
#include <cassert>
struct B {};
struct D : B {};
int main() {
std::shared_ptr<B> b = std::make_shared<D>();
auto d = static_pointer_cast<D>(b);
assert(d);
}
Run Code Online (Sandbox Code Playgroud)
我本来希望static_pointer_cast对解析为的不合格调用std::static_pointer_cast,因为b作为std::shared_ptr,应该引入namespace std使用 ADL。
为什么不呢?我需要std::shared_pointer_cast明确地编写以使其工作。
c++ shared-ptr argument-dependent-lookup unqualified-name static-pointer-cast
确切地说:我知道如何在声明时使用dox枚举,我想把它们排除在外.
我想保持头文件没有doxygen评论; 它们都在.cpp文件中.对于函数,类,typedef等,这不是问题.我也可以这样记录enum自己:
/*!
\enum MyClass::MyEnum
Foo Bar Baz
\value FirstEnumValue <- doesn't work
*/
Run Code Online (Sandbox Code Playgroud)
但我怎么记录的值的enum呢?
谢谢!
我正在尝试实现平面扫描算法,为此我需要知道java.util.HashMap类'keySet()方法的时间复杂度.我怀疑它是O(n log n).我对么?
澄清点:我在谈论keySet()方法的时间复杂性; 迭代返回的Set将显然花费O(n)时间.
我在我的代码中使用了TR1实现的unordered_map,并且链接器提供了奇怪的错误,我甚至无法破译:
BPCFG.o: In function `std::__detail::_Hash_code_base<DottedRule, std::pair<DottedRule const, int>, std::_Select1st<std::pair<DottedRule const, int> >, eqDottedRule, std::hash<DottedRule>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, false>::_M_hash_code(DottedRule const&) const':
BPCFG.cpp: (.text._ZNKSt8__detail15_Hash_code_baseI10DottedRuleSt4pairIKS1_iESt10_Select1stIS4_E12eqDottedRuleSt4hashIS1_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE12_M_hash_codeERS3_[std::__detail::_Hash_code_base<DottedRule, std::pair<DottedRule const, int>, std::_Select1st<std::pair<DottedRule const, int> >, eqDottedRule, std::hash<DottedRule>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, false>::_M_hash_code(DottedRule const&) const]+0x23): undefined reference to `std::hash<DottedRule>::operator()(DottedRule) const'
BPCFG.o: In function `std::__detail::_Hash_code_base<DottedRule, std::pair<DottedRule const, int>, std::_Select1st<std::pair<DottedRule const, int> >, eqDottedRule, std::hash<DottedRule>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, false>::_M_bucket_index(std::__detail::_Hash_node<std::pair<DottedRule const, int>, false> const*, unsigned long) const':
BPCFG.cpp: (.text._ZNKSt8__detail15_Hash_code_baseI10DottedRuleSt4pairIKS1_iESt10_Select1stIS4_E12eqDottedRuleSt4hashIS1_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexEPKNS_10_Hash_nodeIS4_Lb0EEEm[std::__detail::_Hash_code_base<DottedRule, std::pair<DottedRule const, int>, std::_Select1st<std::pair<DottedRule const, int> >, eqDottedRule, std::hash<DottedRule>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, false>::_M_bucket_index(std::__detail::_Hash_node<std::pair<DottedRule const, int>, false> …Run Code Online (Sandbox Code Playgroud) 我道歉,如果这是一个重复的问题,我搜索了一下,找不到任何类似的东西 - 我有一个Python库,通过套接字连接到我的C#应用程序,以允许简单的Python脚本(IronPython不是一个选项权利现在有几个原因).我想创建一个Windows Forms控件,它基本上是Python解释器的图形前端,这样用户就可以运行解释器而无需打开单独的控制台窗口.
我附上了一个简单的演示,说明了我到目前为止所尝试的内容,但是我无法让它工作.永远不会调用DataReceived事件处理程序,当我尝试写入标准输入时,解释器中没有任何操作.有没有人对我做错了什么有反馈,或者这是否可能?
public partial class Form1 : Form
{
Process _pythonProc;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ProcessStartInfo psi = new ProcessStartInfo()
{
FileName = @"C:\Python26\Python.exe",
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true
};
_pythonProc = new Process();
_pythonProc.OutputDataReceived += OutputDataReceived;
_pythonProc.ErrorDataReceived += ErrorDataReceived;
_pythonProc.StartInfo = psi;
_pythonProc.Start();
}
private void cmdExecute_Click(object sender, EventArgs e)
{
string cmd = textInput.Text;
_pythonProc.StandardInput.WriteLine(cmd);
_pythonProc.StandardInput.Flush();
textInput.Text …Run Code Online (Sandbox Code Playgroud)