2010/12/13 Stephen Waterbury <water...@pangalactic.us>

> On 12/12/2010 04:44 PM, Thomas Paviot wrote:
>
>> Dear Steve,
>>
>> The OMG CAD Services (OCS) specs are still freely available from the OMG
>> website (the latest release is 1.2 : http://www.omg.org/spec/CAD/).
>>
>
> Thanks, I just removed the 1.1 doc from my site!  (I had a local
> copy and hadn't bothered to check whether OMG still had an
> accessible version of the spec.)
>
>
>  I agree
>> with you about the fact that the OCS is a good starting point. I briefly
>> studied the OCS some months ago, and have a few notes I'd like to discuss
>> with
>> you:
>>
>>    * from a technical viewpoint, the CORBA technology is perfectly
>> suitable
>>    for synchronous sharing of business objects through a network. In my
>>    opinion, an asynchronous collaboration should be enough (regarding the
>>    business needs related to usual CAD workflows) and Web Services (WSDL,
>>    SOAP etc.) might just be perfect;
>>
>
> I find CORBA a bit "heavy" compared to some more recently
> introduced technologies, and nowadays I don't think of OMG specs
> as implying CORBA implementation, albeit they are still defined
> using IDL (which I kind of like).  I must also confess an
> aversion to SOAP/WSDL -- yes, they work, but they are (IMO) also
> rather clumsy to develop with.  Apologies for being so judgmental
> about those -- I'm sure they will work fine for any developer who
> is more comfortable with them than I am.


Well, I use to work with suds (https://fedorahosted.org/suds/) which is a
very convenient way to work with web services under python. The boring stuff
(parsing/generating WSDL files for instance) is completely abstracted.


> I am very interested in
> building an architecture for communications between CAX tools and
> services, but I currently plan to use lightweight message-based
> technologies to implement a common "info bus" through which tools
> and services would communicate using a set of pub/sub type APIs.
> Of course, there may also be use cases for which remote object
> protocols are appropriate, but a lot of tools and services will
> require wrappers to participate and I suspect messsaging wrappers
> may be easier to write than remote-object-style wrappers that
> have to maintain a lot of state.  That certainly doesn't preclude
> defining objects as the things that are communicating, so perhaps
> it's just a remote object architecture by another name.  ;)  The
> particular technology that I'm planning to experiment with is
> Twisted's "Asynchronous Messaging Protocol", AMP[1], which is
> very lightweight and elegant (Twisted also has Perspective
> Broker[2], an interesting remote object protocol).
>

Thanks for the links, it seems very interesting. I thank both Dave and you
for the information about messages. I think it can make the exchange and
sharing of business objects or API more dynamic than something based upon
WSDL/SOAP (a spec based on one or more WSDL files is unreadable for a
human-I mean, a normal human being without any superhero extra ability- and,
at the same time, is a kind of closed, rigid, hardly extensible API). To me,
the easiest way to call the distant function create_point(10.,10,10.) is to
send the string "CALL_FUNCTION, create_point, (10,10,10)" to the server. The
same thing using SOAP would required a 100 lines long WSDL file as well as
the exchange of a 10 lines XML formatted message (maybe it's a
bit exaggerated).


>
>     * from a semantic viewpoint, whereas the computational model is
>> explicit,
>>
>>    the informational model is mostly implicit. For instance, the
>>    CadBrep::Face class definition could be whatever. In my opinion, it
>> could
>>    be a good thing to harmonize the semantics contained in the OCS and the
>>    STEP parts 42, 55 etc.;
>>
>
> I wholeheartedly agree with that!  In fact, speaking of
> semantics, I'd actually like to have an ontology (OWL) from which
> the informational model (schema) is generated -- of course, this
> is a design principle I'm trying to implement in my
> work-in-progress, PGEF[3] ... ;)
>
>     * some of the methods defined in OCS are strongly platform dependent:
>> for
>>
>>    instance CAD User Interface, paths etc. A high level CAD API should
>>    abstract these concepts and be platform/CAD system independent;
>>
>
> I certainly agree that all methods should be platform
> independent.  In a quick glance I didn't notice anything
> platform-dependent -- can you give an example?
>

Well, the 'platform' dependency was not the right word, sorry, if we think
'platform' as Windows/Linux/MacOS etc. I rather thought about the
'architecture' dependency. Take for instance the 'create_new_folder' or
'get_root_directories' functions. They are the consequence of the asumption
that the models are stored in files, on a hard drive. It can seem quite
outdated regarding current networked architectures. In my opinion, such
functions have nothing to do with a high level CAD API. They can be
abstracted at a higher level (semantics) with for instance 'categories' or
'ressource identifier', 'ressource location' etc.

The second OMG CAD Services asumption is that the CAD
softwares necessarily come with a GUI (see the 'get_gui' function). I'm not
sure about that. I'd like the pythonOCC high level API be independent from
any GUI (pythonOCC itself doesn't provide any GUI but a poor 3D rendering
window).


>     * at last, I have a few doubts about the persistent identification
>> since I
>>
>>    know it's still considered as a major issue. And I wonder whether or
>> not
>>    the OCC topological naming could be mapped to these persistent_ids.
>>
>
> I agree there could be issues there also -- a big stumbling block
> in trying to implement a product model in which important printed
> circuit board features could have their identities survive a
> round-trip (import/export) to/from an MCAD tool is the lack of
> session-independent persistent identifiers in MCAD tools at the
> "feature" level.  Of course, you might have meant something else
> ;), but that is one persistence issue I'm aware of!
>

