Salome HOME
Merge branch 'Dev_1.1.0' of newgeom:newgeom into Dev_1.1.0
authormpv <mpv@opencascade.com>
Wed, 25 Mar 2015 09:00:51 +0000 (12:00 +0300)
committermpv <mpv@opencascade.com>
Wed, 25 Mar 2015 09:00:51 +0000 (12:00 +0300)
Conflicts:
src/SketchPlugin/SketchPlugin_Sketch.cpp

1  2 
src/GeomAPI/GeomAPI_AISObject.cpp
src/GeomAlgoAPI/GeomAlgoAPI_Placement.cpp
src/Model/Model_AttributeRefList.cpp
src/Model/Model_AttributeReference.cpp
src/Model/Model_AttributeSelection.cpp
src/SketchPlugin/SketchPlugin_Arc.cpp
src/SketchPlugin/SketchPlugin_Circle.cpp
src/SketchPlugin/SketchPlugin_Line.cpp
src/SketchPlugin/SketchPlugin_Point.cpp
src/SketchPlugin/SketchPlugin_Sketch.cpp

index f4ae420490bada6d8d4b177459ba93c67198fb94,f4ae420490bada6d8d4b177459ba93c67198fb94..8f053f7cf90a838a5741d17fb442dc9d6e85ee29
@@@ -311,9 -311,9 +311,9 @@@ void GeomAPI_AISObject::getColor(int& t
      return;
  
    Quantity_Color aColor = anAIS->Color();
--  theR = aColor.Red()*255.;
--  theG = aColor.Green()*255.;
--  theB = aColor.Blue()*255.;
++  theR = (int)(aColor.Red()*255.);
++  theG = (int)(aColor.Green()*255.);
++  theB = (int)(aColor.Blue()*255.);
  }
  
  bool GeomAPI_AISObject::empty() const
index 3cc4f85aedc6bea31cedcd8ecf2e713996ef2a54,4b815e3a10a584bcb2ca22f6f3d892c1bac8fee6..9933454463b8291eeb282c427c6cda2f7708dcc0
@@@ -40,15 -174,18 +174,20 @@@ void GeomAlgoAPI_Placement::build
  
    // Calculate transformation
    gp_Trsf aTrsf;
-   gp_Vec aSrcDir(aSourceDir->x(), aSourceDir->y(), aSourceDir->z());
-   gp_Vec aDstDir(aDestDir->x(), aDestDir->y(), aDestDir->z());
+   gp_Vec aSrcDir = aSrcDstNormals[0];
+   gp_Vec aDstDir = aSrcDstNormals[1];
++  gp_Vec aSrcDir = aSrcDstNormals[0];
++  gp_Vec aDstDir = aSrcDstNormals[1];
+   // Calculate rotation
    gp_Quaternion aRot(aSrcDir, aDstDir);
    aTrsf.SetRotation(aRot);
-   gp_Vec aSrcCenter(aSourceLoc->x(), aSourceLoc->y(), aSourceLoc->z());
-   aSrcCenter.Transform(aTrsf);
-   gp_Vec aTrans(aDestLoc->x() - aSrcCenter.X(),
-                 aDestLoc->y() - aSrcCenter.Y(),
-                 aDestLoc->z() - aSrcCenter.Z());
+   // Calculate translation
+   gp_Vec aSrcLoc(aSrcDstPoints[0].XYZ());
+   gp_Vec aDstLoc(aSrcDstPoints[1].XYZ());
+   if (!theIsCentering)
+     aDstLoc = aSrcLoc + gp_Vec(aDstDir) * (aDstLoc-aSrcLoc).Dot(aDstDir);
+   aSrcLoc.Transform(aTrsf);
+   gp_Vec aTrans = aDstLoc - aSrcLoc;
    aTrsf.SetTransformation(aRot, aTrans);
  
    // Transform the shape with copying it
index effa56db232cb21a0989fc801baad662fcf283a1,effa56db232cb21a0989fc801baad662fcf283a1..c9722835887b00258b8e1acbac9797dac0dd06c1
@@@ -16,6 -16,6 +16,12 @@@ void Model_AttributeRefList::append(Obj
  {
    std::shared_ptr<Model_Data> aData = std::dynamic_pointer_cast<Model_Data>(theObject->data());
    myRef->Append(aData->label().Father());  // store label of the object
++  // do it before the transaction finish to make just created/removed objects know dependencies
++  // and reference from composite feature is removed automatically
++  FeaturePtr anOwnerFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(owner());
++  if (anOwnerFeature.get()) {
++    aData->addBackReference(anOwnerFeature, id());
++  }
  
    owner()->data()->sendAttributeUpdated(this);
  }
index 43bbabe658fff74259890026c982b1302d55670c,43bbabe658fff74259890026c982b1302d55670c..91de64eb567de9f94889a6274c98f8ae8c6dcebc
@@@ -22,9 -22,9 +22,9 @@@ void Model_AttributeReference::setValue
    if(!theObject)
      return;
    if (!myIsInitialized || value() != theObject) {
--      std::shared_ptr<Model_Data> aData = std::dynamic_pointer_cast<Model_Data>(
--          theObject->data());
--      TDF_Label anObjLab = aData->label().Father(); // object label
++    std::shared_ptr<Model_Data> aData = std::dynamic_pointer_cast<Model_Data>(
++        theObject->data());
++    TDF_Label anObjLab = aData->label().Father(); // object label
  
      if (owner()->document() == theObject->document()) { // same document, use reference attribute
  
        TDF_Tool::Entry(anObjLab, anEntry);
        TDataStd_AsciiString::Set(myRef->Label(), anEntry);
      }
++    // do it before the transaction finish to make just created/removed objects know dependencies
++    // and reference from composite feature is removed automatically
++    FeaturePtr anOwnerFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(owner());
++    if (anOwnerFeature.get()) {
++      aData->addBackReference(anOwnerFeature, id());
++    }
  
      owner()->data()->sendAttributeUpdated(this);
    }
index f4bc7f93e3e5aca6c75a8b88e3d620cbcc6ab5fd,f4bc7f93e3e5aca6c75a8b88e3d620cbcc6ab5fd..0cb74987a0e63c5a060f709a26142415cdce9834
@@@ -190,7 -190,7 +190,7 @@@ double SketchPlugin_Arc::distanceToPoin
  }
  
  bool SketchPlugin_Arc::isFixed() {
--  return data()->selection(EXTERNAL_ID())->context().get();
++  return data()->selection(EXTERNAL_ID())->context().get() != NULL;
  }
  
  bool SketchPlugin_Arc::isFeatureValid()
index 50b387414b82402e10bec366908b2d2d856f24fa,50b387414b82402e10bec366908b2d2d856f24fa..934f40a04eb331cf8a0fb0a37ba044140e29b9c7
@@@ -101,7 -101,7 +101,7 @@@ double SketchPlugin_Circle::distanceToP
  }
  
  bool SketchPlugin_Circle::isFixed() {
--  return data()->selection(EXTERNAL_ID())->context().get();
++  return data()->selection(EXTERNAL_ID())->context().get() != NULL;
  }
  
  void SketchPlugin_Circle::attributeChanged(const std::string& theID) {
index f0c76538a92ff0973a46813f32945c8299bf854c,f0c76538a92ff0973a46813f32945c8299bf854c..ea5d0a42b1e57039053e2a7ff2c63b1d0b34d0c5
@@@ -101,7 -101,7 +101,7 @@@ double SketchPlugin_Line::distanceToPoi
  }
  
  bool SketchPlugin_Line::isFixed() {
--  return data()->selection(EXTERNAL_ID())->context().get();
++  return data()->selection(EXTERNAL_ID())->context().get() != NULL;
  }
  
  void SketchPlugin_Line::attributeChanged(const std::string& theID) {
index 798140611b2755a7b86248a055617fa84aed4e44,798140611b2755a7b86248a055617fa84aed4e44..036fde19db093340f6a632a0b73b2f860e7e26a7
@@@ -73,7 -73,7 +73,7 @@@ double SketchPlugin_Point::distanceToPo
  }
  
  bool SketchPlugin_Point::isFixed() {
--  return data()->selection(EXTERNAL_ID())->context().get();
++  return data()->selection(EXTERNAL_ID())->context().get() != NULL;
  }
  
  void SketchPlugin_Point::attributeChanged(const std::string& theID) {
index 2736bd84806caec3856fbf9d6500ac61c84f5807,365db4ca69b59d5d4aca8311afa65980b1aca50a..b57c1e3ba21e7b587c0a4fd950c6a516fa3d082b
@@@ -117,7 -114,10 +114,7 @@@ void SketchPlugin_Sketch::execute(
    for (; aShapeIt != aFeaturesPreview.end(); ++aShapeIt) {
      aBigWire->addEdge(*aShapeIt);
    }
-   aBigWire->setPlane(anOrigin->pnt(), aDirX->dir(), aDirY->dir(), aNorm->dir());
+   aBigWire->setPlane(anOrigin->pnt(), aDirX->dir(), aNorm->dir());
 -
 -//  GeomAlgoAPI_SketchBuilder::createFaces(anOrigin->pnt(), aDirX->dir(), aDirY->dir(), aNorm->dir(),
 -//                                         aFeaturesPreview, aLoops, aWires);
    std::shared_ptr<ModelAPI_ResultConstruction> aConstr = document()->createConstruction(data());
    aConstr->setShape(aBigWire);
    setResult(aConstr);