明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 888|回复: 9

简单问题请教各位大侠

[复制链接]
发表于 2015-6-10 16:39:58 | 显示全部楼层 |阅读模式
各位大侠:
              环境(vs2010+CAD2010)
弹出一个窗体(WinForm),上面有一个删除按钮,点击这个按钮如何删除cad中指定坐标(100,200)的一个块参照。千万别笑话小妹,谢谢
发表于 2015-6-10 17:01:27 | 显示全部楼层
这种问题真不想回答  从基础学起吧   用到选择集知识  ( 你现在是还不会走就想跑,静下心来学习下基础先入门)
 楼主| 发表于 2015-6-11 08:32:22 | 显示全部楼层
我也不想跑啊,问题是项目着急啊,只能这样了,麻烦各位了
发表于 2015-6-11 13:01:58 | 显示全部楼层
本帖最后由 sieben 于 2015-6-11 13:12 编辑

问题很简单,选中图形,干掉,完事
发表于 2015-6-11 13:06:03 | 显示全部楼层
问题有点复杂
1,就算块参考位于(100,200),说的是插入点就是(100,200),或许选择这个点也选不中,因为(100,200)位置可能没有图形,没有测试不确定
2,(100,200)可能不在当前的视窗范围内,那么也会选择不上
3,只要是块参考就干掉呢?还是只干掉指定名字的块参考?
发表于 2015-6-11 13:09:35 | 显示全部楼层
本帖最后由 sieben 于 2015-6-11 13:11 编辑

问题还有点麻烦
1,因为是对话框操作,还应该有个锁定和解锁的处理
2,因为是只删除块参考,还应该搞个过滤器
发表于 2015-6-11 13:23:17 | 显示全部楼层
本帖最后由 sieben 于 2015-6-11 13:25 编辑

    private void btn_SelectOAS_Click(object sender, EventArgs e)
    {
      DocumentLock dLock = aApp.DocumentManager.MdiActiveDocument.LockDocument();
      try
      {
        //this.Hide();这个你可以不用
        TypedValue[] arrValue1 = { new TypedValue(1001, "PAOAS") };//过滤器要用你自己的哦
        SelectionFilter selFilter1 = new SelectionFilter(arrValue1);
        PromptSelectionOptions psOpt4 = new PromptSelectionOptions();
        psOpt4.MessageForAdding = "\n选择OAS命令生成的图形";
        psOpt4.SingleOnly = true;//这个要注意看是否必要
        PromptSelectionResult psRes4 = sc.ed.GetSelection(psOpt4, selFilter1);   
         //你应该用这个 public PromptSelectionResult SelectFence(Point3dCollection fence, SelectionFilter filter);
        //或者用这个public PromptSelectionResult SelectCrossingPolygon(Point3dCollection polygon, SelectionFilter filter);
       //又或者public PromptSelectionResult SelectCrossingWindow(Point3d pt1, Point3d pt2);
        if (psRes4.Status == PromptStatus.OK)
        {   
          using (Transaction ctrans = sc.db.TransactionManager.StartTransaction())
          {
            foreach (ObjectId tId in psRes4.Value.GetObjectIds())
            {
              Entity ent1 = (Entity)ctrans.GetObject(tId, OpenMode.ForWrite);
                //这里,你想干嘛就干嘛,你想干掉他?还是想给他化个妆?都可以
            }
            ctrans.Commit();
          }
        }
      }
      catch (System.Exception ex)
      {
        se.WriteMessage(ex);
      }
      finally
      {
          // this.Show();这个你可以不用
        dLock.Dispose();//这个千万不要忘记了
      }
    }
PS:这只是示意,不是实例
 楼主| 发表于 2015-6-11 14:07:49 | 显示全部楼层
sieben 发表于 2015-6-11 13:23
private void btn_SelectOAS_Click(object sender, EventArgs e)
    {
      DocumentLock dLock =  ...

大侠,我给的这个坐标,在图例肯定是有对应的块参照,就是想根据这个坐标值,删除他,说白了,就是想根据这个坐标值,在图中找到这个块参照(保证每个坐标对应一个块参照)
发表于 2015-6-11 22:10:50 来自手机 | 显示全部楼层
如果已知插入点。用下面的过滤器
0,"insert"
10,pt
 楼主| 发表于 2015-6-12 09:52:31 | 显示全部楼层
雪山飞狐_lzh 发表于 2015-6-11 22:10
如果已知插入点。用下面的过滤器
0,"insert"
10,pt

大侠:能写的详细点吗,给段演示代码呗,谢谢。小妹在此恳求
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 11:50 , Processed in 0.171789 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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