小编Woj*_*ilo的帖子

用于C++的快速,大型和可扩展的几何库

我搜索了很多主题并遇到了很多主题,比如'易用的几何库'.

我正在寻找除此之外的东西.我打算编写用于处理3D数据的复杂应用程序(比如说像blender,3ds max,maya或houdini).我正在寻找可用于我的项目的最佳可用几何库(它可以是免费的或商业的).我不在乎它是否易于使用或者它是否复杂.

在这个库的顶部,我想构建这个应用程序的基本功能(如建模,布尔操作,triangulaton,纹理,retopologing工具等).

关键是:

  • 它应该很快
  • 它应该是可扩展的(从长远来看 - 如果它不提供某些功能 - 它应该是进一步开发的良好基础)
  • 它应该允许处理大多数几何类型(三角形,多边形,退化元素)
  • 它应该有很多实现的算法来处理这个几何
  • 如果可以处理NURBS,Bezier曲线,点云,体素等,那将会很棒.

当然,这可能不是一个单独的图书馆.但是,如果这些库能够无缝地协同工作,那将会很棒.

我知道有增强:几何,CGAL,OpenMesh和PCL.还有其他选择吗?

c c++ 3d geometry computational-geometry

8
推荐指数
1
解决办法
1771
查看次数

LLVM JIT Parser用Bison/Antlr/Packrat/Elkhound /写作

LLVM教程中,有如何编写简单JIT编译器的说明.不幸的是,本教程中的词法分析器和解析器是手动编写的.我在想,这样的解决方案有利于学习目的,但它不适合编写复杂的,生产就绪的编译器.看起来GCC和其他一些"大编译器"都是手写的.但我认为,所有这些解析器生成器在编写自己的编译器时都会有很大的提升(特别是当你独自完成它时,没有团队成员).

是否可以将任何现有的解析器生成器(如Bison/Antlr/Packrat/Elkhound等)与LLVM一起使用来创建JIT编译器?我希望能够使用表达式不断地(不是一次开始)"解析"解析器并在运行时编译它们.

