MiniCAD Sample
Source code for MiniCAD sample is available in Samples\VC 
folder of the installation directory. If you are going to compile 
the project we suggest to 
copy  whole VC  directory to location outside of the installation
folder. MiniCAD is an MFC dialog-based application which 
displays DI model using DG Kernel ActiveX control and allows to modify geometrical parameters of the 
model. 
See also:  C# MiniCAD Sample,   
Visual Basic MiniCAD Sample,   
Visual Basic .NET MiniCAD Sample,   
All samples 
Description of 
MiniCAD Sample 
Implementation
Almost all functionality is implemented by MiniCADDlg class. Navigation through the interface 
hierarchy is the most important task. InitModelInfo() function 
retrieves m_pIModel pointer to IModel interface.  
  m_pIModel = (IModel*)m_ctrlCAD.GetModel();  
 Interface to the current 
entity is kept into m_pIEntity. It is obtained by UpdateSectInfo() function 
using call 
    VERIFY( m_pIModel->GetEntity(m_nCurSect, &m_pIEntity) == S_OK ); 
Note the call to Release() done on the current m_pIEntity. This is important 
because this UpdateSectInfo()  call is probably switching to another entity which is 
another object and maintains its own reference counting. 
The same function MiniCADDlg::UpdateSectInfo() acquires IAxiBase 
interface using call 
  m_pIEntity->QueryInterface( IID_IAxiBase, 
  (void**)&m_pIAxiBase);  
Prior to that we query the entity type with 
  m_pIEntity->GetEntityType(szSectType);  
to check if the entity is a "3DSection". Otherwise it is a Surface 
of Revolution, which does not have base. We could have deduce it if 
QueryInterface call above for m_pIAxiBase have failed.  
We can query two more interfaces, namely 
 I3DObject and IStrip from m_pIEntity. This is the last job done in 
MiniCADDlg::UpdateSectInfo(). Note that IStrip pointer m_pIStrip is 
implemented by object which represents cross-entity segment strip in case of 
Generic 3D Entity and profile segment strip in case 
of Surface Of Revolution. 
Actual geometry changes are done in OnApply() function through
IElement interfaces 
which are kept in m_pIElemJoint and m_pIElemSegment members. These are 
obtained by UpdateJointInfo() and UpdateSegmentInfo().  
                 |