社区
C++ Builder
帖子详情
CAD软件中,图形(直线,圆,多边形等)的拾取是怎么样实现的
leejd
2003-03-20 04:40:16
目前所有的CAD软件,都可以做到对图形的拾取,并对图形进行操作。其数据组织结构我大概明白,但是我对图形拾取部分不是很了解。怎么样判断出鼠标所选的区域含有图形,并在内存中检测出其属性,然后对完整的图形进行加亮显示?
还有,CAD软件一般都能做到无级缩放,这个原理是什么,怎么样在我的程序中显示放大后的图形的可视部分?
...全文
317
4
打赏
收藏
CAD软件中,图形(直线,圆,多边形等)的拾取是怎么样实现的
目前所有的CAD软件,都可以做到对图形的拾取,并对图形进行操作。其数据组织结构我大概明白,但是我对图形拾取部分不是很了解。怎么样判断出鼠标所选的区域含有图形,并在内存中检测出其属性,然后对完整的图形进行加亮显示? 还有,CAD软件一般都能做到无级缩放,这个原理是什么,怎么样在我的程序中显示放大后的图形的可视部分?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
meCAD
2003-03-23
打赏
举报
回复
这是选择直线图元的例子.抄书上来的.
bool PickLine(LINENODE *linenode)
{
bool returncode = false;
double x = PrePoint.x-linnode->Start.x;
double y = PrePoint.y-linnode->Start.y;
double a = linenode->End.x-linenode->Start.x;
double b = linenode->End.y-linenode->Start.y;
double c = sqrt(a*a+b*b);
double sin = b/c;
double cos = a/c;
double chg_x = x*cos+y*sin;
double chg_y = -x*sin+y*cos;
if(fabs(chg_y)<5.0 && (chg_x>=0 && chg_x<=c))
returncode = true;
return returncode;
}
直线:
struct LINNODE
{
BYTE bType; //绘图单元的类型
int bDo;
//该记录的状态:比如 bDo>0 不显示此单元 =1 显示. =2被选择. =3移动等..
int Index; //图元索引
POINT Start; //直线的起点.
POINT End; //直线的终点.
LINENODE() //直线图元的初始化函数
{
bType = LINE; //
bDo = 1;
};
};
如果该直线图元被选中的则函数返回true,否则返回false;,其中.参数linenode为检索出的直线图元数据指针, PrePoint 为上次老鼠单击的位置
woodgl
2003-03-23
打赏
举报
回复
直线的拾取:
1.给一直线p1p2,和一点p
2.设定一拾取半径d,一般小于3个像素。
3.构造一矩形r=(p.x-d, p.y-d, p.x+d, p.y+d)
4.如果p1p2和r相交,则可认为点p在p1p2上
基本原理就这样,其它的自己设计吧。。。。。。。
速度问题,要用双缓冲和剪裁。。。。。
Lewolf
2003-03-21
打赏
举报
回复
这就是人家的技术机密了,我也尝试过放缩等功能,可是速度要差的多。
yyqing
2003-03-21
打赏
举报
回复
1.采用数值逼近算法确定图形的选取
2.在程序中按指定比例放大图形,将屏幕显示部分映射到放大后的图形上,截取映射图形即可显示可视部分
【
CAD
】
CAD
入门知识
CAD
的基础知识与操作
CAD
入门教程,基本设置,使用技巧
cad
入门教程、操作步骤。
cad
基本
图形
绘画教程
使用
CAD
圆
和
多边形
内、外接
圆
命令绘制
图形
。使用
CAD
多线段命令绘制
图形
如下图所示根据标注的尺寸,用
CAD
画图
软件
绘制出一样的
图形
:
Auto-
CAD
入门学习笔记
鼠标左键:从左到右 => 需要全覆盖选择从右到左 => 包含对象即可选择。
C#之
CAD
二次开发(4)
CAD
常用
图形
封装
0. 引言 在了解了如何进行封装后,我们需要将
CAD
中
涉及的一些常用
图形
都封装好,比如:
直线
、
圆
弧、
圆
、多段线、椭
圆
等,以后需要就直接拿出来用就好了。 在这之前还是再次回顾一下
CAD
中
类的继承关系是怎样的: 可以看到Line(
直线
)、Arc(
圆
弧)、Circle(
圆
)、Polyline(多段线)、Ellipse(椭
圆
)这些类都是继承于Curve(曲线)类,而曲线类又继承于Entit...
C++ Builder
13,871
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章