I attached the code. Experiences:
1. The C++ code is about 30 times faster. (the python profiler says the most
costly function is _loop_topo in Topology.py, I will check it out maybe I
can make it faster)
2. The memory footprint does not grow even if I creating random sized grids.
3. It does not crash.
I tried to emulate the behaviour of the pythonocc garbage collector with an
stl::list - I don't know if it makes any sense.

On Thu, Sep 29, 2011 at 8:56 PM, István Csanády <istvancsan...@gmail.com>wrote:

> OK forget the code I previously sent, I have installed ftgl, and now
> testing it, and the one I sent is not working (what is not very stunning
> since I could not run it :) )
>
> On Thu, Sep 29, 2011 at 8:09 PM, István Csanády 
> <istvancsan...@gmail.com>wrote:
>
>> I have installed the OCE-0.6.0 with the .mpkg. I can compile OCC
>> executables, but crashes because it can't find libftgl.dylib... Now I am
>> going to recompile it from sources without the GL stuff but it takes a while
>> on my macbook :(. I have attached the code, but I don't know if it works,
>> and I have not implemented something like pythonocc's garbage collection yet
>> (it is maybe not even neccessary).
>>
>> Error message:
>>
>> *dyld: Library not loaded: /usr/local/lib/libftgl.2.dylib*
>>
>> *  Referenced from:
>> /Users/istvancsanady/Library/Developer/Xcode/DerivedData/oce_memtest-augtghxmaekbeydwmiliecjltrpc/Build/Products/Debug/libTKOpenGl.1.dylib
>> *
>>
>> *  Reason: image not found*
>>
>> *
>> *
>>
>> *
>> *
>>
>> On Thu, Sep 29, 2011 at 5:16 PM, Thomas Paviot <tpav...@gmail.com> wrote:
>>
>>> Can you please attach the code?
>>>
>>>
>>> Thomas
>>>
>>> 2011/9/29 István Csanády <istvancsan...@gmail.com>
>>>
>>>> I am currently working on it, but I getting compile errors for private
>>>> copy constructors in the GCPnts_UniformDeflection and BRepLib_MakeShape
>>>> headers, for eg. "Field of type 'TColStd_SequenceOfReal' has private copy
>>>> constructor"... I don't really understand why do I get these since until 
>>>> now
>>>> I have never met such compile errors in OCC. What am I doing wrong?
>>>>
>>>>
>>>> On Thu, Sep 29, 2011 at 3:43 PM, Thomas Paviot <tpav...@gmail.com>wrote:
>>>>
>>>>> Istvan,
>>>>>
>>>>> I'm a bit confused with your example. It appears that the MMGT_OPT env
>>>>> var has an impact on the crash produced by your program. If I set MMGT_OPT
>>>>> to 1, I don't have any crash, crashes with MMGT_OPT=0 and MMGT_OPT=2 
>>>>> (Intel
>>>>> TBB). Really difficult to say whether it comes from occ or pythonocc.
>>>>>
>>>>> If you achieve a C++ version of your program (the random part is not
>>>>> necessary), I will add it to the OCE test suite.
>>>>>
>>>>> Thomas
>>>>>
>>>>>
>>>>> 2011/9/29 Thomas Paviot <tpav...@gmail.com>
>>>>>
>>>>>> It will.
>>>>>>
>>>>>>
>>>>>> 2011/9/29 István Csanády <istvancsan...@gmail.com>
>>>>>>
>>>>>>> OK, I going to port it today, and check the memory consumption. (I am
>>>>>>> using opencascade 6.5, but it will work with OCE, won't it?)
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Sep 29, 2011 at 11:29 AM, Thomas Paviot 
>>>>>>> <tpav...@gmail.com>wrote:
>>>>>>>
>>>>>>>> There are two different issues IMO:
>>>>>>>> - the segfault. I think I have identified the origin of the problem,
>>>>>>>> it comes from the GarbageCollector implementation
>>>>>>>> - the leak. I also noticed this increase in memory consumption,
>>>>>>>> however it's no more the case if the size of the vert list is 
>>>>>>>> constant. If
>>>>>>>> you replace, for instance, the random loop with:
>>>>>>>> for x in range(50):
>>>>>>>>     for y in range(50):
>>>>>>>>         [...]
>>>>>>>> Then memory consumption does not increase anymore (can you check
>>>>>>>> that point?). That means that the pythonocc garbage collector does the 
>>>>>>>> job
>>>>>>>> as expected and I suspect rather OCC memory manager to be the cause of 
>>>>>>>> this
>>>>>>>> behavior. To be sure about that, this example should first be ported 
>>>>>>>> to C++
>>>>>>>> and included into the OCE testing suite.
>>>>>>>>
>>>>>>>> Thomas
>>>>>>>>
>>>>>>>> 2011/9/29 István Csanády <istvancsan...@gmail.com>
>>>>>>>>
>>>>>>>>> The program you sent is still leaking even if I comment out
>>>>>>>>> gcurve.GetObject() but it seems to be better then it was. If I leave 
>>>>>>>>> the
>>>>>>>>> gcurve.GetObject() line it also crashes.
>>>>>>>>> Here is a memory consumption log:
>>>>>>>>>
>>>>>>>>> 76.015625, 76.015625, 76.19921875, 76.19921875, 76.19921875,
>>>>>>>>> 83.55859375, 82.9140625, 82.9140625, 82.9140625, 84.13671875,
>>>>>>>>> 85.296875, 84.99609375, 84.99609375, 84.99609375, 83.24609375,
>>>>>>>>> 84.234375, 83.24609375, 84.140625, 89.64453125, 89.4140625,
>>>>>>>>> 87.4140625, 87.4140625, 87.1640625, 87.1640625, 88.3125, 88.1640625,
>>>>>>>>> 88.1640625, 88.73046875, 88.1640625, 88.1640625, 87.21484375, 
>>>>>>>>> 86.1640625,
>>>>>>>>> 86.1640625, 86.1640625, 89.1328125, 89.10546875, 88.16796875, 
>>>>>>>>> 92.15234375,
>>>>>>>>> 91.16796875, 90.16796875, 90.16796875, 90.16796875, 95.42578125,
>>>>>>>>> 95.07421875, 94.71875, 93.76953125, 93.32421875, 92.07421875,
>>>>>>>>> 92.921875, 92.10546875, 91.49609375, 91.07421875, 91.07421875,
>>>>>>>>> 91.07421875, 91.07421875, 94.8515625, 94.07421875, 94.07421875,
>>>>>>>>> 93.82421875, 93.82421875, 93.82421875, 93.82421875, 92.82421875,
>>>>>>>>> 92.82421875, 93.38671875, 93.1328125, 93.1328125, 93.1328125,
>>>>>>>>> 93.1328125, 94.26171875, 92.625, 92.625, 93.69921875, 94.5078125,
>>>>>>>>> 93.578125, 92.578125, 92.578125, 92.078125, 91.078125, 91.078125,
>>>>>>>>> 93.2109375, 93.078125, 92.078125, 92.078125, 94.12109375,
>>>>>>>>> 93.4921875, 93.078125, 95.7890625, 93.078125, 93.45703125, 93.078125,
>>>>>>>>> 93.078125, 94.41796875, 93.578125, 94.27734375, 93.578125, 93.578125,
>>>>>>>>> 93.578125, 93.59375, 93.66796875, 93.328125, 93.41796875,
>>>>>>>>> 93.98828125, 96.0625, 95.5703125, 95.328125, 95.44140625,
>>>>>>>>> 95.328125, 95.328125, 95.078125, 95.078125, 93.92578125,
>>>>>>>>> 93.078125, 93.1796875, 93.078125, 92.078125, 92.078125, 93.4921875,
>>>>>>>>> 93.4921875, 93.078125, 93.078125, 93.078125, 93.4296875, 93.078125,
>>>>>>>>> 94.2109375, 93.48828125, 94.1640625, 93.578125, 93.26953125, 
>>>>>>>>> 92.578125,
>>>>>>>>> 91.578125, 90.828125, 90.828125, 90.828125, 90.828125, 97.32421875,
>>>>>>>>> 96.7421875, 97.63671875, 96.7421875, 96.7421875, 96.7421875, 
>>>>>>>>> 96.7421875,
>>>>>>>>> 96.7421875, 96.7421875, 96.7421875, 96.7421875, 95.7421875, 
>>>>>>>>> 95.7421875,
>>>>>>>>> 95.7421875, 95.7421875, 98.7890625, 97.33203125, 97.59375,
>>>>>>>>> 97.33203125, 97.08203125, 99.3828125, 97.33203125, 96.4453125,
>>>>>>>>> 96.08203125, 95.08203125, 95.08203125, 95.08203125, 95.08203125, 
>>>>>>>>> 96.890625,
>>>>>>>>> 96.08203125, 96.08203125, 97.80078125, 97.08203125, 98.56640625,
>>>>>>>>> 97.46875, 97.46875, 97.46875, 96.46875, 96.08203125, 100.66015625,
>>>>>>>>> 100.33203125
>>>>>>>>>
>>>>>>>>> On Thu, Sep 29, 2011 at 7:00 AM, Thomas Paviot 
>>>>>>>>> <tpav...@gmail.com>wrote:
>>>>>>>>>
>>>>>>>>>> The issue comes from the line curve_object = gcurve.GetObject().
>>>>>>>>>> Comment out this line to check that memory consumption is constant 
>>>>>>>>>> over
>>>>>>>>>> time.
>>>>>>>>>>
>>>>>>>>>> Attached another implementation of your program, can you please
>>>>>>>>>> test it and report.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Thomas
>>>>>>>>>>
>>>>>>>>>> 2011/9/28 István Csanády <istvancsan...@gmail.com>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> The corrected code does not crash, but it leaks like sieve
>>>>>>>>>>> (0-3MB/s for me)... And if you try to call smart_purge() after 
>>>>>>>>>>> pop_context()
>>>>>>>>>>> it segfaults.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Sep 28, 2011 at 10:22 PM, Thomas Paviot <
>>>>>>>>>>> tpav...@gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> 2011/9/28 István Csanády <istvancsan...@gmail.com>
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Thomas,
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Wed, Sep 28, 2011 at 9:19 PM, Thomas Paviot <
>>>>>>>>>>>>> tpav...@gmail.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Istvan,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Not yet. Trying to run your example actually helped me to
>>>>>>>>>>>>>> figure out/fix a serious regression in the current pythonocc 
>>>>>>>>>>>>>> master branch.
>>>>>>>>>>>>>> There is still another bug to fix. I'm currently running 
>>>>>>>>>>>>>> pythonocc master (
>>>>>>>>>>>>>> https://github.com/tpaviot/pythonocc)/OCE-0.6.0-rc3.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Do you run pythonocc-0.5/OCC630?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Yes.
>>>>>>>>>>>>>
>>>>>>>>>>>>> So you say that my code does not crash for you? If I remember
>>>>>>>>>>>>> correctly you are a Mac user to, aren't you? Are you using 10.6.7 
>>>>>>>>>>>>> too with
>>>>>>>>>>>>> Python 2.6.1 ? May I try to recompile pythonocc with OCE? Can it 
>>>>>>>>>>>>> fix this
>>>>>>>>>>>>> error? This bug is incredibly hard to track down since the python 
>>>>>>>>>>>>> debugger
>>>>>>>>>>>>> does not stop when the C++ code crashes... Do you use any special 
>>>>>>>>>>>>> tools to
>>>>>>>>>>>>> debug such errors when developing pythonocc?
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> I didn't say it crashes, I was running the test.
>>>>>>>>>>>>
>>>>>>>>>>>> It's done now, I can reproduce the crash, the program segfaults
>>>>>>>>>>>> after a few loops are performed (I run OSX 10.6.8). I can't 
>>>>>>>>>>>> explain so far
>>>>>>>>>>>> what happens, I need to dive into the example (make it even 
>>>>>>>>>>>> simpler) and
>>>>>>>>>>>> check what's going on.
>>>>>>>>>>>>
>>>>>>>>>>>> I also suggest you use garbage.push_context() and pop_context():
>>>>>>>>>>>> only objects created between push/pop will be killed by the 
>>>>>>>>>>>> smart_purge
>>>>>>>>>>>> method. The corrected program attached works properly.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> István
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Thomas
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> All the best,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thomas
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2011/9/28 István Csanády <istvancsan...@gmail.com>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi Thomas,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Have you managed to reproduce the error? I've been trying to
>>>>>>>>>>>>>>> track down the bug with valgrind - without any success... 
>>>>>>>>>>>>>>> Probably I should
>>>>>>>>>>>>>>> recompile python with the debug and --without-pymalloc flags to 
>>>>>>>>>>>>>>> make
>>>>>>>>>>>>>>> valgrind work with it. I am using Mac OS X 10.6.7.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> István
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Wed, Sep 28, 2011 at 11:21 AM, Thomas Paviot <
>>>>>>>>>>>>>>> tpav...@gmail.com> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2011/9/27 István Csanády <istvancsan...@gmail.com>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi Istvan,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Last time when I wrote about this bug I thought it was
>>>>>>>>>>>>>>>>> caused by some numpy buffer overflow. Unfortunately it was 
>>>>>>>>>>>>>>>>> not. Finally I
>>>>>>>>>>>>>>>>> managed to create some code that can reproduce this bug. I 
>>>>>>>>>>>>>>>>> have attached the
>>>>>>>>>>>>>>>>> code and some crash logs.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I've been trying to reproduce the issue.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I think the problem is probably with OCC's Standard_MMgrOpt
>>>>>>>>>>>>>>>>> class memory recycling for small blocks (Is it possible that 
>>>>>>>>>>>>>>>>> smart_purge
>>>>>>>>>>>>>>>>> frees memory that Standard_MMgrOpt want to reuse?).
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> No.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Note that sometimes it takes a long time until the error
>>>>>>>>>>>>>>>>> occurs, but usually after the 50th-100th iteration the code 
>>>>>>>>>>>>>>>>> crashes for me.
>>>>>>>>>>>>>>>>> (The code is totally pointless, I have removed every 
>>>>>>>>>>>>>>>>> unneccessary parts)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> István
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thomas
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> Pythonocc-users mailing list
>>>>>>>>>>>>>>>> Pythonocc-users@gna.org
>>>>>>>>>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>> Pythonocc-users mailing list
>>>>>>>>>>>>>>> Pythonocc-users@gna.org
>>>>>>>>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Pythonocc-users mailing list
>>>>>>>>>>>>>> Pythonocc-users@gna.org
>>>>>>>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Pythonocc-users mailing list
>>>>>>>>>>>>> Pythonocc-users@gna.org
>>>>>>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Pythonocc-users mailing list
>>>>>>>>>>>> Pythonocc-users@gna.org
>>>>>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Pythonocc-users mailing list
>>>>>>>>>>> Pythonocc-users@gna.org
>>>>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Pythonocc-users mailing list
>>>>>>>>>> Pythonocc-users@gna.org
>>>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Pythonocc-users mailing list
>>>>>>>>> Pythonocc-users@gna.org
>>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Pythonocc-users mailing list
>>>>>>>> Pythonocc-users@gna.org
>>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Pythonocc-users mailing list
>>>>>>> Pythonocc-users@gna.org
>>>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Pythonocc-users mailing list
>>>>> Pythonocc-users@gna.org
>>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Pythonocc-users mailing list
>>>> Pythonocc-users@gna.org
>>>> https://mail.gna.org/listinfo/pythonocc-users
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Pythonocc-users mailing list
>>> Pythonocc-users@gna.org
>>> https://mail.gna.org/listinfo/pythonocc-users
>>>
>>>
>>
>
//
//  main.cpp
//
//  Created by István Csanády on 2/22/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

//
//  main.cpp
//  octutorial
//
//  Created by István Csanády on 2/22/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#include <iostream>

#include <BRep_Tool.hxx>

#include <BRepTools.hxx>
#include <BRep_Builder.hxx>
#include <GCPnts_UniformDeflection.hxx>

#include <gp_Pnt.hxx>

#include <GeomAdaptor_Curve.hxx>

#include <TopExp_Explorer.hxx>

#include <TopoDS.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Wire.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Vertex.hxx>


#include <BRepMesh.hxx>

#include <BrepBuilderAPI_MakePolygon.hxx>
//class BrepBuilderAPI_MakePolygon;

#include <list>

std::list<Handle(Geom_Curve)> garbage;

void curveDiscretizer(Handle(Geom_Curve) gcurve,Standard_Real first,Standard_Real last) {
    GeomAdaptor_Curve curve_adaptor(gcurve);
    Standard_Real deflection = 0.05;
    GCPnts_UniformDeflection discretizer;
    discretizer.Initialize(curve_adaptor, deflection, first, last);
    garbage.push_back(gcurve);
}

void makePoly(int i) {
    BRep_Builder builder = BRep_Builder();
    std::cerr<<"running"<<i<<std::endl;
    std::list<TopoDS_Vertex*> verts;
    std::cerr<<"creating points"<<std::endl;
    
    
    int x_size = rand()%150;
    int y_size = rand()%150;
    std::cerr<<"size:("<<x_size<<","<<y_size<<")"<<std::endl;
    for (int x = 0; x<x_size; ++x) {
        
        for (int y = 0;y<y_size; ++y) {
            
            TopoDS_Vertex* v = new TopoDS_Vertex();
            builder.MakeVertex(*v,gp_Pnt(x,y,0.),1e-7);
            verts.push_back(v);
        }
    }
    
    BRepBuilderAPI_MakePolygon poly_maker;
    
    for (std::list<TopoDS_Vertex*>::iterator iter = verts.begin();
         iter!=verts.end();
         ++iter) {
        poly_maker.Add(**iter);
    }
    
    if(poly_maker.IsDone()) {
        
        poly_maker.Close();
        const TopoDS_Wire& w = poly_maker.Wire();
        TopExp_Explorer explorer = TopExp_Explorer(w, TopAbs_EDGE);
        while (explorer.More()) {
            const TopoDS_Edge& edge = TopoDS::Edge(explorer.Current());
            TopLoc_Location l;
            Standard_Real first;
            Standard_Real last;
            Handle(Geom_Curve) g = BRep_Tool::Curve(edge, l, first, last);
            curveDiscretizer(g, first, last);
            explorer.Next();
        }
    }
    for (std::list<TopoDS_Vertex*>::iterator iter = verts.begin();
         iter!=verts.end();
         ++iter) {
        
        delete *iter;
    }
    verts.clear();
}

int main() {

    for (int i = 0; i<1000; ++i) {
        
        makePoly(i);
        std::cerr<<"Number of garbage:"<<garbage.size()<<std::endl;
        garbage.clear();
    }
}
_______________________________________________
Pythonocc-users mailing list
Pythonocc-users@gna.org
https://mail.gna.org/listinfo/pythonocc-users

Reply via email to