![]() |
【转帖】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. |