using Bentley.DgnPlatformNET;
using Bentley.DgnPlatformNET.Elements;
using Bentley.GeometryNET;
using Bentley.MstnPlatformNET;
namespace Mstn.Toolkit.Extensions
{
internal static class ElementTransformExtensions
{
public static void ApplyTransformInfo(this Element element, DTransform3d transform)
{
TransformInfo transformInfo = new(transform);
element.ApplyTransform(transformInfo);
element.AddToModel();//内存中定义的元素应用到磁盘文件的模型中
}
///
/// 设置为当前视角旋转变换
///
///
public static void SetCurrentViewRotation(this Element element)
{
Session.GetActiveViewport().GetRotation().TryInvert(out DMatrix3d invertMatrix);//获得当前视角的旋转转置矩阵
DTransform3d dTransform3D = new DTransform3d(invertMatrix);//使用旋转矩阵创建几何变换
TransformInfo transform = new TransformInfo(dTransform3D);//使用几何变换创建变换信息
element.ApplyTransform(transform);
}
///
/// 移动
///
///
///
public static void Move(this Element element, DVector3d translateVector)
{
double uorPerMas = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;//主单位与分辨率单位的比值,最常用的比值
var vector = translateVector * uorPerMas;
DTransform3d trans = DTransform3d.FromTranslation(vector);
TransformInfo info = new(trans);
element.ApplyTransform(info);
element.AddToModel();
}
///
/// 移动
///
///
///
public static void MoveTo(this Element element, DPoint3d targetPoint)
{
double uorPerMas = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;//主单位与分辨率单位的比值,最常用的比值
var target = targetPoint * uorPerMas;
DTransform3d trans = DTransform3d.FromTranslation(target);
TransformInfo info = new(trans);
element.ApplyTransform(info);
element.AddToModel();
}
///
/// 旋转
///
///
/// 基点
/// 旋转轴
/// 角度(°)
public static void Rotate(this Element element, DPoint3d origin, DVector3d axis, Angle angle)
{
double uorPerMas = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;//主单位与分辨率单位的比值,最常用的比值
var vector = origin * uorPerMas;
DTransform3d trans = DTransform3d.FromRotationAroundLine(origin, axis, angle);
TransformInfo info = new(trans);
element.ApplyTransform(info);
element.AddToModel();
}
public static void Rotate(this DisplayableElement element, DVector3d axis, Angle angle)
{
double uorPerMas = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;//主单位与分辨率单位的比值,最常用的比值
element.GetTransformOrigin(out DPoint3d origin);
var vector = origin * uorPerMas;
DTransform3d trans = DTransform3d.FromRotationAroundLine(origin, axis, angle);
TransformInfo info = new(trans);
element.ApplyTransform(info);
element.AddToModel();
}
}
}