dpec1982 发表于 2015-6-10 16:39:58

简单问题请教各位大侠

各位大侠:
            环境(vs2010+CAD2010)
弹出一个窗体(WinForm),上面有一个删除按钮,点击这个按钮如何删除cad中指定坐标(100,200)的一个块参照。千万别笑话小妹,谢谢

liuxu042 发表于 2015-6-10 17:01:27

这种问题真不想回答从基础学起吧   用到选择集知识( 你现在是还不会走就想跑,静下心来学习下基础先入门)

dpec1982 发表于 2015-6-11 08:32:22

我也不想跑啊,问题是项目着急啊,只能这样了,麻烦各位了

sieben 发表于 2015-6-11 13:01:58

本帖最后由 sieben 于 2015-6-11 13:12 编辑

问题很简单,选中图形,干掉,完事

sieben 发表于 2015-6-11 13:06:03

问题有点复杂
1,就算块参考位于(100,200),说的是插入点就是(100,200),或许选择这个点也选不中,因为(100,200)位置可能没有图形,没有测试不确定
2,(100,200)可能不在当前的视窗范围内,那么也会选择不上
3,只要是块参考就干掉呢?还是只干掉指定名字的块参考?

sieben 发表于 2015-6-11 13:09:35

本帖最后由 sieben 于 2015-6-11 13:11 编辑

问题还有点麻烦
1,因为是对话框操作,还应该有个锁定和解锁的处理
2,因为是只删除块参考,还应该搞个过滤器

sieben 发表于 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:这只是示意,不是实例

dpec1982 发表于 2015-6-11 14:07:49

sieben 发表于 2015-6-11 13:23 static/image/common/back.gif
private void btn_SelectOAS_Click(object sender, EventArgs e)
    {
      DocumentLock dLock =...

大侠,我给的这个坐标,在图例肯定是有对应的块参照,就是想根据这个坐标值,删除他,说白了,就是想根据这个坐标值,在图中找到这个块参照(保证每个坐标对应一个块参照)

雪山飞狐_lzh 发表于 2015-6-11 22:10:50

如果已知插入点。用下面的过滤器
0,"insert"
10,pt

dpec1982 发表于 2015-6-12 09:52:31

雪山飞狐_lzh 发表于 2015-6-11 22:10 static/image/common/back.gif
如果已知插入点。用下面的过滤器
0,"insert"
10,pt

大侠:能写的详细点吗,给段演示代码呗,谢谢。小妹在此恳求
页: [1]
查看完整版本: 简单问题请教各位大侠