乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 179|回复: 9

转换视口时出现问题

[复制链接]

9

主题

30

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2018-3-6 10:41:25 | 显示全部楼层 |阅读模式
我正在尝试遍历绘图的所有布局并移动它们的视口中心,因为在之前的步骤中,所有模型空间的实体都已被移动。只要视口的坐标系是wcs,这就可以正常工作,不幸的是并不总是这样。我尝试使用@gile的GeometryExtensionLibrary,但我想我太笨了,无法理解wcs、ucs、ocs、dcs和psdcs之间的区别(非常欢迎进一步解释)这是我到目前为止尝试的内容:[命令方法("enumerateLayout")]。
公共静态空枚举布局()。
{。
使用(Transaction=_doc.TransactionManager.StartTransaction())。
{。
LayoutManager=LayoutManager.Current;。
字符串当前布局=layoutManager.CurrentLayout;。

尝试。
{。
使用(var layoutDicpedia=(DBDicpedia)trans.GetObject(_db.LayoutDictionaryId,OpenMode.ForRead))。
{。
foreach(layoutDicpedia中的var layoutEntry)。
{。
如果(layoutEntry.Key=="模型")。
继续;。

使用(var布局=(布局)trans.GetObject(layoutEntry.Value,OpenMode.ForRead))。
{。
layoutManager.CurrentLayoutlayout.LayoutName。

bool isPper space=true;。
foreach(ObjectId viewportId inlayout.GetViewports())。
{。
//此列表的第一个ID是Pperispace。
如果(isPpersspace)。
{。
isPperispace=false;。
继续;。
}。

使用(var viewport=(Viewport)trans.GetObject(viewportId,OpenMode.ForWrite))。
{。
双xShift=28999942;。
双yShift=-1729;。

=新的Point3d(viewport.ViewCenter.X,viewport.ViewCenter.Y,0);。
viewCent3d=viewCenter3d.Trans(GeometryExtensions.CoordSystem.UCS,GeometryExtensions.CoordSystem.WCS);。
viewCent3d=viewCenter3d.TransformBy(Matrix3d.Displacement(new Vector3d(xShift, yShift,0)));。
viewport.ViewCenter=新的Point2d(viewCent3D. X, viewCent3D. Y);。
}。

_editor.Regen。
}。
}。
}。

trans.Commit();。
}。
}。
捕获(System.Exceptione)。
{。
_editor.WriteMessagee.Message。
trans.Abort();。
}。
最后。
{。
layoutManager.CurrentLayout当前布局;。
}。
}。
}。
结果:wcs中的布局是正确的,ucs的布局没有改变。我非常感谢任何帮助,Bernd。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2018-3-6 12:00:25 | 显示全部楼层
嗨,吉勒,谢谢你——按预期工作(当然也感谢你的图书馆!)。
所以我说ucs只有在模型空间才算数是对的吗?纸张空间的等价物是dcs?psdcs到底是干什么的?
我真的很难理解欧特克在这个主题上的留档:
回复

使用道具 举报

9

主题

30

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2018-3-7 03:27:51 | 显示全部楼层

我很难用比医生更好的英语来解释这一点,但我会尝试一下。
首先,不可以。您还可以使用图纸空间中的UCS在此空间中绘图,例如添加注释、插入标题栏,当然还有绘制视口。
DCS是与视口(图纸空间视口或模型空间视口)中的视图相关的坐标系。视口中的视图可能已被旋转或3d旋转。
PSDCS仅用于将图纸空间WCS坐标与图纸空间视口视图坐标(DCS)相互转换。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2018-3-7 04:46:19 | 显示全部楼层
Gilles,
感谢您花时间举了一个例子,只是为了向像我这样的人解释一个显然很容易的话题(我希望,我不是唯一的一个)。
这真是太棒了。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2018-3-7 07:31:20 | 显示全部楼层
@吉尔:为什么在我的图片中这样显示?
警告:
“视口不包含WCS2DC的防御”
查看我的图片
回复

使用道具 举报

9

主题

30

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2018-3-7 08:18:32 | 显示全部楼层
@daboho,如第一条消息中所述,您必须引用包含视口的GeometryExtensions库。DCS2WCS扩展方法。
回复

使用道具 举报

14

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2021-8-15 07:28:12 | 显示全部楼层
我在哪里可以获得参考?
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2021-8-15 10:23:19 | 显示全部楼层
@gile我有成功来获得几何扩展,但结果是
我是sorri,我仍然是C#中的新手,我已经运行了
我想要首先询问的是
双倍xShift = 28999942;  这是为了模型空间中的协调x平均值?
双 yShift = -1729;        这是为了模型空间中的协调y平均值?
请帮忙
回复

使用道具 举报

