MikroCAD SDK Library
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
MeasProgram.h
Go to the documentation of this file.
1 /**
2 * @file MeasProgram.h
3 * @brief Measurement programs
4 *
5 * @author LMI Technologies
6 */
7 
8 #ifndef _MeasProgram_h
9 #define _MeasProgram_h
10 
11 #include "Windows.h"
12 #include "DataFilter.h"
13 #include "MeasurementDefs.h"
14 #include "IniFiles.h"
15 #include "FileFunc.h"
16 #include <string>
17 #include <vector>
18 
19 using namespace std;
20 
21 /**
22 Maximum measurement program name
23 */
24 #define MEAS_PROG_NAME_LENGTH 255
25 
26 /**
27 Abstract base struct
28 */
30 {
31  MeasurementMode m_MeasurementMode; /**< Measurement mode */
32  unsigned long m_dwVersion; /**< Version number */
33 
35  {
36  m_MeasurementMode = MeasurementMode_None;
37  m_dwVersion = 0;
38  };
39 
40  virtual void Assign(TMeasurementParameter* pParameter) = 0;
41 
42  virtual bool FromBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize) = 0;
43 
44  virtual bool ToBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize) = 0;
45 
46  virtual unsigned long GetBufferSize() = 0;
47 
48  virtual bool FromIniFile(CIniFile *pIniFile, int nIndex = -1) = 0;
49 
50  virtual bool ToIniFile(CIniFile *pIniFile, int nIndex = -1) = 0;
51 
52  virtual bool IsEqual(TMeasurementParameter *pMeasurementParameter)
53  {
54  return pMeasurementParameter != NULL && m_MeasurementMode == pMeasurementParameter->m_MeasurementMode;
55  };
56 };
57 
58 /**
59 Phase shift parameter
60 */
62 {
63  long m_lPhaseShiftNumImg; /**< Phase shift - number of images */
64  long m_lPhaseShiftStripesWidth; /**< Phase shift - stripes width */
65 
67  {
68  m_lPhaseShiftNumImg = m_lPhaseShiftStripesWidth = 0;
69  };
70 
71  bool FromBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
72 
73  bool ToBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
74 
75  static unsigned long GetBufferSize()
76  {
77  return 2 * sizeof(long);
78  };
79 
80  bool FromIniFile(CIniFile *pIniFile, int nPhaseShiftIndex, int nIndex = -1);
81 
82  bool ToIniFile(CIniFile *pIniFile, int nPhaseShiftIndex, int nIndex = -1);
83 
85  {
86  if (&Item == this)
87  return *this;
88 
89  m_lPhaseShiftNumImg = Item.m_lPhaseShiftNumImg;
90  m_lPhaseShiftStripesWidth = Item.m_lPhaseShiftStripesWidth;
91 
92  return *this;
93  };
94 
95  bool operator ==(const TMeasurementParameterPhaseShiftItem& Item)
96  {
97  return m_lPhaseShiftNumImg == Item.m_lPhaseShiftNumImg && m_lPhaseShiftStripesWidth
99  };
100 };
101 
102 
103 /**
104 Measurement program with Gray code + phase shift
105 */
107 {
108  long m_lGrayCodeStart; /**< Gray code stripes width start */
109  long m_lGrayCodeNumPlanes; /**< Gray code number of planes */
110  vector<TMeasurementParameterPhaseShiftItem> m_PhaseShiftList; /**< Phase shift list */
111 
113  {
114  m_MeasurementMode = MeasurementMode_GrayCodePhaseShift;
115  m_lGrayCodeStart = m_lGrayCodeNumPlanes = 0;
116  };
117 
118  virtual void Assign(TMeasurementParameter* pParameter);
119 
120  virtual bool FromBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
121 
122  virtual bool ToBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
123 
124  virtual unsigned long GetBufferSize();
125 
126  virtual bool FromIniFile(CIniFile *pIniFile, int nIndex = -1);
127 
128  virtual bool ToIniFile(CIniFile *pIniFile, int nIndex = -1);
129 
130  virtual bool IsEqual(TMeasurementParameter *pMeasurementParameter);
131 
132 private:
133 
134  TMeasurementParameterPhaseShiftItem m_PhaseShiftItem;
135 };
136 
137 /**
138 Measurement program with phase shift only
139 */
141 {
142  vector<TMeasurementParameterPhaseShiftItem> m_PhaseShiftList; /**< Phase shift list */
143 
145  {
146  m_MeasurementMode = MeasurementMode_PhaseShift;
147  };
148 
149  virtual void Assign(TMeasurementParameter* pParameter);
150 
151  virtual bool FromBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
152 
153  virtual bool ToBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
154 
155  virtual unsigned long GetBufferSize();
156 
157  virtual bool FromIniFile(CIniFile *pIniFile, int nIndex = -1);
158 
159  virtual bool ToIniFile(CIniFile *pIniFile, int nIndex = -1);
160 
161  virtual bool IsEqual(TMeasurementParameter *pMeasurementParameter);
162 
163 private:
164 
165  TMeasurementParameterPhaseShiftItem m_PhaseShiftItem;
166 };
167 
168 /**
169 Measurement parameter phase code
170 */
172 {
174  {
175  };
176 };
177 
178 /**
179 Measurement parameter set
180 */
182 {
183  TMeasurementParameter *m_pParameter;
184 
186  {
187  m_pParameter = NULL;
188  };
190  {
191  m_pParameter = NULL;
192  CreateParameter(Mode);
193  };
194 
195  virtual ~TMeasurementParameterSet()
196  {
197  if (m_pParameter)
198  delete m_pParameter;
199  };
200 
201  void Assign(TMeasurementParameter* pParameter);
202 
203  bool CreateParameter(MeasurementMode Mode);
204 
205  bool FromBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
206 
207  bool ToBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
208 
209  unsigned long GetBufferSize();
210 
211  bool FromIniFile(CIniFile *pIniFile, int nIndex = -1);
212 
213  bool ToIniFile(CIniFile *pIniFile, int nIndex = -1);
214 
215  bool IsEqual(TMeasurementParameterSet* pSet);
216 };
217 
218 /**
219 Measurement program class
220 */
222 {
223 public:
224 
225  /**
226  Constructor
227  */
229  {
230  m_dwThesholdPowerSpectrum = 10;
231  };
232 
233  /**
234  Destructor
235  */
236  virtual ~CMeasProgram() {};
237 
238  /**
239  Sets the measurement parameter
240 
241  @param MeasMode Measurement mode
242  @param pParameter Pointer to measurement parameter (typ depends on measurement mode)
243  @return Error code
244  */
245  long SetMeasurementParameter(MeasurementMode MeasMode, void* pParameter);
246 
247  /**
248  Adds a prefilter parameter set to the list
249 
250  @param FilterType Filter type
251  @param pParameter Pointer to prefilter parameter (type depends on filter type)
252  @param bClear Delete list
253  @return Error code
254  */
255  long AddPreFilterParameter(MeasurementPreFilterType FilterType, void* pParameter, bool bClear = false);
256 
257  /**
258  Read from buffer
259 
260  @param pbyBuffer Pointer to buffer (Pointer will incremented)
261  @param dwCurrBufferSize Current buffer size (will decremented)
262  @return Success
263  */
264  bool FromBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
265 
266  /**
267  Write to buffer
268 
269  @param pbyBuffer Pointer to buffer (Pointer will incremented)
270  @param dwCurrBufferSize Current buffer size (will decremented)
271  @return Success
272  */
273  bool ToBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
274 
275  /**
276  Returns the buffer size in bytes
277  */
278  unsigned long GetBufferSize();
279 
280  /**
281  Returns a pointer to measurement parameter
282  */
284  {
285  return &m_MeasParameter;
286  };
287 
288  /**
289  Returns a pointer to prefilter parameter
290  */
292  {
293  return &m_PreFilter;
294  };
295 
296  /**
297  Sets threshold for power spectrum
298 
299  @param dwThres Threshold (1...200)
300  */
301  void SetThesholdPowerSpectrum(unsigned long dwThres)
302  {
303  if (dwThres < 1)
304  dwThres = 1;
305  if (dwThres > 200)
306  dwThres = 200;
307  m_dwThesholdPowerSpectrum = dwThres;
308  };
309 
310  /**
311  Returns threshold for power spectrum
312  */
313  unsigned long GetThesholdPowerSpectrum()
314  {
315  return m_dwThesholdPowerSpectrum;
316  };
317 
318  /**
319  Assign from an other measurement program
320  */
321  void Assign(CMeasProgram* pMeasProg);
322 
323  /**
324  Sets the default parameters
325  */
326  void SetDefaults();
327 
328  /**
329  Read settings from INI file
330 
331  @param pIniFile Pointer to INI file structure
332  @param nIndex Index in measurement program list, < 0 default measprogram
333  @return Success
334  */
335  bool FromIniFile(CIniFile* pIniFile, int nIndex = -1);
336 
337  /**
338  Write settings to INI file
339 
340  @param pIniFile Pointer to INI file structure
341  @param nIndex Index in measurement program list, < 0 default measprogram
342  @return: Success - true
343  */
344  bool ToIniFile(CIniFile* pIniFile, int nIndex = -1);
345 
346  /**
347  Test equality
348 
349  @param pMeasProg Pointer to an other data set
350  @return: Equality
351  */
352  bool IsEqual(CMeasProgram* pMeasProg);
353 
354 private:
355 
356  TMeasurementParameterSet m_MeasParameter;
357  TDataAcquPreFilterSetData m_PreFilter;
358  unsigned long m_dwThesholdPowerSpectrum;
359 };
360 
361 /**
362 Measurement program list item
363 */
365 {
366  CMeasProgram *m_pMeasProgram; /**< Pointer to measurement program */
367  string m_stMeasProgramName; /**< Measurement program name */
368 
370  {
371  m_pMeasProgram = new CMeasProgram;
372  m_stMeasProgramName = "";
373  };
374  TMeasProgListItem(string stMeasProgramName);
375  TMeasProgListItem(string stMeasProgramName, CMeasProgram *pMeasProgram);
376 
377  virtual ~TMeasProgListItem();
378 
379  void Assign(TMeasProgListItem* pMeasProg);
380 };
381 
382 typedef vector<TMeasProgListItem*> TMeasProgList;
383 
384 /**
385 Measurement program set class
386 */
388 {
389 public:
390 
391  /**
392  Constructor
393  */
395  {
396  m_lCurrMeasProgIndex = -1;
397  m_DefMeasProg.SetDefaults();
398  m_dwVersion = 0;
399  m_byOnSensor = 1;
400  };
401 
402  /**
403  Destructor
404  */
406  {
407  Clear();
408  };
409 
410  /**
411  Deletes all measurement programs
412  */
413  void Clear();
414 
415  /**
416  Adds a new measurement programs
417 
418  @param stMeasProgName Measurement program name (not case sensitive)
419  @return Error code
420  */
421  long AddMeasurementProgram(string stMeasProgName);
422 
423  /**
424  Selects the current measurement program
425 
426  @param stMeasProgName Measurement program name (not case sensitive) - "" - default program
427  @return Error code
428  */
429  long SelectCurrentMeasurementProgram(string stMeasProgName = "");
430 
431  /**
432  Get current measurement program index (< 0 - Default measurement program)
433  */
435  {
436  return m_lCurrMeasProgIndex;
437  };
438 
439  /**
440  Get current measurement program ("" - Default measurement program)
441  */
443  {
444  return m_lCurrMeasProgIndex >= 0 ? GetParameterSetName((unsigned long)m_lCurrMeasProgIndex) : "";
445  };
446 
447  /**
448  Deletes a new measurement programs
449 
450  @param stMeasProgName Measurement program name (not case sensitive)
451  */
452  void DeleteMeasurementProgram(string stMeasProgName);
453 
454  /**
455  Sets the measurement parameter
456 
457  @param stMeasProgName Measurement program name (not case sensitive)
458  @param MeasMode Measurement mode
459  @param pParameter Pointer to measurement parameter (typ depends on measurement mode)
460  @return Error code
461  */
462  long SetMeasurementParameter(string stMeasProgName, MeasurementMode MeasMode, void* pParameter);
463 
464  /**
465  Sets the measurement parameter for the default set
466 
467  @param MeasMode Measurement mode
468  @param pParameter Pointer to measurement parameter (typ depends on measurement mode)
469  @return Error code
470  */
471  long SetMeasurementParameterDef(MeasurementMode MeasMode, void* pParameter);
472 
473  /**
474  Adds a prefilter parameter set to the list
475 
476  @param stMeasProgName Measurement program name (not case sensitive)
477  @param FilterType Filter type
478  @param pParameter Pointer to prefilter parameter (typ depends on filter type)
479  @param bClear Delete list?
480  @return Error code
481  */
482  long AddPreFilterParameter(string stMeasProgName, MeasurementPreFilterType FilterType, void* pParameter,
483  bool bClear = false);
484 
485  /**
486  Adds a prefilter parameter set to the default set list
487 
488  @param FilterType Filter type
489  @param pParameter Pointer to prefilter parameter (typ depends on filter type)
490  @param bClear Delete list?
491  @return Error code
492  */
493  long AddPreFilterParameterDef(MeasurementPreFilterType FilterType, void* pParameter, bool bClear = false);
494 
495  /**
496  Read from buffer
497  pbyBuffer - Pointer to buffer (Pointer will incremented !!!)
498  dwCurrBufferSize - Current buffer size (will decremented)
499  @return Success - true
500  */
501  bool FromBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
502 
503  /**
504  Write to buffer
505 
506  @param pbyBuffer Pointer to buffer (Pointer will incremented)
507  @param dwCurrBufferSize Current buffer size (will decremented)
508  @return Success - true
509  */
510  bool ToBuffer(PBYTE& pbyBuffer, DWORD& dwCurrBufferSize);
511 
512  /**
513  Returns the buffer size in byte
514  */
515  unsigned long GetBufferSize();
516 
517  /**
518  Returns the number of measurement parameter sets
519  */
520  unsigned long GetNumParameterSets();
521 
522  /**
523  Returns the name of the measurement parameter set on index
524  */
525  string GetParameterSetName(unsigned long dwIndex);
526 
527  /**
528  Returns a pointer to measurement parameter
529  stMeasProgName - Measurement program name (not case sensitive) - "" - selected program
530  */
531  TMeasurementParameterSet* GetMeasurementParameter(string stMeasProgName = "");
532 
533  /**
534  Returns a pointer to prefilter parameter
535 
536  @param stMeasProgName Measurement program name (not case sensitive) - "" - selected program
537  */
538  TDataAcquPreFilterSetData* GetPreFilterParameter(string stMeasProgName = "");
539 
540  /**
541  Sets threshold for power spectrum
542  @param dwThres Threshold (1...200)
543  @param stMeasProgName Measurement program name (not case sensitive) - "" - selected program
544  */
545  void SetThesholdPowerSpectrum(unsigned long dwThres, string stMeasProgName = "");
546 
547  /**
548  Returns threshold for power spectrum
549  @param stMeasProgName Measurement program name (not case sensitive) - "" - selected program
550  */
551  unsigned long GetThesholdPowerSpectrum(string stMeasProgName = "");
552 
553  /**
554  Which measuring program is identical to the default measuring program
555 
556  @return Measurement program name or -1, if no measurement program is identical
557  */
558  string GetDefaultMeasProgramName();
559 
560  /**
561  Height image calculation on sensor or sensor DLL if possible. Always true for normal cases, false for development or tests
562 
563  @return True if height image calculation is done on the sensor, otherwise false
564  */
566  {
567  return m_byOnSensor != 0;
568  };
569 
570  /**
571  Set height image calculation on sensor or sensor DLL if possible. For development or tests.
572 
573  @param bOnSenor True if height image calculation is done on the sensor, otherwise false
574  */
575  void SetOnSensorFlag(bool bOnSenor)
576  {
577  m_byOnSensor = bOnSenor ? 1 : 0;
578  };
579 
580  /**
581  Read settings from INI file, filename is default ini file name
582 
583  @return Success
584  */
585  bool FromIniFile();
586 
587  /**
588  Read settings from INI file, filename is default ini file name
589 
590  @param stIniFileName Ini file name (with path)
591  @return Success
592  */
593  bool FromIniFile(string stIniFileName);
594 
595  /**
596  Write settings to INI file, filename is default ini file name
597 
598  @return Success
599  */
600  bool ToIniFile();
601 
602  /**
603  Write settings to INI file, filename is default ini file name
604 
605  @param stIniFileName - Ini file name (with path)
606  @return Success
607  */
608  bool ToIniFile(string stIniFileName);
609 
610  /**
611  Load from binary file
612  @param pFile Pointer to file
613  @return Error code
614  */
615  long LoadFromBinaryFile(CDataFile* pFile);
616 
617  /**
618  Save to binary file
619 
620  @param pFile Pointer to file
621  @return Error code
622  */
623  long SaveToBinaryFile(CDataFile* pFile);
624 
625  /**
626  Assign from an other measurement program set
627  */
628  void Assign(CMeasProgramSet* pMeasProgset);
629 
630  /**
631  Returns the current version
632  */
633  static unsigned long GetCurrentVersion();
634 
635 private:
636 
637  string GetIniFileName();
638 
639 private:
640 
641  long m_lCurrMeasProgIndex;
642  TMeasProgList m_pMeasProgList;
643  CMeasProgram m_DefMeasProg;
644  unsigned long m_dwVersion;
645  unsigned char m_byOnSensor;
646 };
647 
648 #endif
long m_lGrayCodeNumPlanes
Gray code number of planes.
Definition: MeasProgram.h:109
long GetCurrentMeasurementProgramIndex()
Get current measurement program index (< 0 - Default measurement program)
Definition: MeasProgram.h:434
Measurement program with phase shift only.
Definition: MeasProgram.h:140
Measurement parameter set.
Definition: MeasProgram.h:181
bool GetOnSensorFlag()
Height image calculation on sensor or sensor DLL if possible.
Definition: MeasProgram.h:565
MeasurementPreFilterType
Prefilter type.
Definition: MeasurementDefs.h:242
CMeasProgram()
Constructor.
Definition: MeasProgram.h:228
vector< TMeasurementParameterPhaseShiftItem > m_PhaseShiftList
Phase shift list.
Definition: MeasProgram.h:142
Data structure for prefilter set for data acquisition.
Definition: DataFilter.h:139
unsigned long m_dwVersion
Version number.
Definition: MeasProgram.h:32
unsigned long GetThesholdPowerSpectrum()
Returns threshold for power spectrum.
Definition: MeasProgram.h:313
vector< TMeasurementParameterPhaseShiftItem > m_PhaseShiftList
Phase shift list.
Definition: MeasProgram.h:110
long m_lGrayCodeStart
Gray code stripes width start.
Definition: MeasProgram.h:108
Class for file operations.
Definition: FileFunc.h:108
Ini File functions.
Measurement parameter phase code.
Definition: MeasProgram.h:171
Abstract base struct.
Definition: MeasProgram.h:29
Measurement program list item.
Definition: MeasProgram.h:364
Defines for measurement module for sensors with 1 projector and 1 camera.
CMeasProgramSet()
Constructor.
Definition: MeasProgram.h:394
Ini file class.
Definition: IniFiles.h:20
virtual ~CMeasProgramSet()
Destructor.
Definition: MeasProgram.h:405
void SetThesholdPowerSpectrum(unsigned long dwThres)
Sets threshold for power spectrum.
Definition: MeasProgram.h:301
Measurement program with Gray code + phase shift.
Definition: MeasProgram.h:106
virtual ~CMeasProgram()
Destructor.
Definition: MeasProgram.h:236
Gray code + phase shift.
Definition: MeasurementDefs.h:234
File functions.
long m_lPhaseShiftStripesWidth
Phase shift - stripes width.
Definition: MeasProgram.h:64
long m_lPhaseShiftNumImg
Phase shift - number of images.
Definition: MeasProgram.h:63
MeasurementMode m_MeasurementMode
Measurement mode.
Definition: MeasProgram.h:31
Measurement program set class.
Definition: MeasProgram.h:387
No measurement mode.
Definition: MeasurementDefs.h:233
TMeasurementParameterSet * GetMeasurementParameter()
Returns a pointer to measurement parameter.
Definition: MeasProgram.h:283
Phase shift only.
Definition: MeasurementDefs.h:235
Filter definitions.
void SetOnSensorFlag(bool bOnSenor)
Set height image calculation on sensor or sensor DLL if possible.
Definition: MeasProgram.h:575
string m_stMeasProgramName
Measurement program name.
Definition: MeasProgram.h:367
TDataAcquPreFilterSetData * GetPreFilterParameter()
Returns a pointer to prefilter parameter.
Definition: MeasProgram.h:291
Measurement program class.
Definition: MeasProgram.h:221
MeasurementMode
Measurement mode.
Definition: MeasurementDefs.h:231
Phase shift parameter.
Definition: MeasProgram.h:61
string GetCurrentMeasurementProgram()
Get current measurement program ("" - Default measurement program)
Definition: MeasProgram.h:442
CMeasProgram * m_pMeasProgram
Pointer to measurement program.
Definition: MeasProgram.h:366