MantisBT
Mantis Bug Tracker Workflow

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0030949Open CASCADE[OCCT] OCCT:Foundation Classespublic2019-09-06 09:562019-09-17 14:25
Reporternds 
Assigned Tonds 
PrioritynormalSeverityminor 
StatusassignedResolutionopen 
PlatformOSOS Version
Product Version 
Target Version[OCCT] 7.4.0Fixed in Version 
Summary0030949: Foundation Classes - Dump improvement for OCCT classes
DescriptionIt's proposed to add Dump implementation in OCCT classed using the following template into stream:
<class_name>
  <field_name><field_value>
  ...
</class_name>

and several methods to parse this dumped stream into container:
<class name> to map of pairs <field_name>, <field_value>.
It'll allow having table(tree of tables) interpretation of the stream somewhere.

<class_name> is introduced here to perform dump/parsing of references fields of the current class (if the class has own Dump implementation). E.g. for class with references to another class, template of using the Dump will be:
<class_name>
  <field_name><field_value>
  ...
  <field_name of the reference class><reference_class.Dump(OS)>
  ...
</class_name>

After this implementation we'll have:
- possibility to have a tree of OCCT class parameters (with parsing for human output);
- advantages of Dump using(at any time the class parameters might be dumped and investigated and we need not print it in custom application somehow, store the stream into some file)

At the same time, as using of Dump requires additional memory, it should be used by some condition in the custom application.
TagsNo tags attached.
Test case number
Attached Filespng file icon dump_parsed_shading_aspect.png (5,342 bytes) 2019-09-06 10:29
png file icon dump_vaspect_dump.png (14,488 bytes) 2019-09-16 17:41
png file icon dump_bounding_dump.png (8,962 bytes) 2019-09-16 17:42
png file icon dump_bounding_print.png (9,267 bytes) 2019-09-16 17:43

- Relationships

-  Notes
(0086841)
git (administrator)
2019-09-06 09:57

Branch CR30949 has been created by nds.

SHA-1: 115a31d1bc8ca4c1eb26bce14cc116ac6d9d3932


Detailed log of new commits:

Author: nds
Date: Fri Sep 6 09:54:26 2019 +0300

    0030949: Foundation Classes - Dump improvement for occt classed
(0086842)
nds (developer)
2019-09-06 09:58
edited on: 2019-09-06 10:03

Dear Kirill, Andrey

could you please give your recommendations above the proposed patch.

Thank you in advance, Natalia

(0086843)
nds (developer)
2019-09-06 10:02

Some remarks:

- the patch is not finalized yet, you may see some parameters commented in several classes (to be opened later).
- parsing methods are placed in TCollection.hxx by reasons:
 1. to be available in gp package,
 2. there is work with TCollection_AsciiString for output values.
 What is your opinion, is there another better place for it?
(0086846)
kgv (developer)
2019-09-06 10:22
edited on: 2019-09-06 10:56

 933 void Bnd_Box::Dump () const
+void Bnd_Box::Dump (Standard_OStream& OS) const

I would rather avoid making methods duplicating functionality.

+  //! Dumps the content of me on the stream <OS>.
+  Standard_EXPORT void Dump (Standard_OStream& OS) const;

Please don't add new methods with ill-formed Doxygen syntax <OS> and with incorrect variable names "OS".

+//=======================================================================
+
+void Graphic3d_Aspects::Dump (Standard_OStream& OS) const

Please don't put empty lines like this.

+const TCollection_AsciiString Graphic3d_Group_ClassName = "Graphic3d_Group";

What is the purpose of bloating OCCT binaries with useless constants?
Either make it "const char*" (preferred) or move declarations as "static const TCollection_AsciiString" inside method using it, so that it will be created on first usage of this method and not on DLL load.

+  DUMP_VALUES (OS, "ExtensionSize", myExtensionSize);

Such kind of dumps can be wrapped into macros automatically removing or adding "my" prefix: DUMP_FIELD_VALUES (OS, myExtensionSize);

+  DUMP_VALUES (OS, "ArrowsLength", myArrowsLength);
+  DUMP_VALUES (OS, "ArrowsSize", myArrowsSize);
+  DUMP_VALUES (OS, "ArrowsAngle", myArrowsAngle);

