c# point偏移_肉肉's Blog

问题:.NET进行打印设置为窗口打印的时候,导致框选的区域不能正常打印,设置和CAD原生一样。

查看了帮助文档,各种社区,没有一条有用的信息,没办法,瞎蒙吧,把所有打印设置都试了一遍之后,

想到了坐标系转换,然后查阅国外资料发现打印的坐标系是DCS,而选取的extents是在UCS里的

好吧,算是找到了曙光了!

然后发现~从UCS转DCS,又恰了……

UCS需要先转WCS,然后从WCS转DCS

第一步UCS TO WCS

point.TransformBy(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.CurrentUserCoordinateSystem);

妥妥的

然后第二部复杂一点:

// 将 WCS 坐标变换为 DCS 坐标

Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

ViewTableRecord acView = acDoc.Editor.GetCurrentView();

Matrix3d matWCS2DCS;

matWCS2DCS = Matrix3d.PlaneToWorld(acView.ViewDirection);

matWCS2DCS = Matrix3d.Displacement(acView.Target - Point3d.Origin) * matWCS2DCS;

matWCS2DCS = Matrix3d.Rotation(-acView.ViewTwist, acView.ViewDirection, acView.Target) * matWCS2DCS;

Extents3d extent = new Extents3d(pt1, pt2);

matWCS2DCS = matWCS2DCS.Inverse();

extent.TransformBy(matWCS2DCS);

由于是使用的窗口要初始化EXTENTS所以需要对于点的大小进行下处理,不然框选的起点和终点不同会对于初始化有问题哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值