KiCad PCB EDA Suite
class_libentry.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5  * Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
6  * Copyright (C) 2004-2017 KiCad Developers, see change_log.txt for contributors.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, you may find one here:
20  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21  * or you may search the http://www.gnu.org website for the version 2 license,
22  * or you may write to the Free Software Foundation, Inc.,
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24  */
25 
30 #ifndef CLASS_LIBENTRY_H
31 #define CLASS_LIBENTRY_H
32 
33 #include <general.h>
34 #include <lib_id.h>
35 #include <lib_draw_item.h>
36 #include <lib_field.h>
37 #include <vector>
38 #include <multivector.h>
39 
40 class EDA_RECT;
41 class LINE_READER;
42 class OUTPUTFORMATTER;
43 class PART_LIB;
44 class LIB_ALIAS;
45 class LIB_PART;
46 class LIB_FIELD;
47 
48 
49 typedef std::vector<LIB_ALIAS*> LIB_ALIASES;
50 typedef std::shared_ptr<LIB_PART> PART_SPTR;
51 typedef std::weak_ptr<LIB_PART> PART_REF;
54 
55 
56 /* values for member .m_options */
58 {
59  ENTRY_NORMAL, // Libentry is a standard part (real or alias)
60  ENTRY_POWER // Libentry is a power symbol
61 };
62 
63 
69 extern const wxChar traceSchLibMem[];
70 
71 
81 class LIB_ALIAS : public EDA_ITEM
82 {
91 
92 protected:
93  wxString name;
94  wxString description;
95  wxString keyWords;
96  wxString docFileName;
97 
98 public:
99  LIB_ALIAS( const wxString& aName, LIB_PART* aRootComponent );
100  LIB_ALIAS( const LIB_ALIAS& aAlias, LIB_PART* aRootComponent = NULL );
101 
102  virtual ~LIB_ALIAS();
103 
104  virtual wxString GetClass() const override
105  {
106  return wxT( "LIB_ALIAS" );
107  }
108 
116  LIB_PART* GetPart() const
117  {
118  return shared;
119  }
120 
121  const wxString GetLibraryName();
122 
123  bool IsRoot() const;
124 
125  PART_LIB* GetLib();
126 
127  const wxString& GetName() const { return name; }
128 
129  void SetName( const wxString& aName ) { name = aName; }
130 
131  void SetDescription( const wxString& aDescription )
132  {
133  description = aDescription;
134  }
135 
136  wxString GetDescription() const { return description; }
137 
138  void SetKeyWords( const wxString& aKeyWords )
139  {
140  keyWords = aKeyWords;
141  }
142 
143  wxString GetKeyWords() const { return keyWords; }
144 
145  void SetDocFileName( const wxString& aDocFileName )
146  {
147  docFileName = aDocFileName;
148  }
149 
150  wxString GetDocFileName() const { return docFileName; }
151 
159  bool SaveDoc( OUTPUTFORMATTER& aFormatter );
160 
164  bool operator==( const wxChar* aName ) const;
165  bool operator!=( const wxChar* aName ) const
166  {
167  return !( *this == aName );
168  }
169 
170  bool operator==( const LIB_ALIAS* aAlias ) const { return this == aAlias; }
171 
172 #if defined(DEBUG)
173  void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
174 #endif
175 };
176 
177 extern bool operator<( const LIB_ALIAS& aItem1, const LIB_ALIAS& aItem2 );
178 
179 extern int LibraryEntryCompare( const LIB_ALIAS* aItem1, const LIB_ALIAS* aItem2 );
180 
181 
183 {
191  std::vector<bool> dangling;
193 
195  {
196  PART_DRAW_OPTIONS def;
198  def.color = COLOR4D::UNSPECIFIED;
200  def.show_pin_text = true;
201  def.draw_visible_fields = true;
202  def.draw_hidden_fields = true;
203  def.only_selected = false;
204  def.show_elec_type = false;
205  return def;
206  }
207 
208  bool PinIsDangling( size_t aPin ) const
209  {
210  if( aPin < dangling.size() )
211  return dangling[aPin];
212  else
213  return true;
214  }
215 };
216 
217 
225 class LIB_PART : public EDA_ITEM
226 {
230  bool m_unitsLocked;
232  bool m_showPinNames;
239  wxArrayString m_FootprintList;
244 
245  static int m_subpartIdSeparator;
246  static int m_subpartFirstId;
249 private:
252  void deleteAllFields();
253 
254 
255 
256 public:
257 
258  LIB_PART( const wxString& aName, PART_LIB* aLibrary = NULL );
259  LIB_PART( LIB_PART& aPart, PART_LIB* aLibrary = NULL );
260 
261  virtual ~LIB_PART();
262 
264  {
265  // clone a shared pointer
266  return m_me;
267  }
268 
269  virtual wxString GetClass() const override
270  {
271  return wxT( "LIB_PART" );
272  }
273 
274  virtual void SetName( const wxString& aName );
275 
276  const wxString& GetName() const { return m_aliases[0]->GetName(); }
277 
278  const LIB_ID& GetLibId() const { return m_libId; }
279 
280  const wxString GetLibraryName();
281 
282  PART_LIB* GetLib() { return m_library; }
283 
284  void SetLib( PART_LIB* aLibrary );
285 
286  wxArrayString GetAliasNames( bool aIncludeRoot = true ) const;
287 
288  size_t GetAliasCount() const { return m_aliases.size(); }
289 
290  LIB_ALIAS* GetAlias( size_t aIndex );
291 
292  LIB_ALIAS* GetAlias( const wxString& aName );
293 
304  void AddAlias( const wxString& aName );
305 
314  bool HasAlias( const wxString& aName ) const;
315 
316  void SetAliases( const wxArrayString& aAliasList );
317 
318  void RemoveAlias( const wxString& aName );
319  LIB_ALIAS* RemoveAlias( LIB_ALIAS* aAlias );
320 
321  void RemoveAllAliases();
322 
323  wxArrayString& GetFootPrints() { return m_FootprintList; }
324 
334  const EDA_RECT GetUnitBoundingBox( int aUnit, int aConvert ) const;
335 
345  const EDA_RECT GetBodyBoundingBox( int aUnit, int aConvert ) const;
346 
347  const EDA_RECT GetBoundingBox() const override
348  {
349  return GetUnitBoundingBox( 0, 0 );
350  }
351 
361  bool SaveDateAndTime( OUTPUTFORMATTER& aFormatter );
362 
363  bool LoadDateAndTime( char* aLine );
364 
373  bool Save( OUTPUTFORMATTER& aFormatter );
374 
382  bool Load( LINE_READER& aReader, wxString& aErrorMsg );
383  bool LoadField( LINE_READER& aReader, wxString& aErrorMsg );
384  bool LoadDrawEntries( LINE_READER& aReader, wxString& aErrorMsg );
385  bool LoadAliases( char* aLine, wxString& aErrorMsg );
386  bool LoadFootprints( LINE_READER& aReader, wxString& aErrorMsg );
387 
388  bool IsPower() const { return m_options == ENTRY_POWER; }
389  bool IsNormal() const { return m_options == ENTRY_NORMAL; }
390 
391  void SetPower() { m_options = ENTRY_POWER; }
392  void SetNormal() { m_options = ENTRY_NORMAL; }
393 
394  void LockUnits( bool aLockUnits ) { m_unitsLocked = aLockUnits; }
395  bool UnitsLocked() const { return m_unitsLocked; }
396 
405  void SetFields( const std::vector <LIB_FIELD>& aFieldsList );
406 
415  void GetFields( LIB_FIELDS& aList );
416 
422  LIB_FIELD* FindField( const wxString& aFieldName );
423 
430  LIB_FIELD* GetField( int aId );
431 
434 
437 
440 
451  void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDc, const wxPoint& aOffset,
452  int aMulti, int aConvert,
453  const PART_DRAW_OPTIONS& aOpts );
454 
466  void Plot( PLOTTER* aPlotter, int aUnit, int aConvert, const wxPoint& aOffset,
467  const TRANSFORM& aTransform );
468 
479  void PlotLibFields( PLOTTER* aPlotter, int aUnit, int aConvert,
480  const wxPoint& aOffset, const TRANSFORM& aTransform );
481 
487  void AddDrawItem( LIB_ITEM* aItem );
488 
496  void RemoveDrawItem( LIB_ITEM* aItem, EDA_DRAW_PANEL* aPanel = NULL, wxDC* aDc = NULL );
497 
507  LIB_ITEM* GetNextDrawItem( LIB_ITEM* aItem = NULL, KICAD_T aType = TYPE_NOT_INIT );
508 
518  LIB_PIN* GetNextPin( LIB_PIN* aItem = NULL )
519  {
520  return (LIB_PIN*) GetNextDrawItem( (LIB_ITEM*) aItem, LIB_PIN_T );
521  }
522 
523 
537  void GetPins( LIB_PINS& aList, int aUnit = 0, int aConvert = 0 );
538 
549  LIB_PIN* GetPin( const wxString& aNumber, int aUnit = 0, int aConvert = 0 );
550 
564  bool PinsConflictWith( LIB_PART& aOtherPart, bool aTestNums, bool aTestNames,
565  bool aTestType, bool aTestOrientation, bool aTestLength );
566 
572  void SetOffset( const wxPoint& aOffset );
573 
578 
584  bool HasConversion() const;
585 
589  void ClearStatus();
590 
605  int SelectItems( EDA_RECT& aRect, int aUnit, int aConvert, bool aEditPinByPin );
606 
610  void ClearSelectedItems();
611 
619  void DeleteSelectedItems();
620 
624  void MoveSelectedItems( const wxPoint& aOffset );
625 
633  void CopySelectedItems( const wxPoint& aOffset );
634 
640  void MirrorSelectedItemsH( const wxPoint& aCenter );
641 
647  void MirrorSelectedItemsV( const wxPoint& aCenter );
648 
654  void RotateSelectedItems( const wxPoint& aCenter );
655 
665  LIB_ITEM* LocateDrawItem( int aUnit, int aConvert, KICAD_T aType, const wxPoint& aPoint );
666 
677  LIB_ITEM* LocateDrawItem( int aUnit, int aConvert, KICAD_T aType,
678  const wxPoint& aPoint, const TRANSFORM& aTransform );
679 
686  {
687  return m_drawings;
688  }
689 
700  void SetUnitCount( int count );
701 
702  int GetUnitCount() const { return m_unitCount; }
703 
709  bool IsMulti() const { return m_unitCount > 1; }
710 
720  static wxString SubReference( int aUnit, bool aAddSeparator = true );
721 
722  // Accessors to sub ref parameters
724 
728  static int* SubpartIdSeparatorPtr() { return &m_subpartIdSeparator; }
729 
730  static int GetSubpartFirstId() { return m_subpartFirstId; }
731 
734  static int* SubpartFirstIdPtr() { return &m_subpartFirstId; }
735 
745  static void SetSubpartIdNotation( int aSep, int aFirstId );
746 
758  void SetConversion( bool aSetConvert );
759 
767  void SetPinNameOffset( int aOffset ) { m_pinNameOffset = aOffset; }
768 
770 
776  void SetShowPinNames( bool aShow ) { m_showPinNames = aShow; }
777 
778  bool ShowPinNames() { return m_showPinNames; }
779 
785  void SetShowPinNumbers( bool aShow ) { m_showPinNumbers = aShow; }
786 
787  bool ShowPinNumbers() { return m_showPinNumbers; }
788 
789  bool operator==( const LIB_PART* aPart ) const { return this == aPart; }
790 
791 #if defined(DEBUG)
792  void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
793 #endif
794 };
795 
796 #endif // CLASS_LIBENTRY_H
LIB_ALIASES m_aliases
List of alias object pointers associated with the part.
PART_LIB * GetLib()
virtual ~LIB_ALIAS()
LIB_FIELD & GetFootprintField()
Return reference to the footprint field.
void SetLib(PART_LIB *aLibrary)
bool UnitsLocked() const
LIB_FIELD * GetField(int aId)
Return pointer to the requested field.
bool PinsConflictWith(LIB_PART &aOtherPart, bool aTestNums, bool aTestNames, bool aTestType, bool aTestOrientation, bool aTestLength)
Function PinsConflictWith returns true if this part's pins do not match another part's pins...
static int m_subpartIdSeparator
the separator char between the subpart id and the reference like U1A ( m_subpartIdSeparator = 0 ) or ...
Class LINE_READER is an abstract class from which implementation specific LINE_READERs may be derived...
Definition: richio.h:81
void Draw(EDA_DRAW_PANEL *aPanel, wxDC *aDc, const wxPoint &aOffset, int aMulti, int aConvert, const PART_DRAW_OPTIONS &aOpts)
Draw part.
const EDA_RECT GetUnitBoundingBox(int aUnit, int aConvert) const
Function GetBoundingBox.
Part library alias object definition.
bool PinIsDangling(size_t aPin) const
bool IsMulti() const
Function IsMulti.
void SetConversion(bool aSetConvert)
Set or clear the alternate body style (DeMorgan) for the part.
static int * SubpartFirstIdPtr()
return a reference to m_subpartFirstId, only for read/save setting functions
void SetPower()
virtual ~LIB_PART()
bool LoadFootprints(LINE_READER &aReader, wxString &aErrorMsg)
virtual wxString GetClass() const override
Function GetClass returns the class name.
int GetPinNameOffset()
bool Load(LINE_READER &aReader, wxString &aErrorMsg)
Load part definition from aReader.
bool HasConversion() const
Test if part has more than one body conversion type (DeMorgan).
bool m_showPinNumbers
Determines if part pin numbers are visible.
wxString description
documentation for info
bool IsPower() const
LIB_ALIAS * GetAlias(size_t aIndex)
MULTIVECTOR< LIB_ITEM, LIB_ARC_T, LIB_FIELD_T > LIB_ITEMS_CONTAINER
const EDA_RECT GetBoundingBox() const override
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
int m_unitCount
Number of units (parts) per package.
const wxString GetLibraryName()
LIB_ITEM * GetNextDrawItem(LIB_ITEM *aItem=NULL, KICAD_T aType=TYPE_NOT_INIT)
Return the next draw object pointer.
PART_LIB * m_library
Library the part belongs to if any.
bool operator<(const LIB_ALIAS &aItem1, const LIB_ALIAS &aItem2)
Class LIB_FIELD is used in symbol libraries.
Definition: lib_field.h:60
std::weak_ptr< LIB_PART > PART_REF
weak pointer to LIB_PART
static int m_subpartFirstId
the ascii char value to calculate the subpart symbol id from the part number: only 'A'...
const EDA_RECT GetBodyBoundingBox(int aUnit, int aConvert) const
Function GetBodyBoundingBox.
bool HasAlias(const wxString &aName) const
Test if alias aName is in part alias list.
LIB_ITEMS_CONTAINER m_drawings
Drawing items of this part.
bool LoadDrawEntries(LINE_READER &aReader, wxString &aErrorMsg)
LIB_FIELD & GetValueField()
Return reference to the value field.
const LIB_ID & GetLibId() const
Class OUTPUTFORMATTER is an important interface (abstract class) used to output 8 bit text in a conve...
Definition: richio.h:327
LIB_ALIAS(const wxString &aName, LIB_PART *aRootComponent)
std::vector< LIB_ALIAS * > LIB_ALIASES
void ClearSelectedItems()
Clears all the draw items marked by a block select.
A logical library item identifier and consists of various portions much like a URI.
Definition: lib_id.h:51
void AddAlias(const wxString &aName)
Function AddAlias.
size_t GetAliasCount() const
LIBRENTRYOPTIONS m_options
Special part features such as POWER or NORMAL.)
PART_LIB * GetLib()
void SetDocFileName(const wxString &aDocFileName)
bool draw_hidden_fields
Whether to draw "hidden" fields.
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
bool m_unitsLocked
True if part has multiple units and changing one unit does not automatically change another unit...
Class LIB_ITEM is the base class for drawable items used by schematic library components.
Definition: lib_draw_item.h:67
LIB_ITEMS_CONTAINER::ITEM_PTR_VECTOR LIB_ITEMS
void MirrorSelectedItemsH(const wxPoint &aCenter)
Horizontally (X axis) mirror selected draw items about a point.
wxString name
void PlotLibFields(PLOTTER *aPlotter, int aUnit, int aConvert, const wxPoint &aOffset, const TRANSFORM &aTransform)
Plot Lib Fields only of the part to plotter.
void SetOffset(const wxPoint &aOffset)
Move the part aOffset.
void MirrorSelectedItemsV(const wxPoint &aCenter)
Vertically (Y axis) mirror selected draw items about a point.
int LibraryEntryCompare(const LIB_ALIAS *aItem1, const LIB_ALIAS *aItem2)
std::vector< bool > dangling
which pins should display as dangling, or empty for All
bool LoadDateAndTime(char *aLine)
void AddDrawItem(LIB_ITEM *aItem)
Add a new draw aItem to the draw object list.
int m_pinNameOffset
The offset in mils to draw the pin name.
void GetPins(LIB_PINS &aList, int aUnit=0, int aConvert=0)
Return a list of pin object pointers from the draw item list.
bool ShowPinNames()
void deleteAllFields()
bool IsRoot() const
static int GetSubpartIdSeparator()
void SetName(const wxString &aName)
bool ShowPinNumbers()
bool LoadField(LINE_READER &aReader, wxString &aErrorMsg)
Class for tranforming drawing coordinates for a wxDC device context.
Definition: transform.h:45
LIB_FIELD & GetReferenceField()
Return reference to the reference designator field.
virtual wxString GetClass() const override
Function GetClass returns the class name.
void Plot(PLOTTER *aPlotter, int aUnit, int aConvert, const wxPoint &aOffset, const TRANSFORM &aTransform)
Plot lib part to plotter.
bool operator!=(const wxChar *aName) const
LIB_FIELD * FindField(const wxString &aFieldName)
Function FindField finds a field within this part matching aFieldName and returns it or NULL if not f...
bool Save(OUTPUTFORMATTER &aFormatter)
Function Save writes the data structures out to aFormatter in the part library "*.lib" format.
static int GetSubpartFirstId()
void SetUnitCount(int count)
Set the units per part count.
wxString docFileName
Associate doc file name.
GR_DRAWMODE
Drawmode. Compositing mode plus a flag or two.
Definition: gr_basic.h:41
void CopySelectedItems(const wxPoint &aOffset)
Make a copy of the selected draw items marked by a block select.
const wxString & GetName() const
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
LIB_PART * shared
Actual LIB_PART referenced by [multiple] aliases.
void RotateSelectedItems(const wxPoint &aCenter)
Rotate CCW selected draw items about a point.
std::shared_ptr< LIB_PART > PART_SPTR
shared pointer to LIB_PART
wxString GetDescription() const
PART_SPTR SharedPtr()
bool operator==(const wxChar *aName) const
KEEPCASE sensitive comparison of the part entry name.
Class LIB_PART defines a library part object.
static PART_DRAW_OPTIONS Default()
void RemoveDuplicateDrawItems()
Remove duplicate draw items from list.
wxArrayString m_FootprintList
List of suitable footprint names for the part (wild card names accepted).
LIB_PART(const wxString &aName, PART_LIB *aLibrary=NULL)
void SetDescription(const wxString &aDescription)
LIB_ID m_libId
bool operator==(const LIB_PART *aPart) const
const wxString GetLibraryName()
LIB_PART * GetPart() const
Function GetPart gets the shared LIB_PART.
int GetUnitCount() const
LIB_PIN * GetNextPin(LIB_PIN *aItem=NULL)
Return the next pin object from the draw list.
Base plotter engine class.
Definition: class_plotter.h:97
wxString GetDocFileName() const
#define GR_DEFAULT_DRAWMODE
Definition: general.h:70
void SetAliases(const wxArrayString &aAliasList)
std::vector< LIB_PIN * > LIB_PINS
Helper for defining a list of pin object pointers.
Definition: lib_draw_item.h:60
bool LoadAliases(char *aLine, wxString &aErrorMsg)
bool SaveDoc(OUTPUTFORMATTER &aFormatter)
Function SaveDocs write the entry document information to aFormatter in "*.dcm" format.
void ClearStatus()
Clears the status flag all draw objects in this part.
TRANSFORM DefaultTransform
Definition: eeschema.cpp:58
GR_DRAWMODE draw_mode
Device context drawing mode, see wxDC.
int SelectItems(EDA_RECT &aRect, int aUnit, int aConvert, bool aEditPinByPin)
Checks all draw objects of part to see if they are with block.
void RemoveAlias(const wxString &aName)
COLOR4D color
Color to draw part in.
void RemoveAllAliases()
const wxChar traceSchLibMem[]
Flag to enable schematic library memory deletion debug output.
const wxString & GetName() const
void SetShowPinNumbers(bool aShow)
Set or clear the pin number visibility flag.
void SetKeyWords(const wxString &aKeyWords)
static void SetSubpartIdNotation(int aSep, int aFirstId)
Set the separator char between the subpart id and the reference 0 (no separator) or '...
std::vector< LIB_FIELD > LIB_FIELDS
Definition: lib_field.h:261
wxArrayString GetAliasNames(bool aIncludeRoot=true) const
Class EDA_RECT handles the component boundary box.
static wxString SubReference(int aUnit, bool aAddSeparator=true)
Function SubReference.
bool show_pin_text
Whether to show pin texts.
bool operator==(const LIB_ALIAS *aAlias) const
LIBRENTRYOPTIONS
static int * SubpartIdSeparatorPtr()
return a reference to m_subpartIdSeparator, only for read/save setting functions
void RemoveDrawItem(LIB_ITEM *aItem, EDA_DRAW_PANEL *aPanel=NULL, wxDC *aDc=NULL)
Remove draw aItem from list.
bool only_selected
Draws only the body items that are selected, for block moves.
wxArrayString & GetFootPrints()
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:165
boost::ptr_vector< LIB_ITEM > ITEM_PTR_VECTOR
Helper for defining a list of library draw object pointers.
Definition: multivector.h:51
bool show_elec_type
Whether to show the pin electrical type.
long m_dateModified
Date the part was last modified.
void MoveSelectedItems(const wxPoint &aOffset)
Move the selected draw items marked by a block select.
LIB_ITEM * LocateDrawItem(int aUnit, int aConvert, KICAD_T aType, const wxPoint &aPoint)
Locate a draw object.
virtual void SetName(const wxString &aName)
bool draw_visible_fields
Whether to draw "visible" fields.
void DeleteSelectedItems()
Deletes the select draw items marked by a block select.
void SetShowPinNames(bool aShow)
Set or clear the pin name visibility flag.
void SetPinNameOffset(int aOffset)
Set the offset in mils of the pin name text from the pin symbol.
bool m_showPinNames
Determines if part pin names are visible.
void SetFields(const std::vector< LIB_FIELD > &aFieldsList)
Function SetFields overwrites all the existing in this part with fields supplied in aFieldsList...
Class PART_LIB is used to load, save, search, and otherwise manipulate part library files...
wxString GetKeyWords() const
TRANSFORM transform
Coordinate adjustment settings.
wxString keyWords
keyword list (used for search for parts by keyword)
bool IsNormal() const
void GetFields(LIB_FIELDS &aList)
Function GetFields returns a list of fields withing this part.
LIB_PIN * GetPin(const wxString &aNumber, int aUnit=0, int aConvert=0)
Return pin object with the requested pin aNumber.
void LockUnits(bool aLockUnits)
bool SaveDateAndTime(OUTPUTFORMATTER &aFormatter)
Function SaveDateAndTime write the date and time of part to aFile in the format: "Ti yy/mm/jj hh:mm:s...
void SetNormal()
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
PART_SPTR m_me
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared ...