明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1847|回复: 1

[基础] 请教过滤器 的问题 c#

[复制链接]
发表于 2016-7-5 18:13:35 | 显示全部楼层 |阅读模式
《auto cad vba & vb.net 开发基础与实例教程》 第二版中的问题

            Point3d pt1 = new Point3d(0, 0, 0);
            Point3d pt2 = new Point3d(100, 100, 0);

            TypedValueList values = new TypedValueList();

            values.Add(typeof(Circle));
            //实际上调用了
            //public void Add(Type entityType) {base.Add(new TypedValue(0, RXClass.GetClass(entityType).DxfName)); }

            values.Add(DxfCode.Operator, ">,>,*");
            values.Add(DxfCode.XCoordinate, pt1);

            values.Add(DxfCode.Operator, "<,<,*");
            values.Add(DxfCode.XCoordinate, pt2);

            SelectionFilter filter = new SelectionFilter(values);

书上说上面这段代码是,选择了 圆心在 pt1 pt2 构成的矩形内的圆。其中DxfCode.XCoordinate(DXF组码为10),用于指定圆的圆心。

问题:
            values.Add(DxfCode.Operator, ">,>,*");
            values.Add(DxfCode.XCoordinate, pt1);

猜测这两句是想说:x坐标> pt1.x, y坐标>pt1.y, z坐标任意。

但是,DxfCode.XCoordinate 应该是仅仅指 X 坐标啊。。。。并没有说Y的事,Z的事。

好像 DxfCode.YCoordinate 组码是 20 ,DxfCode.ZCoordinate 组码是 30




//程序集 acdbmgd.dll, v2.0.50727
namespace Autodesk.AutoCAD.DatabaseServices
{
    public struct TypedValue
    {
        public TypedValue(int typeCode);
        public TypedValue(int typeCode, object value);
    }
}



附:
作者自己建立的 TypedValueList  类。

/// <summary>
    /// TypedValue列表类,简化选择集过滤器的构造
    /// </summary>
    public class TypedValueList : List<TypedValue>
    {
        /// <summary>
        /// 接受可变参数的构造函数
        /// </summary>
        /// <param name="args">TypedValue对象</param>
        public TypedValueList(params TypedValue[] args)
        {
            AddRange(args);
        }

        /// <summary>
        /// 添加DXF组码及对应的类型
        /// </summary>
        /// <param name="typecode">DXF组码</param>
        /// <param name="value">类型</param>
        public void Add(int typecode, object value)
        {
            base.Add(new TypedValue(typecode, value));
        }

        /// <summary>
        /// 添加DXF组码
        /// </summary>
        /// <param name="typecode">DXF组码</param>
        public void Add(int typecode)
        {
            base.Add(new TypedValue(typecode));
        }

        /// <summary>
        /// 添加DXF组码及对应的类型
        /// </summary>
        /// <param name="typecode">DXF组码</param>
        /// <param name="value">类型</param>
        public void Add(DxfCode typecode, object value)
        {
            base.Add(new TypedValue((int)typecode, value));
        }

        /// <summary>
        /// 添加DXF组码
        /// </summary>
        /// <param name="typecode">DXF组码</param>
        public void Add(DxfCode typecode)
        {
            base.Add(new TypedValue((int)typecode));
        }

        /// <summary>
        /// 添加图元类型,DXF组码缺省为0
        /// </summary>
        /// <param name="entityType">图元类型</param>
        public void Add(Type entityType)
        {
            base.Add(new TypedValue(0, RXClass.GetClass(entityType).DxfName));
        }

        /// <summary>
        /// TypedValueList隐式转换为SelectionFilter
        /// </summary>
        /// <param name="src">要转换的TypedValueList对象</param>
        /// <returns>返回对应的SelectionFilter类对象</returns>
        public static implicit operator SelectionFilter(TypedValueList src)
        {
            return src != null ? new SelectionFilter(src) : null;
        }

        /// <summary>
        /// TypedValueList隐式转换为ResultBuffer
        /// </summary>
        /// <param name="src">要转换的TypedValueList对象</param>
        /// <returns>返回对应的ResultBuffer对象</returns>
        public static implicit operator ResultBuffer(TypedValueList src)
        {
            return src != null ? new ResultBuffer(src) : null;
        }

        /// <summary>
        /// TypedValueList隐式转换为TypedValue数组
        /// </summary>
        /// <param name="src">要转换的TypedValueList对象</param>
        /// <returns>返回对应的TypedValue数组</returns>
        public static implicit operator TypedValue[](TypedValueList src)
        {
            return src != null ? src.ToArray() : null;
        }

        /// <summary>
        /// TypedValue数组隐式转换为TypedValueList
        /// </summary>
        /// <param name="src">要转换的TypedValue数组</param>
        /// <returns>返回对应的TypedValueList</returns>
        public static implicit operator TypedValueList(TypedValue[] src)
        {
            return src != null ? new TypedValueList(src) : null;
        }

        /// <summary>
        /// SelectionFilter隐式转换为TypedValueList
        /// </summary>
        /// <param name="src">要转换的SelectionFilter</param>
        /// <returns>返回对应的TypedValueList</returns>
        public static implicit operator TypedValueList(SelectionFilter src)
        {
            return src != null ? new TypedValueList(src.GetFilter()) : null;
        }

        /// <summary>
        /// ResultBuffer隐式转换为TypedValueList
        /// </summary>
        /// <param name="src">要转换的ResultBuffer</param>
        /// <returns>返回对应的TypedValueList</returns>
        public static implicit operator TypedValueList(ResultBuffer src)
        {
            return src != null ? new TypedValueList(src.AsArray()) : null;
        }

    }




该贴已经同步到 cadnetkaifa的微博
发表于 2018-1-29 14:15:04 | 显示全部楼层
我举得<<>>是范围的意思,即是矩形对角点p1 p2范围,猜测的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-29 01:48 , Processed in 0.246510 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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