在AutoCad / WPF / SVG转换后获取新的坐标位置

时间:2015-09-23 16:53:01

标签: c# wpf svg matrix-multiplication autocad

我试图检索并保存(x,y)位置,以便以后在SVG的2D模型中引用。原始模型是autocad并使用软件工具转换为WPF,再次转换为SVG,就像这样。

var model = GetModel();
var Matrix4DTransform = Matrix.Identity
wpfGraphics.CreateFrameworkElements(model, Matrix4DTransform);

现在可以使用但是是颠倒的,所以我使用这个转换

var ModelWidth = bounds.Delta.X;
var ModelHeight = bounds.Delta.Y;

Matrix4DTransform= DxfUtil.GetScaleTransform(
   bounds.Corner1,
   bounds.Corner2,
   bounds.Center,
   new Point3D(0, ModelHeight, 0d),
   new Point3D(ModelWidth, 0, 0d),
   new Point3D(ModelWidth / 2d, ModelHeight /2 , 0d)
);

wpfGraphics.CreateFrameworkElements(model, Matrix4DTransform);

现在它正面朝上,如果在画布上绘制,宽度和高度与模型相同。到目前为止一切都很顺利。

现在转换为SVG

StringBuilder svg = new StringBuilder();
svg.AppendLine("<svg width='{0}' height='{1}'>", ModelWidth, ModelHeight);
svg.AppendLine("<g id='main'>");

foreach(FrameworkElement f in wpfGraphics.FrameworkElements)
{
    svg.AppendLine(string.Format("<path data='{0}'>", f.Data)); 

}
svg.AppendLine("</g>");
svg.AppendLine("</svg>");

一切都还不错,SVG Doc现在与原始模型相同,但现在原始模型中的一个点(x,y)与SVG doc中的一个点不同。即使他认为这些点似乎也是相反的模型是完全相同的维度。

目标是将一个点保存到数据库中,显示在模型上,然后用户可以更改该点,该点将保存回数据库。现在这些点不一样了。

0 个答案:

没有答案