几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   DirectDWG (http://www.dimcax.com/hust/forumdisplay.php?f=89)
-   -   【转帖】reading custom data fails with dwg object improperly read (http://www.dimcax.com/hust/showthread.php?t=18348)

yang686526 2009-05-07 12:31 PM

【转帖】reading custom data fails with dwg object improperly read
 
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">.


所有的时间均为北京时间。 现在的时间是 01:19 PM.