0028314: Application Framework - Display mode is not saved within XML OCAF document
authorvro <vro@opencascade.com>
Wed, 17 May 2017 09:41:29 +0000 (12:41 +0300)
committerabv <abv@opencascade.com>
Thu, 18 May 2017 13:49:06 +0000 (16:49 +0300)
A rebased up-to-date version:
    - a bug is fixed (storage and retrieval of display mode in XML file format)
    - draw-commands to manipulate the display and selection mode are implemented
    - a test command "caf presentation M1" is created

src/DPrsStd/DPrsStd_AISPresentationCommands.cxx
src/XmlMDataXtd/XmlMDataXtd_PresentationDriver.cxx
tests/caf/presentation/M1 [new file with mode: 0644]

index 51fce65..84c8392 100644 (file)
@@ -598,6 +598,79 @@ static Standard_Integer DPrsStd_AISHasOwnTransparency (Draw_Interpretor& di,
   return 1;
 }
 
+//=======================================================================
+//function : DPrsStd_AISMode
+//purpose  : AISMode (DOC,entry,[Mode])
+//=======================================================================
+static Standard_Integer DPrsStd_AISMode(Draw_Interpretor& di,
+                                        Standard_Integer nb,
+                                                           const char** arg)
+{
+  TDF_Label L;
+  Handle(TDocStd_Document) D;
+  Handle(TPrsStd_AISPresentation) prs;
+  if (nb >= 3 && nb <= 4)
+  {
+    if (!DDocStd::GetDocument(arg[1],D)) 
+      return 1;
+    if (!DDF::FindLabel(D->GetData(),arg[2],L))
+      return 1;
+    if (!L.FindAttribute(TPrsStd_AISPresentation::GetID(), prs))
+      return 1;
+    if (nb == 4)
+    {
+      Standard_Integer mode = Draw::Atoi(arg[3]);
+      prs->SetMode(mode);
+      TPrsStd_AISViewer::Update(L);
+    }
+    else if (nb == 3)
+    {
+      Standard_Integer mode = prs->Mode();
+      di<<mode;
+    }
+    return 0; 
+  }
+  di<<"DPrsStd_AISMode : Error\n";
+  return 1;
+}
+
+//=======================================================================
+//function : DPrsStd_AISSelMode
+//purpose  : AISSelMode (DOC,entry,[SelMode])
+//=======================================================================
+static Standard_Integer DPrsStd_AISSelMode(Draw_Interpretor& di,
+                                           Standard_Integer nb,
+                                                              const char** arg)
+{
+  TDF_Label L;
+  Handle(TDocStd_Document) D;
+  Handle(TPrsStd_AISPresentation) prs;
+  if (nb >= 3 && nb <= 4)
+  {
+    if (!DDocStd::GetDocument(arg[1],D)) 
+      return 1;
+    if (!DDF::FindLabel(D->GetData(),arg[2],L))
+      return 1;
+    if (!L.FindAttribute(TPrsStd_AISPresentation::GetID(), prs))
+      return 1;
+    if (nb == 4)
+    {
+      // Set selection mode.
+      Standard_Integer selMode = Draw::Atoi(arg[3]);
+      prs->SetSelectionMode(selMode);
+      TPrsStd_AISViewer::Update(L);
+    }
+    else if (nb == 3)
+    {
+      // Print selection mode.
+      Standard_Integer selMode = prs->SelectionMode();
+      di<<selMode;
+    }
+    return 0; 
+  }
+  di<<"DPrsStd_AISSelMode : Error\n";
+  return 1;
+}
 
 //=======================================================================
 //function : AISPresentationCommands
@@ -677,4 +750,12 @@ void DPrsStd::AISPresentationCommands (Draw_Interpretor& theCommands)
   theCommands.Add ("AISRemove", 
                    "AISRemove (DOC, entry)",
                   __FILE__, DPrsStd_AISRemove, g);
+
+  theCommands.Add ("AISMode", 
+                   "AISMode (DOC, entry, [Mode])",
+                  __FILE__, DPrsStd_AISMode, g);
+
+  theCommands.Add ("AISSelMode", 
+                   "AISSelMode (DOC, entry, [SelMode])",
+                  __FILE__, DPrsStd_AISSelMode, g);
 }
index 27bf61b..32eb2d8 100644 (file)
@@ -234,12 +234,10 @@ void XmlMDataXtd_PresentationDriver::Paste
     theTarget.Element().setAttribute(::WidthString(), aRNbStr.ToCString());
   }
 
-#ifdef OCC6010
   // mode
   if (aTPrs->HasOwnMode())
   {
     aNb = aTPrs->Mode();
     theTarget.Element().setAttribute(::ModeString(), aNb);
   }
-#endif
 }
diff --git a/tests/caf/presentation/M1 b/tests/caf/presentation/M1
new file mode 100644 (file)
index 0000000..3237a71
--- /dev/null
@@ -0,0 +1,27 @@
+#INTERFACE CAF
+# Presentation attributes
+#
+# Testing attribute: TPrsStd_AISPresentation
+#
+# Testing command:   AISMode, storage of display mode in XML file
+#
+
+NewDocument D1 XmlOcaf
+AISInitViewer D1
+box b 100 100 100
+SetShape D1 0:1 b
+AISSet D1 0:1 NS
+AISDisplay D1 0:1
+AISMode D1 0:1 1
+
+SaveAs D1 testmode.xml
+Close D1
+Open testmode.xml D2
+AISInitViewer D2
+AISDisplay D2 0:1
+set mode [AISMode D2 0:1]
+if { ${mode} != 1 } {
+       puts ${mode}
+       puts "Storage of display mode of TPrsStd_AISPresentation attribute in XML document: Error"
+    return
+}