优秀的错误报告@ jadie1 ,包括小的数据集和复制说明。
@HeavenlyBerserker ,仅供参考:
Call graph:
5 Thread_5215217 DispatchQueue_1: com.apple.main-thread (serial)
+ 5 start (in libdyld.dylib) + 1 [0x7fff69ef2cc9]
+ 5 main (in shapeworks) + 2606 [0x102bfb9fe] shapeworks.cpp:88
+ 5 shapeworks::Executable::run(int, char const* const*) (in shapeworks) + 188 [0x102c0ad7c] Executable.cpp:128
+ 5 shapeworks::Executable::run(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, shapeworks::SharedCommandData&) (in shapeworks) + 308 [0x102c0a6f4] Executable.cpp:94
+ 5 shapeworks::Command::run(shapeworks::SharedCommandData&) (in shapeworks) + 20 [0x102c14e64] Command.cpp:27
+ 5 shapeworks::OptimizeCommand::execute(optparse::Values const&, shapeworks::SharedCommandData&) (in shapeworks) + 921 [0x102c16889] Commands.cpp:92
+ 5 shapeworks::Optimize::Run() (in shapeworks) + 1938 [0x102ea5d52] Optimize.cpp:120
+ 5 shapeworks::Optimize::Initialize() (in shapeworks) + 1770 [0x102ea7d3a] Optimize.cpp:733
+ 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double) (in shapeworks) + 2133 [0x102eb46f5] itkParticleSystem.txx:330
+ 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double) (in shapeworks) + 2542 [0x102eb488e] itkParticleSystem.txx:344
+ ! 1 itk::Constraints::IsAnyViolated(itk::Point<double, 3u> const&) (in shapeworks) + 71 [0x102ecce67] Constraints.h:61
+ 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double) (in shapeworks) + 2530 [0x102eb4882] itkParticleSystem.txx:344
+ 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double) (in shapeworks) + 3010 [0x102eb4a62] itkParticleSystem.txx:349
+ 1 itk::ParticleSystem<3u>::AdvancedAllParticleSplitting(double) (in shapeworks) + 1655 [0x102eb4517] vector:0
我认为此错误报告的质量第二。 我已经看过这个问题了。 感谢您对此进行检查,艾伦。
如果没有一个粒子在任何方向上以一定的半径(从分离的粒子到原始粒子的距离)满足约束,则AdvancedAllParticleSplitting函数将挂起。 我曾考虑过限制尝试的方向数量,但决定不这样做,因为根据切割平面的不同,命中可能非常罕见,因此任何恒定的数量都可能不合适。 我乐于接受处理此问题的建议,尽管如果当前正在进行的工作进展顺利,AdvancedAllParticleSplitting绝对不是必需的,因此我们可以讨论完全不同的粒子拆分策略。
至于测试本身,这是由于网格的位置而发生的。 切割平面在z = -40.5到-42.5处切割,但是网格位于z = -737.593到-609.55,-1217.76到-1114.47和1079.93到1206.3(如下所示)。 这导致两个问题。 首先,不管法线指向哪个方向(向上/向下),都会有至少一个完全违反约束条件的股骨。 其次,取决于输入间距,粒子分裂半径由数量ε决定; 在这种情况下,间隔为1000s,因此任何拆分都可能违反约束。
请注意,您使用的股骨已经使用修剪方法进行了修剪。 我认为这不会在实际情况下完成。 回想一下我如何删除ClipBinaryVolumes并为femur_cut.py applyCropping。
请指派我处理有关切割平面的任何未来问题(在C ++中)。 我尚未使用网格测试切割平面的代码。 没有任何理由它不起作用,但是最好对它进行错误测试。 谢谢,大家!
@HeavenlyBerserker哦,好的,从理论上讲,如果网格和切割平面有意义,那么该错误将不存在吗? Joe需要使用未修剪的股骨网格上的切割平面进行优化,我试图为他提供一个示例xml。 因此,我只是制作了切割平面并使用了股骨网格物体,但是如果我对此更加谨慎,那它应该起作用吗?
是的,我尝试过切割不会被破坏但碰到间距问题的飞机,但是它可以工作。 如果您可以将所有股骨放在相同的基本区域内,并调整切面合理,我认为没有理由这样做不可行,尤其是考虑到您仅使用一个切面。
好的,是的,当我使用以下数据时,确认没有错误: test.zip
感谢您帮助我了解@HeavenlyBerserker
现在关闭
我尚未使用网格测试切割平面的代码。 没有任何理由它不起作用,但是最好对它进行错误测试。
我们已经成功地切碎了一些网格物体,并为此进行了单元测试(MeshTests,PythonTests和shapeworksTests)。
请指定我将来在C ++中遇到的任何问题。
绝对地! 谢谢!!
@HeavenlyBerserker ,是否可以通过任何方式检测到这种情况并引发异常或错误消息? 我真的更喜欢挂或崩溃。 另外,有没有一种方法可以在运行之前进行验证? 参见#910。
嗯,应该有可能检查任何输入的至少一个网格/图像点是否满足约束条件。 并非万无一失,但应该可以在99.9%的时间内工作。