Can't rotate element into this position.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
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();
}
}
Philippe