[gme-users] GME Add-On and object IDs

Peter Volgyesi peter.volgyesi at vanderbilt.edu
Mon Apr 20 11:33:42 CDT 2009


Hi,

As Csaba said, the object IDs are read-only. The relative IDs are more
important and you want them to match in both projects if you want
(almost) identical results. (Relative IDs are unique within the
container only, so a path of relative IDs will identify the object
uniquely in the project). The read-only IDs are reassigned even after
an XML export/import step.

You might want to look at the multiuser/xml backend (available when
you create a new project) if you need a distributed environment.

Regards,

--
Peter Volgyesi
Research Scientist
Vanderbilt University, ISIS



On Mon, Apr 20, 2009 at 10:47 AM, Csaba Toth <ctoth at isis.vanderbilt.edu> wrote:
> Dear Jerry,
>
>
>
> Object IDs are basically read only attributes. You can change the relative
> ID of an object, if this is allowed by the actual project.
>
> See Interfaces/Mga.idl:
>
>
>
> // Used with MgaProject::Preferences()
>
>
>
> typedef enum preference_flags {
>
> MGAPREF_NODUPLICATENAMES  = 0x00000001,         // make sure, names are
> never duplicated
>
> MGAPREF_NAMENEWOBJECTS    = 0x00000002,         // assign kind/rolename to
> new objects
>
> MGAPREF_IGNORECONNCHECKS =  0x00000004,         // do not complain on
> partially connected simple connections
>
> MGAPREF_FREEINSTANCEREFS =  0x00000008,         // do not bind refs in
> subtypes/instances to successors of ref target in basetype
>
> MGAPREF_RELAXED_RDATTRTYPES =  0x00000010,      // attributes may be read as
> types other than the real type
>
> MGAPREF_RELAXED_WRATTRTYPES =  0x00000020,      // attributes may be written
> as types other than the real type
>
> MGAPREF_MANUAL_RELIDS         = 0x00000040,     // relid-s are assigned
> manually
>
> } preference_flags;
>
>
>
> and:
>
>
>
> interface IMgaObject : IDispatch    {
>
>>
>       [propget, helpstring("property RelID")]         HRESULT RelID([out,
> retval] long *pVal);
>
>       [propput, helpstring("property RelID")]         HRESULT RelID([in]
> long newVal);
>
>>
> }
>
>
>
> and also these properties:
>
>       [id(0x560), propget, helpstring("property ChildRelIDCounter")]
>
>             HRESULT ChildRelIDCounter([out, retval] long *pVal);
>
>       [id(0x560), propput, helpstring("property ChildRelIDCounter")]
>
>             HRESULT ChildRelIDCounter([in] long pVal);
>
>
>
> On the IMgaFolder and IMgaModel interface. Child relid is generated in a
> deterministic way.
>
> Although you cannot change the Object ID part, but it is also generated in a
> deterministic way, depending on the underlying storage infrastructure, see
> these functions in the source code:
>
>
>
> GME\Core\CoreBinFile.cpp:
>
> CCoreBinFile::CreateObject(objid_type *objid)
>
>
>
> GME\Core\CoreRepository.cpp:
>
> objid_type CCoreRepository::ObjID_GetNext(metaid_type metaid)
>
> (used in case of multi-user mode?)
>
>
>
> GME\Core\CoreODBC.cpp:
>
> CCoreODBC::CreateObject(objid_type *objid)
>
> (not used)
>
>
>
> These functions return the generated ids.
>
>
>
> Hope this helps,
>
> Csaba
>
>
>
> From: gme-users-bounces at list.isis.vanderbilt.edu
> [mailto:gme-users-bounces at list.isis.vanderbilt.edu] On Behalf Of Jerry Lin
> Sent: Sunday, April 19, 2009 4:50 AM
> To: gme-users
> Subject: [gme-users] GME Add-On and object IDs
>
>
>
> Hello,
>
> I am trying to create an add-on for real-time distributed modeling. At this
> time it looks like I need to keep the various instances of GME working on a
> consistent model, meaning, if someone creates an object, it should show up
> exactly as created on the other side. I am having trouble finding ways to
> create objects with a specific ID.
>
> Can someone help me here?
>
> -Jerry
>
> _______________________________________________
> gme-users mailing list
> gme-users at list.isis.vanderbilt.edu
> http://list.isis.vanderbilt.edu/mailman/listinfo/gme-users
>
>


More information about the gme-users mailing list