[MSCE C#]使用交互工具在空间中放置矩形

各位老师,MS中的放置矩形工具在正交放置时,根据起点和对角点就行,放置的矩形与当前的精确绘图坐标系平行的,如下,在使用交互工具实现这个效果时,我确定了起点和对角点,该如何来计算这几个顶点生成矩形呢?

Parents
  • AccuDraw下的Origin以及Rotation可以获取到这个精确绘图坐标系的原点以及旋转矩阵,根据这些信息以及用户点击的点就可以算出来四个顶点的具体坐标了,根据算出来的顶点坐标去构造矩形就可以了。

  • 如何计算呢?我想的是这样,先计算对角点在精确绘图坐标系中对应的坐标,然后在精确绘图坐标系中计算出其余两个顶点,再将顶点坐标还原到三维坐标系中,但是不知道咋操作

  • 通过AccuDraw的原点以及旋转矩阵,构造一个旋转变换矩阵DTransform3d,将用户输入的对角线的点变换(DTransform3d.Multiply)到AccuDraw的局部坐标系下,旋转变换后这个点的Z值应该是0,假设为(x,y,0),这样四个点的坐标分别就是(0,0,0),(x,0,0),(x,y,0),(0,y,0),用这四个点创建一个矩形,再旋转变换回去就可以了。

  • 郭老师,我按精确坐标系的原点和旋转矩阵创建DTransform3d ,这样

    DTransform3d trans = DTransform3d.FromMatrixAndFixedPoint(AccuDraw.Rotation, AccuDraw.Origin);

    然后对对角点变换,这样

    DPoint3d pt = trans.MultiplyPoint(ev.Point.X, ev.Point.Y, ev.Point.Z);

    变换后的点Z值并不是0额

    然后上面您说四个点的坐标分别就是(0,0,0),(x,0,0),(x,y,0),(0,y,0),用这四个点创建一个矩形,创建出来的矩阵在0点。这是不是先平移到AccuDraw.Origin这个位置,再用旋转矩阵变换回去?

  • 请参考如下代码:

    public static void CreateRectAlignAccuDraw(DPoint3d ptDiag)
            {
                DTransform3d tran = DTransform3d.FromMatrixAndFixedPoint(AccuDraw.Rotation, AccuDraw.Origin);
                DTransform3d tranMoveToZero = DTransform3d.FromTranslation(AccuDraw.Origin * -1);
                tran = tranMoveToZero * tran;
                tran.Multiply(out DPoint3d ptDiagInAccuLocal, ptDiag);
                ptDiagInAccuLocal.Z = 0;
                List<DPoint3d> pts = new List<DPoint3d>() {DPoint3d.Zero, new DPoint3d(ptDiagInAccuLocal.X, 0, 0), ptDiagInAccuLocal,
                    new DPoint3d(0,ptDiagInAccuLocal.Y,0),DPoint3d.Zero};
                var cvePri = CurvePrimitive.CreateLineString(pts);
                var eleRect = DraftingElementSchema.ToElement(Session.Instance.GetActiveDgnModel(), cvePri, null);
                AccuDraw.Rotation.TryInvert(out DMatrix3d accuRotInv);
                var tranToAccu = DTransform3d.FromMatrixAndTranslation(accuRotInv, AccuDraw.Origin);
                eleRect.ApplyTransform(new TransformInfo(tranToAccu));
                eleRect.AddToModel();
            }

    Answer Verified By: 小 子 

Reply Children
No Data