reading custom data fails with "dwg object improperly read"
reading custom data fails with "dwg object improperly read"
i have data stored in a proxy entity that was read like this in the old toolkit:
:
ddsdwgdata631_
ddsdwgdata;
adstartproxydataread(prt->m_hdxffile, ent.proxyent.entdatablob);
adreadproxydatabinary((char *)&ddsdwgdata, &nread);
adendproxydataread(prt->m_hdxffile);
:
when i now try the following implementation in the new toolkit i get "dwg object improperly read" when oddbobject::dwginfields(pfiler) is called below. i've tried variations of the implementation, but they all fail in various ways. i've probably missed something fundamental. any hints what to check out?
class ddsdwgdata631 : public oddbobject
{
public:
oddb_declare_members(ddsdwgdata631);
ddsdwgdata631();
odresult dwginfields(oddbdwgfiler* pfiler);
void dwgoutfields(oddbdwgfiler* pfiler) const;
};
odrx_dxf_define_members(ddsdwgdata631,
oddbobject,
dbobject_constr,
oddb::vac15,
oddb::kmrelease0,
0,
ddsdwgdata631,
data design system asa|
the class entry looks like this in the dxf/dwg file:
0
class
1
ddsdwgdata631
2
ddsdwgdata631
3
data design system asa|
90
0
280
0
281
1
the proxy entity looks like this in the dxf/dwg file:
0
acad_proxy_entity
5
1d
100
acdbentity
8
0
100
acdbproxyentity
90
498
91
524
92
0
93
394
310
4c000000003c1b5a4100000000000000000000000000000000 00000000000000000000000000001e910000200fc200000000
94
0
-rune jorgensen
www.dds.no
ok, after hours of basic research i've found out the following:
due to the..
281
1
...flag in the class def it must use oddbentity as baseclass. but what really wasted my day was that in order to get the same as i got in...
adreadproxydatabinary((char *)&ddsdwgdata, &nread);
...i must after...
pfiler->rdbytes(&ddsdwgdata, sizeof(ddsdwgdata));
...leftshift ddsdwgdata 10 bits! it seems adreadproxydatabinary did some processing of the data at a bit-level that rdbytes does not do.
is there an alternative call for oddbdwgfiler::rdbytes() that does the adreadproxydatabinary bitmanipulation for me? alternatively a function that can convert a buffer read with oddbdwgfiler::rdbytes() for me? alternatively give me a pointer to where "binary chunk" bitlayout is described?
i also need the reverse for writing out a "binary chunk".
i'd reeeeeeaaaaallly like some response to my posting here or on mail!
-rune jorgensen
www.dds.no
in custom object/entity's dwginfields() you need to know exactly what kind of data comes from filer. the stream is bit coded and you need to use proper functions to read the data: rddouble(), rdint16(), rdint32(), rdstring().... rdbytes().
and if custom entity is derived from oddbentity() you need to call oddbentity::dwginfields().
sergey slezkin
last edited by mmuratov; 12th january 2005 at 07:23 amfff">.