标签: opencascade

如何在pythonOCC中使用样条线?

我有一个关于如何在pythonOCC中使用样条线的两部分问题.

首先,我知道我可以创建样条曲线

array = []
array.append(gp_Pnt2d (0,0))
array.append(gp_Pnt2d (1,2))
array.append(gp_Pnt2d (2,3))
array.append(gp_Pnt2d (4,3))
array.append(gp_Pnt2d (5,5))

pt2d_list = point2d_list_to_TColgp_Array1OfPnt2d(array)
SPL1      = Geom2dAPI_PointsToBSpline(pt2d_list).Curve()
display.DisplayShape(make_edge2d(SPL1) , update=True)
Run Code Online (Sandbox Code Playgroud)

我希望bspline可以通过计算得出

BSPL1      = Geom2dAPI_PointsToBSpline(pt2d_list)
Run Code Online (Sandbox Code Playgroud)

但我怎么得到:

  1. bspline的衍生物?
  2. bspline的结?
  3. 结是pt2d_list吗?
  4. bspline的控制点?
  5. 样条系数?

如何删除或添加bspline的结?

其次,在pythonOCC中加载CAD绘图.stp文件时,如下所示:

from OCC import TopoDS, StlAPI
shape = TopoDS.TopoDS_Shape()
stl_reader = StlAPI.StlAPI_Reader()
stl_reader.Read(shape,str(filename))
display.DisplayShape(shape)
Run Code Online (Sandbox Code Playgroud)

如何从knot,bspline和coefficient等形状中获取数据.

python cad spline opencascade

20
推荐指数
1
解决办法
1427
查看次数

Pythonocc/Opencascade | 沿着直线通过点创建管道,轮廓不会改变正常

我的最终目标如下:

我有一个巨大的点数据集,表示一个部件将如何逐层3D打印.我需要通过这些点创建一条直线并沿着这条直线挤出一个圆(所以重建部件,因为它将在以后打印).

我最初尝试使用样条曲线,但是这会尝试创建一条平滑线并且根本不遵循这些点.我尝试更改minDeg和maxDeg选项,但这仍然没有足够的帮助来创建我需要的实际曲线.

查看样条曲线的结果

在这里看到实际路径(上面的样条是填充部分之一)

所以我一次尝试在两个点之间创建一个样条线,然后在创建一条线时将它们全部加在一起.这看起来很有希望,因为现在我确实得到了实际的尖角和线条通过精确点.但是,现在当我尝试沿着它挤出时,挤出型材的法线不会随着钢丝的角度而变化.

这是我尝试的最后一件事情

我花了最近4天的时间来解决这个问题,尝试了很多论坛和问题,但感觉完全迷失在pythonocc(opencascade)的世界里.

我的代码如下:

from __future__ import print_function

from OCC.gp import gp_Pnt, gp_Ax2, gp_Dir, gp_Circ
from OCC.GeomAPI import GeomAPI_PointsToBSpline
from OCC.TColgp import TColgp_Array1OfPnt
from OCC.BRepBuilderAPI import BRepBuilderAPI_MakeEdge,         
BRepBuilderAPI_MakeWire, BRepBuilderAPI_MakeFace
from OCC.BRepOffsetAPI import BRepOffsetAPI_MakePipe

from OCC.Display.SimpleGui import init_display
display, start_display, add_menu, add_function_to_menu = init_display()

def pipe():
# the bspline path, must be a wire
# This will later be in a for loop but this is merely to validate the method         
using three different points.

array …
Run Code Online (Sandbox Code Playgroud)

python cad opencascade

12
推荐指数
1
解决办法
937
查看次数

如何在OpenCascade中获取实际的地形数据?

所有

具有来自CAD(SW)的STEP格式文件,并能够通过Python OCC绑定读取文件:

    importer = aocxchange.step.StepImporter(fname)
    shapes = importer.shapes

    shape = shapes[0]

    # promote up
    if (shape.ShapeType() == OCC.TopAbs.TopAbs_SOLID):
        sol =  OCC.TopoDS.topods.Solid(shape)
Run Code Online (Sandbox Code Playgroud)

我可以显示它,戳它,检查标志等

t = OCC.BRepCheck.BRepCheck_Analyzer(sol)
print(t.IsValid())
print(sol.Checked())
print(sol.Closed())
print(sol.Convex())
print(sol.Free())
print(sol.Infinite())
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

到目前为止,一切都很好。它确实看起来像是沿着某些复杂路径弯曲的小管。

问题:如何从已有的几何特征中提取几何特征?我真的需要电子管参数及其遵循的路径。用Python和/或C ++编写的任何好的示例都很好

c++ python computational-geometry opencascade

3
推荐指数
1
解决办法
589
查看次数

调用 Transfer() 时 Opencascade 崩溃

我测试过两种情况:

我使用 STEPCAFControl_Reader 然后 STEPControl_Reader 来读取我的步骤文件,但是当我分别调用 STEPCAFControl_Reader::Transfer 和 STEPControl_Reader:: TransferRoots 时,这两种方法都会崩溃。

通过使用 STEPControl_Reader,我在控制台上显示了一条日志,然后出现如下消息:

1 F:(BOUNDED_SURFACE、B_SPLINE_SURFACE、B_SPLINE_SURFACE_WITH_KNOTS、GEOMETRIC_REPRESENTATION_ITEM、RATIONAL_B_SPLINE_SURFACE、REPRESENTATION_ITEM、SURFACE):representation_item 的参数计数不为 1

