用lisp开发视口分割

鼠标进入视口时,自动捕捉视口对象,判断视口的长宽形状,如果宽大于高,分割线就是竖线,反之,分割线就是横线。分割线随鼠标移动,进入另一个视口时,会重新计算和变换分割线位置及方向,可以按键T,转换方向,如果为横向,则变为竖向,如果为竖向则变为横向。按鼠标左键,则在当前位置分割当前视口,直到按鼠标右键或回车、空格,循环退出。
开发分为3种情况:
1.如果是单一简单视口(矩形视口),计算当前鼠标位置坐标,计算分割为两个的视口边界,直接切割视口。
2.如果分割线两端连接的边界不是圆弧,通过读取原来视口边界线的多段线坐标及凸度值,拼接成两个封闭多边形(可包括圆弧),再切割视口。
3.如果分割线两端连接的边界,包含圆弧,就通过trim实现视口边界的分割比较简单,如果采用第2种方式,因为圆弧的凸度为题,包含顶点的顺序,如果错乱,会导致结果异常。圆弧的凸度,只能读取起始点和中点,其他点凸度为0。凸度是 tan(a / 4) ,a是圆心角,圆弧逆时针为正,顺时针为负。
简单视口,仅有一个对象是VIEWPORT ,多边形视口或圆形视口,不仅包括VIEWPORT,还包括裁剪边界对象,两个对象相互捆绑,隐藏或删除其中一个,另一个也会发生变化。第3种方式,会引起图像的闪烁,因此在有圆弧段,处理繁琐时,采用。
相关文件fgsk.lsp
浙公网安备 33010602011771号