周
周仁
Unregistered / Unconfirmed
GUEST, unregistred user!
一. 我正在编一个工程制图程序,由于关系到映射模式.原打算采用MM_HIMETRIC模式,
(因为该模式可按实图缩小比例真实显示,但由于1,2两个原因,而改采用MM_isotropic模式,
是否是我的理解出了问题?)
1.据有关书籍说明GetDeviceCaps()函数无法精确测定显示器的显示长.宽的毫米尺寸,
所以建筑实体尺寸不能精确地按比例缩小显示.即采用MM_HIMETRIC模式,没有实际意义.
此说法是否正确?
2.由于制图需的精度特高,按以下编程达不到[(1个逻辑单位:1mm建筑实体现实尺寸)<1]的比例,
此编法有无错误,请指正.....
PrevMapMode:=SetMapMode(PaintBox1.canvas.handle,MM_HIMETRIC);
PaintHorZ:=GetDeviceCaps(PaintBox1.canvas.handle,HORZSIZE);显示器的显示长的毫米尺寸270mm
PaintVert:=GetDeviceCaps(PaintBox1.canvas.handle,VERTSIZE);显示器的显示宽的毫米尺寸
ScreenHorZ:=GetDeviceCaps(PaintBox1.canvas.handle,HORZRES);
bl1:=(Maxx+RightSpace+LeftSpace)/(PaintHorZ*PaintBox1.ClientWidth*10/ScreenHorz);
//bl1:=(9000mm+2000mm+3000mm)/(270mm*10*750像素分辨率/1024像素分辨率)
{ 按制图内容为300米宽*200米高考虑,需要PaintBox1.canvas上有30万个逻辑单位*20万个逻辑单位,
MM_HIMETRIC模式下最多有(270mm*10*750像素分辨率/1024像素分辨率)=1977个逻辑单位,与期待值
相差甚远.}
blc:=(Maxy+TopSpace+BottomSpace)/(PaintHorZ*PaintBox1.ClientHeight*10/ScreenHorz);
if bl1>blc then
begin
blc:=bl1;
end;
3.采用MM_isotropic模式,作以下编程
PrevMapMode:=SetMapMode(PaintBox1.canvas.handle,MM_isotropic);
SetWindowExtEx(PaintBox1.canvas.handle,300000,200000,nil);
SetViewportExtEx( PaintBox1.canvas.handle,PaintBox1.ClientWidth,-PaintBox1.ClientHeight,nil);
//以上两句是否将PaintBox1.canvas制图显示范围与图纸内容30米*20米完全对应???
SetViewPortOrgEx(PaintBox1.canvas.handle,0,PaintBox1.ClientHeight,nil);
GetWindowExtEx(PaintBox1.canvas.handle,size);//此句为debug用.
//!!!毛病出处 size返回(-27680个逻辑单位,3392个逻辑单位),
// 并不是(300000个逻辑单位,200000个逻辑单位);
//如何获得当前屏幕的最大逻辑单位个数?!!
GetViewportExtEx(PaintBox1.canvas.handle,size1);
bl1:=(Maxx+RightSpace+LeftSpace)/300000;
blc:=(Maxy+TopSpace+BottomSpace)/200000;
if bl1>blc then
begin
blc:=bl1;
end;
4.采用MM_isotropic模式,采用哪个函数可得到当前分辨率下的屏幕最大逻辑单位数量?
二.由于工程形状多样,若图纸中有弧形轴线,我该如何制作轴交点自动吸附鼠标功能?
是否以某一轴交点为中心,计算环形区域的四角坐标,若在该区域内则吸附鼠标?
三.如何检验一环形区域段为封闭区域?若未封闭,则将此缺口进行直线连接.
四.在家里为何别的网页正常显示,而大富翁的网页只能显示台头,不能显示内容....!!!!
不知缘由,望赐教。没法子,只能在网吧上大富翁的网页.
五.还有那些网页如同大富翁论坛一样精彩的,望前辈赐教!!
以上问题请高手揭贴,若有源程序,我将给与加分!!!
期待斑竹,吕雪松兄及3wccel兄的至诚帮助!
(因为该模式可按实图缩小比例真实显示,但由于1,2两个原因,而改采用MM_isotropic模式,
是否是我的理解出了问题?)
1.据有关书籍说明GetDeviceCaps()函数无法精确测定显示器的显示长.宽的毫米尺寸,
所以建筑实体尺寸不能精确地按比例缩小显示.即采用MM_HIMETRIC模式,没有实际意义.
此说法是否正确?
2.由于制图需的精度特高,按以下编程达不到[(1个逻辑单位:1mm建筑实体现实尺寸)<1]的比例,
此编法有无错误,请指正.....
PrevMapMode:=SetMapMode(PaintBox1.canvas.handle,MM_HIMETRIC);
PaintHorZ:=GetDeviceCaps(PaintBox1.canvas.handle,HORZSIZE);显示器的显示长的毫米尺寸270mm
PaintVert:=GetDeviceCaps(PaintBox1.canvas.handle,VERTSIZE);显示器的显示宽的毫米尺寸
ScreenHorZ:=GetDeviceCaps(PaintBox1.canvas.handle,HORZRES);
bl1:=(Maxx+RightSpace+LeftSpace)/(PaintHorZ*PaintBox1.ClientWidth*10/ScreenHorz);
//bl1:=(9000mm+2000mm+3000mm)/(270mm*10*750像素分辨率/1024像素分辨率)
{ 按制图内容为300米宽*200米高考虑,需要PaintBox1.canvas上有30万个逻辑单位*20万个逻辑单位,
MM_HIMETRIC模式下最多有(270mm*10*750像素分辨率/1024像素分辨率)=1977个逻辑单位,与期待值
相差甚远.}
blc:=(Maxy+TopSpace+BottomSpace)/(PaintHorZ*PaintBox1.ClientHeight*10/ScreenHorz);
if bl1>blc then
begin
blc:=bl1;
end;
3.采用MM_isotropic模式,作以下编程
PrevMapMode:=SetMapMode(PaintBox1.canvas.handle,MM_isotropic);
SetWindowExtEx(PaintBox1.canvas.handle,300000,200000,nil);
SetViewportExtEx( PaintBox1.canvas.handle,PaintBox1.ClientWidth,-PaintBox1.ClientHeight,nil);
//以上两句是否将PaintBox1.canvas制图显示范围与图纸内容30米*20米完全对应???
SetViewPortOrgEx(PaintBox1.canvas.handle,0,PaintBox1.ClientHeight,nil);
GetWindowExtEx(PaintBox1.canvas.handle,size);//此句为debug用.
//!!!毛病出处 size返回(-27680个逻辑单位,3392个逻辑单位),
// 并不是(300000个逻辑单位,200000个逻辑单位);
//如何获得当前屏幕的最大逻辑单位个数?!!
GetViewportExtEx(PaintBox1.canvas.handle,size1);
bl1:=(Maxx+RightSpace+LeftSpace)/300000;
blc:=(Maxy+TopSpace+BottomSpace)/200000;
if bl1>blc then
begin
blc:=bl1;
end;
4.采用MM_isotropic模式,采用哪个函数可得到当前分辨率下的屏幕最大逻辑单位数量?
二.由于工程形状多样,若图纸中有弧形轴线,我该如何制作轴交点自动吸附鼠标功能?
是否以某一轴交点为中心,计算环形区域的四角坐标,若在该区域内则吸附鼠标?
三.如何检验一环形区域段为封闭区域?若未封闭,则将此缺口进行直线连接.
四.在家里为何别的网页正常显示,而大富翁的网页只能显示台头,不能显示内容....!!!!
不知缘由,望赐教。没法子,只能在网吧上大富翁的网页.
五.还有那些网页如同大富翁论坛一样精彩的,望前辈赐教!!
以上问题请高手揭贴,若有源程序,我将给与加分!!!
期待斑竹,吕雪松兄及3wccel兄的至诚帮助!