![]() |
【转帖】problems with dxf reader
problems with dxf reader
problems with dxf reader hi all! inspired from the sample program odreadex, i wrote a dxf reader. i took all the entities from the modelspace (i'm only interrested in that), then i apply worlddraw on each entity (given an instance of odgiworlddrawdumper as parameter which extends odgiworlddraw). the dumper is associated to an instance of odgiworldgeometrydumper (extends odgiworldgeometry). the implementations of odgiworldgeometrydumper calls a an instance of simplifier (which extends odgigeometrysimplifier) as much as possible. for exemple: void odgiworldgeometrydumper::circle(...){ _simplifier->circleproc(...); } odgiworlddrawdumper the method odgiworldgeometrydumper:: draw(pdrawable) calls pdrawable->worlddraw(_worlddraw); where _worlddraw is the unique instance of odgiworldgeometrydumper. i overloaded procpolygon and procpolyline in the simplifier to store the polygons. results are shown in the file attached to this email (with 3d house sample). we see that the most obvious problem is that the roof of the house is displaced. i was thinking that it was because i did not implement pushmodeltransform and popmodeltransform. but even after implementing those (that is storing the matrix in a stack and multiplying my vertex by these matrix) it did not solve the problem. did i miss something? also my second question is the following. for most entities in odgiworlddraw the correspongind entityproc is defined in odgigeometrysimplifier. but for some not. for example * one of the definitions of: void odgiworlddraw::circulararc * one of the definitions of: void odgiworlddraw::elliparc * one of the definitions of: void odgiworlddraw::text what shoud i do with those? is it the right things of doing things? thanks for any guidance. cheers, gregoire ps: to clarify my goal is to obtain a list of polygon/polyline from a dxf file. these data are used for scientific computation. therefore i am not a cad user and i possibly miss some concepts associated to this library. so please be indulgent! attached images hi, 1: it's definitely something wrong with pushmodeltransform()/popmodeltransform(), make sure that they are really called during vectorization and their implementations are correct. 2: all overloaded versions of odgiworlddraw::circulararc could be implemented to call single corresponding version odgigeometrysimplifier::circulararcproc(). the same for other primitives. you'd better use odgibasevectorizer (or odgsbasevectorizedevice and odgsbasevectorizeview) as base implementation for your vectorizer. please, refer to odvectorizeex example for more details. last edited by dmitry a. novikov; 22nd march 2007 at 04:54 amfff">. hi! thanks for the answer. 1. as you said this was related to the implementation of pushmodeltransform. this has been fixed by correcting the implementation of matrix multiplication (originally i used the method transformby of odgevector3d, with matrix xfm as parameter. replacing this by a manual matrix multiplication fixed the problem). 2. ok. thanks again, regards, gregoire |
所有的时间均为北京时间。 现在的时间是 07:04 AM. |