Hello all,
I've been watching this thread from the sideline for a while, very
interesting thread, but i havent had time to share my thoughts yet. so here
we go.
Although the idea of a standardized api across platforms and all the
possibilities for collaboration/online services has a lot of potential, i
think it will become a very big undertaking and i agree with Dave that we
should limit our scope and start simple.

Although im not against it, i see some dangers with building a new api on
top of open cascade, even if we start with a very delimited scope; it will
be a lot of work to develop our own set of sematics (the OMG CAD looked
interesting though, but i got the impression that opencascade has much more
functionality than what is covered by OMG)
It will be difficult to cover everything in a consistent manner, so the risk
is having still the granular c++ like opencascade api with some apis built
on top that are good for some purposes but not all, this can make it very
daunting for new users (and still for me) to figure out when i can use a
nice abstracted function or when i have to go down to 'pure' opencascade.
Mostly when the high level api subject comes up on the list it seems that
most of the issues people have are with the programming paradigms of
OpenCascade, not necessary the semantics of opencascade. In my opinion, if
we could strip away all c++ artifacts of opencascade i think the semantics
of opencascade as it is is quite decent.

A while back i was playing around with pygccxml (a c++ parser that can be
used for code generation) to get an idea of what could be done to make
opencascade more user friendly without having to manually write all the
wrappers. There are quite a lot of things that could be done with the
wrappers to make them more compact and 'pythonic' without manually writing
all the code:

- Handles (i believe Thomas managed already to get rid of those, havent
tested that)
- The collections classes: Array1Of.... the methods of these classes could
be rewritten to conform to the list/set/etc interfaces of python and all
methods that accept these collections could have some aout generated code
that converts standard python lists to these classes if necessary (i already
have the code to identify all the collection classes)
- The strictness of arguments in general could be loosened or some classes
could be merged ( for example gp_Pnt/gp_XYZ/gp_Vec/gp_Dir) are basically the
same thing
- Geom and gp could be merged or autoconverted between
- A lot of the algorithms classes that need to be initialized, executed and
then a method call to return the object of interest follow similar patterns
that could merged into a single method call, for example the sequence:
cut = BRepAlgoAPI_Cut(shape1, shape2)
cut.Build()
cutted_shape=cut.Shape()
- There still are a lot of method calls that takes a pointer to an object
that serves as the return value
- We could add a simple regexp to rewrite the CapitalizedMethodNames to
pythonic_underscored_method_names
- Eliminate the prefix of all the classes and implement them as python
namespaces:
Geom_Point -> Geom.Point or
from Geom import *
p = Point(...)
- then there is a lot of adapters etc that i havent looked too much at.

Many of these patterns can be identified with pygccxml queries and used to
add code to the wrappers. Some would require manual specification of classes
and methods that belong to a pattern.

Im not sure i would call it a high level api anymore, but i think it would
alleviate a lot of the need for a general high level api.

what do you guys think?

Henrik







On 27 December 2010 16:12, Dave Cowden <dave.cow...@gmail.com> wrote:

