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-2017 Wayne Stambaugh <stambaughw@verizon.net>
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 <memory>
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;
52 
53 
54 /* values for member .m_options */
56 {
57  ENTRY_NORMAL, // Libentry is a standard part (real or alias)
58  ENTRY_POWER // Libentry is a power symbol
59 };
60 
61 
63 extern const wxChar traceSchLibMem[];
64 
65 
75 class LIB_ALIAS : public EDA_ITEM
76 {
85 
86  friend class LIB_PART;
87 
88 protected:
89  wxString name;
90  wxString description;
91  wxString keyWords;
92  wxString docFileName;
93 
94 public:
95  LIB_ALIAS( const wxString& aName, LIB_PART* aRootComponent );
96  LIB_ALIAS( const LIB_ALIAS& aAlias, LIB_PART* aRootComponent = NULL );
97 
98  virtual ~LIB_ALIAS();
99 
100  virtual wxString GetClass() const override
101  {
102  return wxT( "LIB_ALIAS" );
103  }
104 
112  LIB_PART* GetPart() const
113  {
114  return shared;
115  }
116 
117  const wxString GetLibraryName();
118 
119  bool IsRoot() const;
120 
121  PART_LIB* GetLib();
122 
123  const wxString& GetName() const { return name; }
124 
125  void SetName( const wxString& aName ) { name = aName; }
126 
127  void SetDescription( const wxString& aDescription )
128  {
129  description = aDescription;
130  }
131 
132  wxString GetDescription() const { return description; }
133 
134  void SetKeyWords( const wxString& aKeyWords )
135  {
136  keyWords = aKeyWords;
137  }
138 
139  wxString GetKeyWords() const { return keyWords; }
140 
141  void SetDocFileName( const wxString& aDocFileName )
142  {
143  docFileName = aDocFileName;
144  }
145 
146  wxString GetDocFileName() const { return docFileName; }
147 
155  bool SaveDoc( OUTPUTFORMATTER& aFormatter );
156 
160  bool operator==( const wxChar* aName ) const;
161  bool operator!=( const wxChar* aName ) const
162  {
163  return !( *this == aName );
164  }
165 
166  bool operator==( const LIB_ALIAS* aAlias ) const { return this == aAlias; }
167 
168 #if defined(DEBUG)
169  void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
170 #endif
171 };
172 
173 extern bool operator<( const LIB_ALIAS& aItem1, const LIB_ALIAS& aItem2 );
174 
175 extern int LibraryEntryCompare( const LIB_ALIAS* aItem1, const LIB_ALIAS* aItem2 );
176 
177 
179 {
187  std::vector<bool> dangling;
189 
191  {
192  PART_DRAW_OPTIONS def;
194  def.color = COLOR4D::UNSPECIFIED;
196  def.show_pin_text = true;
197  def.draw_visible_fields = true;
198  def.draw_hidden_fields = true;
199  def.only_selected = false;
200  def.show_elec_type = false;
201  return def;
202  }
203 
204  bool PinIsDangling( size_t aPin ) const
205  {
206  if( aPin < dangling.size() )
207  return dangling[aPin];
208  else
209  return true;
210  }
211 };
212 
213 
221 class LIB_PART : public EDA_ITEM
222 {
223  friend class PART_LIB;
224  friend class LIB_ALIAS;
226 
228  wxString m_name;
231  bool m_unitsLocked;
233  bool m_showPinNames;
240  wxArrayString m_FootprintList;
245 
246  static int m_subpartIdSeparator;
247  static int m_subpartFirstId;
250 private:
253  void deleteAllFields();
254 
255  // LIB_PART() { } // not legal
256 
257 public:
258 
259  LIB_PART( const wxString& aName, PART_LIB* aLibrary = NULL );
260  LIB_PART( LIB_PART& aPart, PART_LIB* aLibrary = NULL );
261 
262  virtual ~LIB_PART();
263 
265  {
266  // clone a shared pointer
267  return m_me;
268  }
269 
270  virtual wxString GetClass() const override
271  {
272  return wxT( "LIB_PART" );
273  }
274 
275  virtual void SetName( const wxString& aName );
276 
277  const wxString& GetName() const { return m_name; }
278 
279  const LIB_ID& GetLibId() const { return m_libId; }
280  void SetLibId( const LIB_ID& aLibId ) { m_libId = aLibId; }
281 
282  const wxString GetLibraryName();
283 
284  PART_LIB* GetLib() { return m_library; }
285 
286  void SetLib( PART_LIB* aLibrary ) { m_library = aLibrary; }
287 
288  wxArrayString GetAliasNames( bool aIncludeRoot = true ) const;
289 
290  size_t GetAliasCount() const { return m_aliases.size(); }
291 
292  LIB_ALIAS* GetAlias( size_t aIndex );
293 
294  LIB_ALIAS* GetAlias( const wxString& aName );
295 
306  void AddAlias( const wxString& aName );
307 
316  bool HasAlias( const wxString& aName ) const;
317 
318  void SetAliases( const wxArrayString& aAliasList );
319 
320  void RemoveAlias( const wxString& aName );
321  LIB_ALIAS* RemoveAlias( LIB_ALIAS* aAlias );
322 
323  void RemoveAllAliases();
324 
325  wxArrayString& GetFootPrints() { return m_FootprintList; }
326 
336  const EDA_RECT GetUnitBoundingBox( int aUnit, int aConvert ) const;
337 
347  const EDA_RECT GetBodyBoundingBox( int aUnit, int aConvert ) const;
348 
349  const EDA_RECT GetBoundingBox() const override
350  {
351  return GetUnitBoundingBox( 0, 0 );
352  }
353 
363  bool SaveDateAndTime( OUTPUTFORMATTER& aFormatter );
364 
365  bool LoadDateAndTime( char* aLine );
366 
375  bool Save( OUTPUTFORMATTER& aFormatter );
376 
384  bool Load( LINE_READER& aReader, wxString& aErrorMsg );
385  bool LoadField( LINE_READER& aReader, wxString& aErrorMsg );
386  bool LoadDrawEntries( LINE_READER& aReader, wxString& aErrorMsg );
387  bool LoadAliases( char* aLine, wxString& aErrorMsg );
388  bool LoadFootprints( LINE_READER& aReader, wxString& aErrorMsg );
389 
390  bool IsPower() const { return m_options == ENTRY_POWER; }
391  bool IsNormal() const { return m_options == ENTRY_NORMAL; }
392 
393  void SetPower() { m_options = ENTRY_POWER; }
394  void SetNormal() { m_options = ENTRY_NORMAL; }
395 
396  void LockUnits( bool aLockUnits ) { m_unitsLocked = aLockUnits; }
397  bool UnitsLocked() const { return m_unitsLocked; }
398 
407  void SetFields( const std::vector <LIB_FIELD>& aFieldsList );
408 
417  void GetFields( LIB_FIELDS& aList );
418 
424  LIB_FIELD* FindField( const wxString& aFieldName );
425 
432  LIB_FIELD* GetField( int aId );
433 
436 
439 
450  void Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDc, const wxPoint& aOffset,
451  int aMulti, int aConvert,
452  const PART_DRAW_OPTIONS& aOpts );
453 
465  void Plot( PLOTTER* aPlotter, int aUnit, int aConvert, const wxPoint& aOffset,
466  const TRANSFORM& aTransform );
467 
478  void PlotLibFields( PLOTTER* aPlotter, int aUnit, int aConvert,
479  const wxPoint& aOffset, const TRANSFORM& aTransform );
480 
486  void AddDrawItem( LIB_ITEM* aItem );
487 
495  void RemoveDrawItem( LIB_ITEM* aItem, EDA_DRAW_PANEL* aPanel = NULL, wxDC* aDc = NULL );
496 
506  LIB_ITEM* GetNextDrawItem( LIB_ITEM* aItem = NULL, KICAD_T aType = TYPE_NOT_INIT );
507 
517  LIB_PIN* GetNextPin( LIB_PIN* aItem = NULL )
518  {
519  return (LIB_PIN*) GetNextDrawItem( (LIB_ITEM*) aItem, LIB_PIN_T );
520  }
521 
522 
536  void GetPins( LIB_PINS& aList, int aUnit = 0, int aConvert = 0 );
537 
548  LIB_PIN* GetPin( const wxString& aNumber, int aUnit = 0, int aConvert = 0 );
549 
563  bool PinsConflictWith( LIB_PART& aOtherPart, bool aTestNums, bool aTestNames,
564  bool aTestType, bool aTestOrientation, bool aTestLength );
565 
571  void SetOffset( const wxPoint& aOffset );
572 
577 
583  bool HasConversion() const;
584 
588  void ClearStatus();
589 
604  int SelectItems( EDA_RECT& aRect, int aUnit, int aConvert, bool aEditPinByPin );
605 
609  void ClearSelectedItems();
610 
618  void DeleteSelectedItems();
619 
623  void MoveSelectedItems( const wxPoint& aOffset );
624 
632  void CopySelectedItems( const wxPoint& aOffset );
633 
639  void MirrorSelectedItemsH( const wxPoint& aCenter );
640 
646  void MirrorSelectedItemsV( const wxPoint& aCenter );
647 
653  void RotateSelectedItems( const wxPoint& aCenter );
654 
664  LIB_ITEM* LocateDrawItem( int aUnit, int aConvert, KICAD_T aType, const wxPoint& aPoint );
665 
676  LIB_ITEM* LocateDrawItem( int aUnit, int aConvert, KICAD_T aType,
677  const wxPoint& aPoint, const TRANSFORM& aTransform );
678 
685 
696  void SetUnitCount( int count );
697 
698  int GetUnitCount() const { return m_unitCount; }
699 
705  bool IsMulti() const { return m_unitCount > 1; }
706 
716  static wxString SubReference( int aUnit, bool aAddSeparator = true );
717 
718  // Accessors to sub ref parameters
720 
724  static int* SubpartIdSeparatorPtr() { return &m_subpartIdSeparator; }
725 
726  static int GetSubpartFirstId() { return m_subpartFirstId; }
727 
730  static int* SubpartFirstIdPtr() { return &m_subpartFirstId; }
731 
741  static void SetSubpartIdNotation( int aSep, int aFirstId );
742 
754  void SetConversion( bool aSetConvert );
755 
763  void SetPinNameOffset( int aOffset ) { m_pinNameOffset = aOffset; }
764 
766 
772  void SetShowPinNames( bool aShow ) { m_showPinNames = aShow; }
773 
774  bool ShowPinNames() { return m_showPinNames; }
775 
781  void SetShowPinNumbers( bool aShow ) { m_showPinNumbers = aShow; }
782 
783  bool ShowPinNumbers() { return m_showPinNumbers; }
784 
785  bool operator==( const LIB_PART* aPart ) const { return this == aPart; }
786 
787 #if defined(DEBUG)
788  void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
789 #endif
790 };
791 
792 #endif // CLASS_LIBENTRY_H
LIB_ALIASES m_aliases
List of alias object pointers associated with the part.
PART_LIB * GetLib()
virtual ~LIB_ALIAS()
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)
LIB_ITEMS & GetDrawItemList()
Return a reference to the draw item list.
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)
const wxChar traceSchLibMem[]
WXTRACE value to enable schematic library memory deletion debug output.
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.
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.
Class LIB_ID.
Definition: lib_id.h:56
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:90
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:77
void MirrorSelectedItemsH(const wxPoint &aCenter)
Horizontally (X axis) mirror selected draw items about a point.
Class SCH_LEGACY_PLUGIN_CACHE is a cache assistant for the part library portion of the SCH_PLUGIN API...
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...
wxString m_name
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_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.
boost::ptr_vector< LIB_ITEM > LIB_ITEMS
Helper for defining a list of library draw object pointers.
Definition: lib_draw_item.h:63
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: plot_common.h:86
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:70
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:57
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.
LIB_ITEMS drawings
How to draw this part.
void RemoveAllAliases()
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:151
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
void SetLibId(const LIB_ID &aLibId)
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 ...