14

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2021-8-17 16:13:55 | 显示全部楼层
@吉尔:我已经尝试了一周了,但仍然坚持执行此代码。步骤1:我在模型空间中选择边框/矩形。步骤2:每个边框/矩形都将缩放到所有纸张空间。问题在于,多选时,所有纸张空间都与边框/第一选择相同。此代码有什么问题
  1.   private List lisFindObjIdOfCircle()
  2.         {
  3.             Document doc = acApp.DocumentManager.MdiActiveDocument;
  4.             Editor ed = doc.Editor;
  5.             List lisObjectIdFound = new List();
  6.             try
  7.             {
  8.                 var option = new PromptSelectionOptions(); option.MessageForAdding = "\nselect Rectangle/Borders Cover Gambar";
  9.                 var psr = ed.GetSelection(option, new SelectionFilter(new[] { new TypedValue(0, "LWPOLYLINE,Polyline") }));
  10.               
  11.                 SelectionSet acSSet = psr.Value;
  12.                 if (psr.Status == PromptStatus.OK)
  13.                 {
  14.                     
  15.                     foreach (SelectedObject recID in acSSet)
  16.                     {
  17.                         lisObjectIdFound.Add(recID.ObjectId);
  18.                     }
  19.                 }
  20.             }
  21.             catch (System.Exception ex)
  22.             {
  23.                 ed.WriteMessage("\nError in getting ObjectId of all circles on the drawing. " +
  24.                                  "Error message is: " + ex.Message);
  25.             }
  26.             return (lisObjectIdFound);
  27.         }
  28.       [CommandMethod("zv", CommandFlags.UsePickSet | CommandFlags.Redraw)]
  29.         public void testview()
  30.         {
  31.             var doc = acApp.DocumentManager.MdiActiveDocument;
  32.             Database db = HostApplicationServices.WorkingDatabase;
  33.             var ed = doc.Editor;
  34.             List lisCircleObjId = new List();
  35.             lisCircleObjId = this.lisFindObjIdOfCircle();
  36.          
  37.             using (Transaction trans = db.TransactionManager.StartTransaction())
  38.             {
  39.                 using (var layoutDictionary = (DBDictionary)trans.GetObject(db.LayoutDictionaryId, OpenMode.ForRead))
  40.                 {
  41.                     using (var mylock = doc.LockDocument())
  42.                     {
  43.                             foreach (var layoutEntry in layoutDictionary)
  44.                             {
  45.                                 if (layoutEntry.Key == "Model") continue;
  46.                                 using (var layout = (Layout)trans.GetObject(layoutEntry.Value, OpenMode.ForWrite))
  47.                                 {
  48.                                     var n = 0;
  49.                                     var extSelObj = new Extents3d();
  50.                                     // ObjectId layoutId = LayoutManager.Current.CreateLayout(layout.LayoutName);             // membuat layout
  51.                                     LayoutManager.Current.CurrentLayout = layout.LayoutName;
  52.                                     Entity entObj = (Entity)trans.GetObject(lisCircleObjId[n], OpenMode.ForRead);
  53.                                     ObjectId idcover = entObj.ObjectId;
  54.                                     extSelObj.AddExtents(entObj.GeometricExtents);
  55.                                     bool isPaperspace = true;
  56.                                     foreach (ObjectId viewportId in layout.GetViewports())
  57.                                     {
  58.                                         if (isPaperspace)
  59.                                         {
  60.                                             isPaperspace = false;
  61.                                             continue;
  62.                                         }
  63.                                         using (var viewport = (Viewport)trans.GetObject(viewportId, OpenMode.ForWrite))
  64.                                         {
  65.                                             if (viewport.Locked == true) viewport.Locked = false;
  66.                                             viewport.On = true;
  67.                                             ed.Command("._MSPACE");
  68.                                             // buat extend dari objectID
  69.                                             var pl = trans.GetObject(entObj.ObjectId, OpenMode.ForRead) as Polyline;
  70.                                             var ext = new Extents3d();
  71.                                             ext = pl.GeometricExtents;
  72.                                             var mn = ext.MinPoint;
  73.                                             var mx = ext.MaxPoint;
  74.                                             dynamic appAcad = acApp.AcadApplication;
  75.                                             //appAcad.ZoomWindow(mn.ToArray(), mx.ToArray());
  76.                                             ObjectId[] newIds = new ObjectId[0];
  77.                                             ed.SetImpliedSelection(newIds);
  78.                                             appAcad.ZoomWindow(extSelObj.MinPoint.ToArray(), extSelObj.MaxPoint.ToArray());
  79.                                             ed.SetImpliedSelection(new ObjectId[] { idcover });
  80.                                             // ed.SetImpliedSelection(new ObjectId[] { myRec });
  81.                                             ed.Command("._PSPACE", "");
  82.                                             doc.Editor.SwitchToPaperSpace();
  83.                                             dynamic acadApp = acApp.AcadApplication;
  84.                                             acadApp.ZoomExtents();
  85.                                             ed.WriteMessage("\n viewlocked : " + viewport.Locked.ToString());
  86.                                             break;
  87.                                         }
  88.                                         n += 1;
  89.                                         ed.Regen();
  90.                                     }
  91.                                 }
  92.                             }
  93.                     }
  94.                 }
  95.                 trans.Commit();
  96.                
  97.             }
  98.         }
回复

使用道具 举报

14

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2021-8-17 16:53:37 | 显示全部楼层
@gile
在这个文件中,每个文件都应该是我想要的
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 00:57 , Processed in 0.427215 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表