jxzz016590 发表于 2011-6-10 11:38:27

历时一个月终于基本完成了我的框选程序,拿来让大家指正一下

程序基本能用,但是肯定还有很多问题。请高手不吝赐教。加载以后用KX命令,在图上拖一个矩形,则矩形内部的图像就被截取下来,指定一个点将截图复制下来。

yichifanjiulei 发表于 2011-6-10 12:46:35

?程序在哪里,没看到

jxzz016590 发表于 2011-6-10 13:55:03

不好意思程序忘了传上来了

xiwuchen@qq 发表于 2011-6-10 14:26:30

试用了,没能达到效果,有些实体未能复制

sieben 发表于 2011-6-10 14:34:20

         1,个人觉得以下代码不怎么好!
else if ((entity is ArcDimension) | (entity is AlignedDimension) | (entity is ArcDimension) | (entity is DiametricDimension)
                | (entity is LineAngularDimension2) | (entity is RadialDimension) | (entity is Point3AngularDimension)
                | (entity is RotatedDimension) | (entity is Dimension)|(entity is BlockReference)|(entity is Polyline2d))
2,建议在CrossingWindow InWindow函数里面使用Clone()数,而不要在后面使用GetTransformedCopy,出于安全考虑,原因在你上次贴里我已说过
3,建议适度的使用一些try catch ,原因在你上次贴里我已说过
4,请教个问题?你这是什么版本的 VS 和 AutoCAD
5,不要脸的表扬一下下面这段代码Point3d[] pts = points.Cast<Point3d>().OrderBy(point => curve.GetDistAtPoint(point)).ToArray();,原因觉得一些细节考虑到了!

sieben 发表于 2011-6-10 14:47:27

本帖最后由 sieben 于 2011-6-10 14:55 编辑

public void DealEntity(Entity entity, Point3d ptStart, Point3d ptEnd, Point3d targetPt, Document doc)
      {
      Database db = doc.Database;
      if (entity is Hatch)
      {
          DBObjectCollection explodedEntity = new DBObjectCollection();
          Hatch hatch = (Hatch)entity;
          if (!hatch.IsSolidFill)
          {
            entity.Explode(explodedEntity);
            if (explodedEntity != null && explodedEntity.Count > 0)
            {
            foreach (Entity explodedEnt in explodedEntity)
            {
                DealEntity(explodedEnt, ptStart, ptEnd, targetPt, doc);
            }
            }
            else
            {
            CopyEntity(entity, ptStart, targetPt, doc);
            }
          }
          else
          {
            CopyEntity(entity, ptStart, targetPt, doc);
          }
      }
      else if (entity is Curve)
      {
          TrimCurve(entity, ptStart, ptEnd, targetPt, db);
      }
      else if (entity is DBText || entity is MText || entity is DBPoint || entity is Solid)
      {
          CopyEntity(entity, ptStart, targetPt, doc);
      }
      else
      {
          DBObjectCollection explodedEntity = new DBObjectCollection();
          entity.Explode(explodedEntity);
          if (explodedEntity != null && explodedEntity.Count > 0)
          {
            foreach (Entity explodedEnt in explodedEntity)
            {
            DealEntity(explodedEnt, ptStart, ptEnd, targetPt, doc);
            }
          }
          else
          {
            CopyEntity(entity, ptStart, targetPt, doc);
          }
      }
      }
这个函数这样调整一下会不会好些?

jxzz016590 发表于 2011-6-10 15:31:11

回复 xiwuchen@qq 的帖子

能不能把你的图纸发一份给我。我的qq:329428084.谢谢

jxzz016590 发表于 2011-6-10 15:32:24

回复 sieben 的帖子

我用的是vs2010和autocad2009

cdinten 发表于 2011-6-12 18:11:55

学习学习,能不能把功能什么的说详细一点??

jxzz016590 发表于 2011-6-13 08:44:00

回复 cdinten 的帖子

功能很简单,就是在画好的一张图纸上,输入KX命令(先得加载写的程序),用鼠标先选择矩形框的顶点,再选择对角点,然后选择任意一个点,将刚才在矩形框里面的图纸部分复制到这个点上
页: [1] 2
查看完整版本: 历时一个月终于基本完成了我的框选程序,拿来让大家指正一下