That's the one I had in mind.


>
> For me this is a very useful thread and I'd like to help in any
> way I can with helping to define and test a high-level CAD API.
>

It could be a good thing if we can join our efforts. What about a page
dedicated to this project on the pythonOCC wiki? Maybe it could be a good
solution to let anyone give his opinion and have a synthesis of our current
mail exchanges.

>
> Cheers,
> Steve
>

Do you know where and when the PDE 2011 conference will take place?

Cheers,

Thomas


>
> [1]
> http://twistedmatrix.com/documents/8.1.0/api/twisted.protocols.amp.html
> [2] http://twistedmatrix.com/documents/current/core/howto/pb.html
> [3] https://pangalactic.us/repo/pgef
>
> P.S.  Thomas, do you think someone from the pythonOCC team might
> participate in PDE 2011?  I hope so!
>
>  Best Regards,
>>
>> Thomas
>> 2010/12/12 Stephen Waterbury <water...@pangalactic.us <mailto:
>> water...@pangalactic.us>>
>>
>>
>>    Thomas, Dan, Dave,
>>
>>    A precedent (or at least a closely related concept) was the "CAD
>>    Services API" developed by the [now defunct] OMG Manufacturing
>>    Technology & Industrial Systems Task Force (MANTIS).  That
>>    specification is no longer active.  It basically fell prey to
>>    the OMG rule that an active spec must be implemented by at least
>>    2 vendors -- it was only implemented by one vendor (see below) --
>>    but it represents some good work that is still potentially
>>    useful.
>>
>>    The fact that only ITI had a product that implemented the CAD
>>    Services API specification is more an indication of the hesitancy
>>    of CAD vendors to provide a standardized API than of the quality
>>    of the spec, IMO.  ;)  I've put a copy of its last version on my
>>    web server for convenience (not publicized since I think OMG's
>>    copyright might still be in force, not sure -- but since NASA
>>    contributed to the spec, I feel somewhat justified in making it
>>    available!):
>>
>>    http://pangalactic.us/cax/CAD_Service_V1.1_030363.pdf
>>
>>    It's interesting to note that both NASA *and* OpenCascade
>>    contributed to the spec.  It is based on the API of "CADScript",
>>    a set of Python wrappers for CAD tools that was developed as a
>>    commercial product by Doug Cheney of International Technegroup
>>    Incorporated (ITI).  CADScript is no longer offered by ITI as a
>>    product, but Doug (who is a strong python advocate) has used a
>>    Python API internally for another ITI product of which he is the
>>    primary developer, called CADIQ, which analyses CAD models for
>>    various types of modeling errors that could lead to data exchange
>>    problems or manufacturing problems, for example.  (The CADIQ url
>>    is: http://www.transcendata.com/products/cadiq/)  Doug presented
>>    the CADScript product at the PDE 2001 Workshop at JPL.  His
>>    presentationslides are here:
>>
>>
>> http://step.nasa.gov/pde2001/STEP-and-Scriptable-CAx-Tool-Integration_Doug-Cheney.ppt
>>
>>    Doug also did an impressive live demo using CADScript for the
>>    Multi-CAD Assembly use case shown in his next-to-last slide.
>>    Also, from recent conversations with Doug, I know that users of
>>    the current CADIQ product can be given access to the supported
>>    Python API that it uses (not sure how much of CADScript might be
>>    there).
>>
>>    I agree with what Thomas proposes below -- the concept of a
>>    standardized high-level API that would have a standardized
>>    framework or methods to specialize it for particular use cases.
>>    I'd suggest considering the CAD Services API specification as a
>>    starting point for a high-level API, since that spec incorporates
>>    a substantial amount of harmonization work that was done to
>>    develop a consensus high-level CAD API, and I think if pythonOCC
>>    provided a high-level API that implements even something close to
>>    the CAD Services API, it could provide a de facto industry
>>    standard high-level CAD API, with the hope of getting it adopted
>>    by other tools, and in the future possibly made a formal standard
>>    (by OMG, ISO/IEC, or whomever).
>>
>>    Cheers,
>>    Steve
>>
>>
>>    On 12/11/2010 03:47 PM, Thomas Paviot wrote:
>>
>>        Dear Dan, Dave,
>>
>>        I didn't know about the openscad project, thanks for introducing me
>> this
>>        project. Dave, you write "it is a tool that allows programmatically
>> building
>>        solids using python and a CSG kernel", but I don't see any python
>> scripting, I
>>        have rather the feeling that the scripting language of openscad is
>> a kind of
>>        specific language, am I wrong?
>>
>>        I agree with both of you regarding the high-level API that could be
>> built upon
>>        pythonOCC. Abstracting the low-level OCC api/data model would be
>> something
>>        really helpful. From a development viewpoint, there is not big
>> issue : we all
>>        developed or our own classes/methods or function in pythonOCC in
>> ordre to
>>        speed up development and make our programs modular. The big deal is
>> rather :
>>        what classes/methods should be made available to the user? How
>> could this set
>>        of functions be complete, i.e. how to ensure that *all* the needs
>> from any
>>        user are covered by this API ?
>>
>>        In my opinion, there's no way to get it done (I've been thinking
>> about this
>>        for a long time). We'll always find a user that is not satisfied
>> with the API
>>        and who requests for another method/class etc. The risk is then
>> that this high
>>        level API become as big and complex as the original one (OCC).
>>
>>        We could then imagine a different workflow than the usual one. I
>> think about
>>        something that was used for the standardization of the AP239 of the
>> STEP
>>        standard (also known as PCLS) : a very generic data model were
>> designed (and
>>        standardized), and the specialization of the data model was also
>> standardized.
>>        As a consequence, users with very specific business just join their
>> efforts to
>>        define a standardized specialization of the generic data model
>> suitable for
>>        their needs (aviation maintenance, operational feedback etc.).
>>
>>        This development model could be moved to the pythonOCC high level
>> API
>>        development :
>>
>>            * a generic data model would be defined, with basic and
>> fundamental
>>            elements ;
>>            * a framework for specializing this model is also defined. Both
>> of this
>>            two points could be viewed at an ontological level ;
>>            * we then set up a 'high level API' repository with a set of
>> basic
>>            classes/methods already defined ;
>>            * from these 2 points, we just let the user contribute new
>>            classes/functions/methods if what he is looking for is not
>> already
>>            available from the repository.
>>
>>        It could be a way for us (developpers of pythonocc) to share the
>> development
>>        efforts of this needed high level API. And to have, as a
>> consequence, a huge
>>        web-based repository of python classes/methods/functions,
>> classified by
>>        businesses (FEM, manufacturing etc.), level of granularity,
>> functions (gears,
>>        bearings etc.) etc.
>>
>>        pythonOCC would then become a kind of distributed library : a core
>> component
>>        (the python wrapper), required, and thousands of optional
>> components available
>>        online, supported by a powerfull request engine. Setting up such an
>>        architecture is more a scientific project than a simple python
>> development
>>        activity.
>>
>>        What do you think about that idea?
>>
>>        Thomas
>>
>>        2010/12/11 Dave Cowden <dave.cow...@gmail.com <mailto:
>> dave.cow...@gmail.com> <mailto:dave.cow...@gmail.com <mailto:
>> dave.cow...@gmail.com>>>
>>
>>
>>
>>            Yes, definitely a higher level of abstraction is needed than
>> just pure python.
>>
>>            I am thinking ( not surprisingly ) of an environment a lot like
>> a java
>>            ide. You write code, but the ide provides syntax highlighting,
>>            function completion, refactor support, code templates, a way to
>>            include other libraries, etc.
>>
>>            On 12/10/10, Dan Falck <dfa...@frontier.com <mailto:
>> dfa...@frontier.com> <mailto:dfa...@frontier.com <mailto:
>> dfa...@frontier.com>>> wrote:
>>         >   Yes, this technique does work- I've used it for commercial
>> design work
>>         > with some proprietary modelers (Ashlar Cobalt and PunchCad Shark
>> FX)
>>         > that used a crude scripting language-called of all things 'Macro
>>         > Parser'. I was able to make simple changes to the scripting that
>> would
>>         > be major changes to the model. This allowed for very flexible
>> revisions.
>>         > It also made it easy to recover from a crash if the application
>> was
>>         > acting finicky.
>>         > I was able to do fork crowns for bicycles (classic Italian
>> style-not the
>>         > modern stuff) by using techniques that emulated a cnc mill tool
>> path
>>         > through the solid block. The whole time I was working the model
>> as a
>>         > machinist would at a mill or lathe- subtracting shapes from the
>> solid
>>         > that I started with. Python code was necessary to keep me from
>> losing my
>>         > mind during these projects :) I created some functions that made
>> dealing
>>         > with the crude 'Macro Parser' scripting a lot easier.
>>         > PythonOCC looks a whole lot more attractive to me than my old
>> work with
>>         > this crude scripting. But, I would like to be able to abstract
>> it a
>>         > little more though to make it easier to remember how to use it,
>> without
>>         > having to go to the OCC docs all the time. I would bet that
>> Thomas and
>>         > Jelle are working on something like this.
>>         > I think this project might be similar to what we are talking
>> about:
>>         >
>>         > http://www.caddd.org/
>>         >
>>         > Dan
>>         >
>>         > On 12/10/10 2:27 PM, Dave Cowden wrote:
>>         >> I assume that someone has seen this:
>>         >>
>>         >> http://openscad.org/
>>         >>
>>         >> it is a tool that allows programmatically building solids using
>> python
>>         >> and a CSG kernel.
>>         >>
>>         >> If such a tool used pythonOCC instead, it would be _much_ more
>> powerful.
>>         >>
>>         >> This kind of tool is really interesting to me. Anyone who has
>> done
>>         >> much solid modelling for a living quickly realizes that a
>> complex
>>         >> solid model is much like a programming problem.  You cannot
>> just
>>         >> 'start building' a complex model: you have to plan how the
>> object is
>>         >> built, which references are used, etc, so that the object is
>>         >> extensible and easily changed to accommodate design iterations.
>>  It
>>         >> becomes really important to plan reference planes and other
>> reference
>>         >> geometries to reference each other in a way consistent with the
>> rest
>>         >> of the model.
>>         >>
>>         >> Using a programming language to capture the [currently always
>>         >> proprietary] way that solid modelling packages capture the
>> build order
>>         >> and dependency chains of a solid ( especially parametric solids
>> ) is
>>         >> brilliant.  As programmers, we are very familiar with the
>> ability to
>>         >> use CVS merge and other utilities to track fine-grained changes
>> to
>>         >> software over time, even when under concurrent development.
>> Imagine
>>         >> the power of this capability applied to scripts that produce
>> solid
>>         >> objects!  No more huge binary solid object files that are
>> opaque from
>>         >> a change management viewpoint!
>>         >>
>>         >> Does anyone know if such a package is underway anywhere based
>> on
>>         >> pythonOCC?
>>         >>
>>         >>
>>         >>
>>         >> _______________________________________________
>>         >> Pythonocc-users mailing list
>>         >> Pythonocc-users@gna.org <mailto:Pythonocc-users@gna.org>
>> <mailto:Pythonocc-users@gna.org <mailto:Pythonocc-users@gna.org>>
>>
>>
>>         >> https://mail.gna.org/listinfo/pythonocc-users
>>         >
>>
>>            --
>>            Sent from my mobile device
>>
>>            _______________________________________________
>>            Pythonocc-users mailing list
>>        Pythonocc-users@gna.org <mailto:Pythonocc-users@gna.org> <mailto:
>> Pythonocc-users@gna.org <mailto:Pythonocc-users@gna.org>>
>>
>>
>>        https://mail.gna.org/listinfo/pythonocc-users
>>
>>
>>
>>
>>        _______________________________________________
>>        Pythonocc-users mailing list
>>        Pythonocc-users@gna.org <mailto:Pythonocc-users@gna.org>
>>        https://mail.gna.org/listinfo/pythonocc-users
>>
>>
>>
>>    _______________________________________________
>>    Pythonocc-users mailing list
>>    Pythonocc-users@gna.org <mailto: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