Координаты вставки столешницы выбираются пользователем, а координаты отверстия прописаны в xml файле(откуда я их и считываю).
На первом рисунке, столешница имеет точку вставки (0,0) и угол вставки тоже равен 0.
На втором рисунке, столешница имеет точку вставки (0,0) и угол вставки равен 90.
это как я вставляю столешницу
BlockTableRecord btrPn;
Vector3d[] nodeVectors = null;
Vector3d firstVector;
btrPn = (BlockTableRecord)acTrans.GetObject(acBlkTbl[Symbol2D], OpenMode.ForRead);
firstVector = new Vector3d(btrPn.Origin.X, btrPn.Origin.Y, btrPn.Origin.Z);
nodeVectors = blockTools.Methods.getBlockReferenceNodeVectors(btrPn, acTrans, firstVector);
Dictionary<ObjectId, AttInfo> dictAttInfo = null;
if (!brPn.ObjectId.IsNull)
{
dictAttInfo = Methods.getDictionaryAttributeInformation(acTrans, btrPn, brPn);
}
BlockJig bJig = new BlockJig(acTrans, brPn, dictAttInfo, nodeVectors);
if (bJig.Run() != PromptStatus.OK)
{
bJig.Cleanup();
brPn.Erase();
acTrans.Commit();
return ObjectId.Null;
}
bJig.Cleanup();
Это как я поворачиваю
DBObject obj = acTrans.GetObject(insertPn.brPnId, OpenMode.ForRead);
Entity ent = obj as Entity;
insertPn.mgInsertionPoint3d = insertPn.rotationBasePoint;
Point3d rotationPoint = insertPn.rotationBasePoint;
double baseAngle = insertPn.GetStoredRotation(obj);
Matrix3d ucs = acActiveDocEd.CurrentUserCoordinateSystem;
if (ent != null)
{
if (!insertPn.skipRotating)
{
RotateJig rJig = new RotateJig(ent, rotationPoint, baseAngle, ucs);
PromptResult res = acActiveDocEd.Drag(rJig);
if (res.Status == PromptStatus.OK)
{
rJig.Cleanup();
rJig.GetEntity().Dispose();
}
}
Matrix3d trans = Matrix3d.Rotation(insertPn.rotationAngle - baseAngle, ucs.CoordinateSystem3d.Zaxis, rotationPoint);
ent.UpgradeOpen();
ent.TransformBy(trans);
}
Здесь вставка отверстия
brPn = new BlockReference(new Point3d(), btrPn.ObjectId);
brPn.Position = point;
brPn.Rotation = Degrees.ToRadians(degrees);
space.AppendEntity(brPn);
acTrans.AddNewlyCreatedDBObject(brPn, true);
insertPn.brPnId = brPn.ObjectId;
Dictionary<ObjectId, AttInfo> dictAttInfo = null;
if (!brPn.ObjectId.IsNull)
dictAttInfo = Methods.getDictionaryAttributeInformation(acTrans, btrPn, brPn);
insertPn.scaleBlockWithAllAttributes(brPn, dictAttInfo, acTrans);
using (aCommon.SysVarCache sysvars = new aCommon.SysVarCache())
{
insertPn.SetSnap();
BlockJig bJig = new BlockJig(acTrans, brPn, dictAttInfo, nodeVectors);
bJig.Cleanup();
insertPn.ResetSnap();
}
Я понимаю что мне как то надо использовать переменную trans , и ее значения передавать при вставке отверстия, но как это сделать я не понимаю.