arcmap矢量图倾斜的怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arcmap矢量图倾斜的怎么办相关的知识,希望对你有一定的参考价值。

参考技术A 自动矢量化就行。
在arcmap里添加一张栅格图片,这里添加一个jpg格式的图片,打开工具箱下面的【空间分析工具】-【重分类】-【重分类】,点击classify,将原图片分为两种颜色,单击OK。以便于自动矢量化。分类结果打开arcscan扩展模块,新建一个线状的shapfile文件,使用ArcScan、工具条,直接生成矢量化的线装要素。

旋转图像后,平移矢量倾斜

【中文标题】旋转图像后,平移矢量倾斜【英文标题】:After rotating image the translation vector is skewed 【发布时间】:2016-04-11 02:01:18 【问题描述】:

我正在尝试在旋转图像后更正模型的平移和旋转行为。这似乎是一个普遍的问题。我以前见过这个问题,但我没有看到它以我理解如何将它应用于我的代码的方式回答。我只是希望平移和旋转行为在旋转图像之前保持不变。第一次旋转后,平移和旋转永远倾斜。另外,我对 OpenGL 非常熟悉,所以请慢慢说。

Private Sub GlControl1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles GlControl1.MouseMove
    If _MouseButtonLeft Then
        '
        ' get new position of mouse
        _XposEnd = e.X - _Xpos
        _YposEnd = _Ypos - e.Y
        '
        ' reset the mouse start position
        _Xpos = e.X
        _Ypos = e.Y
        '
        ' change projection
        GL.MatrixMode(MatrixMode.Projection)
        GL.Translate(_XposEnd * _MouseSpeed, _YposEnd * _MouseSpeed, 0)
        GlControl1.Invalidate()
        '
    End If
    '
    If _MouseButtonRight Then
        '
        ' get new position of mouse
        _XposEnd = e.X - _Xpos
        _YposEnd = _Ypos - e.Y
        '
        ' reset the mouse start position
        _Xpos = e.X
        _Ypos = e.Y
        '
        ' change projection
        GL.MatrixMode(MatrixMode.Projection)
        GL.Rotate(_XposEnd * _MouseSpeed, 1, 0, 0)
        GL.Rotate(_YposEnd * _MouseSpeed, 0, 1, 0)
        GlControl1.Invalidate()
        '
    End If
End Sub

编辑 1:

我的绘制循环是:

    GL.Clear(ClearBufferMask.ColorBufferBit)
    GL.Clear(ClearBufferMask.DepthBufferBit)
    GL.MatrixMode(MatrixMode.Modelview)
    GL.LoadIdentity()
    drawStuff()
    GlControl1.SwapBuffers()

投影矩阵:让我后退一秒。我正在绘制一个在 3D 空间 [Vertex3] 中有数千个顶点的 CAD 模型。我正在二维空间 [Ortho] 中查看它们。我修改投影矩阵以从不同的角度查看模型。我认为这比重新绘制整个模型并转换所有顶点要容易。在我看来,移动相机比重新计算数千个顶点的位置更容易。我认为这是标准的。如果没有,我会全力以赴。

【问题讨论】:

嘿,你在绘图循环中的任何地方都使用 glLoadIdentity 吗?我假设您不这样做,因为您希望 glRotate 堆叠。如果这是问题,我会详细说明。另外,我觉得你想修改你的投影矩阵很奇怪,你能解释一下吗? 【参考方案1】:

从您的代码中,我无法准确判断您期望什么行为,但我怀疑您正在尝试不断读取鼠标输入并增强“相机”。

在 GL 版本中,您使用的模型和视图矩阵被合并到 ModelView 矩阵中。这(在我看来)让事情在开始时更难理解。

如果将它们分开,您可以分别使用模型矩阵和视图矩阵单独转换对象和相机。由于它们是组合在一起的,因此您需要在进行视图转换之前“保存” ModelView 矩阵的状态。

这就是glPushMatrixglPopMatrix 派上用场的地方。

想想典型的stack。通过一个新矩阵到堆栈上,您继承了下面的所有内容(矩阵的当前状态),但随后的转换将被隔离到这个新矩阵。一旦您进行了转换并使用了矩阵(例如渲染),您就可以 pop 将该矩阵从堆栈中返回,这将使您返回到原始矩阵(包含您的模型转换)。您将在每次程序循环时执行此操作。

我已经很长时间没有编写过 VB.NET 或固定功能(前 GL3)代码了,请耐心等待:

GL.MatrixMode(MatrixMode.ModelView)
GL.PushMatrix()
GL.Rotate(viewXRotation, 1, 0, 0)
GL.Rotate(viewYRotation, 0, 1, 0)
GL.Rotate(viewZRotation, 0, 0, 1)
... draw your scene ...
GL.PopMatrix()

由于我看到您使用Projection 矩阵,这里有一些关于这两个矩阵及其交互方式的额外信息。

Projection 矩阵用于将视图坐标(这是应用 ModelView 矩阵时转换成的局部坐标)转换为剪辑坐标(标准化设备坐标)。

这是来自learnopengl.com的插图:

【讨论】:

以上是关于arcmap矢量图倾斜的怎么办的主要内容,如果未能解决你的问题,请参考以下文章

arcgis如何加载需要矢量化的地图?

矢量化后,讲文件保存为SHP格式后,导入ARCMAP中,怎样能够定义坐标?

arcmap怎么把闭合的线构成面啊?

arcmap矢量化用哪个坐标系

arcmap怎么快速描图

arcmap如何计算出tm遥感影像上的水体面积总和?还有植被面积等等