明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2832|回复: 10

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

[复制链接]
发表于 2011-6-10 11:38:27 | 显示全部楼层 |阅读模式
程序基本能用,但是肯定还有很多问题。请高手不吝赐教。加载以后用KX命令,在图上拖一个矩形,则矩形内部的图像就被截取下来,指定一个点将截图复制下来。
发表于 2011-6-10 12:46:35 | 显示全部楼层
?程序在哪里,没看到
 楼主| 发表于 2011-6-10 13:55:03 | 显示全部楼层
不好意思程序忘了传上来了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-6-10 14:26:30 | 显示全部楼层
试用了,没能达到效果,有些实体未能复制
发表于 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();,原因觉得一些细节考虑到了!
发表于 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);
          }
        }
      }
这个函数这样调整一下会不会好些?
 楼主| 发表于 2011-6-10 15:31:11 | 显示全部楼层
回复 xiwuchen@qq 的帖子

能不能把你的图纸发一份给我。我的qq:329428084.谢谢
 楼主| 发表于 2011-6-10 15:32:24 | 显示全部楼层
回复 sieben 的帖子

我用的是vs2010和autocad2009
发表于 2011-6-12 18:11:55 | 显示全部楼层
学习学习,能不能把功能什么的说详细一点??
 楼主| 发表于 2011-6-13 08:44:00 | 显示全部楼层
回复 cdinten 的帖子

功能很简单,就是在画好的一张图纸上,输入KX命令(先得加载写的程序),用鼠标先选择矩形框的顶点,再选择对角点,然后选择任意一个点,将刚才在矩形框里面的图纸部分复制到这个点上
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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