明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 889|回复: 7

坐标问题

[复制链接]
发表于 2015-6-11 10:29:01 | 显示全部楼层 |阅读模式
各位大侠:
                环境(vs2010+cad2010)
              我从SQL数据中能读出DWG文件中一个块参照的坐标,怎么根据坐标这个坐标找到具体的块,也就是说,我想根据这个坐标删除这个块,怎么做啊,小妹很为难,谢谢。
发表于 2015-6-11 11:00:49 | 显示全部楼层
  1. Dim PtFormSQL As New Autodesk.AutoCAD.Geometry.Point3d(0, 0, 0) '这是你从SQL中读取的坐标值
  2.                     Using Trans As Transaction = doc.TransactionManager.StartTransaction
  3.                         Dim BlkTab As BlockTable = Trans.GetObject(doc.Database.BlockTableId, OpenMode.ForRead)
  4.                         For Each ID As ObjectId In BlkTab
  5.                             Dim Ent As Entity = Trans.GetObject(ID, OpenMode.ForRead)
  6.                             If TypeOf Ent Is BlockReference Then
  7.                                 Dim Blk As BlockReference = Ent
  8.                                 Dim Pt As Autodesk.AutoCAD.Geometry.Point3d = Blk.Position
  9.                                 If Blk.Name = "xxxx" AndAlso Pt.DistanceTo(PtFormSQL) <= 0.1 Then '距离根据实际情况确定
  10.                                     '如果小于容差,就认为这个块你你想要的
  11.                                     '要不要判断名称,看着办
  12.                                 End If
  13.                             End If
  14.                         Next
  15.                     End Using
 楼主| 发表于 2015-6-11 11:05:38 | 显示全部楼层
guohq 发表于 2015-6-11 11:00

谢谢,谢谢大侠,我试试,非常感谢。
 楼主| 发表于 2015-6-11 14:09:02 | 显示全部楼层
guohq 发表于 2015-6-11 11:00

大侠:这句话If TypeOf Ent Is BlockReference Then,翻译成C#怎么写啊,我很菜,对不起
 楼主| 发表于 2015-6-11 14:58:21 | 显示全部楼层
guohq 发表于 2015-6-11 11:00

我按照你的做的为什么我的Ent一直返回是空啊,而ID是有值的。
        private void getBlkForPt(Point3d dataBasePt)
        {
            Document doc = app.DocumentManager.MdiActiveDocument;
            BlockReference Blk = null;
            using (Transaction trans = doc.TransactionManager.StartTransaction())
            {
                BlockTable BlkTab = (BlockTable)trans.GetObject(doc.Database.BlockTableId, OpenMode.ForRead,true) as BlockTable;
                foreach (ObjectId ID in BlkTab)
                {
                    Entity Ent = trans.GetObject(ID,OpenMode.ForRead,true) as Entity;
                    if (Ent != null)
                    {
                        if (Ent is BlockReference)
                        {
                            Blk = (BlockReference)Ent;
                            Point3d pt = Blk.Position;
                            if (pt.DistanceTo(dataBasePt) <= 1)
                            {
                                Blk.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(255, 0, 0);
                            }
                        }
                    }
                }
            }

        }
发表于 2015-6-12 00:10:45 | 显示全部楼层
  if (Ent is BlockReference) 可能是这里有问题
发表于 2015-6-12 08:46:08 来自手机 | 显示全部楼层
Ent as BlockReference  != null
发表于 2015-6-12 09:35:04 来自手机 | 显示全部楼层
用选择集 我在另一个帖子回了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 11:30 , Processed in 0.182190 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表