> Hi, Thomas:
>
> I have one other suggestion also, coming from the 'agile' point of view.
>  the HLA is a huge and daunting task-- and thus the reason any discussions
> quickly become large.  I would recommend that a scope of work be decided
> that is managable and allows producing something that we can get experience
> with, rather than attempting to drive any particular approach ( top-down or
> bottom up ) for the entire scope of the HLA.
>
> For example, perhaps we could agree that although the HLA contains much
> scope, the scope that is most needed and straightforward is the creation of
> primitives and basic CSG operations.  The rationale would be that these are
> the first operations new users are likely to perform, and are thus a good
> starting point.  Explicitly _out_ of scope would then be considerations of
> parametrics, assemblies, fancy curves, multi-process coordination of
> entities, etc.
>
> The best way I see to define this scope would be for you to approve the
> user stories that the first release supports. For example:
>
>   * "as a user of the HLA, i can programmatically create a sphere by
> specifying its diameter and center point in space"
>
>  * "as a user of the HLA, i can translate an object that has been created
> without creating another variable reference. Preferably, the creation and
> translation are accomplished in a single line"
>
> * ".... i can perform the union of a two objects, creating a third one, and
> convieniently return the resulting object for further manipulation"
>
> Presumably these user stories would become test cases or suites for the
> HLA.
>
> Something we could reach consensus on and release, however small in scope,
> would be better than spending too long on discussions attempting to consider
> the entire scope.  I think having something conceptually simple that we can
> iterate from would be very beneficial to coming up with an API that works
> well. We are certain to find that we must re-work some of these initial
> implementations to provide later functionality, but as long as the test
> cases and user stories match well, this effort will be managable.
>
>
> On Mon, Dec 27, 2010 at 8:07 AM, Thomas Paviot <tpav...@gmail.com> wrote:
>
>> Hi,
>>
>> Regarding the second point (basic primitives such as point, line, circle
>> etc. or other entities like coord_sys, group etc.), this is exactly what
>> we're thinking about for the 'High Level API' (HLA) for pythonOCC. In my
>> opinion, it is the most important part of the pythonOCC project, since we
>> all agree that the OCC library is too granular in order to be easily,
>> quickly and efficiently deployed.
>>
>> On the other hand, this could solve one of the major issue of the
>> pythonOCC project : the lack of documentation and/or
>> tutorials/howtos/getting started. As it is currently designed (a python
>> wrapper for the OCC library), writing doc for pythonOCC is the same thing as
>> writing docs for the OCC project. It is clearly not our intent, and out of
>> our skills/free time/etc. We are convinced that the use of both python and a
>> HLA can really add value the OCC modeling kernel. Our documentation efforts
>> would then focus on the HLA.
>>
>> However, the scope of this HLA has to be explicit and clearly delimited,
>> and the semantics of the basic constructs must be shared among the pythonocc
>> users or related projects. For instance, in the pycado project, you defined
>> a 'group' entity. According to what I read in your code, the 'group'
>> contains a set of basic operations/instance creation. In my opinion, this
>> entity is not really a 'group' but rather an 'ordered set' since you cannot
>> inverse the order of the elements of the group. It's however a good idea,
>> but it has to be made explicit in order to avoid ambiguities in the use of
>> this entity. I would like to work about that (a Platform Independent
>> Model-PIM) before thinking about the implementation issues and the
>> underlying technologies (python packages/modules, pycado or something else
>> scripts, SOA and webservices, MOM etc.), that is to say before designing a
>> set of Platform Specific Models (PSM) that would share a consistent,complete
>>  and extensible semantics (a top-down approach).
>>
>> I will post a new entry in the coming days, to sum up the exchanges
>> related to the "have you seen this" thread and suggest a way/plan to let
>> everybody interested in this work contribute the development of the HLA (the
>> dual bottom-up approach).
>>
>> Cheers,
>>
>> Thomas
>>
>> 2010/12/23 julien blanchard <julien...@yahoo.fr>
>>
>> Hi,
>>>
>>> The layer above python was matching the best with our goals, in fact, I
>>> see two
>>> main parts in our project:
>>> - the "IDE part" providing an optimized syntax for CAD and an efficient
>>> graphical visualization (by updating only components being modified in
>>> the
>>> script since last refresh)
>>> - the high level API written in pure python. This API should be used both
>>> in
>>> python project and pycado projects.
>>> For now, the API contains the following primitives (can have several
>>> "constructors"):
>>> coord_sys (coordinate system), point, line, circle, vector, surface,
>>> solid,
>>> group (a group can join any primitive)
>>>
>>> Julien.
>>>
>>> ----- Message d'origine ----
>>> De : Dave Cowden <dave.cow...@gmail.com>
>>> À : pythonOCC users mailing list. <pythonocc-users@gna.org>
>>> Envoyé le : Mer 22 décembre 2010, 19h 35min 20s
>>> Objet : Re: [Pythonocc-users] Re : Anyone seen this? (Dave Cowden)
>>>
>>> Hi,
>>>
>>> I am not a fan of pre-processors and scripts that are not pure python.
>>> I think that such an architecture is unnecessary in a dynamic
>>> language like python or javascript.  Is it not possible to accomplish
>>> the abstractions without pre-proccessing or another layer of syntax
>>> above python?
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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

Reply via email to