... and further improvement - declaring a macros/function taking a list of fields.
DUMP_FIELDS (OS, myArrowsLength, myArrowsSize, myArrowsAngle);

+  DUMP_START_KEY (OS, Prs3d_DimensionAspect_ClassName);
...
+  DUMP_STOP_KEY (OS, Prs3d_DimensionAspect_ClassName);

This should be a subject for Sentry tool.

+    Standard_SStream aTmpStream;
+    myArrowAspect->Dump (aTmpStream);
+    DUMP_VALUES (OS, "ArrowAspect", TCollection::ToDumpString (aTmpStream));

The wrapping of class field implementing Dump() should be also generalized to make it one-liner.

+  return GetPointerInfo(thePointer.operator->(), isShortInfo);

thePointer.get() or *thePointer.

+// ----------------------------------------------------------------------------
+// Join
+// ----------------------------------------------------------------------------
+
+TCollection_AsciiString TCollection::Join (const NCollection_List<TCollection_AsciiString>& 
theValues,

Inconsistent header.

+#include <TCollection_AsciiString.hxx>
+
+#include <TCollection_AsciiString.hxx>

Artifact.

+#define DUMP_VALUES(OS, Value1, Value2) \
+{ \
+  OS << Value1 << TCollection::DumpSeparator() << Value2 << TCollection::DumpSeparator(); 
\
+}

This is not acceptable name of macros for public header.

+private:
+  //! Unites list of string into one string using the separator
+  Standard_EXPORT static void split (const TCollection_AsciiString& theValue,
+                                     const TCollection_AsciiString& theSeparator,
+                                     NCollection_List<TCollection_AsciiString>& theValues);

+public:
+  //! Unites list of string into one string using the separator
+  Standard_EXPORT static Standard_Boolean SplitReal (const TCollection_AsciiString& theValue,

private/public sections should not be interleaved like this.

+  static inline Standard_CString ClassNameSeparator() { return " ,"; }

redundant 'inline'.

+  //! \param thePointer a pointer
+  //! \param isShortInfo if true, all '0' symbols in the beginning of the pointer are skipped
+  //! \return the string value

@param doxygen syntax is preferred for new code.

+  //! Convert pointer to string value
+  //! \param thePointer a pointer
+  //! \param isShortInfo if true, all '0' symbols in the beginning of the pointer are skipped
+  //! \return the string value
+  Standard_EXPORT static TCollection_AsciiString GetPointerInfo (const void* thePointer,

Example of the output of this method is expected within documentation.
Even within source code it is unclear what method returns.

(0086847)
nds (developer)
2019-09-06 10:33

An attached image is an example of parse using. The container of parsed stream is visualized in tree. Parsing is recursive. Each item in tree has container of the current class values and list of children (Dump string of reference classes).
(0086848)
nds (developer)
2019-09-06 10:36

Dear Kirill,

const TCollection_AsciiString Graphic3d_Group_ClassName = "Graphic3d_Group";

This constant is reserved to use it in further Init methods. Init() will parse the come stream and check that key of Dump on equality to this value, and only after, parsing to fill values of this class.
(0086849)
kgv (developer)
2019-09-06 10:59

> This constant is reserved to use it in further Init methods.
> Init() will parse the come stream and check that key of Dump on equality
> to this value, and only after, parsing to fill values of this class.
My suggestion remains the same - either declare it as "const char*" or return via dedicated method allocating TCollection_AsciiString on first usage.
(0086850)
nds (developer)
2019-09-06 10:59

Such kind of dumps can be wrapped into macros automatically removing or adding "my" prefix: DUMP_FIELD_VALUES (OS, myExtensionSize);

it would be great, if you provide some row code how do this.
(0086851)
kgv (developer)
2019-09-06 11:00

It is also desired that some of these methods to be used within some Draw Harness commands for testing without Inspector.

For instance, command vaspects can be extended with an argument printing aspect values instead of changing them.
(0086852)
kgv (developer)
2019-09-06 11:06
edited on: 2019-09-06 11:06

>> Such kind of dumps can be wrapped into macros automatically
>> removing or adding "my" prefix: DUMP_FIELD_VALUES (OS, myExtensionSize);
>it would be great, if you provide some row code how do this.
Something like that:

+#define DUMP_FIELD_VALUES(theOStream, theField) \
+{ \
+  const char* aName = #theField;
+  if (aName[0] == 'm' && aName[1] == 'y') { aName = aName+2; }
+  theOStream << aName << TCollection::DumpSeparator() << theField << TCollection::DumpSeparator(); 
\
+}


(0086853)
nds (developer)
2019-09-06 11:08

Thank you a lot.
(0086855)
oan (developer)
2019-09-06 11:13

Hello Natalia,

I have tried to check the results, but there are some compilation errors/warnings due to absence of some functionality in git:

1>TCollection.cxx(159): warning C4456: declaration of 'aKey' hides previous local declaration
1>TCollection.cxx(144): note: see declaration of 'aKey'

1>gp_Trsf.cxx(865): error C2039: 'TrsfFormToString': is not a member of 'gp'
1>SelectMgr_ViewClipRange.hxx(126): error C2039: 'ToString': is not a member of 'Bnd_Range'
1>Graphic3d_PolygonOffset.cxx(16): fatal error C1083: Cannot open include file: 'Aspect.hxx': No such file or directory
1>Graphic3d_Group.cxx(459): error C3861: 'DUMP_START_KEY': identifier not found
1>SelectMgr_BaseFrustum.cxx(19): fatal error C1083: Cannot open include file: 'Message_Alerts.hxx': No such file or directory
1>Prs3d_TextAspect.cxx(20): fatal error C1083: Cannot open include file: 'Graphic3d.hxx': No such file or directory
1>PrsMgr_PresentableObject.cxx(849): error C3861: 'DUMP_START_KEY': identifier not found
1>OpenGl_Group.cxx(350): error C3861: 'DUMP_START_KEY': identifier not found


I also would like to suggest to avoid usage of string constants representing class names like:
const TCollection_AsciiString Bnd_Box_ClassName = "Bnd_Box";

Instead of this, it is possible to add the following definition to TCollection.hxx:
#define CLASS_NAME(x) #x

This will enable the following approach to keep code a little bit clear:
DUMP_START_KEY (OS, CLASS_NAME(Bnd_Box));

or

DUMP_VALUES (OS, CLASS_NAME(SelectMgr_ViewClipRange), 2);

Regards,
Oleg.
(0086856)
nds (developer)
2019-09-06 11:31

Dear Kirill,

This should be a subject for Sentry tool.
- here, you mean Sentry of Standard_Mutex?

The solution, proposed by Oleg looks nice, isn't it? What is your opinion about it? At the same time, for inherited classes of Standard_Transient, it's possible to use here DynamicType().
(0086858)
kgv (developer)
2019-09-06 12:08

>> This should be a subject for Sentry tool.
> - here, you mean Sentry of Standard_Mutex?
Sentry is a nickname within OCCT for tools capturing some resource in constructor and releasing it in destructor.
In your context I suggest putting DUMP_STOP_KEY into destructor.
(0086859)
kgv (developer)
2019-09-06 12:09

> The solution, proposed by Oleg looks nice, isn't it?
> What is your opinion about it?
This is in-line with my suggestion about class field names.
(0087149)
git (administrator)
2019-09-16 16:26

Branch CR30949_1 has been created by nds.

SHA-1: 370f49fbb4ee8f574775306e4069803cce6f8e5a


Detailed log of new commits:

Author: nds
Date: Mon Sep 16 16:22:51 2019 +0300

    0030949: Foundation Classes - Dump improvement for occt classed
    
    #remarks correction
(0087150)
git (administrator)
2019-09-16 16:27

Branch CR30949_1 has been updated by nds.

SHA-1: 9623949c9ccec9c040ed7c2db26d864c36cee0ae


Detailed log of new commits:

Author: nds
Date: Mon Sep 16 16:24:06 2019 +0300

    0030949: Foundation Classes - Dump improvement for occt classed
    
    #Inspector specific corrections

(0087155)
git (administrator)
2019-09-16 16:44

Branch CR30949_1 has been updated by nds.

SHA-1: 8f7d69a5bd15455938c83841d230205ca5e41c73


Detailed log of new commits:

Author: nds
Date: Mon Sep 16 16:40:41 2019 +0300

    0030949: Foundation Classes - Dump improvement for occt classed
    
    #hide not-used Init functionality

(0087161)
git (administrator)
2019-09-16 17:37

Branch CR30949_2 has been created by nds.

SHA-1: d1ace70ba1e6c19a89c70af6f7c69f8ad2ee3b0e


Detailed log of new commits:

Author: nds
Date: Mon Sep 16 17:33:45 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
    
    - Dump methods implementation for part of OCCT classes,
    - new Standard_Dump class to prepare/parse dump stream,
    - Bnd_Box constructor with parameters for BVH_Types conversion into Bnd_Box to have BVH_Tree dumped,
(0087162)
git (administrator)
2019-09-16 17:51

Branch CR30949_2 has been updated by nds.

SHA-1: a0b3454a8dce10b783c94de515a0768dd8ab0096


Detailed log of new commits:

Author: nds
Date: Mon Sep 16 17:48:23 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
    
    # correct compilation

(0087163)
nds (developer)
2019-09-16 17:55

Dear Kirill

could you please check the latest branch for the issue.

All remarks are corrected excepting the next:
1. DUMP_FIELDS (OS, myArrowsLength, myArrowsSize, myArrowsAngle);
it is not clear how process the arguments of different types in this new macro,
Using __VA_ARGS__ is difficult due to different types and necessity to extract the name of variable from parameter.
2. All dump parsing is moved into Standard_Dump class. Please review macros created there.
3. Test case for Prs3D_Drawer and OBB_Box are created. Result in DRAW is attached. The proposed text format for output is appropriate? (Prs3d_Drawer now has only ShadingAspect dumped)


Thank you in advance, Natalia
(0087164)
nds (developer)
2019-09-16 17:57

dump_bounding_dump.png - is new output
dump_bounding_print.png - is previous output
(0087169)
git (administrator)
2019-09-16 21:18

Branch CR30949_2 has been updated by nds.

SHA-1: 72e00f414cc2f5237c43dc7812c7bb49b6ab9f52


Detailed log of new commits:

Author: nds
Date: Mon Sep 16 21:14:48 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
    
    # warnings on Debian correction, test correction

(0087171)
git (administrator)
2019-09-16 23:35

Branch CR30949_2 has been updated by nds.

SHA-1: 3f4bd238fc17fa26990136c755544a5e50ffcc3d


Detailed log of new commits:

Author: nds
Date: Mon Sep 16 23:32:33 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
    
    # warnings on Debian correction

(0087173)
git (administrator)
2019-09-17 00:58

Branch CR30949_2 has been updated by nds.

SHA-1: 57ad03b4bb0359432587a66fc071bb6c79101b02


Detailed log of new commits:

Author: nds
Date: Tue Sep 17 00:55:34 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
    
    # warnings on Debian correction
    # (the address of 'aBndBox' will always evaluate as 'true' [-Waddress])

(0087174)
git (administrator)
2019-09-17 02:03

Branch CR30949_2 has been updated by nds.

SHA-1: cd3dcb5b731c8e48cd4ca9231179c43bc37a0a2b


Detailed log of new commits:

Author: nds
Date: Tue Sep 17 02:00:11 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
    
    # warnings on Debian correction
    # (the address of 'aBndBox' will never be NULL [-Waddress])

(0087178)
git (administrator)
2019-09-17 07:03

Branch CR30949_3 has been created by nds.

SHA-1: c110ee326712dea4bf12fa03282b14d98fccadcc


Detailed log of new commits:

Author: nds
Date: Tue Sep 17 07:00:15 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
(0087179)
git (administrator)
2019-09-17 07:08

Branch CR30949_3 has been updated by nds.

SHA-1: df3d77e3a4890b02c13272f54fec216a624777df


Detailed log of new commits:

Author: nds
Date: Tue Sep 17 07:04:54 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
    
    #warning correction

(0087186)
git (administrator)
2019-09-17 09:47

Branch CR30949_4 has been created by nds.

SHA-1: a06b1beb8593fc61fbfbb6b4d6323a8a3bfff180


Detailed log of new commits:

Author: nds
Date: Tue Sep 17 07:00:15 2019 +0300

    0030949: Foundation Classes - Dump improvement for OCCT classes
(0087187)
nds (developer)
2019-09-17 09:51

Jenkins job is:
http://jenkins-test-12.nnov.opencascade.com/view/CR30949-master-NDS/ [^]
(0087188)
kgv (developer)
2019-09-17 10:47

+    DUMP_FIELD_VALUES (theOStream, IsValid());
+    Bnd_Box aBndBox = BVH::ToBndBox (CornerMin(), CornerMax());

This looks broken creating Bnd_Box with invalid values.
BVH::ToBndBox() should not be called for IsValid() case.

+
+void AIS_InteractiveObject::Dump (Standard_OStream& theOStream) const
...
+void gp_Mat::Dump (Standard_OStream& theOStream) const
+{

Header is missing.

+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE
+  {

Unexpected Standard_EXPORT.

+    for (Standard_Integer aNodeIdx = 0; aNodeIdx < Length(); ++aNodeIdx)
+    {
+       DumpNode (aNodeIdx, theOStream);
+    }

Broken indentation.

+  template<class T> Bnd_Box ToBndBox (const NCollection_Vec3<T>& theType1,
+                                      const NCollection_Vec3<T>& theType2)

Why "theType"? I would expect theMin/theMax instead.
Description of these methods is missing.

+Bnd_Box::Bnd_Box (const Standard_Real theXmin, const Standard_Real theYmin, const Standard_Real theZmin,

+                  const Standard_Real theXmax, const Standard_Real theYmax, const Standard_Real theZmax)


I don't think it is a good idea adding methods taking per-component arguments.
Better adding gp_Pnt and NCollection_Vec3 constructors.

+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &XDirection());
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &YDirection());
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &ZDirection());
...
+  DUMP_FIELD_VALUES (theOStream, XHSize());
+  DUMP_FIELD_VALUES (theOStream, YHSize());
+  DUMP_FIELD_VALUES (theOStream, ZHSize());

Please avoid using non-virtual methods instead of class fields.

+TCollection_AsciiString getLevelIndent (const int theLevel)

Unexpected global function.

+    TCollection_AsciiString aValue = aSplitValues.FindFromIndex (anIndex);
+    TCollection_AsciiString aKey = aSplitValues.FindKey (anIndex);

const TCollection_AsciiString& ?

+  /**
+    * @brief Simple sentry class providing convenient interface to dump.
+    * 
+    * Appends start and last rows in dump with class name key
+    *
+    * Create instance of that class in the first row of Dump.
+    */
+  class Sentry

Inconsistent doxygen style.

+  //! Returns separator symbol of Dump information
+  static Standard_Character DumpSeparator() { return '\\'; }

Why \?

+  //! @return the string value
+  Standard_EXPORT static TCollection_AsciiString GetPointerInfo (const Handle(Standard_Transient)& 
thePointer,
...
+  //! @return the string value
+  Standard_EXPORT static TCollection_AsciiString GetPointerInfo (const void* thePointer,

Example of the output is expected within method description.

+  //! Unites list of string into one string using the separator
+  Standard_EXPORT static TCollection_AsciiString Join (const NCollection_List<TCollection_AsciiString>& 
theValues,
+                                                       const TCollection_AsciiString& theSeparator);


Probably belongs to other place, like TCollection_AsciiString class.

+
+#define DUMP_FIELD_VALUES_PARENT(theOStream, theField) 

Macros description is missing.

+#define DUMP_FIELD_VALUES_SUBCLASS(theOStream, theField) \

What "subclass" means here?

+#define DUMP_FIELD_VALUES_PARENT(theOStream, theField) \

OCCT uses "base" in this context (for example: Standard_Transient::base_type).

+  //TopoDS_ListOfShape myShapes;

There is a plenty of commented blocks in the patch.
It is not a good idea keeping them, as they might be left unnoticed while changing class definition.

 CLASS_NAME (gp_Trsf)

There is no rule, but within OCCT such macros are usually written without a space (like Handle(Standard_Transient)).

+vinit View

Unusual name... (View1 is default).

+// ----------------------------------------------------------------------------
+// ToString
+// ----------------------------------------------------------------------------
+TCollection_AsciiString Standard_Dump::ToDumpString (const Standard_SStream& theStream)

Mismatch.

- Issue History
Date Modified Username Field Change
2019-09-06 09:56 nds New Issue
2019-09-06 09:56 nds Assigned To => abv
2019-09-06 09:57 git Note Added: 0086841
2019-09-06 09:58 nds Note Added: 0086842
2019-09-06 09:58 nds Assigned To abv => kgv
2019-09-06 09:59 nds Summary Foundation Classes - Dump improvement for occt classed => Foundation Classes - Dump improvement for OCCT classed
2019-09-06 10:02 nds Note Added: 0086843
2019-09-06 10:03 nds Note Edited: 0086842 View Revisions
2019-09-06 10:19 nds Summary Foundation Classes - Dump improvement for OCCT classed => Foundation Classes - Dump improvement for OCCT classes
2019-09-06 10:22 kgv Note Added: 0086846
2019-09-06 10:24 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:25 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:28 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:29 nds File Added: dump_parsed_shading_aspect.png
2019-09-06 10:33 nds Note Added: 0086847
2019-09-06 10:36 nds Note Added: 0086848
2019-09-06 10:37 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:38 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:39 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:41 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:43 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:46 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:49 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:52 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:53 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:54 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:55 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:56 kgv Note Edited: 0086846 View Revisions
2019-09-06 10:59 kgv Note Added: 0086849
2019-09-06 10:59 nds Note Added: 0086850
2019-09-06 11:00 kgv Note Added: 0086851
2019-09-06 11:06 kgv Note Added: 0086852
2019-09-06 11:06 kgv Note Edited: 0086852 View Revisions
2019-09-06 11:08 nds Note Added: 0086853
2019-09-06 11:13 oan Note Added: 0086855
2019-09-06 11:13 oan Assigned To kgv => nds
2019-09-06 11:13 oan Status new => feedback
2019-09-06 11:31 nds Note Added: 0086856
2019-09-06 11:31 nds Assigned To nds => kgv
2019-09-06 12:08 kgv Note Added: 0086858
2019-09-06 12:09 kgv Note Added: 0086859
2019-09-06 12:09 kgv Assigned To kgv => nds
2019-09-06 12:09 kgv Status feedback => assigned
2019-09-16 16:26 git Note Added: 0087149
2019-09-16 16:27 git Note Added: 0087150
2019-09-16 16:44 git Note Added: 0087155
2019-09-16 17:37 git Note Added: 0087161
2019-09-16 17:41 nds File Added: dump_vaspect_dump.png
2019-09-16 17:42 nds File Added: dump_bounding_dump.png
2019-09-16 17:42 nds File Added: dump_bounding_print.png
2019-09-16 17:43 nds File Deleted: dump_bounding_print.png
2019-09-16 17:43 nds File Added: dump_bounding_print.png
2019-09-16 17:51 git Note Added: 0087162
2019-09-16 17:55 nds Note Added: 0087163
2019-09-16 17:55 nds Assigned To nds => kgv
2019-09-16 17:55 nds Status assigned => resolved
2019-09-16 17:57 nds Note Added: 0087164
2019-09-16 21:18 git Note Added: 0087169
2019-09-16 23:35 git Note Added: 0087171
2019-09-17 00:58 git Note Added: 0087173
2019-09-17 02:03 git Note Added: 0087174
2019-09-17 07:03 git Note Added: 0087178
2019-09-17 07:08 git Note Added: 0087179
2019-09-17 09:47 git Note Added: 0087186
2019-09-17 09:51 nds Note Added: 0087187
2019-09-17 10:47 kgv Note Added: 0087188
2019-09-17 10:47 kgv Assigned To kgv => nds
2019-09-17 10:47 kgv Status resolved => assigned
2019-09-17 12:42 kgv Target Version 7.4.0 => 7.5.0*
2019-09-17 14:25 nds Target Version 7.5.0* => 7.4.0


Copyright © 2000 - 2019 MantisBT Team
Powered by Mantis Bugtracker