编辑:

TransferRoots() 方法内有一个空引用。

const Handle(Transfer_TransientProcess) &proc = thesession->TransferReader()->TransientProcess();
if (proc->GetProgress().IsNull())
{
   //This condition does not exist from the source code
   std::cout << "GetProgress is null" << std::endl;
   return 0;
 }    
Message_ProgressSentry PS ( proc->GetProgress(), "Root", 0, nb, 1 );
Run Code Online (Sandbox Code Playgroud)

我的应用程序和 FreeCAD 崩溃,但如果我使用 CAD Assitant(OCC 官方查看器),它会加载。

step opencascade freecad

3
推荐指数
1
解决办法
995
查看次数

新项目的 pyOCCT 与 PythonOCC (2020)

我正在启动一个新项目,其中包含一些从特定域数据生成的 3D CAD 对象。我可以使用 OpenCascade 用 c++ 进行编码,但如果可能的话我更喜欢使用 Python。有两种流行的 occ python 绑定:pyOCCT和PythonOCC,这两个项目都是活跃的并且是最新的 occ 7.4,但如果能从了解这两个项目的人那里得到建议那就太好了。由于 pyOCCT 是一个较新的项目,我认为它解决了 PythonOCC 没有解决的问题,但尚不清楚创建新绑定的动机是什么。我需要一些Web 渲染支持,显然 PythonOCC 已经支持 Web 渲染。

opencascade pythonocc

3
推荐指数
1
解决办法
3119
查看次数

在沙盒上一个内存泄漏的第三方DLL

我正在寻找一种方法来治愈至少我必须使用的漏洞DLL的症状.虽然库(OpenCascade)声称提供了一个内存管理器,但我还是无法释放它分配的任何内存.

我至少希望将这个模块的调用放在"沙箱"中,以便在OCC模块甚至不再运行时保持我的应用程序不会丢失内存.

我的问题是:虽然我意识到这将是一个UGLY HACK(TM)这样做,是否可以预先分配一段内存供图书馆专门使用,或者围绕它构建某种沙盒以便我可以跟踪他们使用的内存区域,以便在我完成时自行释放它们?

或者那是丑陋的黑客,我应该尝试解决问题呢?

c++ memory-leaks memory-management opencascade

2
推荐指数
1
解决办法
284
查看次数

OpenCASCADE的增量网格中的线性/角度偏差是多少?

最近我一直在使用OpenCASCADE(准确地说是PythonOCC)进行一些CAD操作,包括网格形状,并偶然发现了这个类: BRepMesh_IncrementalMesh.

我没有找到关于什么theLinDeflection和theAngDeflection参数含义的任何暗示- 并且想要了解更多关于此的信息.

我将不胜感激任何关于这一主题的阅读材料/提示/解释.

mesh computational-geometry opencascade

2
推荐指数
1
解决办法
651
查看次数

阻止 Opencascade 写入控制台

使用 OpenCascade C++ 库时,某些函数会向控制台/终端打印一些状态或响应。例如STEPCAFControl_Writer::perform()将打印出如下内容:

*******************************************************************
******        Statistics on Transfer (Write)                 ******

*******************************************************************
******        Transfer Mode = 0  I.E.  As Is       ******
******        Transferring Shape, ShapeType = 0                      ******
** WorkSession : Sending all data
 Step File Name : <file-name>  Write  Done
Run Code Online (Sandbox Code Playgroud)

到控制台。有办法防止这种情况吗?

c++ console logging opencascade

2
推荐指数
1
解决办法
429
查看次数

C ++编译错误,包括X11 / Xh X11 / Xlib.h

我目前正在将在MS VS2005中开发的c ++应用程序移植到linux,不幸的是,这是我第一次这样做。我们正在使用Qt 4.6,Opencascade 6.5.1和Qwt 6.0.1。大多数代码都可以正常编译,但有一次我们试图使用X来确定客户端屏幕的大小,而一旦我试图包含X库,我就会遇到很多错误。类头包含以下几行:

#ifdef WNT
#include <windows.h>
#else
#include <X11/X.h>
#include <X11/Xlib.h>
#endif //WNT
Run Code Online (Sandbox Code Playgroud)

当我只有#include <X11/X.h>一行时,出现以下错误:

In file included from v0000/plot_curve.h:7,
                 from v0000/utility.h:9,
                 from v0000/settings.h:16,
                 from v0000/dialog.cpp:10:
../../../qwt-6.0.1/include/qwt_symbol.h:35: error: expected identifier before numeric constant
../../../qwt-6.0.1/include/qwt_symbol.h:35: error: expected `}' before numeric constant
... <many more of these in this file>
In file included from v0000/plot_curve.h:7,
                 from v0000/utility.h:9,
                 from v0000/settings.h:16,
                 from v0000/dialog.cpp:10:
../../../qwt-6.0.1/include/qwt_symbol.h:10:1: unterminated #ifndef
In file included from v0000/utility.h:9,
                 from v0000/settings.h:16,
                 from v0000/dialog.cpp:10:
v0000/plot_curve.h:1:1: unterminated …
Run Code Online (Sandbox Code Playgroud)

c++ x11 qt qwt opencascade

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