另外我发现了很多关于"最好的,现代的"解析器生成器的问题(比如这个:https://stackoverflow.com/questions/428892/what-parser-generator-do-you-recommend).如果可以使用这些工具来创建LLVM JIT编译器,我会感谢任何额外的提示和推荐,在这种特定情况下哪个工具在性能和灵活性方面是最好的.

c++ compiler-construction parsing llvm bison

8
推荐指数
1
解决办法
2367
查看次数

添加包含Waf配置的路径(C++)

如何添加wscript的包含路径?

我知道我可以根据任何cpp文件声明我想要包含哪些文件夹的文件,例如:

def build(bld):
    bld(features='c cxx cxxprogram',
        includes='include', 
        source='main.cpp', 
        target='app', 
        use=['M','mylib'], 
        lib=['dl'])
Run Code Online (Sandbox Code Playgroud)

但我不想为每个文件设置它.我想添加一个"全局包含"的路径,因此每次编译任何文件时都会包含它.

c++ python compilation include waf

7
推荐指数
1
解决办法
5500
查看次数

如何在C++ 11中将u32string转换为int?

我们如何可以转换u32stringint在C++ 11?

另外,我应该使用什么方法将部分字符串转换为int- 让我们说开始和结束迭代器可用?

我试过了:

u32string test=U"14";
cout << atoi(test.c_str());
Run Code Online (Sandbox Code Playgroud)

但它抛出:

candidate function not viable: no known conversion from 'const char32_t *' to 'const char *' for 1st argument
extern int atoi (__const char *__nptr)
Run Code Online (Sandbox Code Playgroud)

c++ string localization type-conversion c++11

7
推荐指数
1
解决办法
3088
查看次数

虚拟基类在C++中调用空构造函数(C++ 11)

让我们看看以下代码:

class A{
protected:
  int _val;
public:
  A(){printf("calling A empty constructor\n");}
  A(int val):_val(val){printf("calling A constructor (%d)\n", val);}
};

class B: virtual public A{
public:
  B(){printf("calling B empty constructor\n");}
  B(int val):A(val){printf("calling B constructor (%d)\n", val);}
};

class C: public B{
public:
  C(){printf("calling C empty constructor\n");}
  C(int val):B(val){printf("calling C constructor (%d)\n", val);}
};

int main(void) {
  C test(2);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

calling A empty constructor
calling B constructor (2)
calling C constructor (2)
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么没有任何参数调用A类构造函数?如果我希望B类从A虚拟继承,我还能如何"修复"这种行为?(如果继承不是虚拟的 - 样本工作正常)

c++ inheritance class base-class c++11

7
推荐指数
1
解决办法
277
查看次数

uu-parsinglib的性能与Parsec中的"try"相比

我知道Parsec,uu-parsinglib而且我在两者中都编写过解析器.最近我发现,存在一个问题uu-parsinglib,可能会对其性能产生重大影响,我看不到解决问题的方法.

让我们考虑遵循Parsec解析器:

pa = char 'a'
pb = char 'b'
pTest = many $ try(pa <* pb)
Run Code Online (Sandbox Code Playgroud)

相当于uu-parsinglib什么?它不会是以下内容:

pa = pSym 'a'
pb = pSym 'b'
pTest = pList_ng (pa <* pb)
Run Code Online (Sandbox Code Playgroud)

所不同的是,在Parsec,many会吃(pa <* pb)(对"ab")贪婪,直到它不再匹配,而在uu-parsinglib,pList_ng不贪心,所以每次分析后,将保留在内存中可能原路返回的方式(pa <* pb).

有没有办法写出类似pList(try(pa <* pb))的内容uu-parsinglib

一个很好的例子

pExample = pTest <* (pa <* pb)
Run Code Online (Sandbox Code Playgroud)

和一个样本输入"ababab" …

performance parsing haskell parsec uu-parsinglib

7
推荐指数
1
解决办法
725
查看次数

3d几何引擎

我不熟悉用c ++(或c ++ 0x)处理3D数据,我正在尝试编写简单的应用程序,这将允许处理这些数据(模型,细分等).我正在寻找类似'3d几何引擎'的东西 - 在内存中处理有效3d几何的引擎,并提供API来修改其组件(顶点,点,多边形(不仅是三角形),顶点属性等).我正在寻找类似的东西,但没有运气.如果有任何引擎可以免费使用,你能推荐任何(最好的开源)3D几何引擎,它会有这样的api吗?

谢谢.

c++ algorithm 3d geometry

6
推荐指数
2
解决办法
2742
查看次数

Python3:检查方法是否是静态的

Simmilar问题(与Python2相关:Python:检查方法是否为静态)

让concider遵循类定义:

class A:
  def f(self):
    return 'this is f'

  @staticmethod
  def g():
    return 'this is g'
Run Code Online (Sandbox Code Playgroud)

在Python 3中已经没有instancemethod了,一切都是函数,因此与Python 2相关的答案将不再适用.

正如我所说,一切都是功能,所以我们可以打电话A.f(0),但我们当然不能打电话A.f()(参数不匹配).但是,如果我们做一个实例a=A(),我们叫a.f()Python的传递给函数A.fself作为第一个参数.调用a.g()阻止发送或捕获self- 所以必须有一种方法来测试这是否是静态方法.

那么我们可以检查Python3是否声明了方法static

python static static-methods introspection python-3.x

6
推荐指数
2
解决办法
1285
查看次数

uu-parsinglib中的计划外贪婪行为

问题

我今天遇到了一个问题,我不知道如何解决它.这对我来说很奇怪,因为我写的代码应该(根据我目前的知识)是正确的.

所以下面你可以找到一个示例解析器组合器.最重要的是pOperator,它以非常简单的方式(仅用于演示目的)构建运算符AST.它消耗"x"并且可以消耗由空格分隔的多个"x".

我也有pParenscombinator,定义如下:

pPacked pParenL (pWSpaces *> pParenR)
Run Code Online (Sandbox Code Playgroud)

所以它在关闭括号之前消耗空格.

样本输入/输出

正确的输入/输出应该是:

in: "(x)"
out: Single "x"

in: "(x )"
out: Single "x"
Run Code Online (Sandbox Code Playgroud)

但我得到了:

in: "(x)"
out: Single "x"

in: "(x )" 
out: Multi (Single "x") (Single "x")
--  Correcting steps: 
--    Inserted  'x' at position LineColPos 0 3 3 expecting one of ['\t', ' ', 'x']
Run Code Online (Sandbox Code Playgroud)

但是在第二个例子中我得到了错误 - 解析器的行为就像它贪婪地吃了一些令牌(而且没有贪婪的操作).

我会感谢任何帮助.

示例代码

import Prelude hiding(lex)
import Data.Char hiding (Space)
import qualified Text.ParserCombinators.UU as UU
import           Text.ParserCombinators.UU …
Run Code Online (Sandbox Code Playgroud)

parsing haskell parsec parser-combinators uu-parsinglib

6
推荐指数
1
解决办法
160
查看次数

Trifecta中的自定义状态

我正在使用Trifecta解析器组合库,我的解析器输出AST数据类型的实例.我希望每个实例都有唯一的ID(简单的Int).

在Parsec中,我会创建自定义状态并在neccesery时递增ID.我们怎样才能在Trifecta中做到这一点?

monads parsing haskell parser-combinators trifecta

6
推荐指数
1
解决办法
393
查看次数