Coin Logo Coin3D is Free Software,
published under the BSD 3-clause license.
https://bitbucket.org/Coin3D/
http://www.kongsberg.com/kogt/
dimeModel Class Reference

The dimeModel class organizes a model. More...

#include <dime/Model.h>

Public Member Functions

 dimeModel (const bool usememhandler=false)
 
 ~dimeModel ()
 
dimeModelcopy () const
 
bool init ()
 
bool read (dimeInput *const in)
 
bool write (dimeOutput *const out)
 
int countRecords () const
 
bool traverseEntities (dimeCallback callback, void *userdata=NULL, bool traverseBlocksSection=false, bool explodeInserts=true, bool traversePolylineVertices=false)
 
const char * addReference (const char *const name, void *id)
 
void * findReference (const char *const name) const
 
const char * findRefStringPtr (const char *const name) const
 
void removeReference (const char *const name)
 
class dimeMemHandlergetMemHandler ()
 
int getNumLayers () const
 
const class dimeLayergetLayer (const int idx) const
 
const class dimeLayergetLayer (const char *const layername) const
 
const class dimeLayeraddLayer (const char *const layername, const int16 colnum=7, const int16 flags=0)
 
const char * getDxfVersion () const
 
const char * addBlock (const char *const blockname, dimeBlock *const block)
 
class dimeBlockfindBlock (const char *const blockname)
 
class dimeSectionfindSection (const char *const sectionname)
 
const class dimeSectionfindSection (const char *const sectionname) const
 
int getNumSections () const
 
class dimeSectiongetSection (const int idx)
 
void insertSection (dimeSection *const section, const int idx=-1)
 
void removeSection (const int idx)
 
void registerHandle (const int handle)
 
void registerHandle (const char *const handle)
 
int getUniqueHandle ()
 
const char * getUniqueHandle (char *buf, const int bufsize)
 
void addEntity (dimeEntity *entity)
 

Static Public Member Functions

static const char * getVersionString ()
 
static void getVersion (int &major, int &minor)
 

Detailed Description

The dimeModel class organizes a model.

The constructor accepts a boolean value which specifies whether or not a memory handler should be used. The special purpose memory handler used in Coin can be used if you're just going to read a file and write the file, and not do too much dynamic work on the model. The memory handler yields very fast allocation/deallocation, and has virtually no overhead when allocating. This is important if you have large files with millions of records. The disadvantage is that memory will not be freed until the model is destructed, so if you modify your model, e.g. remove or replace an entity, the memory for the now unused entity will not be freed until the model is destructed. Then all used memory will be freed at once.

Also, if you plan to implement your own entities, it takes a bit of extra care to support the memory handler. In short, you should always check if a memory allocator should be used before allocating memory, since the destructor for entities will never be called when a memory handler is used. See the documentation in dimeEntity for more information about how to create your own entities and how to support the memory handler.

Constructor & Destructor Documentation

◆ dimeModel()

dimeModel::dimeModel ( const bool  usememhandler = false)

Constructor. If usememhandler is TRUE, the dimeMemHandler will be used to allocate entities and records.

◆ ~dimeModel()

dimeModel::~dimeModel ( )

Destructor.

Member Function Documentation

◆ copy()

dimeModel * dimeModel::copy ( ) const

Returns a copy of the model.

◆ init()

bool dimeModel::init ( )

Should be called before you start working with the model. Will be called by read() so if you're reading a model from a file you will not have to worry about this.

The method cleans up the old data structures and creates new data structures for the new model.

◆ read()

bool dimeModel::read ( dimeInput *const  in)

Reads the model file into the internal structures.

◆ write()

bool dimeModel::write ( dimeOutput *const  out)

Writes the model to file. Currently only DXF files are supported, but hopefullt DWG will be supported soon.

◆ countRecords()

int dimeModel::countRecords ( ) const

Counts the number of records in the file. Useful if you need progress information while writing the file to disk.

See also
dimeOutput::setCallback()

◆ traverseEntities()

bool dimeModel::traverseEntities ( dimeCallback  callback,
void *  userdata = NULL,
bool  traverseBlocksSection = false,
bool  explodeInserts = true,
bool  traversePolylineVertices = false 
)

