精华内容
下载资源
问答
  • 简单易学的室内平面图设计软件

    热门讨论 2009-06-26 09:39:43
    简单易学的室内平面图设计软件,好用易学简单
  • 在线平面图设计教程

    千次阅读 2019-06-10 15:14:10
    在介绍平面图之前先简单了解一下平面图的概念 什么是平面图 平面图,又称图则,是建筑物工程图的组成部分。当测区面积不大,半径小于10公里(甚至25公里)时,可以用水平面代替水准面。在这个前提下,可以把测区内的...

    在介绍平面图之前先简单了解一下平面图的概念

    什么是平面图

    平面图,又称图则,是建筑物工程图的组成部分。当测区面积不大,半径小于10公里(甚至25公里)时,可以用水平面代替水准面。在这个前提下,可以把测区内的地面景物沿铅垂线方向投影到平面上,按规定的符号和比例缩小而构成相似图形,即为平面图。平面图以比例图绘制,表现该建筑物内的客厅、房间、空间及其它硬件的分布,其中包括主力墙、出入口、窗的位置图。

    平面图方便绘图员、建筑师、地产发展商、室内设计师、地盘工人、装修及业主、保安、消防、访客等做沟通之用。

    介绍一下平面图效果如下:

    平面图设计工具

    平面图设计软件有Photoshop、CorelDRAW、IIIustator、Freehand、PageMaker等等。这些工具都需要下载安装,对电脑设备及设计人员要求都比较高。
    现在一些网站提供在线的平面图设计工具,可以绘制各类相关的平面图,

    下面小编就为大家介绍一款在线平面图绘制工具: Freedgo Design ,他可以轻松、快速、协作地创建各种专业图表。是多种类型图表的在线绘制软件,让您快速创建家庭、办公、厨房、卫生间、卧室、餐厅等等平面图。立即开始免费试用,其网址为: https://www.freedgo.com.


    通过一系列的绘制完成平面图设计,操作示例请看如下视频:

    在这里插入图片描述

    该平面图查看效果如下: 在线平面图设计

    下面简单介绍一下该平面图的功能:

    这是一个住宅的平面图,绘制了主建筑的墙、门窗结构、照明设备,安全设施、家具、水管和洁具设备等等,通过点击如下按钮,可以显示平面图的不同部分的图样。
    在线制图 平面图设计

    平面图包括:
    • 门窗及墙面
    • 安全设施
    • 家具
    • 照明设备:区分3种不同的颜色标识区分厨房,室内,室内等

    在线制图 平面图设计

    • 水管及洁具: 标注了盥洗室排水管道,梳妆台,冷水管道,温水管道
      在线制图 平面图设计

    该平面图通过 在线制图工具 Freedgo DesignFreedgo Design设计,具体地址为: https://www.freedgo.com/draw_index.html?libs=floorplan;general;

    平面图的制作步骤

    步骤一:

    访问 https://www.freedgo.com ,先注册一个用户,注册成功后,登录到 首页

    步骤二:

    访问 https://www.freedgo.com/draw_index.html ,进入制图页面,或者从 首页 页面 顶部菜单点击开始制作

    进入制图页面后 点击 文件 -> 从类型中新建 -> 平面图 选择其中一个平面图

    在线制图 平面图

    或者点击图例,在图例中找到 平面图,选择一个类似的图例进行改动

    在线制图 平面图

    步骤三:

    从左侧符号栏拖拽合适的几何图形至画布,松手后,椭圆图形就被固定画布上.

    在线制图 平面图

    步骤四:

    平面图制作工具拥有一套功能丰富的样式,用户可以对封闭图形进行单色填充、渐变填充、文本大小位置颜色调整。经过图案填充的平面图,颜值提升了不少。
    在线制图 平面图

    步骤五:

    按照绘图要求,一步一步的地完成平面图的绘制。最终完成了整幅的绘制任务。
    在线制图 平面图

    更多基本流程的例子 请参考 [图例] (https://www.freedgo.com/showcase/plane_diagram/FloorPlan_1.html) 或者直接访问 : https://www.freedgo.com/showcase/plane_diagram/FloorPlan_1.html

    展开全文
  • 功能特性: 对位和矢量对象的新的非破坏性效果 更好地控制对象,图层和页面 改进像素完美文档的像素工作流程 套房中的新功能!使用CorelDRAW.app随时随地工作 标题 使用宽大的工具箱创建专业设计 从令人惊叹的...

    CorelDraw 2019回归Mac并进入网络经过近20年的努力,Corel再次吸引Mac用户加入到CorelDraw Graphics Suite 2019大家庭。Corel在2001年不可避免放弃了其Mac版CorelDraw产品。18年后今天推出其最新的Windows更新CorelDraw Graphics Suite 2019,并首次亮相进入网络应用世界。 这次的不同之处在于Mac版本不是一个温暖的Windows应用程序。 相反,它是由一个单独的和新开发的代码库构建的。这在实践中意味着它看起来和感觉就像一个原生的Mac OS应用程序。 它遵循特定于系统的约定 – 应用程序菜单下的首选项,而不是Windows中的编辑菜单,支持High Sierra中的暗模式,广泛的Touch Bar集成,Javascript而不是VBA脚本等等。 它还支持本机GPU加速。 但从功能上讲,它与Windows版本相同。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

     

    功能特性:

    • 对位图和矢量对象的新的非破坏性效果
    • 更好地控制对象,图层和页面
    • 改进像素完美文档的像素工作流程
    • 套房中的新功能!使用CorelDRAW.app随时随地工作
    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac
    标题

    使用宽大的工具箱创建专业设计

    从令人惊叹的艺术作品到有影响力的网页图形和卓越的印刷品,通过工具表达您的创意愿景,使您能够提供令您自豪的成果。

    更精确和控制

    增强!对象码头

    管理设计元素,图层和页面已经完全重新构想。现在,新的对象泊坞窗可让您直接控制文档结构并快速访问其组件。

    增强!像素工作流程

    确保网络的所有图形都是完美的像素。将像素网格与页面边缘对齐,以便导出的任何图形都具有清晰的边缘,并且新的“对齐像素网格”按钮可以轻松完美地塑造形状。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

    更自由地探索和创造

    新!非破坏性影响

    在不改变源图像或对象的情况下,对矢量和位图应用,修改和试验位图效果。“属性”泊坞窗中的新“效果”选项卡是非破坏性编辑的中心。

    新!模板

    享受更新的New From Template工作流程以及各种完全刷新的模板,可从欢迎屏幕中的“获取更多”下载。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

    更多用户请求的增强功能

    增强!PDF / X标准

    CorelDRAW Graphics Suite 2019提供更多种类的ISO兼容PDF / X导出选项。对PDF / X-4的新支持可确保轻松输出与最广泛设备兼容的文件。

    增强!用户界面

    利用更易于导航的界面。更有效地查找和替换项目元素,享受简化的Print Merge体验以及重新组织的Options对话框。

    增强!性能和稳定性

    快速响应地使用CorelDRAW Graphics Suite。享受与文本处理,启动时间,文档加载时间,图形渲染等相关的性能改进。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

    随时随地设计

    创建新设计,并在不靠近计算机时访问CorelDRAW文件。

    保存到云端

    将您的工作存储在云中,以便您可以随时从任何系统访问和共享它。

    轻松进出口

    享受对CDR,PDF,PNG,JPEG和SVG导入和导出文件格式的支持。

    要登录coreldraw.app,请访问www.coreldraw.app并使用您用于注册CorelDRAW Graphics Suite 2019副本的相同用户名和密码。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

    您在其他地方找不到的功能

    CorelDRAW Graphics Suite具有省时工具,其他图形软件没有,或者需要插件。查看CorelDRAW独有的功能。

    创建一系列对称设计,从简单的对象到实时的复杂万花筒效果,并通过自动化通常非常耗时的工作流程来提高您的工作效率。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

    只需点击几下,即可从任意数量的选定矢量或位图对象生成高质量的矢量马赛克。灵感来自Pointillism绘画技术,它非常适合创建车辆包装,窗户装饰项目等。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

    草图和设计在飞行中!LiveSketch™是一种革命性的工具,它利用人工智能和机器学习将自由形式的草图转换为支持触摸的设备上的精确矢量曲线。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

    使用“投影”工具使用光标处理实时投影,消除了在对话框中重新定位它们的繁琐任务。CorelDRAW独特的“块阴影”功能为使用切割器和绘图仪的人员提供了理想的选择,可为对象和文本添加实心矢量阴影,从而大大减少阴影中的线条和节点数量。

    平面设计矢量绘图软件 CorelDRAW 2019破解版附注册机 Win/Mac

    系统需求:

    • Windows 10 *,8.1或Windows 7,32位或64位,都带有最新的更新和Service Pack
    • 英特尔酷睿i3 / 5/7或AMD速龙64
    • 2 GB RAM
    • 2.5 GB硬盘空间
    • 多点触摸屏,鼠标或平板电脑
    • 1280 x 720屏幕分辨率为100%(96 dpi)
    • Microsoft Internet Explorer 11或更高版本
    • Microsoft .NET Framework 4.7
    • CD驱动器可选(用于盒子安装)。从CD安装需要下载最多800 MB
    • 安装和验证CorelDRAW Graphics Suite并访问一些包含的软件组件,在线功能和内容需要Internet连接
    展开全文
  • Form++可视化图形组件库开发类似于Visio的建筑平面图、布局图等软件系统非常容易,矢量图编辑应用是从E-Form++诞生之日起就一直处于非常重要的地位,我们将其作为E-Form++可视化图形组件库的头号解决方案来展开设计...

    建筑平面图, 建筑设计图, 家具摆放图, 制作, 开发, 软件, VC++, 源代码组件库


     

    使用E-Form++可视化图形组件库开发类似于Visio的建筑平面图、布局图等软件系统非常容易,矢量图编辑应用是从E-Form++诞生之日起就一直处于非常重要的地位,我们将其作为E-Form++可视化图形组件库的头号解决方案来展开设计。很高兴的是,现在已经大功告成,您会发现,E-Form++此部分功能已经能够与当今世界最专业的图形编辑程序媲美,例如:Visio, ConceptDraw, SmartDraw等等,除此之外E-Form++还有一点是他们绝对做不到的:将所有经过严格测试的VC++源代码提供给客户。

      我们提供的这些解决方案并不意味着E-Form++可视化图形组件库只能开发这些方面的应用,事实上E-Form++同任何其他第三方C++组件库一样,包含数百项可以分开独立使用的功能。同QT, MFC等一样,您可以独立决定是否需要E-Form++中的某项功能,一般来讲,只要您需要图形显示、需要流程图、控制图、打印功能、排版功能、仿真、电子地图、电力接线图、表单等等功能,您就可以使用E-Form++组件库,当然有的时候也许您只希望使用E-Form++提供的下拉颜色等控件而不需要绘图功能,那没问题!
        下载此解决方案
    E-Form++可视化组件库是开发任何建筑平面设计软件的理想选择:

     

    1、E-Form++提供了复合图形设计程序ShapeDeisigner可快速设计建筑平面设计需要的各种复杂的图形。

    2、画布大小可只有设定。

    3、支持毫米,厘米,米,英尺,英尺等多种绘制单位设定。

    4、支持多种标注线,并且可根据应用程序的需要进行定制和扩展。

    5、缩微图预视,并可通过矩形在缩微图中调整画布显示的位置。

    6、支持广泛的大比例画布缩放。

    7、可通过鼠标垂直或者水平平推画布。

    8、可在同一画布上放置上万个图形元件,并同时操作。

    9、支持目前只有非常专业绘图软件才具备的矢量图编辑功能,可自由移动,旋转,缩放,扭曲,变形画布上的各种图形。

    10、支持即插即用自定义属性值,可为画布上的任何建筑设计元件设定自定义属性值,所设定的属性值可直接通过ID值进行查询,在修改的时候自动支持Undo / Redo。

    11、内置完善的打印功能,无需编写任何代码即可控制打印机,打印输出纸张,打印方向,页面边界等。

    12、提供E-Form++库功能一致的ocx控件,方便web部署,或者在.net, delphi, java等其他开发环境中调用。

    13、100%全部VC++源代码提供,包括ocx控件的设计源代码。无需为核心技术担忧。

    E-Form++可视化图形组件库集成了UCanCode所有技术的最好的源代码组件库,并提供更加灵活的界面控制以及图形操作能力,为开发排版、地理信息系统以及其他高性能的软件提供了一套完善的解决方案。 此版本是目前UCanCode产品中最大、最全、功能最强、最畅销的版本。是开发高性能的企业级应用系统的首选。

    项目符号 100% VC++设计,并提供所有的源代码,毫无保留。
     
    项目符号 超过30万行有效代码,以及超过300个C++扩展类。
     
    项目符号 自动代码产生程序以及完整的开发文档,帮助您快速构建各种基于Form++的应用。
     d
    项目符号 提供开发高级应用系统的完善的可扩展的界面控制功能。
    d
    项目符号 提供一行代码修改属性并支持Undo/Redo功能。
    d
    项目符号 用户可根据自己的需要对画布、组件、操作等各种操作进行自定义。
    d
    项目符号 同时支持单页面或者多页面应用程序。
    d
    项目符号 对组件进行布局、间隔、顺序编排。
    d
    项目符号 打印、打印预览以及输出到图象。
    d
    项目符号 更加强大的用户操作界面。
    d
    项目符号 支持将EditBox,CheckBox,RadioBox,ComboBox等Windows倥件直接拖入画布,并完成数据录入功能,此外系统的灵活架构允许您将任何标准Windows控件放入画布。
    d
    项目符号 绘制直线、标注线、曲线、矩形、椭圆、添加文本、以及图片等。
    d
    项目符号 提供超过40个各种开发示例程序。
    d
    项目符号 多种图像文件格式支持(包括:JPG,GIF,TGA,PNG,PCX等)。
    d
    项目符号 多图层支持。
    d
    项目符号 辅助线同辅助控制点
    d
    项目符号 图形与图形之间的各种运算等。

    通过E-Form++提供的专业元件设计工具ShapeDesigner (注:正式版本的E-Form++可视化组件库提供此工具的全部设计源代码,可定制),可轻松的将任何Microsoft Visio, ConceptDraw等的元件导入到左边的工具盒中。同时您也可以直接使用ShapeDesigner提供的专业绘图工具来设计各种元件。

    使用E-Form++可视化图形组件库可以开发任何需要的基于矢量图形的应用系统,例如建筑平面图设计:

    通过E-Form++提供的专业元件设计工具ShapeDesigner (注:正式版本的E-Form++可视化组件库提供此工具的全部设计源代码,可定制),可轻松的将任何Microsoft Visio, ConceptDraw等的元件导入到左边的工具盒中。同时您也可以直接使用ShapeDesigner提供的专业绘图工具来设计各种元件。

     

    全部超过50万行精心设计并严格测试的源代码提供无任何保留!
    提供超过400个C++扩展类,50万行有效VC++/MFC源代码,70多个示例或者解决方案源代码,完整的而细致的用户在线帮助系统和文档,精心设计的辅助开发工具!

    强大,灵活和易于使用的可视化图型源码库。
    功能强大,灵活地创建各种各样的满足您的需求的图表。产品设计规范,很容易使用,在短短的几天就能根据您的需求设计出产品。 我们提供完整的支持产品下载试用。

    功能丰富。
    超多功能,如自动布局,多层次,可折叠子图,单元连接点中,XML,DXF, SHP, SVG等等,能够协助您快速灵活的创建复杂的图表。支持大量事件:如单击,双击,悬停,选择,橡皮筋选择,复制,删除,调整大小和移动的支持。支持最复杂的操作:如拖和拖放,无限次的撤销/重做和剪贴板操作等等。


    节省时间和金钱,获得可靠性。
    一张图胜过千言万语,E-Form++提供超过50万行精心设计和良好测试的C++源代码!开发耗时十年,全球上千家客户验证,能够为您节省大量的开发时间和金钱!

    现在就来试试!
    不要光听我们的说, 试试吧! 我们的免费试用版包括所有你需要你的应用程序原型。免费技术支持。

     产品中心

    下载此解决方案

    购买全部源代码:

    正式版本的E-Form++可视化图形组件库企业版本提供此解决方案的全部源代码, 单击下面的按钮向UCanCode订购:

    展开全文
  • 现在做一个可交互的平面图形。 要求是: 1.三个不同的平面图形 2.可以通过鼠标“各自”进行指定的操作。 3.第二条中操作包括:旋转、平移、缩放 该文章:首先介绍一个图形时候的情况。多个图形不断更新。 ...

    ###综述
    最近在学习图形学的一些知识。现在做一个可交互的平面图形。
    要求是:
    1.三个不同的平面图形
    2.可以通过鼠标“各自”进行指定的操作。
    3.第二条中操作包括:旋转、平移、缩放
    该文章:首先介绍一个图形时候的情况。多个图形不断更新。
    如果你需要更加强大的程序,可以参见我的这一篇文章:
    读取off、stl、obj文件并旋转平移缩放操作
    ###环境
    我是用xcode写的。但是不用担心,你需要修改的或许只是include头文件的两个字母。
    ###基础知识:
    你会在这个过程中遇到一些新的命令,如果你想弄明白可以仔细阅读下述内容。当然你也可以直接跳过。先去阅读最后的代码在回来补充知识
    ####glPushMatrix()命令与glPopMatrix()命令

    glPushMatrix、glPopMatrix操作其实就相当于栈里的入栈和出栈。许多人不明白的可能是入的是什么,出的又是什么。例如你当前的坐标系原点在你电脑屏幕的左上方。现在你调用glPushMatrix,然后再调用一堆平移、旋转代码等等,然后再画图。那些平移和旋转都是基于坐上角为原点进行变化的。而且都会改变坐标的位置,经过了这些变化后,你的坐标肯定不再左上角了。那如果想恢复怎么办呢?这时就调用glPopMatrix从栈里取出一个“状态”了,这个状态就是你调用glPushMatrix之前的那个状态。就如很多opengl的书上所讲:调用glPushMatrix其实就是把当前状态做一个副本放入堆栈之中。当你做了一些移动或旋转等变换后,使用glPushMatrix();OpenGL 会把这个变换后的位置和角度保存起来。然后你再随便做第二次移动或旋转变换,再用glPopMatrix();OpenGL 就把刚刚保存的那个位置和角度恢复。

    比如:

    glLoadIdentity();
    glTranslatef(1,0,0);//向右移动(1,0,0)
    glPushMatrix();//保存当前位置
    glTranslatef(0,1,0);//现在是(1,1,0)了
    

    更详细的可以参见如何理解glPushMatrix与glPopMatrix

    ####glTranslatef()命令
    在介绍glPushMatrix与glPopMatrix的例子时。我们看到了glTranslatef命令。那么这个命令是干嘛的呢?
    其实这个就是核心:也就是我们的平移函数

    glTranslatef()
    

    当然还有旋转函数

    glRotatef()
    

    注意这系列函数都是依附于指定的坐标系

    void glTranslatef(GLfloat x,GLfloat y,GLfloat z);
    /*函数功能:沿X轴正方向平移x个单位(x是有符号数)
      沿Y轴正方向平移y个单位(y是有符号数)
      沿Z轴正方向平移z个单位(z是有符号数)*/
    void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z);
    /*先解释一下旋转方向,做(0,0,0)到(x,y,z)的向量,用右手握住这条向量,大拇指指向向量的正方向,四指环绕的方向就是旋转的方向;
    函数功能:以点(0,0,0)到点(x,y,z)为轴,旋转angle角度;
    */
    
    

    这两个函数,不论是平移还是旋转都是针对于上一个矩阵来说的
    ####glutSwapBuffers()命令
    该命令就是双缓冲命令。可以避免更新时的闪烁现象。
    具体可以参见:glutSwapBuffers()命令
    ###具体实现
    下面就是实现代码:(先给出一个图形时的样子)
    代码不多请务必仔细阅读。
    ####无交互的单图形移动代码

    //
    //  main.cpp
    //  CG_Ep1
    //
    //  Created by SDU_bigbean on 2018/4/3.
    //  Copyright © 2018年 SDU_bigbean. All rights reserved.
    //
    #include <iostream>
    #include <GLUT/GLUT.h>
    using namespace std;
    int hmin,hmax;                                 //记录扫描线开始和结束的位置
    float window_size = 800;
    GLfloat rtx = 0, rty = 0, rtz = 0;
    /*
     实验1说明:
     有三个区域可以选择指定图形进行操作:
     1.平移:使用方向键控制
     2.缩放:支持滚轮缩放
     3.旋转:支持自动控制旋转的速度(使用数字键1、2、3标志)
     */
    //注意我们的正方形的大小是100*100的
    void InitEnvironment()
    {   /*
         函数说明:对环境画布进行初始化操作
         注意这里使用像素坐标系
         */
        glClearColor(0.0,0.0,0.0,0);
        glClear(GL_COLOR_BUFFER_BIT);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluOrtho2D(0,window_size,0,window_size);
    }
    void move()
    {
        cout << "comming " <<endl;
        static GLfloat step = 10;
        if (rtx + step > 600|| rtx + step < -100)step = -step;
        //限制范围不能出界
        rtx += step;
        glutPostRedisplay();
    }
        
    void display(void)
    {   /*绘制三个不同的图形*/
        glClear(GL_COLOR_BUFFER_BIT);
        glPushMatrix();
        //模型视图矩阵堆栈是干嘛用的呢?我们在三维空间中绘制模型,大部分时候需要对模
        //型进行移动、旋转、缩放操作.
        //而OpenGL移动的不是模型,而是坐标系
        
        glTranslatef(rtx, rty, rtz);//指定坐标系
    
        glBegin(GL_QUADS);
        glColor3f(1.0f, 0.0f, 0.0f); //这个只是对点着色然后好看些
        glVertex2f(100, 200);
        glColor3f(0.0f, 1.0f, 0.0f);
        glVertex2f(200, 200);
        glColor3f(0.0f, 0.0f, 1.0f);
        glVertex2f(200, 300);
        glColor3f(0.5f, 0.5f, 0.5f);
        glVertex2f(100, 300);
        glEnd();
        glFlush();
        glPopMatrix();
        glutSwapBuffers();// 双缓冲操作。“后台先做好,再放在前台来。”可以有效避免刷新闪烁的问题。
    }
    
    int main(int argc, char *argv[])
    {   glutInit(&argc, argv);   //初始化GLUT
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
        glutInitWindowPosition(300, 100);
        glutInitWindowSize(window_size, window_size);
        glutCreateWindow("实验1");
        InitEnvironment();   //初始化
        glutDisplayFunc(display);
        glutIdleFunc(move);//进行移动操作
        glutMainLoop();    //持续显示,当窗口改变会重新绘制图形
        return 0;
    }
    
    

    ####有交互的多图形移动代码

    /*
       main.cpp
       CG_Ep1
       Created by SDU_bigbean on 2018/4/6.
       Copyright © 2018年 SDU_bigbean. All rights reserved.
     */
    #include <GLUT/GLUT.h>
    #include <stdlib.h>
    #include<math.h>
    #include <iostream>
    using namespace std;
    //屏幕尺寸
    int SCREEN_WIDTH = 600;
    int SCREEN_HEIGHT = 600;
    int radius = 60;
    int flag=1;
    float scales = 1.1;
    float cut_scales = 0.01;
    int init_step = 110;                    //记录一开始各个图形之间的间距
    float PI = 3.1415926;
    float angles = 0.01;
    //存放选中物体的缓冲的尺寸
    #define SIZE 500
    //选中区域的尺寸
    #define N 10
    struct obj{
        int index;
        GLfloat rtx0 = 0, rty0 = 0, rtz0 =1;
        GLfloat xmin = 0, ymin = 0, xmax = 0,ymax = 0;
        GLfloat x1= xmin, y1 = ymin, x2 = xmax,y2 = ymin,x3 = xmax,y3 = ymax,x4=xmin,y4=ymax;
        GLfloat xscale = 1.0, yscale = 1.0, zscale = 1.0;
        int l,r,u,d;
    };
    //当前选中物体
    obj obj_con[4];
    int select_point = 0;//1 是第一个点,2是第二个,以此类推
    int selected=0;
    void init()
    {
        /*函数说明:
         进行初始化布局*/
        glClearColor(0,0,0,1);
        //首先初始化布局画布
        for (int i =1 ; i<=3; i++) {
            if(i==1){
                obj_con[i].xmin = 0+init_step;
                obj_con[i].xmax = 100+init_step;
                obj_con[i].ymin = 320;
                obj_con[i].ymax = 420;
                obj_con[i].index  = 1;
                obj_con[i].r = 400;
                obj_con[i].l = -120;
                obj_con[i].u = 160;
                obj_con[i].d = -330;
            }else if (i==2) {
                obj_con[i].xmin = 60+2*init_step;
                obj_con[i].xmax = 160+2*init_step;
                obj_con[i].ymin = 320;
                obj_con[i].ymax = 420;
                obj_con[i].index  = 2;
                obj_con[i].r = 230;
                obj_con[i].l = -290;
                obj_con[i].u = 160;
                obj_con[i].d = -330;
            }else{
                obj_con[i].r = 20;
                obj_con[i].l = -480;
                obj_con[i].u = 150;
                obj_con[i].d = -320;
            }
            obj_con[i].x1= obj_con[i].xmin;
            obj_con[i].y1 = obj_con[i].ymin;
            obj_con[i].x2 =obj_con[i]. xmax;
            obj_con[i].y2 = obj_con[i].ymin;
            obj_con[i].x3 = obj_con[i].xmax;
            obj_con[i].y3 = obj_con[i].ymax;
            obj_con[i].x4=obj_con[i].xmin;
            obj_con[i].y4=obj_con[i].ymax;
        }
        
    }
    void Drawtri()
    {
        /*
         函数说明:绘制圆形并进行颜色填充
         理解为足够小的三角形拼凑成为圆形
         */
        double n=1000;//分段数
        float R=20;//半径
        int i;
        glPushMatrix();
        glColor3f(0.0,0.2,0.8);
        glBegin(GL_TRIANGLE_FAN);
        glVertex2f(0.0,0.0);
        for(i=0; i<=n; i++)
            glVertex2f(R*cos(2*PI/n*i), R*sin(2*PI/n*i));
        glEnd();
        glPopMatrix();
    }
    void draw(GLenum mode)
    {   const static GLfloat color_selected[] = {0.5f,1.0f,0.0f};
        const static GLfloat color_unselected[] = {1.0f,1.0f,1.0f};
        //先绘制指示灯
        glBegin(GL_LINES);
        glColor3f(1.0,1.0,1.0);
        glVertex2f(0,570); //定点坐标范围
        glVertex2f(600,570);
        glBegin(GL_LINES);
        glColor3f(1.0,1.0,1.0);
        glVertex2f(0,574); //定点坐标范围
        glVertex2f(600,574);
        glEnd();
        //模型视图矩阵堆栈是干嘛用的呢?我们在三维空间中绘制模型,大部分时候需要对模
        //型进行移动、旋转、缩放操作.
        //而OpenGL移动的不是模型,而是坐标系
        for(int i=1;i<=3;i++)//5个点
        {
            glPointSize(15);
            glBegin(GL_POINTS);
            glVertex2f(0,0);
            glEnd();
            //我们将每个一个坐标系记录在矩阵栈中
            //为了实现鼠标点击我们将每个图形放入对象栈中
            //我们不将指示灯放入坐标矩阵中
            if (mode == GL_SELECT) glLoadName(i);
            glColor3fv( (selected== i)? color_selected : color_unselected );
            glPointSize(15);
            glBegin(GL_POINTS);
            glVertex2f(20+30*i,587);
            glEnd();
            glPushMatrix();
            if(i==1){
                glTranslatef(obj_con[i].rtx0, obj_con[i].rty0, obj_con[i].rtz0);//指定移动坐标系
                glBegin(GL_QUADS);
                glColor3f(0.0f, 1.0f, 0.0f); //这个只是对点着色然后好看些
                glVertex2f(obj_con[i].x1 ,  obj_con[i].y1);
                glColor3f(1.0f, 0.0f, 0.0f);
                glVertex2f(obj_con[i].x2 , obj_con[i].y2);
                glColor3f(0.0f, 0.0f, 1.0f);
                glVertex2f(obj_con[i].x3, obj_con[i].y3);
                glColor3f(0.5f, 0.5f, 0.5f);
                glVertex2f(obj_con[i].x4 ,  obj_con[i].y4);
                glEnd();
            }
            else if(i==2) {
                glTranslatef(obj_con[i].rtx0, obj_con[i].rty0, obj_con[i].rtz0);//指定移动坐标系
                glBegin(GL_TRIANGLES);
                glColor3f(0.0f, 1.0f, 0.0f); //这个只是对点着色然后好看些
                glVertex2f(obj_con[i].x1 ,  obj_con[i].y1);
                glColor3f(1.0f, 0.0f, 0.0f);
                glVertex2f(obj_con[i].x2, obj_con[i].y2);
                glColor3f(0.0f, 0.0f, 1.0f);
                glVertex2f(obj_con[i].x3, obj_con[i].y3);
                glEnd();
            }else{
                glTranslatef(obj_con[i].rtx0, obj_con[i].rty0, obj_con[i].rtz0);//指定移动坐标系
                obj_con[i].xmin = 200+3*init_step;
                obj_con[i].ymin = 370;
                obj_con[i].index  = 3;
                int count;
                int sections=10000;
                GLfloat TWOPI=2.0f * 3.14159f;
                glBegin(GL_TRIANGLE_FAN);
                glVertex2f(obj_con[i].xmin, obj_con[i].ymin);
                glColor3f(1.0f, 0.8f, 0.3f);
                for(count=0; count<=sections; count++)
                    glVertex2f( obj_con[i].xmin +radius*cos(count*TWOPI/sections), obj_con[i].ymin+radius*sin(count*TWOPI/sections));
                glEnd();
            }//这里设置我们的图形
            glPopMatrix();
        }
        glutSwapBuffers();
    }
    void display()
    {   glClear(GL_COLOR_BUFFER_BIT);
        draw(GL_RENDER);
        glFlush();
    }
    void reshape(int width, int height)
    {
        glViewport(0, 0, width, height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(0,SCREEN_WIDTH,0,SCREEN_HEIGHT);
        glMatrixMode(GL_MODELVIEW);
    }
    void processHits(GLint hits, GLuint buffer[])
    {
        unsigned int i,j;
        GLuint name;
        for(i=0; i<hits;i++)
        {
            name = buffer[3+i*4];
            select_point = name;//每个选中物体有占用名字栈中4个单位,第4个是物体名字的值
            selected  = name;
        }
    }
    double get_x(double x, double y, double theta) {
        //得到旋转后的x坐标
        return x * cos(theta) - sin(theta) * y;
    }
    double get_y(double x , double y, double theta) {
        //得到旋转后的y坐标
        return x * sin(theta) + cos(theta) * y;
    }
    void show_point(int x){
        /*
         函数说明:控制指示灯的闪亮情况
         */
        glBegin(GL_POINTS);
        glPointSize(15);
        glColor3f(1.0,1.0,0.0);
        glVertex2f(20+30*x,787);
        glEnd();
    }
    void move_to_o(){
        /*函数说明:先将物体移动到原点
         再进行目标操作(旋转放缩)
         */
        float x  = ( obj_con[selected].xmin+obj_con[selected].xmax)/2;
        float y  = ( obj_con[selected].ymin+obj_con[selected].ymax)/2;
        obj_con[selected].x1 -= x;
        obj_con[selected].x2 -= x;
        obj_con[selected].x3 -= x;
        obj_con[selected].x4 -= x;
        obj_con[selected].y1 -= y;
        obj_con[selected].y2 -= y;
        obj_con[selected].y3 -= y;
        obj_con[selected].y4 -= y;
    }
    void move_back(){
        /*
         函数说明:将移动到原点的物体移动回到原来的位置
         */
        float x  = ( obj_con[selected].xmin+obj_con[selected].xmax)/2;
        float y  = ( obj_con[selected].ymin+obj_con[selected].ymax)/2;
        obj_con[selected].x1 += x;
        obj_con[selected].x2 += x;
        obj_con[selected].x3 += x;
        obj_con[selected].x4 += x;
        obj_con[selected].y1 += y;
        obj_con[selected].y2 += y;
        obj_con[selected].y3 += y;
        obj_con[selected].y4 += y;
    }
    void move_to_o2(){
        /*函数说明:先将物体移动到原点
         该函数控制的是错切变换的结果
         */
        float x  = ( obj_con[selected].xmin+obj_con[selected].xmax)/2 -(obj_con[selected].xmax  -obj_con[selected].xmin)/2 ;
        float y  = ( obj_con[selected].ymin+obj_con[selected].ymax)/2-(obj_con[selected].ymax  -obj_con[selected].ymin)/2 ;
        obj_con[selected].x1 -= x;
        obj_con[selected].x2 -= x;
        obj_con[selected].x3 -= x;
        obj_con[selected].x4 -= x;
        obj_con[selected].y1 -= y;
        obj_con[selected].y2 -= y;
        obj_con[selected].y3 -= y;
        obj_con[selected].y4 -= y;
    }
    void move_back2(){
        /*
         函数说明:将移动到原点的物体移动回到原来的位置
         该函数控制的是错切变换的结果
         */
        float x  = ( obj_con[selected].xmin+obj_con[selected].xmax)/2-(obj_con[selected].xmax  -obj_con[selected].xmin)/2 ;
        float y  = ( obj_con[selected].ymin+obj_con[selected].ymax)/2-(obj_con[selected].ymax  -obj_con[selected].ymin)/2 ;
        obj_con[selected].x1 += x;
        obj_con[selected].x2 += x;
        obj_con[selected].x3 += x;
        obj_con[selected].x4 += x;
        obj_con[selected].y1 += y;
        obj_con[selected].y2 += y;
        obj_con[selected].y3 += y;
        obj_con[selected].y4 += y;
    }
    /*
     注意下述旋转、错切、平移、放缩等
     都需要实现进行移动坐标在移动回来
     */
    void rotato(){
        /*
         函数说明:进行旋转操作
         */
        obj_con[selected].x1 =   get_x( obj_con[selected].x1,  obj_con[selected].y1, angles);
        obj_con[selected].y1 =   get_y( obj_con[selected].x1,  obj_con[selected].y1, angles);
        obj_con[selected].x2 =   get_x( obj_con[selected].x2,  obj_con[selected].y2, angles);
        obj_con[selected].y2=   get_y( obj_con[selected].x2,  obj_con[selected].y2, angles);
        obj_con[selected].x3 =   get_x( obj_con[selected].x3,  obj_con[selected].y3, angles);
        obj_con[selected].y3=   get_y( obj_con[selected].x3,  obj_con[selected].y3, angles);
        obj_con[selected].x4=   get_x( obj_con[selected].x4,  obj_con[selected].y4, angles);
        obj_con[selected].y4=   get_y( obj_con[selected].x4,  obj_con[selected].y4, angles);
    }
    void cut_move(int flag,int flage){
        /*函数说明:进行指定方向的错切操作
         参数说明:第一个参数flag指定x方向和y方向 0,1
         第二个参数flage指定是放大还是缩小
         */
        float sc  = cut_scales;
        if (flage==1)      //看是放大还是缩小
            sc = -sc;
        if (flag ==1) {
            /*x = cx+y
             保持y不变*/
            obj_con[selected].x1 =sc*obj_con[selected].y1+obj_con[selected].x1 ;
            obj_con[selected].x2 =sc*obj_con[selected].y2+obj_con[selected].x2 ;
            obj_con[selected].x3 =sc*obj_con[selected].y3+obj_con[selected].x3 ;
            obj_con[selected].x4 =sc*obj_con[selected].y4+obj_con[selected].x4 ;
        }else if (flag ==2) {
            obj_con[selected].y1 =sc*obj_con[selected].x1+obj_con[selected].y1 ;
            obj_con[selected].y2 =sc*obj_con[selected].x2+obj_con[selected].y2 ;
            obj_con[selected].y3 =sc*obj_con[selected].x3+obj_con[selected].y3 ;
            obj_con[selected].y4 =sc*obj_con[selected].x4+obj_con[selected].y4 ;
        }
    }
    void enlarge(int flag,int flage){
        /*函数说明:进行指定方向的放缩操作
           参数说明:第一个参数flag指定x方向和y方向以及全方向
                          第二个参数flage指定是放大还是缩小
         */
        float sc  = scales;
        if (flage==1)
            sc = 1/sc;  //判断是放大还是缩小
        if (flag ==1) {
            obj_con[selected].x1 *=sc  ;
            obj_con[selected].x2 *=sc  ;
            obj_con[selected].x3 *=sc  ;
            obj_con[selected].x4 *=sc  ;
        }else if (flag ==2) {
            obj_con[selected].y1*=sc  ;
            obj_con[selected].y2 *=sc  ;
            obj_con[selected].y3 *=sc  ;
            obj_con[selected].y4 *= sc  ;
        }else{
            obj_con[selected].x1 *=sc  ;
            obj_con[selected].x2 *=sc  ;
            obj_con[selected].x3 *=sc  ;
            obj_con[selected].x4 *=sc  ;
            obj_con[selected].y1*=sc  ;
            obj_con[selected].y2 *=sc  ;
            obj_con[selected].y3 *=sc  ;
            obj_con[selected].y4 *=sc  ;
        }
    }
    void mouse(int button, int state, int x, int y)
    {   /*
         函数说明:控制鼠标的事件
         */
        GLuint selectBuffer[SIZE];//存放物体名称的栈
        GLint hits;//存放被选中对象个数
        GLint viewport[4];//存放可视区参数
        if( state == GLUT_DOWN && button == GLUT_LEFT_BUTTON)//当鼠标左键按下时
        {
            glGetIntegerv(GL_VIEWPORT,viewport);         //获取当前视口坐标参数
            glSelectBuffer(SIZE,selectBuffer);                  //选择名称栈存放被选中的名称
            glRenderMode(GL_SELECT);                        //设置当前为 选择模式
            glInitNames();                                             //名称栈
            glPushName(0);
            glMatrixMode(GL_PROJECTION);
            glPushMatrix();
            glLoadIdentity();
            gluPickMatrix(x,viewport[3]-y,N,N,viewport);//创建用于选择的投影矩阵栈
            gluOrtho2D(0,SCREEN_WIDTH,0,SCREEN_HEIGHT);//设置投影方式
            draw(GL_SELECT);//绘制场景
            glPopMatrix();
            glFlush();
            hits = glRenderMode(GL_RENDER);
            glMatrixMode(GL_MODELVIEW);
            if(hits > 0)processHits(hits,selectBuffer);
            glutPostRedisplay();
        }
        if( state == GLUT_DOWN && button == GLUT_RIGHT_BUTTON)//当鼠标左键按下时
        {
            //旋转
            if (obj_con[selected].index==3) {
                return;
            }else if(obj_con[selected].index==1||obj_con[selected].index==2){
                move_to_o();                                                                //首先移动到原点
                rotato();
                move_back();                                                                //然后移动到原来的位置
            }
            glutPostRedisplay();
        }
        if( state == GLUT_UP && button == GLUT_LEFT_BUTTON) //当鼠标左键抬起时
        {   select_point = 0;
            glRenderMode(GL_RENDER);
            draw(GL_RENDER);
            glutPostRedisplay();
        }
    }
    void processKeyBoard(int key, int x, int y)
    {/*
      函数说明:处理键盘的信息。
      具体的操作参考实际操作目录表
      */    int step = 10;
            switch (key)
            {   case '1':
                    selected=1;
                    break;
                case '2':
                    selected=2;
                    break;
                case '3':
                    selected=3;
                    break;
                case 'u':
                    move_to_o2();                                                                //首先移动到原点
                    cut_move(1,0);
                    move_back2();                                                                //然后移动到原来的位置
                    break;
                case 'i':
                    move_to_o2();                                                                //首先移动到原点
                    cut_move(2,0);
                    move_back2();
                    break;
                case 'j':
                    move_to_o2();                                                                //首先移动到原点
                    cut_move(1,1);
                    move_back2();                                                                //然后移动到原来的位置
                    break;
                case 't':
                    rotato();
                    break;
                case 'k':
                    move_to_o2();                                                                //首先移动到原点
                    cut_move(2,1);
                    move_back2();
                    break;
                case 'p':
                    scales+=0.01;
                    if (scales<1)
                        scales=1;
                    cout <<"加速缩放:"<< scales << endl;
                    break;
                case 'o':
                    scales-=0.01;
                    if (scales<1)
                        scales=1;
                    cout <<"减速缩放:"<< scales << endl;
                    break;
                case 'z':
                    if (selected==3) {
                        radius  = radius*scales;
                    }else{
                        move_to_o();                                                                //首先移动到原点
                        enlarge(1,0);
                        move_back();                                                                //然后移动到原来的位置
                    }
                    break;
                case 'x':
                    if (selected==3) {
                        radius  = radius*scales;
                    }else{
                        move_to_o();                                                                //首先移动到原点
                        enlarge(2,0);
                        move_back();                                                                //然后移动到原来的位置
                    }
                    break;
                case 'c':
                    if (selected==3) {
                        radius  = radius*(scales);
                    }else{
                        move_to_o();                                                                //首先移动到原点
                        enlarge(3,0);
                        move_back();                                                                //然后移动到原来的位置
                    }
                    break;
                case 'v':
                    if (selected==3) {
                        radius  = radius*(1/scales);
                    }else{
                        move_to_o();                                                                //首先移动到原点
                        enlarge(1,1);
                        move_back();                                                                //然后移动到原来的位置
                    }
                    break;
                case 'b':
                    if (selected==3) {
                        radius  = radius*(1/scales);
                    }else{
                        move_to_o();                                                                //首先移动到原点
                        enlarge(2,1);
                        move_back();                                                                //然后移动到原来的位置
                    }
                    break;
                case 'n':
                    if (selected==3) {
                        radius  = radius*(1/scales);
                    }else{
                        move_to_o();                                                                //首先移动到原点
                        enlarge(3,1);
                        move_back();                                                                //然后移动到原来的位置
                    }
                    break;
                case GLUT_KEY_LEFT:
                    if (obj_con[selected].rtx0 - step > obj_con[selected].l)obj_con[selected].rtx0 -= step;
                    break;
                case GLUT_KEY_RIGHT:
                    if (obj_con[selected].rtx0 + step <obj_con[selected].r)obj_con[selected].rtx0 += step;
                    break;
                case GLUT_KEY_UP:
                    if (obj_con[selected].rty0 + step < obj_con[selected].u)obj_con[selected].rty0 += step;
                    break;
                case GLUT_KEY_DOWN:
                    if (obj_con[selected].rty0 - step > obj_con[selected].d)obj_con[selected].rty0 -= step;
                    break;
                case 'a':
                    //表示可以按照反向旋转
                    angles = -angles;
                    break;
                default:
                    break;
            }
        glutPostRedisplay();
        return;
    }
    int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGBA| GLUT_DEPTH );
        glutInitWindowSize(SCREEN_WIDTH,SCREEN_HEIGHT);
        glutInitWindowPosition(300, 10);
        glutCreateWindow("CG实验1");
        init();
        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
        glutMouseFunc(mouse);
        glutSpecialFunc(processKeyBoard);//定义键盘事件
    
        glutMainLoop();
        
        return 1;
    }
    
    
    展开全文
  • 8 个值得拥有的高逼格平面设计软件

    千次阅读 2016-12-08 11:53:31
    所有设计领域,一款给力的设计软件对于设计师来说绝对是神一样的队友。无论是工作需求还是兴趣所在,以下几款平面设计软件都将是你不错的选择。
  • Mac设计师必备的设计绘图软件,为广大设计师推荐一些Mac上实用且强大的软件,使用好的软件,事半功倍,设计出精美的作品。 Mac上优秀的设计软件非常多,绝对不止这几款软件,看看以下内容,希望对你有帮助。 如有...
  • 做好一款产品软件工具必不可少: 1)PS产品相关图片处理; 2)CDR说明书、宣传册平面处理; 3)PROE产品ID建模和结构设计...矢量图软件,国内搞平面设计的人大多用CDR。 2)AI 矢量图软件,AI与PS兼容性比较好,...
  • 随着人们生活水平的提高,平面设计...各大学校平面设计专业尤为火爆,作为一名平面设计工作从业者,下面小编就来为你介绍一下平面设计软件都有哪些? 必备款一:Photoshop Adobe Photoshop这是一款说到平面设计...
  • 平面设计常用图像文件格式详解

    千次阅读 2005-10-13 20:49:00
    平面设计中我们会接触到很多图像格式,可是你真正地了解它们吗?下面我们就平面设计中常见的图像格式为大家分别做简单介绍。 BMP格式 BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,...
  • 平面设计师必看基本常识: A:最小字体不能小过5号,常规在8号左右;标题最大应掌握在10-18号。 B:标题与正文之间层次脉络清晰(通过段落、字体、大小、粗细、色彩、图标等方式标示)。 C:字距须小于行距,且行距...
  • CDR类CAD制作室内装修平面图

    千次阅读 2014-11-06 10:58:32
    本文中我们用Coreldraw软件参照已有的CAD室内设计结构图,绘制一张室内装修彩色平面图。更多平面设计教程可登陆e良师益友网学习。 首先看一下CAD的平面布局图。 1、打开Coreldraw软件,在绘图窗口处双击,...
  • 如何制作校园平面图及路线导图

    千次阅读 2016-10-19 17:21:29
    比如说,学校里有客人来参观,一个校园平面图在指导手册里是十分有用的,可是需要怎么做呢?答案是不需要做,借助搜索引擎来完成就好了。以北京交通大学为例,百度搜索“北京交通大学平面图”可得到下面的图,美观...
  • CDR是矢量图设计软件,和AI的定位一样。而PS是位图软件。 要学习CDR,如果只是简单的操作,能胜任街边打印店的工作的话,是非常好入门的! 软件基础操作,只要用心看教程视频+模仿操作,就能掌握!基础操作的学习,...
  • 平面设计需要学什么

    千次阅读 2018-09-27 13:59:37
    同时还要明白学习平面设计需要掌握哪些基本知识,和行业性的知识,才不至于在学习的过程中迷失方向,这个阶段,需要知道,看什么样的书,学什么样的软件,也不必纠结自己是否有高的标准的审美,而是要知道,人类文明...
  • CORELDRAW:平面矢量绘图(广告,名片,普通海报招贴排版,简单效果,其它软件的前驱辅助) PHOTOSHOP:图像处理龙头老大(不会此软件,你不叫平面设计师,3DMAX的后期渲染也要PS做辅助的.位图处理首先.(广告,影视,动画,婚纱...
  • 在面对众多平面设计软件时初学者往往不知从何下手,平面设计软件,罗列出来不计其数,而真正被平面设计师最常用到的主力软件无外乎以下四款:Photoshop、CorelDraw、illustrator以及Indesign。这四款平面设计软件,...
  • 本文针对软件设计文档编写过程中常用配的绘制展开,重点描述Enterprise Architect、Visio工具的基本使用方法及常见使用问题。 1,EA的使用及问题处理 2,visio使用及问题处理 3,UML的绘制过程与参考 4,其他...
  • 可从事的行业:美工图片处理,创意,平面广告设计,摄影后期 ,人像精修,影楼修师,广告设计,室内后期修,影视传媒,自由职业设计师等都要用到的软件。 文本== 之前有很多小伙伴都...
  • 设计(23) 二元函数3维图形软件设计

    千次阅读 2013-06-11 15:22:28
    设计(23) 二元函数3维图形软件设计(为物理系教师出版教科书增加相关插图)
  • 1、打开Coreldraw软件,在绘图窗口处双击,则弹出选项窗口,设置全局比例,平面图是1:80。如图。    2、用矩形工具画一个如图所示的形状。注意在画图过程中的视图放缩快接键是:放大F2;缩小F3;全屏F4;最大显示...
  • 中国平面设计指导价格

    万次阅读 2012-07-30 12:36:37
    为规范中国平面设计行业市场,促进设计行业的健康发展,给设计交易提供一个客观合理的收费标准。中国设计之窗、深圳市平面设计协会历时10个月,调查了全 国21个省、自治区48个城市的设计市场行情,对采集到的23755个...
  •  随着设计行业信息化、设计过程数字化的飞速发展,平面设计、机械设计、建筑设计、动画设计设计行业迎来了飞速发展。设计研发数据在不同的部门或设 计人员之间进行流转,电子信息资源的流转快捷性,一方面给生产...
  • 平面报表设计体验

    千次阅读 2006-09-20 11:58:00
    传统的报表设计器,使用了称之为条带式的设计体验,也就是报表样式设计界面上,设计面板上放置了一个个横条,这些... 下就是一个条带式报表的设计界面,很多报表工具比如Access,FastReport等等都是如此。实际上,若
  • 什么人适合学平面设计?

    千次阅读 2018-09-27 16:59:59
    1.对平面设计感兴趣或从事相关行业的人士均可学习;2.应往届职高、中专、中技毕业生及普通高中毕业生;3.有一定计算机基础和审美基础的人员;4.正在或将要从事各类平面设计(广告、包装等)、网页、多媒体制作的人员。 ...
  • 平面设计基础(PS)知识点总结

    千次阅读 2019-02-21 16:11:16
     PS基础知识: ...1.在平面设计中的应用 2.在插画设计中的应用 3.在网页设计中的应用 4.在界面设计中的应用 5.在数码艺术中的应用 6.在效果后期制作中的应用 三、图片文件格式: (gif) (jpeg) (png)...
  • 室内设计平面设计培训,哪个更适合女生学习?关于这个问题的回答,首先我们要了解室内设计平面设计的区分,并对这两个设计行业的细分领域做出全面的解读: 千锋:何为室内设计? 室内设计是根据建筑...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,546
精华内容 13,818
关键字:

平面图设计图软件