首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shape.Rotation性质行为

Shape.Rotation性质行为
EN

Stack Overflow用户
提问于 2019-12-29 11:01:01
回答 1查看 323关注 0票数 0
代码语言:javascript
复制
With sketch
    .ScaleHeight 16, msoFalse
    .ScaleWidth 16, msoFalse
    .Fill.Visible = False
    .Line.Weight = 1
    .Line.ForeColor.RGB = RGB(0, 0, 0)
    .Left = XCoordinate
    .Top = YCoordinate
    .Rotation = AngleDeg
End With

这是我正在写的代码。我使用一个公式计算X和Y坐标,这个公式在for循环的每一次迭代中都会发生变化。

我的问题是,在旋转之前,这个形状会变成给定的X和Y吗?另外,,当它通过存储在变量AngleDeg中的角度值旋转时,它使用的旋转轴是什么?

我对此很担心,因为如果它在左上角旋转,那对我来说是个问题,因为我需要它绕轴旋转,通过它的中点。这也是为什么我在左边和顶部属性之前有我的尺度宽度和尺度高度属性的原因。

我发现它使用的是我的素描中心的正确的X和Y(考虑到素描的起源在左上角),但是当它缩放素描时,它会受到干扰,然后移动/破坏草图中心的协调。

请指点。

EN

回答 1

Stack Overflow用户

发布于 2019-12-29 16:46:56

下一个程序可以根据其中心坐标旋转形状。当然,当您测试它(未更改)时,在活动工作表上必须有一个名为“草图”的形状:

代码语言:javascript
复制
Sub testRotFunction()
  Dim sketch As Shape
  Set sketch = ActiveSheet.Shapes("sketch")
  centerRotation sketch, 0
End Sub

Sub centerRotation(sR As Shape, rotAngle As Double)
    Dim rad As Double, x As Double, y As Double
    Dim x1 As Double, x2 As Double

    x = sR.Top: y = sR.Left
    x1 = (sR.Width / 2) * -1
    x2 = sR.Height
    rad = rotAngle * Atn(1) / 45

    With sR
        .Top = x + (.Height - .Width / 2 - x1 - x2) * (1 - Cos(rad)) / 2
        .Left = y + (.Height - .Width / 2 - x1 - x2) * Sin(rad) / 2
        .Rotation = rotAngle
    End With
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59518790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档