Traverses all entities in the model.

◆ addReference()

const char * dimeModel::addReference ( const char *const  name,
void *  id 
)

Adds a reference in this model's dictionary. Used by BLOCK and INSERT entities to resolve references, but can also be used for other purposes.

◆ findReference()

void * dimeModel::findReference ( const char *const  name) const

Finds a reference from the dictionary.

◆ findRefStringPtr()

const char * dimeModel::findRefStringPtr ( const char *const  name) const

Finds a pointer to a string in the dictionary.

◆ removeReference()

void dimeModel::removeReference ( const char *const  name)

Removes a reference from the dictionary.

◆ getMemHandler()

dimeMemHandler * dimeModel::getMemHandler ( )

Returns a pointer to the memory handler used for this model.

◆ getNumLayers()

int dimeModel::getNumLayers ( ) const

Returns the number of layers in the model. A default layer will always be created. It is called "Default DIME layer", and it has layer id number 0. All other layers are assigned running numbers from 1.

See also
dimeLayer::getLayerNum()
dimeModel::getLayer()

◆ getLayer() [1/2]

const dimeLayer * dimeModel::getLayer ( const int  idx) const

Returns the layer at index idx.

See also
dimeModel::getNumLayers()

◆ getLayer() [2/2]

const dimeLayer * dimeModel::getLayer ( const char *const  layername) const

Returns the layer with name layername. Returns NULL if no layer by that name is found.

◆ addLayer()

const dimeLayer * dimeModel::addLayer ( const char *const  name,
const int16  colnum = 7,
const int16  flags = 0 
)

Adds a layer to the list of layers. If the layer allready exists, a pointer to the existing layer will be returned.

◆ getDxfVersion()

const char * dimeModel::getDxfVersion ( ) const

Returns the AutoCAD drawing database version number. This function return NULL if no version number is found in the file. Currently (directly) supported versions are: r10, r11/r12, r13 and r14.

◆ getVersionString()

const char * dimeModel::getVersionString ( )
static

This method returns a string saying which version of DIME is used.j

◆ addBlock()

const char * dimeModel::addBlock ( const char *const  blockname,
dimeBlock *const  block 
)

Use this to add a block to the model. Make sure you also add it in the BLOCKS section.

◆ findBlock()

dimeBlock * dimeModel::findBlock ( const char *const  blockname)

Returns a pointer to the block with name blockname, or NULL if no block with that name exists.

◆ findSection() [1/2]

dimeSection * dimeModel::findSection ( const char *const  sectionname)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

◆ findSection() [2/2]

const dimeSection * dimeModel::findSection ( const char *const  sectionname) const

Finds the section with section sectionname. Currently (directly) supported sections are HEADER, CLASSES, TABLES, BLOCKS, ENTITIES and OBJECTS.

◆ getNumSections()

int dimeModel::getNumSections ( ) const

Returns the number of sections in the model.

See also
dimeModel::getSection()

◆ getSection()

dimeSection * dimeModel::getSection ( const int  idx)

Returns the section at index idx.

See also
dimeModel::getNumSections()

◆ insertSection()

void dimeModel::insertSection ( dimeSection *const  section,
const int  idx = -1 
)

Inserts a new section to the list of sections. The argument idx, specifies the target position of the new section in the list of sections. If idx is negative, the section will be placed at the end of the list.

Sections shold never be allocated on the stack. Use the new/delete operators to create/destroy section instances.

◆ removeSection()

void dimeModel::removeSection ( const int  idx)

Removes a section from the list of sections.

◆ registerHandle() [1/2]

void dimeModel::registerHandle ( const int  handle)

Newer DXF files has stupid handles (groupcode 5) for all entities, tables etc. I can't undestand they have no real purpose, but all handles must be unique when the file is loaded back into AutoCAD...

◆ registerHandle() [2/2]

void dimeModel::registerHandle ( const char *const  handle)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

◆ addEntity()

void dimeModel::addEntity ( dimeEntity entity)

Convenience function


The documentation for this class was generated from the following files: