CN1567192A - 房屋面积测量计算系统集成 - Google Patents

房屋面积测量计算系统集成 Download PDF

Info

Publication number
CN1567192A
CN1567192A CN 03132481 CN03132481A CN1567192A CN 1567192 A CN1567192 A CN 1567192A CN 03132481 CN03132481 CN 03132481 CN 03132481 A CN03132481 A CN 03132481A CN 1567192 A CN1567192 A CN 1567192A
Authority
CN
China
Prior art keywords
area
arc
room
int
urg
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 03132481
Other languages
English (en)
Inventor
程欣
李彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN 03132481 priority Critical patent/CN1567192A/zh
Publication of CN1567192A publication Critical patent/CN1567192A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Processing Or Creating Images (AREA)

Abstract

房屋面积测量计算系统集成,涉及一种房屋面积测量计算系统集成,包括硬件和计算软件。目前的房屋测绘方法是在房屋建好后人工使用尺或测距仪,将测量结果记录下来另行计算。目前还没有合适的自动化工具来实现房屋面积的自动测量和计算方法。房屋面积测量计算系统集成,其组成包括:装在主机箱5中的工业控制单板机,所述的单板机的输入装置包括:15-21键小键盘1,球迹鼠标2、触摸屏3和/或激光测距仪,所述的单板机的输出设备包括:所述的液晶触摸屏3、外接打印机和外接硬盘,接口为4,以及电池,所述的单板机中装有房屋面积测量计算系统软件。本产品用作便携式的房屋面积测量计算设备。

Description

房屋面积测量计算系统集成
技术领域:本发明涉及一种房屋面积测量计算系统集成,包括硬件和计算软件。
背景技术:目前的房屋测绘方法是在房屋建好后人工使用尺或测距仪,将测量结果记录下来另行计算。这种方法存在以下几个不便:
1.尺寸使用人工抄写,容易出错;
2.测量人员在现场手工绘制实际建筑图,不精确而且容易漏掉边角;
3.测量时间长,中等规模的楼每栋需要一至两天时间;
4.存在人为修改实际测量值的可能;
5.某些面积计算方法不容易被接受,对测量人员素质要求高;
6.若计算规则改变,返回计算难度大。
目前还没有合适的自动化工具来实现房屋面积的自动测量和计算方法。
发明内容:本发明的目的是提供一种自动化工具来实现房屋面积的自动测量和计算方法系统的软硬件的集合,通过该系统集合作出符合国家表标准的计算结果,并打印出相应的存档硬拷贝。
上述的目的通过以下的技术方案实现:
房屋面积测量计算系统集成,其组成包括:工业控制单板机,所述的单板机的输入装置包括:15-21键小键盘,球迹鼠标、触摸屏和/或激光测距仪,所述的单板机的输出设备包括:所述的液晶触摸屏、外接打印机和外接硬盘,以及电池,所述的单板机中装有房屋面积测量计算系统软件。
所述的房屋面积测量计算系统集成中,所述的软件包括文件存取、绘图、参数修正、计算、重绘、打印等模块,进行房屋测绘中的预先草图绘制、现场数据输入及参数修正、按比例对实图放大缩小进行重建、数据计算、各种所需数据打印等功能模块,采用ANSIC和C++混合编程。
这个技术方案有以下有益效果:
1.本系统的开发由于采用PC104微型计算机作为硬件平台,因此需要在分辨率为640*480的DOS环境的图形模式,采用C语言对图形绘制、处理、运算等进行编程。由于DOS环境下可供使用的内存比较小,因此在图形可视化编程过程中,需要不断的对程序进行优化,实现对内存的合理使用,从而在DOS环境下,利用编程实现了利用鼠标控制的仿WINDOWS可视化操作界面。
2.建筑面积测绘是一个比较复杂的测量和计算过程,本系统在设计过程中,根据国家建筑面积测绘标准,采用面向对象的C++图形编程,实现了对各种形状面积的计算,并实现了公有面积的一次分摊和二次分摊。
3.由于本系统采用中文可视化界面,在开发过程中采用了C语言DOS环境下汉字库的调用技术,汉字库为希望汉字系统的16位点阵宋体字库。采用PLC5(Printer Command Language)打印机命令语言,实现在了DOS环境下激光打印机的驱动。
4.本产品的硬件采用PC-104微型计算机加小液晶显示器,显示器侧面装有自定义含有15-21个键的键盘,可外接鼠标、测距仪。可以自行编制测量计算软件,可以严格的按照国家标准对距离和面积进行测量。
5.操作简便,计算过程自动化,测量人员只要将数据输入马上就可得到计算结果;测量精度高,能精确到毫米级且可对精度调整;
6.操作图形界面化,先制图后计算,避免漏测和误测;计算规则可根据国家标准的更新而改变;体积小,只有字典大小,携带方便。
7.软件包括房屋测绘中的预先草图绘制、现场数据输入及参数修正、按比例对实图放大缩小进行重建、数据计算、各种所需数据打印等功能模块,所以运行速度快、软件所占空间小(只有269k),可以只用一个电子盘(8M)就能装下所有的应用软件和存储数据。
附图说明:附图1是本发明的结构示意图。
本发明的具体实施方式:
实施例1:
房屋面积测量计算系统集成,其组成包括:装载主机箱5中的工业控制单板机,所述的单板机的输入装置包括:15-21键小键盘1,球迹鼠标2、触摸屏3和/或激光测距仪,所述的单板机的输出设备包括:所述的液晶触摸屏3、外接打印机和外接硬盘,接口为4,以及电池,所述的单板机中装有房屋面积测量计算系统软件。
其中:
1.硬件部分的构件详述如下:
主机板采用PC\104系列单板工业控制机
处理器            -ZFx86 CPU
系统芯片集        -板上集成16MB/32MB系统内存
BIOS              -Phoenix BIOS 4.0 Revision 6
                  -C&T69000 LCD/CRT视频加速器2MB SDRAM,LCD和
在板视频          CRT同步显示640×480×24bpp、800×600×24bpp、
                  1024×768×16bpp、1280×1024×8bpp,
在板LAN           -Realtek RTL8139C 10/100Mbps以太控制器
IDE控制器         -一个Ultra33通道,支持2个EIDE设备
USB接口           -二个USB接口
多I/O接口         -一个FDD接口、一个并口、二个RS-232、一个PS/2键盘
                  /鼠标接口、一个115kbps IrDA接口
固态盘接口        -CompactFlash接口电子盘
看门狗定时器      -1~255秒可编程
扩充总线          -PC/104
电源              -单+5V电源供电,5V/900mA(典型值)
外形尺寸          -96mm×90mm
工作温度          --10℃~60℃
相对湿度          -5%--90%,非凝结
输入设备:
自制小键盘:
自制15键小键盘,包括“0~9”“A”“G”“Z”“回车”“删除”键。这些键是根据软件系统的设计而定的。键盘采用标准的键盘设计方法,
采用标准的键盘连接线连接到主机板的ps/2键盘口上。
轨迹球鼠标:
用ps/2鼠标连接线连接到主机板的ps/2接口上。因为轨迹球鼠标定为比较精确,用户可以比较精确、方便的利用鼠标完成房屋图纸的绘制工作。
液晶触摸屏:
我们采用东芝9英寸的黑白夜景触摸屏。用专用的15针视频连接线连接到主机板上的VGA/LCD显示输出接口。控制接口直接连接到主机板的LCD控制接口上。
用户可以在液晶触摸屏上通过点击菜单来实现对系统的操作。简单方便。
激光测距仪:
Pro4型激光测距仪,体积:188×70×47mm,
                  重量:440g,
                  测量精度:1.5mm/100m
                  测量距离:0.2~100m
                  接口:RS232串行口
用标准串口线连接到主机板的串口上
输出设备:
液晶触摸屏:同上(它既是输入设备又是输出设备)
外接打印机:用并口线连接到主机板的并行接口上,打印机是用来输出测绘的图纸和数据的
外接硬盘:用标准的硬盘线连接到主机板的IDE接口上,电源需要单独提供,用来备份和导出采集到的测量数据和图纸。
电池:
我们采用900mA锂电池对系统进行供电,将电池内置到机箱内。一般情况下系统可以连续工作4个小时以上。
2.软件部分说明:
软件设计阶段遵循的原则如下:
根据国家标准规定的具体测绘过程、计算过程、出图过程进行需求分析,此软件需要进行文件存取、绘图、参数修正、计算、重绘、打印等模块。
本系统采用图形界面,视图直观而且便于操作,图形界面的定义如下:
#define_NOCURSOR_

    #ifndef_DRAW_

    #define_DRAW_

    #include″mouse.h″

    #include″frame.h″

    class Draw:public mouse,public FRAME
  {    

        protected:

          int Oldx,Oldy;
        <!-- SIPO <DP n="4"> -->
        <dp n="d4"/>
            int  X,Y,X1,Y1,X2,Y2,X3,Y3;

        public:

            void DrawLine();

            void DrawRectangle();

            void DrawArc();

            void DrawUnregule();

            void DrawTra();

            void DrawSti();

            void DrawCor();

            void DelRec();

            void DelArc();

            void DelUrg();

            void DelTra();

            void DelSti();

            void DelCor();

        };

    #endif

    #ifndef_FILE_

    #define_FILE_

    #include″str.h″

    #include″frame.h″

    #include″box.h″

    class File:public FRAME,public BASEBOX,public STRING

    {

        protected:

            int NewFileFunc;

        int MX,MY,MX1,MY1,MX2,MY2,MX3,MY3,MX4,

                MY4,MX5,MY5,MX6,MY6,MX7,MY7,MX9,MY9,MXA,MYA,y[6];

            int width,height,i;

            void*FileBuf;

    //      FILE*fp;

            unsigned size;

        public:

            void FileChoose(int Func);

            void FileChoose();

            void FileInput(int Func_1);

            void FileInput();

            void FileCaculate(int Func_2);

            void FileCaculate();

            void FilePrint(int Func_3);

            void FilePrint();

            void FileDash();

            void FileHelp(int Func_4);

            void FileHelp();

            void File_New();

            void File_Save();

            void File_Save(char*FileName);

            void File_New_Path();

            void File_Open_Path();

            void File_Quit();

            void File_Open(char*FileName);

            void File_Open();

            void File_Input(char*FileName);
        <!-- SIPO <DP n="5"> -->
        <dp n="d5"/>
          void File_Input();

            void File_Rebuild();

            void File_All_Area();

            void File_Public_Area();

            void File_Build_Area();

            void File_Sell_Area();

            void File_All_Print();

            void File_Each_Print();

            void File_Build_Print();

            void File_Sell_Print();

            void File_All_Print(char*FileName);

            void File_Each_Print(char*FileName);

            void File_Build_Print(char*FileName);

            void File_Sell_Print(char*FileName);

            void File_Otx();

            void File_Help1();

            void File_Help2();

            void File_rec_eq(int f);

            void File_urg_eq(int f);

            void File_arc_eq(int f);

            void File_tra_eq(int f);

            void File_sti_eq(int f);

            void File_cor_eq(int f);

    //     void File_Draw_Pic();

    };    

    #endif

    #ifndef_GET_

    #define_GET_

    class Get_s:public File

    {

        protected:

                    int NX,NY;

                    char Chang[15];

        public:

                    float get_sh(char*shujuming);

    };

    #endif

    #ifndef_OUT_

    #define_OUT_

    class Out_Scr:public File

    {

    //protected:

    //        int SX,SY;

   //        char*shuju;

        public:

            void out_scr(int SX,int SY,float shuju);

    };

    #endif

    #define_NOCURSOR_

    #ifndef_INPUT_

    #define_INPUT_
        <!-- SIPO <DP n="6"> -->
        <dp n="d6"/>
    #include″mouse.h″

    #include″frame.h″

    class Input:public File//Get_s

        {

            public:

                void InputRec();

                void InputUrg();

                void InputArc();

                void InputCor();

                void InputTra();

                void InputSti();

        };

    #endif
2.各模块的实现过程说明如下:
2.1文件存取:
首先使用initgraph(&driver,&mode,″″);对DOS操作系统进行图形界面的初始化。主界面定义为:
class FRAME{

      protected:

        int i,MaxX,MaxY,OX,OY;

        int Left,Top,Right,Bottom;

        int FillStyle;

        int AllFunc;

      public:

        void DrawFrame();

        void Rect(int,int,int,int,int);

        void PutMessage(char*Msg);

        void DrawMenu();

     //  void DrawFillstyle();

        void WriteXY(int,int);

        void Writedxdy(int,int);

    };

    #endif
鼠标的各种图形定义:
#ifndef_MOUSE_

    #define_MOUSE_

    #include<dos.h>

    #include<stdio.h>

    class mouse{

          private:

          union REGS ireg,oreg;

          public:

        char Reset();

        void Show_Mouse();

        void Hide_Mouse();

        char Left_Pressed();

        char Right_Pressed();

        void Get_XY(int*x,int*y);

        void Set_XY(int x,int y);

        void Set_X_Range(int min,int max);

        void Set_Y_Range(int min,int max);

        void Set_Graphic_Cursor(int x,int y,unsigned int*pattern);
        <!-- SIPO <DP n="7"> -->
        <dp n="d7"/>
        int Motion(int*x,int*y);

        };

    #ifndef_NOCURSOR_

    unsigned Cursor[7][32]={

        {

        //Cursor[0]-------->hand

        //Screen Mask

        0xE1FF,

         0xE1FF,

         0xE1FF,

         0xE1FF,

         0xE1FF,
         0xE000,

         0xE000,

         0xE000,
         0x0000,

         0x0000,

         0x0000,

         0x0000,

         0x0000,

         0x0000,

         0x0000,

         0x0000,

      //corsor Mask

         0x1E00,

          0x1200,

          0x1200,

          0x1200,

          0x1200,

          0x13FF,

          0x1249,

          0x1249,

          0xF249,

          0x9001,

          0x9001,

          0x9001,

          0x8001,

          0x8001,

          0x8001,

          0xFFFF

      },

      {

      //cursor[1]--------->arrow

      //screen mask

         0x3FFF,

          0x1FFF,

          0x0FFF,

          0x07FF,

          0x03FF,

          0x01FF,

          0x00FF,

          0x007F,

          0x003F,

          0x001F,

          0x01FF,

          0x10FF,

          0x30FF,
        <!-- SIPO <DP n="8"> -->
        <dp n="d8"/>
       0xF87F,

        0xF87F,

        0xFC3F,

        //cursor mask

       0x0000,

        0x4000,

        0x6000,

        0x7000,

        0x7800,

        0x7C00,

        0x7E00,

        0x7F00,

        0x7F80,

        0x7FC0,

        0x6C00,

        0x4600,

        0x0600,

        0x0300,

        0x0300,

        0x0180

    },

    {

    //cursor[2]--------->cross

    //screen mask

       0xFFFF,

        0xFFFF,    

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        0xFFFF,

        //cursor mask

       0x0200,

        0x0200,

        0x0200,

        0x0200,

        0x0200,

        0x0000,

        0xF8F8,

        0x0000,

        0x0200,

        0x0200,

        0x0200,

        0x0200,

        0x0200,

        0x0000,

        0x0000,

        0x0000

    }
        <!-- SIPO <DP n="9"> -->
        <dp n="d9"/>
    };

    #else

    extern unsigned Cursor[7][32];

    #endif//_nocursor_define

    #endif//end of mouse define
使用M.Get_XY(&Main_X,&Main_Y);
     Main_X=(Main_X-40)/70;
     Main_Y=Main_Y/20; 取得鼠标位置。
新建文件:使用void File::FileChoose()函数新建普通面积、总面积、公有面积、二次总面积、二次公有面积中的任意一种,每种看成一个文件,使用fopen(Filename,”name”)函数形成一个文件,其中包含数据写入缓冲区,设置写入模式setwritemode(COPY_PUT);,使用一系列的Rect(Left+12,30*10+14*4-5,Left+10+68,30*10+14*5+4,1)等函数设置对话框,输入使用显示屏右面的数字键盘,按enter间确认,按backspace键进行修改,键盘上设有总面积和二次面积等的快捷键,进行文件编号时可以直接使用,如z001代表一号楼总面积。
参数修正:使用Title(MX-150,MY-45,MX+150,MY+45,″Load File″);设置弹出对话框,将激光测距仪的温度、气压、加常数、乘常数写入文件以便在以后进行加权计算;
新建楼号:使用fopen(Filename,”name”)函数将被测量和计算的整栋大楼的楼号输入数据缓冲区;使用PutMessage(″Hit Esc or choose Cancel to end.″);进行操作提示。
打开楼号:使用fopen()函数打开一个已经存在的文件,
退出:使用fclose()函数并设置setwritemode(COPY_PUT);将以形成的文件数据写入数据缓冲区。
2.2绘图功能
绘图:应能采用各种手段完成建筑图纸的绘制、删除、修改、重建、保存、退出。
各种图形的实现方法定义如下:
2.2.1矩形房间和房间内的柱子实现如下:
柱子:
extern CORNER

        {

            char Cor_Name[2];  //such as zs,ys,zx,yx

            float Cor_X,
        <!-- SIPO <DP n="10"> -->
        <dp n="d10"/>
            Cor_Y,

             Cor_long,

             Cor_width,

             Cor_area;

        }zs,ys,zx,yx;  //left_up,...right_down

    //struct
矩形房间:
REC_ROOM    //define rectangle room attribute

        {

            char Rec_RoomName[2];    //such as A1

            float rx0,    //original point

                ry0,

                  rw_long,     //the wall total x-length

                rw_width,    //the wall total y-length

                rt_area,//the all area include the corner area

                rarea;//the useful area of the room

            CORNER zs,ys,zx,yx;

        };

    #endif

    #endif
主要使用rectangle(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);
                Get_XY(&Oldx,&Oldy);
                WriteXY(Oldx-OX,Oldy-OY);
                rectangle(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);
记录下矩形房间的长和宽长度:
2.2.2不规则房间:代表走廊或呈不规则形状的房间,要求房间的形状横平竖直,画线时直线可以稍微有水平或垂直偏差,但不能超过3度。房间里可以有柱子或圆楼梯,但不能有其他东西。
URG_ROOM

        {

           int end_line;

            char Urg_RoomName[2];

            float ux[20],uy[20],

                    rux[20],ruy[20],    //the real point distance

                    u_long[20],

                       u_hou[20],

                       u_length,            //the wall length

                    u_length_z,          //the zheng area of the room

                    u_length_f,          //the fu area of the room

                    u_t,                 //the urg wall thickness
        <!-- SIPO <DP n="11"> -->
        <dp n="d11"/>
                zs_long,     //the zs corner long

                zs_width,    //the zs corner width

                  ys_long,

                  ys_width,

                  zx_long,

                  zx_width,

                  yx_long,

                  yx_width,

                  u_t_area,    //the urg wall area

                ut_area,

                  uarea_1,     //urg total area

                uarea;       //usefut area

    };
2.2.3弧形房间:代表由弦和弧围成的曲面形状的房间,如呈弧形突出的阳台,室内曲面的墙、不等宽的圆楼梯等。
ARC_ROOM

        {

            char Arc_RoomName[2];

          int arc_label;

            float X,Y,S,E,c_2,

                  arc_radius,

                  r_arc_h,

                  r_long,          //the real arc height

                r_arc_radius,    //the real arc radius

                arc_w,           //the arc wall thickness

                at_w_area,

                  at_area,

                  aarea_1,         //the all area

                aarea;           //the useful area

    };
2.2.4梯形房间:代表梯形房间或阳台、楼梯,要求房间的上下两边平行且不相等,左右两边不平行,房间里可以有柱子或圆楼梯,但不能有其他东西。
TRA ROOM

    {

       int end_line1;

        char Tra_RoomName[2];

        float tx[4],    //no.1 original point

            ty[4],

       //    tx20,          //no.2 original point

      //    ty20,

             t_h,           //tra height
        <!-- SIPO <DP n="12"> -->
        <dp n="d12"/>
    //      tw_1_long,    //the wall total x-length

    //      tw_2_long,    //the wall total y-length

            rtw_1_long,

             rtw_1_t,      //the wall total x-length

            rtw_2_long,

             rtw_2_t,      //the wall total y-length

            lw_long,

             lw_t,         //the left wall thickness

            rw_long,      //the top wall thickness

            rw_t,         //the right wall thickness

                           //the bottom wall thickness

            zs_long,      //the zs corner long

            zs_width,     //the zs corner width

            ys_long,

             ys_width,

             yx_long,

             zx_width,

             yx_long,

             yx_width,

             tw_area,      //the wall area

            tt_area,

             tarea_1,      //the all area include the corner area

            tarea;        //the useful area of the room

    };
2.2.5圆楼梯:代表楼梯等宽的回旋型楼梯。
STI_ROOM

    {

        char Sti_RoomName[2];

            float X,Y,S,E,c_2,

                arc_radius,

                arc_radius1,

                arc_1_long,

                arc_s_x0,

                arc_s_y0,

                arc_s_x1,

                arc_s_y1,//the arc start point end point

              arc_h,

                arc_h1,

                arc_s_x00,

                arc_s_y00,

                arc_s_x11,

                arc_s_y11,
        <!-- SIPO <DP n="13"> -->
        <dp n="d13"/>
                s_arc_h,           //the real arc height

                s_arc_h1,

                  s_arc_1_radius,    //the real arc radius

                s_arc_2_radius,

                  sarea_1,           //the real arc radius

                sarea;             //the useful area

    };
2.3面积计算:
根据上述的作图实现方法,每划出一条线计算机都记录了线段的长度、弧线的弧度、梯形的高度等数据,根据这些数据计算出房间的面积,计算方法如下:
矩形房间:面积计算包括使用面积和墙体面积,使用面积计算为房间的长乘宽:
float cacu_area(float rn_rw_long,float rn_rw_width)
  {
      float area=rn_rw_long*rn_rw_width;
      return area;
  }
墙体面积为四面墙的使用面积之和,但按国标为避免因为墙的长短不同和外墙面积与内墙面积计算所带来的矛盾(国标规定外墙面积计算按墙体厚度一半计算),采用算法为:
其中标有灰色的部分采用的是长乘宽除2的算法,因为每面外墙都算一半,而每面内墙都和另一面内墙公用所以也算一半,这种算法能正确计算出墙体面积,简称为追尾算法,正确性证明略。实现过程如下:
float A1_total_area=cacu_area(A1.rw_long,A1.rw_width);
float A1_corner1_area=cacu area(A1.rc1_long,A1.rc1_width);
float A1_corner2_area=cacu_area(A1.rc2_long,A1.rc1_width);
float A1_corner3_area=cacu_area(A1.rc3_long,A1.rc3_width);
float A1_corner4_area=cacu_area(A1.rc4_long,A1.rc4_width);
A1.rarea=A1_total_area-A1_corner1_area-A1_corner2_area-A1_corner3_are
a-A1_corner4_area;
不规则房间:不规则房间指那些主要由直角弯组成的面积但不是矩形,如走廊,方厅等。
不规则房间由连续线段画出,主要使用的是line()函数,其算法由起始点作为坐标原点,计算后续点所构成的各象限的矩形的面积矢量和,具体如下:
void Input::InputUrg()

    {

       extern URG_ROOM urg[4];

        setcolor(RED);

        o=0;

        SetView();

        Hide_Mouse();

            urg[f].rux[0]=0;

            urg[f].ruy[0]=0;

        for(int j=0;j<urg[f].end_line;j++)

        {

            do

            {

              o=1-o;

                setcolor(change[o]);

                line(urg[f].ux[j]+80,urg[f].uy[j]+50,

                    urg[f].ux[j+1]+80,urg[f].uy[j+1]+50);

                delay(300);

            }

           while(!kbhit());

            setcolor(WHITE);

            line(urg[f].ux[j]+80,urg[f].uy[j]+50,

                urg[f].ux[j+1]+80,urg[f].uy[j+1]+50);

            char temp_key=getch();

            urg[f].u_length=G.get_sh(″墙长″);//qiang chang″);

            urg[f].u_long[j]=urg[f].u_length;

            urg[f].u_t=G.get_sh(″墙厚″);//qiang hou″);

            urg[f].u_hou[j]=urg[f].u_t;

            if(fabs(urg[f].ux[j]-urg[f].ux[j+1])<=3)

           {

                if(urg[f].uy[j]<urg[f].uy[j+1])    //3

                {

                 urg[f].rux[j+1]=urg[f].rux[j];

                    urg[f].ruy[j+1]=urg[f].ruy[j]+urg[f].u_length;

                    urg[f].u_t_area=urg[f].u_t_area+urg[f].u_length*urg[f].u_t/2;

                }

                if(urg[f].uy[j]>urg[f].uy[j+1])    //4

                {

                 urg[f].rux[j+1]=urg[f].rux[j];

                    urg[f].ruy[j+1]=urg[f].ruy[j]-urg[f].u_length;

                    urg[f].u_t_area=urg[f].u_t_area+urg[f].u_length*urg[f].u_t/2;
        <!-- SIPO <DP n="15"> -->
        <dp n="d15"/>
        }

    }

    if(fabs(urg[f].uy[j]-urg[f].uy[j+1])<=3)

    {                                                            //1

        if(urg[f].ux[j]<urg[f].ux[j+1])

        {

          urg[f].ruy[j+1]=urg[f].ruy[j];

            urg[f].rux[j+1]=urg[f].rux[j]+urg[f].u_length;

            if(urg[f].uy[j]<=urg[f].uy[0])

                urg[f].u_length_z=urg[f].u_length_z+urg[f].u_length

                                                        *fabs(urg[f].ruy[j]);

            if(urg[f].uy[j]>urg[f].uy[0])

                urg[f].u_length_f=urg[f].u_length_f+urg[f].u_length

                                                        *fabs(urg[f].ruy[j]);

            urg[f].u_t_area=urg[f].u_t_area+urg[f].u_length*urg[f].u_t/2;

        }

        if(urg[f].ux[j]>urg[f].ux[j+1])

        {                                                        //2

          urg[f].ruy[j+1]=urg[f].ruy[j];

            urg[f].rux[j+1]=urg[f].rux[j]-urg[f].u_length;

            if(urg[f].uy[j]>=urg[f].uy[0])

                urg[f].u_length_z=urg[f].u_length_z+urg[f].u_length

                                                        *fabs(urg[f].ruy[j]);

            if(urg[f].uy[j]<urg[f].uy[0])

                urg[f].u_length_f=urg[f].u_length_f+urg[f].u_length
                                                        *fabs(urg[f].ruy[j]);

            urg[f].u_t_area=urg[f].u_t_area+urg[f].u_length*urg[f].u_t/2;

        }
弧形房间:有弧形阳台及其他弧形面积,也包括弧形墙体周长的使用面积,弧形画法采用的是给出弧两个端点的位置和弧高,计算使用标准的弧形面积计算方法,由于需在任意位置划出弧形,弧形画法的算法为计算各象限的转角,然后画弧,这一部分的算法如下:
//

    //file name=arc-1.cpp

    //

    #include″Drawarc.h″

    #include<graphics.h>
        <!-- SIPO <DP n="16"> -->
        <dp n="d16"/>
    #include<conio.h>

    #include<string.h>

    #include<process.h>

    #include<math.h>

    #define Esc 27

    char Ch;

    extern Color;

    int OX,OY;

    void Draw::Drawarc()

    {

       static int dx=20,dy=20;

        DrawFrame();

        PutMessage(″Press right button\

          to change size and direction″);

        setviewport(Left+1,Top+1,Right-1,Bottom-1,1);

        setcolor(Color);

        setwritemode(XOR_PUT);

        Get_XY(&Oldx,&Oldy);

        line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);

        double jiao=1.014-atan2((double)dx,(double)dy);

        double radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

        int arc_x,arc_y,realjiao1,realjiao2;

        (int)arc_x=Oldx-OX-radius*sin(jiao);

        (int)arc_y=Oldy-OY+radius*cos(jiao);

        (int)realjiao1=180*jiao/3.14;

        (int)realjiao2=realjiao1+60;

        arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);

        Writedxdy(dx,dy);

        while(1)

        {

          if(Motion(&X,&Y))

      {

        line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);

      jiao=1.014-atan2((double)dx,(double)dy);

        radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

        arc_x,arc_y,realjiao1,realjiao2;

        (int)arc_x=Oldx-OX-radius*sin(jiao);

        (int)arc_y=Oldy-OY+radius*cos(jiao);

        (int)realjiao1=180*jiao/3.14;
        <!-- SIPO <DP n="17"> -->
        <dp n="d17"/>
      (int)realjiao2=realjiao1+60;

      arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);

        Get_XY(&Oldx,&Oldy);

        WriteXY(Oldx-OX,Oldy-OY);

        line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);

        jiao=1.014-atan2((double)dx,(double)dy);

        radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

        arc_x,arc_y,realjiao1,realjiao2;

      (int)arc_x=Oldx-OX-radius*sin(jiao);

      (int)arc_y=Oldy-OY+radius*cos(jiao);

      (int)realjiao1=180*jiao/3.14;

      (int)realjiao2=realjiao1+60;

      arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);

    }
//          if(!Inside(Oldx,Oldy,Left,Top,Right,Bottom))
  //        break;

             if(kbhit())

        if((Ch=getch())==Esc)

        {

          Reset();

           closegraph();

           exit(1);

        }

          if(Left_Pressed())

          {

          Set_X_Range(Left+1,Right-1);

           Set_Y_Range(Top+1,Bottom-1);

           setwritemode(COPY_PUT);

           line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);

        jiao=1.014-atan2((double)dx,(double)dy);

        radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

        arc_x,arc_y,realjiao1,realjiao2;
      (int)arc_x=Oldx-OX-radius*sin(jiao);

      (int)arc_y=Oldy-OY+radius*cos(jiao);

      (int)realjiao1=180*jiao/3.14;

      (int)realjiao2=realjiao1+60;

      arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);

        while(Left_Pressed())

        {

          if(Motion(&X,&Y))

          {

           Get_XY(&Oldx,&Oldy);

            WriteXY(Oldx-OX,Oldy-OY);

            line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);
        <!-- SIPO <DP n="18"> -->
        <dp n="d18"/>
      jiao=1.014-atan2((double)dx,(double)dy);

      radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

      arc_x,arc_y,realjiao1,realjiao2;

    (int)arc_x=Oldx-OX-radius*sin(jiao);

    (int)arc_y=Oldy-OY+radius*cos(jiao);

    (int)realjiao1=180*jiao/3.14;

    (int)realjiao2=realjiao1+60;

    arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);

            }

          }

        setwritemode(XOR_PUT);

        line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);

      jiao=1.014-atan2((double)dx,(double)dy);

      radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

      arc_x,arc_y,realjiao1,realjiao2;

    (int)arc_x=Oldx-OX-radius*sin(jiao);

    (int)arc_y=Oldy-OY+radius*cos(jiao);

    (int)realjiao1=180*jiao/3.14;

    (int)realjiao2=realjiao1+60;

    arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);

      Set_X_Range(1,MaxX-1);

      Set_Y_Range(1,MaxY-1);

      }

    if(Right_Pressed())

    {

      Set_XY(Oldx+dx,Oldy+dy);

      while(Right_Pressed())

      {

        if(Motion(&X,&Y))

        {

        line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);

      jiao=1.014-atan2((double)dx,(double)dy);

      radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

      arc_x,arc_y,realjiao1,realjiao2;

    (int)arc_x=Oldx-OX-radius*sin(jiao);

    (int)arc_y=Oldy-OY+radius*cos(jiao);

    (int)realjiao1=180*jiao/3.14;

    (int)realjiao2=realjiao1+60;

    arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);

        Get_XY(&X,&Y);

        dx=X-Oldx;

        dy=Y-Oldy;

        Writedxdy(dx,dy);
        <!-- SIPO <DP n="19"> -->
        <dp n="d19"/>
                  line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);

              jiao=1.014-atan2((double)dx,(double)dy);

              radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

              arc_x,arc_y,realjiao1,realjiao2;

            (int)arc_x=Oldx-OX-radius*sin(jiao);

            (int)arc_y=Oldy-OY+radius*cos(jiao);

            (int)realjiao1=180*jiao/3.14;

            (int)realjiao2=realjiao1+60;

            arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);
                }

              }

              Set_XY(Oldx,Oldy);
            }

          }

            line(Oldx-OX,Oldy-OY,Oldx+dx-OX,Oldy+dy-OY);
          jiao=1.014-atan2((double)dx,(double)dy);

          radius=sqrt((double)dx*(double)dx+(double)dy*(double)dy);

          arc_x,arc_y,realjiao1,realjiao2;

        (int)arc_x=Oldx-OX-radius*sin(jiao);

        (int)arc_y=Oldy-OY+radius*cos(jiao);

        (int)realjiao1=180*jiao/3.14;

        (int)realjiao2=realjiao1+60;

        arc(arc_x,arc_y,realjiao1,realjiao2,(int)radius);

          setwritemode(COPY_PUT);

          setviewport(0,0,MaxX,MaxY,1);

    }
梯形房间:与矩形房间类似,但计算面积是按标准的梯形计算法,此外,梯形房间由于在建筑图中处于非正向位置,所以梯形房间在绘图时可以旋转角度以与建筑图一致,其旋转算法如下:
void Draw::DrawTra()

    {

        extern TRA_ROOM tra[2];

        int Flad,NewX,NewY,i=0;              //  Draw::DrawUnregule()

        DrawFrame();

    //  按右键结束画梯形

        PutMessage(″″);

        show_hz(″按右键结束画梯形″,3,461,BLACK);

    //  PutMessage(″Press right button to stop tiking″);

        setviewport(Left+1,Top+1,Right-1,Bottom-1,1);

        setcolor(Color);

        Writedxdy(0,0);
        <!-- SIPO <DP n="20"> -->
        <dp n="d20"/>
    setwritemode(XOR_PUT);

    Set_Graphic_Cursor(6,6,Cursor[2]);

    while(Left_Pressed());

    Get_XY(&Oldx,&Oldy);

    setcolor(LIGHTGRAY);

    line(Oldx-OX,0,Oldx-OX,Bottom);

    line(0,Oldy-OY,Right,Oldy-OY);

    setcolor(WHITE);

                                                      //
Draw::DrawUnregule()

    while(1)

    {

        if(Motion(&X1,&Y1))

        {

            setcolor(LIGHTGRAY);

            line(Oldx-OX,0,Oldx-OX,Bottom);

            line(0,Oldy-OY,Right,Oldy-OY);

            setcolor(WHITE);

            Get_XY(&Oldx,&Oldy);

            WriteXY(Oldx-41,Oldy-21);

            setcolor(LIGHTGRAY);

            line(Oldx-OX,0,Oldx-OX,Bottom);

            line(0,Oldy-OY,Right,Oldy-OY);

            setcolor(WHITE);

        }

        if(kbhit())

        if((Ch=getch())==Esc)

        {

            Reset();                              //Draw::DrawUnregule()

            closegraph();

            exit(1);

        }

        if(Left_Pressed())

        {

            setviewport(Left+1,Top+1,Right-1,Bottom-1,1);

            Set_X_Range(Left+1,Right-1);

            Set_Y_Range(Top+1,Bottom-1);

            Get_XY(&NewX,&NewY);

            setcolor(LIGHTGRAY);

            line(NewX-OX,0,NewX-OX,Bottom);

            line(0,NewY-OY,Right,NewY-OY);

            setcolor(WHITE);

            Oldx=NewX;

            Oldy=NewY;
        <!-- SIPO <DP n="21"> -->
        <dp n="d21"/>
            Set_XY(Oldx,Oldy);

            Flad=1;

            setcolor(LIGHTGRAY);

            line(NewX-OX,0,NewX-OX,Bottom);

            line(0,NewY-OY,Right,NewY-OY);

            setcolor(WHITE);

            while(Left_Pressed())

            while(Flad)                             //Draw::DrawUnregule()

            {

                if(Motion(&X,&Y))

                {

                    Get_XY(&X,&Y);

                    {

                        line(Oldx-OX,Oldy-OY,NewX-OX,NewY-OY);

                        setcolor(LIGHTGRAY);

                        line(NewX-OX,0,NewX-OX,Bottom);

                        line(0,NewY-OY,Right,NewY-OY);

                        setcolor(WHITE);

                        NewX=X;

                        NewY=Y;                                //
Draw::DrawUnregule()

                        WriteXY(X-41,Y-21);

                        line(Oldx-OX,Oldy-OY,NewX-OX,NewY-OY);

                        setcolor(LIGHTGRAY);

                        line(NewX-OX,0,NewX-OX,Bottom);

                        line(0,NewY-OY,Right,NewY-OY);

                        setcolor(WHITE);

                        Writedxdy(NewX-Oldx,NewY-Oldy);

                    }

                }

                else if(Left_Pressed())

                {

                    while(Left_Pressed())

                    setwritemode(COPY_PUT);

                    line(Oldx-OX,Oldy-OY,NewX-OX,NewY-OY);

                    Set_XY(NewX,NewY);

                    Oldx=NewX;

                    Oldy=NewY;

                    tra[b-8].tx[i]=Oldx-80;              //
Draw::DrawUnregule()

                    tra[b-8].ty[i]=Oldy-50;  

                    i++;
        <!-- SIPO <DP n="22"> -->
        <dp n="d22"/>
                        setwritemode(XOR_PUT);

                    }

                    else if(Right_Pressed())

                    {

                        setcolor(LIGHTGRAY);

                        line(NewX-OX,0,NewX-OX,Bottom);

                        line(0,NewY-OY,Right,NewY-OY);

                        setcolor(WHITE);

                        Flad=0;

                        line(tra[b-8].tx[i-1]+39,tra[b-8].ty[i-1]+29,

                            tra[b-8].tx[0]+39,tra[b-8].ty[0]+29);

                        Set_X_Range(1,MaxX);

                        Set_Y_Range(1,MaxY);                     //
Draw::DrawUnregule()

                        break;

                    }

                }break;//end of while(Flad)

            }    //end of Left_pressed

        }        //end of while

            setwritemode(COPY_PUT);
            setviewport(0,0,MaxX,MaxY,1);                    //
Draw::DrawUnregule()

        Set_Graphic_Cursor(4,0,Cursor[0]);

        Show_Mouse();

        F1.File_New();

    }
旋转楼梯:方形楼梯的面积可按矩形面积计算,而旋转楼梯可看成是两个弧形面积的差,所以其画法和面积计算算法可有弧形面积得出,但楼梯与弧形房间的不同之处在于没有墙体面积。
计算菜单:当上述各种形状的面积分别算出之后,须根据国标计算总面积、公有面积、分摊系数、二次总面积、二次公有面积、二次分摊系数。以《中华人民共和国国家计量技术规范》JJF1058-1998《商品房销售面积测量与计算》为例,采用规定算法进行计算。这部分算法简单,只是将各面积累加即可,故略。
2.4打印:
分别打印各种普通面积、总面积、公有面积、使用面积、建筑面积、销售面积,采用HP6L打印机,在DOS操作系统下的打印方法定义为:
void open_hzk(void);
void get_hz(char incode[],char bytes[]);
void dishz(int x,int y,char cade[],int color);
void show_hz(char far*s,int x,int y,int hz_color);
void printscr(int px0,int py0,int px1,int py1,int hz_color);
void readscr(int px0,int py0,int px1,int py1);
int shlbit(unsigned char c,int m,int n);
3.本软件的使用说明
3.1基本界面
3.1.1屏幕上方为菜单栏,分为文件、输入、计算、打印、帮助五栏,用鼠标在每个条目上点击将出现下拉菜单,再用鼠标点击进行具体操作。
3.1.2屏幕左方为绘图工具栏,每个按钮代表一种房间样式,左边一列代表20个矩形房间,右边上面四个代表不规则房间,接下来分别是四个弧形,两个梯形,两个圆楼梯,七个代表柱子的角,右边最下面的代表门。绘图栏最下面有一个大按钮,在新建时显示保存,按此按钮将画好的图形存入磁盘,同时图形消失。这些绘图工具基本上可以绘制出任何房间的结构图,每个按钮所代表的房间面积除弧形外都是正面积,弧形负面积用于曲面房间。
3.1.3屏幕下方为信息栏,显示各项当前操作规则。
3.1.4屏幕左上在绘图时有一交叉的十字,用于选取基准点。
3.1.5屏幕右上绘图时有相对坐标和绝对坐标显示,绝对坐标表示基准线交点的当前位置,相对坐标表示与前一坐标点的相对位置。
注意:绘图的原则是封闭,即房间之间不存在嵌套。如图形复杂则将图细分以避免嵌套。每套住户或总面积应不超过20个矩形房间、四个不规则房间、四个弧型、两个梯形、两个圆楼梯、七个柱子,30个门。不规则房间边不超过20个,每个房间最多可有四个柱子。
3.2.绘图功能
新建阶段绘图栏各按钮功能如下:
3.2.1矩形房间:代表标准的矩形样式的房间或走廊、楼梯,房间里可以有柱子或圆楼梯,但不能有其他东西。点击按钮后可在屏幕上看到一个矩形,基准线的交点代表矩形的左上角,拖动鼠标可带动矩形在屏幕上移动,如要改变矩形大小,按右键将看到基准线交点移到右下角,按住右键不放拖动矩形大小发生变化,松开右键基线交点又回到左上角,再拖动鼠标将其定位,此过程可反复进行直到在合适位置画上合适大小的矩形,按左键结束。
3.2.2不规则房间:代表走廊或呈不规则形状的房间,要求房间的形状横平竖直,画线时直线可以稍微有水平或垂直偏差,但不能超过3度。房间里可以有柱子或圆楼梯,但不能有其他东西。鼠标点击按钮后屏幕上出现的基准线交点即不规则房间的起始点,拖动鼠标可选择起始点,按左健将起始点定位,再拖动鼠标将看到有一条线连着起始点,选择合适位置后按鼠标左键确定,将看到此直线已被固定,继续拖动鼠标又有一条与上一点连接的直线出现,重复此过程直至画完不规则房间,最后的点应与最开始的点重合,重合后按右键结束。
3.2.3弧形房间:代表由弦和弧围成的曲面形状的房间,如呈弧形突出的阳台,室内曲面的墙、不等宽的圆楼梯等。梯形和弧形搭配表示复杂曲面。点击按钮后基准线的交点代表弧的一个端点,拖动鼠标在屏幕上找到合适位置后按左键确定,再拖动鼠标可看到又一端点,再按左键确定,如果弦水平,第一点在左则弧将向上鼓,第一点在右则弧将向下鼓,如果弦垂直,第一点在上则弧将向右鼓,第一点在下则弧将向左鼓,此时出现对话框输入弧高,如果此弧的弦为水平或垂直或弧向上鼓输入正的弧高,如果弧向下鼓输入负的弧高,输入单位为米,按Enter结束输入,输入后即可看到一条弧,画弧结束。
3.2.4梯形房间:代表梯形房间或阳台、楼梯,要求房间的上下两边平行且不相等,左右两边不平行,房间里可以有柱子或圆楼梯,但不能有其他东西。梯形和弧形搭配表示复杂曲面。梯形房间画法近似不规则房间,但要求先画上底或下底,在画完第三条边后按右键结束。
3.2.5圆楼梯:代表楼梯等宽的回旋型楼梯。楼梯内弧画法同画弧,但输入弧高后还要求输入楼梯宽,输入后按Enter键将出现一个圆楼梯结束。
3.2.6柱子:代表高层住宅房间内的立柱、通风井及其他屋内障碍物,可加到任何房间。画法同矩形房间。
注意:以上每个房间图形在绘图任意时刻需要改动时,在代表该房间的按钮上按右键,该房间就会消失。再按左键重画。
3.2.7保存:保存画好的图形。按此大键后出现保存提示框,键盘输入文件名,输入错误可按回格键逐个删除,文件命名规则为:普通面积第一个字符取除“z”“g”外的字母,以后的字符取数字,如“a1”、“b2”。总面积第一个字符取“z”,第二个字符取数字,如“z1”,如是二次分摊总面积再加一位数字,如“z11”、“z12”,公有面积第一个字符取“g”,第二个字符取数字,如“g1”、“g2”,二次分摊公有面积再加一位数字,如“g12”、“g12”。
3.3.文件菜单
操作包括:新建、参数修正、打开楼号、新建楼号、退出。每项功能如下:
3.3.1新建楼号:新建整栋楼的编号,用键盘敲入数字,如001、002等,输入错误可按回格键逐个删除,其中包括各种面积,如果楼号已经存在,则在提示栏显示此楼号已存在,
3.3.2参数修正:绘图和数据输入前依次输入当前温度、当前气压、加常数、乘常数。
3.3.3打开楼号:打开已存在的楼号,用键盘敲入数字,如001、002等,输入错误可按回格键逐个删除,打开楼号后才可对各种面积进行操作。
3.3.4新建:出现三种面积的提示,普通面积指住户的户型,总面积指整栋楼的外轮廓,公有面积指公共的使用面积,如楼梯,电梯间等,用鼠标在三种面积之一前面的方框内点击选择,选择后提示栏消失,再在帮助菜单栏打开比例尺设定,出现提示栏显示输入比例。用键盘输入作图与实际尺寸比例。
注意:本绘图界面绘图区范围用点距表示为580×400,而实际测量尺寸的单位为米,长度和面积计算可以精确到毫米和平方毫米级。所以在表示时应输入显示比例。如输入40,则最大可以输入580×400×40m/1000=23.2m×16m的面积,在输入实际弧形拱高0.5米时,图中显示拱高40×0.5=20个点距。如画大面积的总面积图时比例应加大,如加到200,即图上每个点代表实际的0.2米,100个点代表100×0.2=20米。默认普通面积输入比例为30,总面积输入比例为200。
3.3.5退出:结束本次操作退出。
3.4.输入菜单
操作包括:打开、输入、重建三项操作。
注意:输入之前应在文件菜单中打开楼号。公有面积和总面积应在输入数值后再输入层数。
3.4.1打开:打开已画好的房间文件。按打开后出现打开文件名提示框,用键盘输入已存在的文件名,屏幕上将出现已画好的房间样式。如果打开错误按绘图栏的大按钮退出。
3.4.2输入:左键点击已有的各房间代表按钮,按提示用键盘输入各房间的实际测量尺寸,其中墙厚按实际整墙厚输入,如果此处无墙则输入墙厚为0,房间内柱子数按实际个数输入,数据输入错误可按回格键逐个删除,数据输入用Enter结束,结束后可看到一组参考数值在屏幕上出现,上面代表此房间的使用面积,下面代表此房间的建筑面积。
注意:输入时直接按Enter表示值为0。弧形房间面积有正负,0代表正面积,1代表负面积,负面积是为与梯形房间配合表示复杂曲面时用。
3.4.3重建:点击重建后每个房间的大小将根据实际尺寸发生变化,此时再点击绘图栏的按钮将每个房间位置重新分布,不规则房间应根据矩形房间的位置重新分布。房间全部定位后,按绘图栏右面最下的按钮画门,鼠标左键点击基准线交点代表门枢,再拖动鼠标确定门在墙上的位置,按左键后确定门的大小及位置,此时弹出对话框输入门的开向,1代表向里开,-1代表向外开,按Enter确定门的开向,如果画错右键点击画门按钮删除,再按左键重画。重建后按绘图栏大按钮保存,文件名应输入打开时采用的文件名。
注意:输入总面积和公有面积的面积和层数后应马上在计算菜单计算总面积和公有面积。二次总面积和二次公有面积及二次分摊系数也应在输入完成后马上计算。
3.5.计算菜单
操作包括:总面积、公有面积、分摊系数、二次总面积、二次公有面积、二次分摊系数。鼠标左键点击每个部分将在屏幕下面显示参考值。
3.5.1总面积:本楼的外轮廓样式×层数的累加和。单位:平方米。
3.5.2公有面积:本楼的公有部分面积×层数的累加和。单位:平方米。
3.5.3分摊系数:公有面积/(总面积—公有面积)。
注意:当本楼有住宅和商户区时,住宅的总面积及公有面积和商户的总面积及公有面积需要按比例分摊,
3.5.4二次总面积:住宅或商户的按比例分配的公有面积与私有的总面积和。单位:平方米。
3.5.5二次公有面积:住宅或商户的按比例分配的公有面积与私有的公有面积和。单位:平方米。
3.5.6二次分摊系数:分摊的公有面积与私有的公有面积和/(私有的总面积-私有的公有面积)。3.6.打印菜单
 操作包括:整体面积、使用面积、建筑面积、销售面积。鼠标点击每项将刷新屏幕,显示房间结构图,按Esc将取消打印进入房间详细数据界面,按Enter将打印该图同时进入房间详细数据界面,进入房间详细数据界面后按Esc将取消打印房间详细数据界面,暂停后返回原始屏幕。每项打印的区别在于根据打印需要打印不同的数据。
3.6.1整体面积:本项可打印普通面积、总面积或公有面积。
3.6.2使用面积:本项包括整体面积的所有内容,增加了使用面积。
3.6.3建筑面积:本项包括使用面积的所有内容,增加了使用面积和建筑面积。
3.6.4销售面积:本项包括建筑面积的所有内容,增加了使用面积、建筑面积和销售面积。
软件系统的安装:通过软盘驱动器,将DOS6.22操作系统想安装到固态电子盘上,大约需要3M的空间。然后将测量体统软件(约200k)和config.sys、autoexec.bat两个配置文件拷贝到电子盘中。重新开机,系统将直接引导进入测量系统主窗口,用户可以利用液晶触摸屏、轨迹球鼠标和小键板对系统进行操作了。当需要测量时,将激光测距仪队准被测房间的一个被测距离,按下测量键,激光测距仪将自动将测量到的距离数据,通过串口送到计算机内,系统自动保存该距离数据,用作后面房屋面积计算时使用。整个主机尺寸:21cm×15cm×8cm。

Claims (7)

1.一种房屋面积测量计算系统集成,其组成包括:工业控制单板机,其特征是:所述的单板机的输入装置包括:15-21键小键盘,球迹鼠标、触摸屏和/或激光测距仪,所述的单板机的输出设备包括:所述的液晶触摸屏、外接打印机和外接硬盘,以及电池,所述的单板机中装有房屋面积测量计算系统软件。
2.根据权利要求1所述的房屋面积测量计算系统集成,其特征是:所述的软件包括文件存取、绘图、参数修正、计算、重绘、打印等模块,进行房屋测绘中的预先草图绘制、现场数据输入及参数修正、按比例对实图放大缩小进行重建、数据计算、各种所需数据打印等功能模块,采用ANSI C和C++混合编程。
3.根据权利要求2所述的房屋面积测量计算系统集成,其特征是:该计算系统采用图形界面。
4.根据权利要求2或3所述的房屋面积测量计算系统集成,其特征是:所述的文件存取,包括:首先使用initgraph(& driver,& mode``)对DOS操作系统进行图形界面的初始化,然后新建文件,进行参数修正:将激光测距仪的温度、气压、加常数、乘常数写入文件以便在以后进行加权计算;新建楼号:使用fopen(Filename,”name”)函数将被测量和计算的整栋大楼的楼号输入数据缓冲区;使用PutMessage(″Hit Esc or chooseCancel to end.″);进行操作提示;打开楼号:使用fopen()函数打开一个已经存在的文件;退出。
5.根据权利要求2或3所述的房屋面积测量计算系统集成,其特征是:所述的绘图包括建筑图纸的绘制、删除、修改、重建、保存、退出,所述的绘图的种类包括绘制矩形房间和房间内的柱子、矩形房间、不规则房间、弧形房间、梯形房间、圆楼梯。
6.根据权利要求2或3所述的房屋面积测量计算系统集成,其特征是:所述的参数修正和数据计算包括:
矩形房间:面积计算包括使用面积和墙体面积,使用面积计算为房间的长乘宽;
不规则房间:不规则房间指那些主要由直角弯组成的面积但不是矩形,如走廊,方厅等;不规则房间由连续线段画出,主要使用的是line()函数,其算法由起始点作为坐标原点,计算后续点所构成的各象限的矩形的面积矢量和;
弧形房间:有弧形阳台及其他弧形面积,也包括弧形墙体周长的使用面积,弧形画法采用的是给出弧两个端点的位置和弧高,计算使用标准的弧形面积计算方法,由于需在任意位置划出弧形,弧形画法的算法为计算各象限的转角,然后画弧;
梯形房间:与矩形房间类似,但计算面积是按标准的梯形计算法,此外,梯形房间由于在建筑图中处于非正向位置,所以梯形房间在绘图时可以旋转角度以与建筑图一致;
旋转楼梯:方形楼梯的面积可按矩形面积计算,而旋转楼梯可看成是两个弧形面积的差,所以其画法和面积计算算法可有弧形面积得出,但楼梯与弧形房间的不同之处在于没有墙体面积;
计算菜单:当上述各种形状的面积分别算出之后,须根据国标计算总面积、公有面积、分摊系数、二次总面积、二次公有面积、二次分摊系数,以《中华人民共和国国家计量技术规范》JJF1058-1998《商品房销售面积测量与计算》为例,采用规定算法进行计算,这部分算法简单,只是将各面积按规定累加即可。
7.根据权利要求2或3所述的房屋面积测量计算系统集成,其特征是:所述的各种所需数据打印包括分别打印各种普通面积、总面积、公有面积、使用面积、建筑面积、销售面积。
CN 03132481 2003-07-03 2003-07-03 房屋面积测量计算系统集成 Pending CN1567192A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 03132481 CN1567192A (zh) 2003-07-03 2003-07-03 房屋面积测量计算系统集成

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 03132481 CN1567192A (zh) 2003-07-03 2003-07-03 房屋面积测量计算系统集成

Publications (1)

Publication Number Publication Date
CN1567192A true CN1567192A (zh) 2005-01-19

Family

ID=34469913

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 03132481 Pending CN1567192A (zh) 2003-07-03 2003-07-03 房屋面积测量计算系统集成

Country Status (1)

Country Link
CN (1) CN1567192A (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103308026A (zh) * 2013-06-28 2013-09-18 上海斐讯数据通信技术有限公司 移动终端测量房屋面积的方法
CN104700225A (zh) * 2015-03-19 2015-06-10 江苏冲浪软件科技有限公司 房产测绘管理系统
CN104764435A (zh) * 2014-01-07 2015-07-08 广州市科创电脑技术开发有限公司 智能测绘系统及方法
CN105371814A (zh) * 2015-12-21 2016-03-02 珠海市测绘院 一种住宅套型及阳台面积测算方法
CN105444701A (zh) * 2015-12-04 2016-03-30 广东欧珀移动通信有限公司 一种区域面积的测量方法及装置
CN106126964A (zh) * 2016-08-25 2016-11-16 刘禹锡 一种建筑物面积的测量方法和装置
CN106482700A (zh) * 2016-10-12 2017-03-08 东南大学 一种草图直接成图的数字化房产面积测量方法
CN108253914A (zh) * 2018-01-08 2018-07-06 东易日盛家居装饰集团股份有限公司 一种3d量房方法
CN110263493A (zh) * 2019-07-15 2019-09-20 李时锦 一种基于revit的房间建筑面积计算方法以及装置
CN111024025A (zh) * 2019-12-31 2020-04-17 河南城建学院 一种房地产房屋验收装置

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103308026A (zh) * 2013-06-28 2013-09-18 上海斐讯数据通信技术有限公司 移动终端测量房屋面积的方法
CN104764435A (zh) * 2014-01-07 2015-07-08 广州市科创电脑技术开发有限公司 智能测绘系统及方法
CN104700225A (zh) * 2015-03-19 2015-06-10 江苏冲浪软件科技有限公司 房产测绘管理系统
CN105444701A (zh) * 2015-12-04 2016-03-30 广东欧珀移动通信有限公司 一种区域面积的测量方法及装置
CN105371814A (zh) * 2015-12-21 2016-03-02 珠海市测绘院 一种住宅套型及阳台面积测算方法
CN106126964A (zh) * 2016-08-25 2016-11-16 刘禹锡 一种建筑物面积的测量方法和装置
CN106482700A (zh) * 2016-10-12 2017-03-08 东南大学 一种草图直接成图的数字化房产面积测量方法
CN106482700B (zh) * 2016-10-12 2019-06-04 东南大学 一种草图直接成图的数字化房产面积测量方法
CN108253914A (zh) * 2018-01-08 2018-07-06 东易日盛家居装饰集团股份有限公司 一种3d量房方法
CN110263493A (zh) * 2019-07-15 2019-09-20 李时锦 一种基于revit的房间建筑面积计算方法以及装置
CN111024025A (zh) * 2019-12-31 2020-04-17 河南城建学院 一种房地产房屋验收装置

Similar Documents

Publication Publication Date Title
CN1567192A (zh) 房屋面积测量计算系统集成
Drey et al. Vrsketchin: Exploring the design space of pen and tablet interaction for 3d sketching in virtual reality
CN100338568C (zh) 开发片上系统用的开发环境的生成方法
US10699478B1 (en) Generating technical drawings from building information models
Sievers et al. Clustal omega
Sievers et al. Multiple sequence alignments
US20230368431A1 (en) Pattern Matching Tool
CN1949187A (zh) 一种程序调测系统及方法
US10013506B2 (en) Annotating real-world objects
CN1551048A (zh) 图像再现装置和图像再现方法
JPWO2007089021A1 (ja) 画像処理方法
CN101052997A (zh) 逼近可编辑曲面的系统和方法
CN1480892A (zh) 区域地质调查中的数字填图方法
CN1708764A (zh) 输入字母数字及其他数据的虚拟数据输入设备与方法
CN1421004A (zh) 利用符号语言翻译器产生软件代码的方法和系统
CN1248104C (zh) 大型复杂曲面钢板水火加工智能机器人控制系统
US20240104169A1 (en) Drawing Matching Tool
EP3924862A1 (en) Generating technical drawings from building information models
CN1555008A (zh) 智能虚拟显示器的制作方法
CN1922464A (zh) 表面计量装置
Shih et al. Phylo-mLogo: an interactive and hierarchical multiple-logo visualization tool for alignment of many sequences
US20220156428A1 (en) Generating Technical Drawings From Building Information Models
CN102147681B (zh) 基于触摸屏的输入方法及装置
CN1098214A (zh) 绘制三维工艺配管图计算机辅助设计系统
JP2004109376A (ja) 運指表示方法およびそのためのプログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication