Announcements
Autodesk Community will be read-only between April 26 and April 27 as we complete essential maintenance. We will remove this banner once completed. Thanks for your understanding

Can't rotate element into this position.

pmeigneux
Advocate

Can't rotate element into this position.

pmeigneux
Advocate
Advocate

Hi,

I want to create a familyInstance and rotate, I have a Transform object to allow me to position the FamilyInstance.
But when rotating it's this error : "Can't rotate element into this position." 

 

Can you help Me ?

 

Here is my code :

FamilySymbol familySymbol = elemType as FamilySymbol;
if (familySymbol != null)
{
    XYZ xyz = new XYZ(ListInstance[i].PositionAbs.Origin.X / _feet_to_mm,
    ListInstance[i].PositionAbs.Origin.Y / _feet_to_mm,
   ListInstance[i].PositionAbs.Origin.Z / _feet_to_mm);

   // Prepare rotate
   XYZ axisX = ListInstance[i].PositionAbs.OfVector(ListInstance[i].PositionAbs.BasisX);
   XYZ axisY = ListInstance[i].PositionAbs.OfVector(ListInstance[i].PositionAbs.BasisY);
   XYZ axisZ = ListInstance[i].PositionAbs.OfVector(ListInstance[i].PositionAbs.BasisZ);

   // rotate by x axis
   double rotXRadian = ListInstance[i].PositionAbs.BasisX.AngleOnPlaneTo(axisY, axisX);
   double rotXDegree = rotXRadian * (180 / Math.PI);

   // rotate by y axis
   double rotYRadian = ListInstance[i].PositionAbs.BasisY.AngleOnPlaneTo(axisX, axisY);
   double rotYDegree = rotYRadian * (180 / Math.PI);

   // rotate by z axis
   double rotZRadian = ListInstance[i].PositionAbs.BasisZ.AngleOnPlaneTo(axisX, axisZ);
   double rotZDegree = rotZRadian * (180 / Math.PI);

  TaskDialog.Show("debug", "rotXDegree=" + rotXDegree + " rotYDegree=" + rotYDegree + " rotZDegree=" + rotZDegree + "\n" +
  "BasisX=" + ListInstance[i].PositionAbs.BasisX.X + " " + ListInstance[i].PositionAbs.BasisX.Y + " " + ListInstance[i].PositionAbs.BasisX.Z + " " +
   "BasisY=" + ListInstance[i].PositionAbs.BasisY.X + " " + ListInstance[i].PositionAbs.BasisY.Y + " " + ListInstance[i].PositionAbs.BasisY.Z + " " +
   "BasisZ=" + ListInstance[i].PositionAbs.BasisZ.X + " " + ListInstance[i].PositionAbs.BasisZ.Y + " " + ListInstance[i].PositionAbs.BasisZ.Z + "\n");

FamilyInstance familyInstance;
   using (Transaction t1 = new Transaction(Doc, "Place instance"))
   {
        t1.Start();
       if (!familySymbol.IsActive)
           familySymbol.Activate();
      familyInstance = Doc.Create.NewFamilyInstance(xyz, familySymbol, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
        t1.Commit();
    }

    using (Transaction t2 = new Transaction(Doc, "Rotate instance"))
    {
        t2.Start();
        Element element = familyInstance as Element;
        //
        if (rotZRadian != 0)
       {
              Line axisz = Line.CreateBound(ListInstance[i].PositionAbs.Origin,
 new XYZ(ListInstance[i].PositionAbs.Origin.X, ListInstance[i].PositionAbs.Origin.Y, ListInstance[i].PositionAbs.Origin.Z + 10));
            ElementTransformUtils.RotateElement(Doc, familyInstance.Id, axisz, rotZRadian);
       }
       if (rotYRadian != 0)
       {
             Line axisy = Line.CreateBound(ListInstance[i].PositionAbs.Origin,
new XYZ(ListInstance[i].PositionAbs.Origin.X, ListInstance[i].PositionAbs.Origin.Y + 10, ListInstance[i].PositionAbs.Origin.Z));
             ElementTransformUtils.RotateElement(Doc, familyInstance.Id, axisy, rotYRadian);
       }
       if (rotXRadian != 0)
       {
              Line axisx = Line.CreateBound(ListInstance[i].PositionAbs.Origin,
new XYZ(ListInstance[i].PositionAbs.Origin.X + 10, ListInstance[i].PositionAbs.Origin.Y, ListInstance[i].PositionAbs.Origin.Z));
              ElementTransformUtils.RotateElement(Doc, familyInstance.Id, axisx, rotXRadian);
      }
      t2.Commit();
    }
}

Screenshot_1.jpg

Philippe

0 Likes
Reply
328 Views
2 Replies
Replies (2)

jeremy_tammik
Autodesk
Autodesk

First thing to do it place and rotate the instance manually through the end user interface. Then, analyse its resulting properties, especially how the properties were affected by the rotation, e.g., using RevitLookup and other database exploration tools. That will show you what can be done, what is impossible, which properties are affected and in which manner. With that in hand, the correct programmatic approach can be chosen.

    

Jeremy Tammik Developer Advocacy and Support + The Building Coder + Autodesk Developer Network + ADN Open

pmeigneux
Advocate
Advocate

is it possible to position this chair directly with the correct rotation with the information contained in Transform ?