Example #1
0
        public void GetPointsWithinBoundary(BoundingCuboid area, ref List <Point3Int <T> > points)
        {
            if (!Boundary.DoesBoundaryCuboidIntersect(area))
            {
                return;
            }

            if (Points != null)
            {
                GetLocalPointsInCuboid(area, ref points);
            }
            else
            {
                ULF.GetPointsWithinBoundary(area, ref points);
                URF.GetPointsWithinBoundary(area, ref points);
                URB.GetPointsWithinBoundary(area, ref points);
                ULB.GetPointsWithinBoundary(area, ref points);
                BLF.GetPointsWithinBoundary(area, ref points);
                BRF.GetPointsWithinBoundary(area, ref points);
                BLB.GetPointsWithinBoundary(area, ref points);
                BRB.GetPointsWithinBoundary(area, ref points);
            }
        }
Example #2
0
        public static string Read(int length)
        {
            #region 读就诊卡变量
            /// <summary>
            /// 设备ID
            /// </summary>
            int _icdev = -1;
            /// <summary>
            /// 当前IC卡号
            /// </summary>
            int _cardId = 0;
            #endregion
            if (length > 720)
            {
                throw new ArgumentException("要读取的长度太长");
            }

            StringBuilder data = new StringBuilder(length);   //存放读取出的数据

            try
            {
                int result;                     //设备API函数返回的结果

                #region 初始化设备
                //连接设备并设置波特率
                _icdev = URF.rf_init(0, 9600);
                if (_icdev < 0)
                {
                    MessageBox.Show(_icdev.ToString());
                }
                //寻卡
                result = URF.rf_card((Int16)_icdev, 1, ref _cardId);
                if (result != 0)
                {
                    MessageBox.Show(result.ToString());
                }
                //加载密码
                result = URF.rf_load_key_hex(_icdev, 0, 0, "FFFFFFFFFFFF");
                if (result != 0)
                {
                    MessageBox.Show(result.ToString());
                }
                #endregion

                #region 读取
                int readedBlock = 0;                    //标识变量,标识已读取的块数

                int block = length / 16;                //要读取的字符长度所占的块数
                if (length % 16 != 0)
                {
                    block++;                            //如果有字符占不满一个块就多加一个
                }
                int sector = block / 3;                 //字符串所占的扇区
                if (block % 3 != 0)
                {
                    sector++;                           //如果块占不满一个扇区同样多加一个扇区
                }
                //遍历扇区
                for (int sq = 1; sq <= sector; sq++)
                {
                    //验证该扇区密码
                    result = URF.rf_authentication(_icdev, 0, sq);
                    if (result != 0)
                    {
                        // MessageBox.Show(result.ToString());
                    }
                    //遍历块
                    for (int bk = 0; bk < 3; bk++)
                    {
                        if (readedBlock < block)
                        {
                            StringBuilder tempData = new StringBuilder(64);
                            result = URF.rf_read(_icdev, sq * 4 + bk, tempData);

                            //如果超过16位后面的是乱码(原因未深究.)
                            if (tempData.Length > 16)
                            {
                                data.Append(tempData.ToString().Substring(0, 16));
                            }
                            else
                            {
                                data.Append(tempData.ToString());
                            }
                            readedBlock++;
                        }
                    }
                }
                #endregion
            }

            catch (ArgumentException ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                //释放设备
                if (_cardId != 0)
                {
                    URF.rf_halt((Int16)_icdev);
                    _cardId = 0;
                }
                if (_icdev > 0)
                {
                    URF.rf_exit(_icdev);
                    _icdev = -1;
                }
            }

            return(data.ToString());
        }