CAD使用心得之七 — CAD与其他软件的交互

CAD使用心得连载之七                                                         
——CAD与其他软件的交互
    从事设计工作,除了要使用到CAD外,还经常要使用到其他软件,如Sketchup、Photoshop、Lightcape、3dMax、CorelDraw、Word、Excel等,有时会碰到各个软件的交互。谈谈笔者的经验。
一、Sketchup
    Sketchup应该说深受广大建筑设计人员的喜爱,因为它可以很方便的将平面的图形立起来,进行体块的研究,或者是细部的推敲。在很多设计公司,现在都是先将建筑设计(包括装修、规划、城市设计等)用Sketchup竖起来,推敲好,再提给效果图公司建模绘效果图。这样也有利于效果图公司能够比较直观地了解需要建模的对象。建议所有建筑师,特别是年轻建筑师,都要一定程度的了解Sketchup。建筑设计绝对不是平面设计,除了在平面中考虑流线、功能外,其它都要3维的考虑。国外好的设计都是经过一轮轮不同比例的模型推敲的。
    Sketchup与cad的交互很简单,在cad中绘制到一定程度,需要SU时,整理一下dwg文件,删除一些没用的东西,保留基本的平面图,并选中所有图元,将其中的某个基准点Move到0,0,0坐标(否则,在SU中会找不到图形的),保存,SU中导入即可。
二、3dMax
    3dMax,最常规也最常用的效果图绘制软件,建模非常方便(一般建筑师用Sketchup,效果图制作者多用3dMax,两者的建模思路不同)。

CAD中的平立面图,在3dmax的建模过程中都需要,导入过程都比较简单,不多说。不过有一点要注意,图层设置合理,图元绘制精确的cad图纸导入3dmax要比图层设置随意的图节省建模者很多时间。
三、CorelDraw
    CorelDraw,在好几年以前,平面上色(平渲)时经常会使用到这个软件,最大的好处是出来的东西都是矢量文件。不过现在好象一般都PS来平面上色。
四、Photoshop
    Photoshop,这个行业最主要有三个地方会用到这个软件。一是方案的文本制作阶段;二是效果图的后处理,三是用来扫描一些图纸、照片等。
    就Photoshop和CAD的交互而言分为两种,一是将CAD的图纸导成位图文件(即后缀名为jpg、bmp等),以用于文本制作等;另一是将位图文件倒入CAD中,常见的是将扫描的地形图导入以便绘制成电子文档。先说第二种简单的,将位图文件导入CAD中。在CAD的菜单中,选择“插入”,再选择“光栅图像”,然后按照提示一步步操作即可。对于导入地形图,也可使用一些软件,如Vpstudio、R2V等来辅助矢量化。
    将CAD的图纸导成位图文件有三种方法,第一种最简单,是利用“Print Sceen”键进行屏幕拷贝,然后到PS中新开一个文件,粘贴即可。第二种是在CAD的菜单中,选择“输出”,再选择bmp的后缀存储。这同样可以把CAD的屏幕显示内容变成位图文件。在我们需要将CAD中的图纸转变成为较大分辨率的位图文件时,需要用到第三种方法。先需要设置一下。菜单中“工具”—“选项”—打印和发布,“添加或配置绘图仪”—“添加绘图仪向导”。出来一张“添加绘图仪”的菜单,左侧是阶段,右侧是选择内容。“开始”阶段选择“我的电脑”,“绘图仪型号”阶段选择生产商为“光栅文件格式”,最右侧的表格中基本上每个都可以,我习惯于选择bmp。一路选择“下一步”。在“完成”阶段选择“编辑绘图仪配置”,出现“编辑绘图仪配置”菜单,在这个菜单中自定义一个图纸尺寸,做文本的话,4000X3000足够用了。确定后,便完成了一个类似于打印机的的设置。当我们需要转换位图文件时,采用类似于打印的方法即可。
六、Word
    在说Word之前,先说一下CAD中的文字输入方法。CAD中的文字输入方法有两种,一是输入为“text”,即单行文字。对于少量的文字,推荐使用这种方法。二是输入为“mtext”,即多行文字。对于长篇大论,如设计说明等,推荐使用这种方法。在Word中,将长篇大论写好,“Ctrl+A”“Ctrl+C”,在CAD中选择“绘图”—“文字”—“多行文字”,框选将要写入文字的区域,在跳出来的菜单中“Ctrl+V”,修改顶上的一些设置即可。
   CAD中的图纸要插入Word中,也可以直接复制粘贴成OLE对象,在WORD中将多余边界裁剪掉,后续如果需要编辑,双击即可返回CAD并打开图形。如果后续不需要编辑,也可以输出为图片插入到WORD中,直接粘贴的时候也可以选择性粘贴为图片对象。
七、Excel
    在CAD中现在都有比较方便的表格制作功能。CAD和EXCEL之间的交互方式与WORD类似,可以相互复制粘贴OLE对象,或者图块、图片。当然也有一些非常方便的CAD工具,例如AutoXlsTable,非常好用,不仅可以将Excel中的表格导入到CAD中,而且还可以实现图块、面积、长度的统计,这些数据还会随图形改变自动更新,非常方便,可以试试。AutoXlsTable是浩辰开发的,浩辰CAD里自带此工具。

发表在 CAD技巧 | 留下评论

CAD使用心得之六 — 绘图与打印比例控制、套用图框、标注命令

CAD使用心得连载之六
——绘图与打印比例控制、套用图框、标注命令

    在绘制图纸完毕后,都要将图纸打印出来,只有当图纸打印出来(白图或硫酸纸晒蓝图)后,才可以认为绘图工作基本完毕(当然还有整理归档等)。打印时,比例问题不可回避。打印比例和绘图比例合理,那么最后完成的图纸就清晰美观漂亮。那么打印比例和绘图比例应该注意些什么呢?
    一般来说,最终打印的图纸有按照比例和不按照比例两种。按照比例的一般是施工图;不按照比例的情况有很多,一般有方案文本、过程图、条件图等,最近几年的初步设计(扩初设计)文本也逐渐变成不按照比例,打印成A3大小。
    先来看看按照比例打印的施工图。施工图基本上都是按比例出图的,但是在出图时会有不同的比例设置。比如说,平立剖一般都是1:100,楼梯间、卫生间是1:50,节点大样是1:20,装修图中的节点大样则可能会有1:10、1:5、1:2等的比例,总图的常用比例是1:500,有时候也会有1:1000、1:2000等。我接下来以一套包括平立剖面图、楼梯间、卫生间大样和节点大样的常规的建筑施工图来举例说明。
    首先,我们一开始绘制的一般都是平面图,这时应该以实际每1MM对应CAD中的每个标准单位1来绘制,接下来的其他立剖面也同样。这时,有两个地方应该要注意:一是所有的字体基本上都应设置为350高度左右,房间名可稍大些,图纸名称等专用字体高度另定。二是在进行尺寸标注后,将该尺寸标注的“标注全局比例”设置成100。其它的设置,按照前文所述。接下来是1:50比例的楼梯大样和卫生间大样。在绘制这样的图时,一般先将平面图中的相关部分拷贝到原来图纸旁边,然后删除和剪接掉多余的部分。接下来要修改一些东西。一是线性比例,除实线外,其他的如虚线、点划线等都改为原来一半的线性比例;二是字大小、标高大小、轴线号大小,同样的Scale为原来的0.5比例;三是标注设置,将这一部分的所有标注中的“标注全局比例”修改为50。这样的话,按照1:50的比例打印出来时,各部分的大小尺寸都会比较合适。1:20的节点大样绘制方法一样。

图纸绘制完毕后,要做的就是套图框。每个公司都有自己的图框,而且不同的图幅应该都有。图框在制作时,大多都会按照1:1的比例:A0—1194X840;A1—840X597;A2—597X420;A3—420X297;A4—297X210。其中,A1和A2图幅的还经常要用到竖图框。还有,当需要用到加长图框时,应该是在图框的长边方向,按照图框长边1/4的模数增加。每个图框不管图幅是多少,按照一定的比例打印出来时,图签栏的大小都应该是一样的。我们把不同大小的图框按照我们要出图的比例Scale大,将图套在其中即可。
    关于施工图按照比例出图,还有两点注意:一是并非所有的平立剖面图都要按照1:100的比例来,对于一些没什么细部的仓库、厂房时,也可以考虑用到1:150或1:200的比例。这样才能够使图纸饱满。二是不管是什么图,绘制时都切记以实际每1MM对应CAD中的每个标准单位1来绘制(总图可以除外),不同比例的出图只是在字体大小、线性比例、标注的标注全局比例等地方不同。
    当然,以上情况是针对同一比例的图都放到同一个图框中出图的情况。对于不同比例的图要放到一个图框中时,稍微有一点不同。现在以一张1:100平面图中要放一张1:20的节点大样来举例。首先确定1:100为这张图中的主打比例,1:100的平面图按照以上方法绘制完毕,1:20的节点大样,也按照上述方法绘制好,并修改好各个设置。当发现要将其并入1:100的图中出图时,把1:20的节点拷贝一份到1:100的图框内,Scale5倍,然后需要修改线性比例和标注中的两个参数,其中第一是将标注全局比例改为1:100(即主打比例),第二是标注线性比例,改为0.2。当然,在绘制其它比例的图纸时,如果一开始就确定其要和其他不同比例的图纸放在一起,上面的有些顺序可以调整,可以减少一些步骤,较少耗时。
    对于不按照比例出的图,也同样有些地方要注意,同样也要注意比例问题。下面以一个方案来举例说明。在进行一个方案设计时,到了整理出图阶段,就要注意比例问题了。首先要确定一下最终出图的图幅,以前的方案文本都是A3的,现在也常用A2的了(即两个竖版A3拼)。在确定了最终出图比例后,需要预估一下大概的出图比例,然后按照打印出来的字高为2.5MM左右(方案文本的比例一般在1:200以上,除非是做别墅、小住宅、小公建,字体大小和标注尺寸可以适当小些)再推出在图纸中的字体大小和标注尺寸的合适数值。有必要时,可以在整理初期先将第一张画得差不多的图打出来看看,确认没问题后,再继续其他图纸的整理完善。图纸全部整理完毕,套好图框,交给打印公司即可。
    再稍微提一下图纸空间。图纸空间是很有意思的,在图纸的比例设置、批量打印等方面都有很大的不同。不过,建筑专业绘制的图纸不光是自己出图用,还要作为其它专业的条件图,在将图纸空间中的图纸提给其它专业后,还要求其它所有的专业都掌握图纸空间,否则会带来极大不便。

CAD使用心得连载之六
——绘图与打印比例控制、套用图框、标注命令

    在绘制图纸完毕后,都要将图纸打印出来,只有当图纸打印出来(白图或硫酸纸晒蓝图)后,才可以认为绘图工作基本完毕(当然还有整理归档等)。打印时,比例问题不可回避。打印比例和绘图比例合理,那么最后完成的图纸就清晰美观漂亮。那么打印比例和绘图比例应该注意些什么呢?
    一般来说,最终打印的图纸有按照比例和不按照比例两种。按照比例的一般是施工图;不按照比例的情况有很多,一般有方案文本、过程图、条件图等,最近几年的初步设计(扩初设计)文本也逐渐变成不按照比例,打印成A3大小。
    先来看看按照比例打印的施工图。施工图基本上都是按比例出图的,但是在出图时会有不同的比例设置。比如说,平立剖一般都是1:100,楼梯间、卫生间是1:50,节点大样是1:20,装修图中的节点大样则可能会有1:10、1:5、1:2等的比例,总图的常用比例是1:500,有时候也会有1:1000、1:2000等。我接下来以一套包括平立剖面图、楼梯间、卫生间大样和节点大样的常规的建筑施工图来举例说明。
    首先,我们一开始绘制的一般都是平面图,这时应该以实际每1MM对应CAD中的每个标准单位1来绘制,接下来的其他立剖面也同样。这时,有两个地方应该要注意:一是所有的字体基本上都应设置为350高度左右,房间名可稍大些,图纸名称等专用字体高度另定。二是在进行尺寸标注后,将该尺寸标注的“标注全局比例”设置成100。其它的设置,按照前文所述。接下来是1:50比例的楼梯大样和卫生间大样。在绘制这样的图时,一般先将平面图中的相关部分拷贝到原来图纸旁边,然后删除和剪接掉多余的部分。接下来要修改一些东西。一是线性比例,除实线外,其他的如虚线、点划线等都改为原来一半的线性比例;二是字大小、标高大小、轴线号大小,同样的Scale为原来的0.5比例;三是标注设置,将这一部分的所有标注中的“标注全局比例”修改为50。这样的话,按照1:50的比例打印出来时,各部分的大小尺寸都会比较合适。1:20的节点大样绘制方法一样。

图纸绘制完毕后,要做的就是套图框。每个公司都有自己的图框,而且不同的图幅应该都有。图框在制作时,大多都会按照1:1的比例:A0—1194X840;A1—840X597;A2—597X420;A3—420X297;A4—297X210。其中,A1和A2图幅的还经常要用到竖图框。还有,当需要用到加长图框时,应该是在图框的长边方向,按照图框长边1/4的模数增加。每个图框不管图幅是多少,按照一定的比例打印出来时,图签栏的大小都应该是一样的。我们把不同大小的图框按照我们要出图的比例Scale大,将图套在其中即可。
    关于施工图按照比例出图,还有两点注意:一是并非所有的平立剖面图都要按照1:100的比例来,对于一些没什么细部的仓库、厂房时,也可以考虑用到1:150或1:200的比例。这样才能够使图纸饱满。二是不管是什么图,绘制时都切记以实际每1MM对应CAD中的每个标准单位1来绘制(总图可以除外),不同比例的出图只是在字体大小、线性比例、标注的标注全局比例等地方不同。
    当然,以上情况是针对同一比例的图都放到同一个图框中出图的情况。对于不同比例的图要放到一个图框中时,稍微有一点不同。现在以一张1:100平面图中要放一张1:20的节点大样来举例。首先确定1:100为这张图中的主打比例,1:100的平面图按照以上方法绘制完毕,1:20的节点大样,也按照上述方法绘制好,并修改好各个设置。当发现要将其并入1:100的图中出图时,把1:20的节点拷贝一份到1:100的图框内,Scale5倍,然后需要修改线性比例和标注中的两个参数,其中第一是将标注全局比例改为1:100(即主打比例),第二是标注线性比例,改为0.2。当然,在绘制其它比例的图纸时,如果一开始就确定其要和其他不同比例的图纸放在一起,上面的有些顺序可以调整,可以减少一些步骤,较少耗时。
    对于不按照比例出的图,也同样有些地方要注意,同样也要注意比例问题。下面以一个方案来举例说明。在进行一个方案设计时,到了整理出图阶段,就要注意比例问题了。首先要确定一下最终出图的图幅,以前的方案文本都是A3的,现在也常用A2的了(即两个竖版A3拼)。在确定了最终出图比例后,需要预估一下大概的出图比例,然后按照打印出来的字高为2.5MM左右(方案文本的比例一般在1:200以上,除非是做别墅、小住宅、小公建,字体大小和标注尺寸可以适当小些)再推出在图纸中的字体大小和标注尺寸的合适数值。有必要时,可以在整理初期先将第一张画得差不多的图打出来看看,确认没问题后,再继续其他图纸的整理完善。图纸全部整理完毕,套好图框,交给打印公司即可。
    再稍微提一下图纸空间。图纸空间是很有意思的,在图纸的比例设置、批量打印等方面都有很大的不同。不过,建筑专业绘制的图纸不光是自己出图用,还要作为其它专业的条件图,在将图纸空间中的图纸提给其它专业后,还要求其它所有的专业都掌握图纸空间,否则会带来极大不便。

发表在 CAD技巧 | 留下评论

CAD使用心得之五 — 图层控制、视图调整、图形选择

CAD使用心得连载之五
——图层控制命令、视图命令、图元选择方式
    图层控制命令和视图命令都是辅助绘图的命令,但是运用这些命令的关键,在于是否熟练,这将会极大的影响绘图的效率。
    先来看看和图层有关的命令。这些命令实际上大部分是在Express(扩展工具)中,当然现在一些命令已成为通用命令,在格式菜单里也可以调用,而且有图层专用的工具栏。图层命令中,第一个是layer,图层属性管理器。里面的具体内容以前已较为详细的谈过,这里不再重复。和图层控制有关的其它命令,则都是让我们在绘图过程中如何方便控制图层的“开关(显示)”、“锁定”、“当前层”以及方便转换所绘制图元的层属性。
    当前层有关的命令
laycur (将图层设置设置为当前层):改变所选择图元的所属层为当前层。
    开关有关的命令
layoff (图层关闭):关掉选择层;
Layiso* (图层隔离):图面显示仅保留所选层(孤立层);
Layon* (打开所有图层):打开所有层。
    锁定有关的命令
laylck (锁定图层):锁定选择层;
layulk (图层解锁):解开选择的锁定层;
    其它图层控制命令
layerp:恢复至上一个图层状态
laymch (图层匹配):改变选择图元所属层为最后选择的图元的层(类似于matchprop,但选择图元的顺序正好相反)
    图层命令最好能花时间熟悉并掌握。当然,前提条件是图元的图层设置归类条例清晰。这点做不到的话一切免谈。上面有几个打* 号的命令,是平常可能忽视,但非常管用的命令。
    视图命令有三类
第一类:redraw (redrawall) 重画,regen 重生成。常用的是redraw,在一些辅助显示点、辅助显示线用redraw(快捷命令是RE)无法清除时,可以用regen试试看。
第二类:视图缩放类。这一类主要是围绕着zoom的各个分支命令。常用的有:
zoom-默认 实时缩放(快捷命令是Z)
zoom-p 回到上一次视图范围
zoom-d 动态缩放视图
zoom-a 显示全部视图
zoom-w 显示所选择窗口的视图范围
第三类:视图平移类。就是pan和其分支命令。(快捷命令是P)

为了方便的进行视图控制,还经常使用透明命令。在00版本以上的AUTOCAD和三键鼠标(中键为滚轴)出现后,视图的缩放和平移,使用鼠标的滚轴中键就基本可以满足要求了。鼠标中键上下滚动就是zoom的实时缩放,中键按下后就是pan。这些都是透明命令,可以插在其它命令进行过程中执行的命令。利用三键鼠标来进行的视图控制,一定要熟练掌握。
    再谈谈和鼠标密切相关的图元选择方式
    在进行编辑命令的操作时,不可避免要进行图元的选择。就编辑命令和图元选择来说,常用的有两种方式。第一种,选用鼠标点选或框选图元,此时,所选择图元呈高亮状态。然后键盘输入编辑命令进行操作。采用这种方式,可利用Shift键来去除多余选择的图元。第二种,先用键盘输入编辑命令,确认后再选择需操作的图元,选择完毕需操作的图元后再次确认进行编辑操作。这种方式,在选择需操作的图元这一环节上更为方便灵活,可以通过辅助键来帮助选择。
P – previous:选择上一次操作的图元
R – remove:去除已选择图元
A – add:增加选择图元(用于使用了remove后)
这两种方式都关系到同样的一些和鼠标使用有关的地方。
鼠标左键:用来选择物体,一是直接左键点取图元;二是鼠标左键点下后,向右上或右下侧拖动鼠标,然后松开,出现实线选择框,只有完全处于实线框内的图元才能被选中;
三是鼠标左键点下后,向左上或左下侧拖动鼠标,然后松开。这时出现的是虚线选择框,只要有一部分处于虚线框内的图元,都能被选中。
鼠标右键:先改一下AUTOCAD的系统配置。在“用户系统配置“中,有个“自定义右键单击”的选项。在“默认模式”和“编辑模式”中,选择“重复上一个命令”;在命令模式中,选择“确认”。

当提示选择对象时,输入?号,可以看到更多的选择选项,如果能记住,可以提高在一些特殊状态下的选择效率。

键盘中的回车键和空格键同样可以达到上述功能,但在速度上肯定要慢于用鼠标右键。

发表在 CAD技巧 | 留下评论

CAD使用心得之四 — 常用命令与快捷键设置原则

CAD使用心得连载之四
——常用命令与快捷键设置原则
    CAD软件中有非常多的命令,如何才能掌握主要的一些命令,并且合理运用呢?在CAD中,要绘制或者编辑某一个图元,一般来说都有好几种方法,作为一个合格的cad-drawer,应该合理的运用最为恰当的方法。
   先来看看CAD中的命令可以分为以下几类。一类是绘图类,二类是编辑类,三类是设置类,四类是其它类,包括标注、视图等。下面一类一类分析。
第一类,绘图类。常用命令有:
Line 直线
xline 构造线(用来画辅助线)
mline 双线(在画墙线时常用到,也可自己定义使用其它线型)
pline 多义线(大部分由线段组成的图元,能够定义为多义线的就定义为多义线,这样在选择时比较方便)
rectang 矩形(实际上就是四段围合的多义线)
arc 圆弧
circle 圆
hatch 填充(要注意填充图案的比例)
boundary 边界(在计算面积、填充等情况会用到)
block 定义块(需将准备用于定义块的所有图元放到0层,其它所有属性均改为bylayer)
insert 插入快(与-insert相比较,一个会调出对话框,一个不会)
第二类,编辑类。常用命令有:
Matchprop 特性匹配(相当于word中的格式刷,常用于将正在操作的图元刷成正确的图层)
Hatchedit 填充图案编辑(鼠标左键双击填充的图案即可)
Pedit 多义线编辑(也可用于将几段首尾相接的线段连接成多义线)
Erase 擦除
Copy 拷贝
Mirror 镜像
Offset 平移
Array 阵列
Move 移动
Rotate 旋转
Scale 缩放
Stretch 拉伸
Lengthen 拉长(不常用,但在需要延长非水平或垂直的线段时很方便;!也可实现同样的功能,可以自己先琢磨琢磨)
Trim 裁减
Extend 延伸
Break 打断
Fillet 倒圆角
Explode 打碎(可用于炸开块、多义线、双线等)
Align 对齐(不常用,但在画一些倾斜的图形时很有用,可以把图对正了画,画好了再调整回原来的角度。和UCS是两个概念)
Properties 属性(Ctrl+1,可调出属性表,在其中可查看和修改该图元的几乎所有属性,很有用)
    就绘图类和编辑类的命令再进行一些说明。
    第一,一般来说,能用编辑命令完成绘制的,就不要用绘图命令完成。在CAD软件的使用过程中,虽然一直说是画图,但实际上大部分都是在编辑图。因为编辑图元可以大量减少绘制图元不准确的几率,并且可以在一定程度上提高效率。
    第二,在使用绘图命令时,一定要设置捕捉,F3切换。
    第三,在使用绘图和编辑命令时,一般都要采用正交模式,F8切换。
    第四,以上罗列出来的绘图和编辑命令,作为一个cad-drawer,是必须精通并能熟练运用的,其它没有列出的绘图和编辑命令,应该了解,在适当的时候使用。
第三类,设置类。前面讲了很多,不再重复。
第四类,其它。这里面的内容又有很多,再分别描述。

如何自定义快捷键

快捷键的定义是保存在*cad.pgp文件中,AutoCAD 2004版(也可能是2002版)后改变了放置的目录,可在windows里面搜索得知。浩辰CAD或其他与AutoCAD兼容的软件也有快捷键文件,名字类似,例如icad.pgp。通常可以在菜单里直接编辑:工具》自定义》编辑程序参数。

快捷键是根据每个人的喜好而自由定义。但是为了方便操作,也不应随便设置,最好遵循以下原则:
一、不产生歧义,尽量不采用完全无关的字母。

二、根据各个命令的出现频率来定义快捷键。定义时,依次采用“1个字母—1个字母重复两遍—两个相邻或相近字母—其它”的原则。
    对于常用命令,建议一定要采用快捷键。使用快捷键比用鼠标点取图标,或在菜单上选择命令要节约非常多的时间。一定要养成左手键盘,右手鼠标的习惯。而对于常用命令的定义,建议将平均每天出现5次以上的命令归结为常用命令。

如果根据这样的原则来定义快捷键,经过1~2天的练习,一定能提高不少的效率。

发表在 CAD技巧 | 留下评论

CAD使用心得之三 — 如何设置字体、标注与模版文件

CAD使用心得连载之三
——字体、标注的设置与CAD模版文件
    下面探讨一下其它几个应该需要掌握的设置。
    字体的设置(Style)
    在CAD软件中,可以利用的字库有两类。第一类是存放在CAD目录下的Fonts中,字库的后缀名为shx,这一类是CAD的专有字库,英语数值等单字节和汉字日文等多字节分属于不同的字体文件,汉字、日文等文字的字体叫大字体。第二类是存放在WINDOWS操作系统的目录下的Fonts中,字库的后缀名为ttf,这一类是windows系统的通用字库,除了CAD以外,其它如Word、Excel等软件,也都是采用的这个字库。其中,汉字字库都已包含了英文字母。
    在CAD中定义字体时,两种字库都可以采用,但它们分别有各自的特点,要区别使用。第一类后缀名为shx的字库,这一类字库最大的特点就在于占用系统资源少。因此,一般情况下推荐使用这类字库。通常使用三种字体就够了,一个是汉字的大字体文件,一个是英文、数值的字体文件,另外如果有特殊符号,如带结构专业符号的字体。强烈建议除特殊情况外,全都采用常用的字体文件,这样的图纸才能统一化,格式化。
    后缀名为ttf的字库则分两种情况采用。第一种情况是当图纸文件要与其它公司交流时,采用宋体、黑体这样的字库,可以保证其它公司在打开文件时,不会发生任何问题。第二种情况就是在做方案、封面等时候。因为这一类的字库文件非常多,各种样式都有,五花八门,而且比较好看。因此,在需要设置具有美观效果的字样时,就可以采用这一类字库。

在定义字体时,还有一些要注意。

首先,同样是在够用情况下越少越好的原则。这一点适用于CAD中所有的设置。不管什么类型的设置,都是设置越多,CAD文件就越大,在运行软件时可能会给运算速度带来影响。更为关键的是,设置越多越容易在图元的归类上发生错误。
    笔者在使用CAD时,除了默认的Standard字体外,一般只有两种字体定义。第一种是常规定义,字体宽度为0.75。一般所有的汉字、英文字都采用这种字体。第二种字体定义采用与第一种同样的字库,但是字体宽度为0.5。这一种字体,是在尺寸标注时所采用的专用字体。因为在大多数施工图中,有很多细小的尺寸挤在一起。而采用较窄的字体可以减少标注相互重叠的情况发生。

标注的设置(Dimstyle)
标注定义里面的选项比较多,不过要注意的地方并不多。一般情况下可以定义一种设置,

对于有特殊的情况,可以单独修改其属性,然后其它的用格式来刷。介绍一下笔者常用的标注定义的设置(1:100比例出图)。
直线和箭头:所有颜色和线宽的选择均为Bylayer,箭头大小1.5,其它几个数据一般在100~200。这样的标注设置是整张图纸的所有标注的基础设置,在绘制不同比例的图纸时,需要将其中的“标注全局比例”根据出图比例进行调整。1:100出的图,需要将其“标注全局比例”调整为100;1:150出的图,需要将其“标注全局比例”调整为150。这点在后面的第六部分还会详细讲道。

    单位的设置(Units
    单位设置的选项中,有人喜欢在长度的精度选项上选用0,以个位来作为单位。这里建议改为小数点后3~4位,以便在有需要的时候保证其精度。

如果在每次画图之前都进行以上的定义,比较麻烦,所以CAD提供了一个非常好的办法,就是dwt模版。每次在新建一张图纸的时候,CAD软件都会让我们打开一张dwt模版文件,默认的是*cad.dwt。而在创建好自己的一套习惯设置后,就可以建立自己的模版文件,以保存所有的设置和定义。有的设计师dwt模版是精心选择的一些图,包括有简单的平面图、立面图、剖面图、楼梯大样各一张,常用的图块几十个(当然是归类整理好的)。这样,这样每次新做一个项目时,就可以打开这张模块,开始工作了。可能会有人问道如何创建dwt文件,很简单,在保存文件时,选择另存为,然后在文件类型中选择dwt就可以了。
    Purge命令

Purge这个命令可以清除图中所有没有用到的设置、图块等信息,建议多多使用,最好是每次存盘前Purge一下。
    CAD中的各项设置做到清晰条理,是达到CAD软件使用中“清晰、准确、高效”三个基本点的基石。因此,一个公司的各个科室专业,都应该尽快建立起适用于本部门本专业的一套标准设置并加以落实。如果能够做到每个专业都条例化、标准化,那不但是在专业内部,还是在各专业的衔接、,资料的提交上,都可以提高不少的效率。

发表在 CAD技巧 | 留下评论

CAD使用心得之二 — 图层应该如何设置

CAD使用心得连载之二
——图层的设置
    当接到一个任务准备开始画图了,可能很多人直接就开始画图,但这种做法需要斟酌。更应该的是首先进行各种设置,包括图层、线形、字体、标注等等。这项工作是非常必要的,只有各项设置合理了,才能为我们接下来的绘图工作打下良好的基础,才有可能使接下来更容易做到“清晰”、“准确”、“高效”。
    首先来谈谈图层。可以说,图层的定义,是整个 CAD软件最为关键的设置,而实际上真正能把图层设置地清晰有条理的人并不多。那么图层的设置有哪些原则呢?

第一,在够用的基础上越少越好。不管是什么专业、什么阶段的图纸,图纸上所有的图元可以按照一定的规律来组织整理。比如说,建筑专业的平面图,就按照柱、墙、轴线、尺寸标注、一般汉字、门窗看线、家具等来定义图层,然后在画图的时候,分别应该在哪个类别的,就把该图元放到相应得图层中去。
    只要图纸中所有的图元都能有适当的归类办法了,那么图层设置的基础就搭建好了。但是,图元分类是不是越细越好呢?也不尽然。因此,图层设置的第一原则是在够用的基础上越少越好。两层含义:1.够用;2.精简。每个专业的情况不一样,大家可以自己琢磨,怎么样是相对最合理的。

第二,0层的使用。很多人喜欢在0层上画图,因为0层是默认层,白色是0层的默认色,因此,有时候看上去,屏幕上白花花一片。这样做不可取。不建议在0层上是随意画图。而建议用来定义块。定义块时,先将所有图元均设置为0层(有特殊时除外),然后再定义块。这样,在插入块时,插入时是哪个层,块就是那个层了。

第三,图层颜色的定义。图层的设置有很多属性,在设置图层时,除了图名,还应该定义好相应的颜色、线形、线宽。但是如果根据自己的爱好,喜欢什么颜色就用什么颜色,这样做也不合理。图层的颜色定义要注意两点:一是不同的图层一般来说要用不同的颜色。这样当我们在画图时,才能够在颜色上就很明显的进行区分。如果两个层是同一个颜色,那么在显示时,就很难判断正在操作的图元是在哪一个层上。二是颜色的选择应该根据打印时线宽的粗细来选择。打印时,线形设置越宽的图层,颜色就应该选用越亮的;反之,如果在打印时,线的宽度仅为0.09mm,那么该图层的颜色就应该选用8号或类似的颜色。为什么要这样?这样可以在屏幕上就直观的反映出线形的粗细。举个例子:柱子层(ZU)和墙层(WA)打印出来是最粗的,那么一个用黄色,一个用青色,这两个颜色在CAD中是比较亮的。填充层(h)和家具层(fur)在打印时线宽定义为0.13mm,那么,在选择颜色时也用较暗的8号和83号色。这样做的好处,大家在使用中慢慢体会。另外,白色是属于0层和DEFPOINTS层的,我们不要让其它层使用白色。

第四,线形和线宽的设置。在图层的线形设置前,先提到LTSCALE这个命令。一般来说,LTSCALE的设置值均应设为1,这样在进行图纸交流时,才不会乱套。常用的线形有三种,一是Continous连续线,二是*CAD_IS002W100点划线,三是*CAD_IS004W100虚线。一张图纸是否好看、清晰,线宽的设置是其中重要的因素之一,这关系到是否层次分明。一张图里,有 0.13的细线,有0.25的中等宽度线,有0.35的粗线,这样就丰富了。打印出来的图纸,一眼看上去,也就能够根据线的粗细来区分不同类型的图元,哪里是墙,哪里是门窗,哪里是标注。
因此,我们在线宽设置时,一定要将粗细明确。另外还有一点要注意,现在打图有两种规格,一是按照比例打印,这时候,我们的线宽可以用0.13\0.25\0.4这种粗细规格。如果是不按照比例打印A3规格,则线宽设置要比按比例的小一号0.09\0.15\0.3,这样才能使小图看上去清晰分明。在画图时也还有一点要注意,就是所有图元的各种属性(比如线型、颜色)等都尽量与所在图层表示的含义一致。这样有助于我们图面的清晰、准确和效率的提高。

发表在 CAD技巧 | 留下评论

CAD使用心得之一 — CAD使用的三个基本方面:清晰、准确、高效

很多CAD的教材,如果对照着学习的话,确实都能够在一定程度上掌握这个软件,如果到工作岗位,也都能勉勉强强的开始画图。但是,这远远不够,从书本到实战,还有一大段距离。因此,将收集的有关于使用CAD的一系列心得体会发出来与大家分享。

CAD使用心得连载之一
——CAD使用的三个基本方面:清晰、准确、高效
    目前,设计公司的设计文件,特别是图纸,都是用CAD软件绘制的,但是还有很多人对CAD并不是非常熟悉,或者说使用起来并非得心应手,以至于效率并不是很高,可以说,绘制同样的一张图纸,速度快的和慢的在耗时上可能会相差好几倍。同时,每个人绘制出来的图纸看上去感觉都不尽相同:有些图纸看上去一目了然、清晰漂亮,而有些图纸不但表达不清,甚至可以用惨不忍睹来形容。
  不知大家认为,使用CAD画图最重要的是什么?对这个问题,每个人都有可能理解不同,但在我看来,最重要的是时时刻刻记住自己使用CAD画图的目的是什么。
    我们进行工程设计,不管是什么专业、什么阶段,实际上都是要将某些设计思想或者是设计内容,表达、反映到设计文件上。而图纸,就是一种直观、准确、醒目、易于交流的表达形式。所以我们完成的东西(不管是最终完成的设计成果,还是作为条件提交给其它专业的过程文件,一定需要能够很好的帮助我们表达自己的设计思想、设计内容。
    有了这个前提,我们就应该明白,好的CAD图纸应该具有以下两个特征:清晰、准确。
清晰,就是需要表达的东西必须清楚明了。好的图纸,看上去一目了然。构件表达、尺寸标注、文字说明清清楚楚,互不重叠……除了图纸打印效果清晰以外,在屏幕上的显示也必须清晰。图面清晰除了能清楚表达设计思路和设计内容外,也是提高绘图速度的基础。
准确,就是标注不能错误,指示不能模糊。制图准确不仅是为了好看,更重要的是可以直观的反映一些图面问题,对于提高绘图速度也有重要的影响,特别是在图纸修改时。我们在使用CAD绘图时,无时无刻都应该把以上两点铭刻在心。只有做到这两点,才能说在绘图方面基本过关。
    图面表示要“清晰”、“准确”,而在绘图过程中,还有同样重要的一点,就是“高效”。能够高效绘图,好处不用多说。
    清晰、准确、高效是CAD软件使用的三个基本点。在CAD软件中,除了一些最基本的绘图命令外,其他的各种编辑命令、各种设置定义,可以说都是围绕着清晰、准确、高效这三方面来编排的。我们在学习CAD中的各项命令、各种设置时,都要思考一下,它们能在这三个方面起到那些作用;在使用时应该注重什么;在什么情况和条件下,使用这些命令最为合适。

发表在 CAD技巧 | 留下评论

如何才能提高CAD画图的效率?

一、遵循一定的作图原则
  为了提高作图速度,用户最好遵循如下的作图原则:
  1.作图步骤:设置图幅→设置单位及精度→建立若干图层→设置对象样式→开始绘图。
  2.绘图始终使用1:1比例。为改变图样的大小,可在打印时设置不同比例或者利用图纸空间内设置不同比例的视口。

在绘图前要确定好打印比例,这样觉得按相应比例设置字高、标注样式、图块比例、多段线宽度等,保证不同比例图纸打印效果一致。
  3.为不同类型的图元对象设置不同的图层、颜色及线宽,而图元对象的颜色、线型及线宽都应由图层控制(BYLAYER)。对象的颜色和线宽属性可以影响打印效果,因此要合理规划,以保证打印时能得到合理效果。
  4.需精确绘图时,可使用栅格捕捉功能,并将栅格捕捉间距设为适当的数值。更多情况下使用对象捕捉或在绘制时直接输入长度或相对坐标。
  5.可以直接在模型空间中将图框和图形绘在一起,也可以在布局空间中插入图框,利用视口排布模型空间的图形。如果用布局空间,建议一个布局只放一个图框,并设置并保存好合理的页面设置,以后打印时就不必再重复设置了。
  6.对于有名对象,如视图、图层、图块、线型、文字样式、打印样式等,命名时不仅要简明,而且要遵循一定的规律,以便于查找和使用。
  7.将一些常用设置,如图层、标注样式、文字样式、栅格捕捉等内容设置在一图形模板文件中(即另存为*.dwt文件),以后绘制新图时,可在创建新图形向导中单击“使用模板”来打开它,并开始绘图。

 二、选用合适的命令
  用户能够驾驭CAD,是通过向它发出一系列的命令实现的。CAD接到命令后,会立即执行该命令并完成其相应的功能。在具体操作过程中,尽管可有多种途径能够达到同样的目的,但如果命令选用得当,则会明显减少操作步骤,提高绘图效率。下面仅列举了几个较典型的案例。
  1.生成直线或线段
  (1)在CAD中,使用LINE、XLINE、RAY、PLINE、MLINE命令均可生成直线或线段,但LINE命令使用的频率最高,也最为灵活,根据需要使用合适的命令。
  (2)为保证物体三视图之间”长对正、宽相等、高平齐”的对应关系,应选用XLINE和RAY命令绘出若干条辅助线,然后再用TRIM剪截掉多余的部分。机械制图中经常会使用这种方法,由于建筑设计中经常会采用轴网,浩辰建筑、天正建筑等软件中均可以通过输入进深和开间值快速创建轴网,后续绘图可以轴网为尺寸基准。
  (3)欲快速生成一条封闭的填充边界,或想构造一个面域,则应选用PLINE命令。用PLINE生成的线段可用PEDIT命令进行编辑。
  (4)当一次生成多条彼此平行的线段,且各条线段可能使用不同的颜色和线型时,可选择MLINE命令。多线编辑起来不如其他线型方便,也可以用PL线,然后通过偏移(offset)生成。
  2.文本
  (1)在使用文本注释时,如果注释中的文字具有同样的格式,注释又很短,则选用TEXT(DTEXT)命令。
  (2)当需要书写大段文字,且段落中的文字可能具有不同格式,如字体、字高、颜色、专用符号、分子式等,则应使用MTEXT命令。
  3.复制图形或特性
  (1)在同一图形文件中,若将图形只复制一次,则应选用COPY命令。
  (2)在同一图形文件中,将某图形随意复制多次,则应选用COPY命令;或者,使用Ctrl+C复制或基点复制命令将需要的图形复制到剪贴板,然后再使用PASTECLIP(普通粘贴)或PASTEBLOCK(以块的形式粘帖)命令粘帖到多处指定的位置。
  (3)在同一图形文件中,如果复制后的图形按一定规律排列,如形成若干行若干列,或者沿某圆周(圆弧)均匀分布,则应选用ARRAY(阵列)命令。
  (4)在同一图形文件中,欲生成多条彼此平行、间隔相等或不等的线条,或者生成一系列同心椭圆(弧)、圆(弧)等,则应选用OFFSET(偏移)命令。
  (5)在同一图形文件中,如果需要复制的数量相当大,为了减少文件的大小,或便于日后统一修改,则应把指定的图形用BLOCK命令定义为块,再选用INSERT或MINSERT命令将块插入即可。
  (6)在多个图形文档之间复制图形,可采用两种办法。其一,使用命令操作。先在打开的源文件中使用Ctrl+C或COPYBASE命令将图形复制到剪贴板中,然后在打开的目的文件中用Ctrl+V粘贴、粘贴为块或选择性到原点三者之一将图形复制到指定位置。这与在快捷菜单中选择相应的选项是等效的。其二,用鼠标直接拖拽被选图形。注意:在同一图形文件中拖拽只能是移动图形,而在两个图形文档之间拖拽才是复制图形。拖拽时,鼠标指针一定要指在选定图形的图线上而不是指在图线的夹点上。同时还要注意的是,用左键拖拽与用右键拖拽是有区别的。用左键是直接进行拖拽,而用右键拖拽时会弹出一快捷菜单,依据菜单提供的选项选择不同方式进行复制。
  (7)在多个图形之间复制图形特性,应选用特性匹配(格式刷)命令。

 

三、使用扩展工具(EXPRESS TOOLS)
  所谓扩展工具,实际上是为用户设计并随CAD一起免费提供的实用工具库。国产CAD,例如浩辰CAD提供的扩展工具比AutoCAD更丰富,在AutoCAD基础上增加了大量实用工具。扩展工具在图层管理、对象选择、尺寸标注样式的输入/输出、图形的编辑修改等众多方面对CAD进行了功能扩展,使用起来方便快捷,故能明显提高你绘图的工作效率。
  确认AutoCAD安装时选择了Express tools,浩辰CAD等国产CAD安装时扩展工具会自动安装上。

 

四、打开或关闭一些可视要素
  图形的复杂程度影响到CAD执行命令和刷新屏幕的速度。打开或关闭一些可视要素(如填充、宽线、文本、标示点、加亮选择等)能够增强CAD的性能。
(1)关闭宽线显示。宽线增加了线条的宽度。宽线在打印时按实际值输出,但在模型空间中是按象素比例显示的。在使用CAD绘图时,可通过状态条上的LWT(线宽)按钮将线宽显示关闭,以优化其显示性能。系统变量LWDISPLAY也控制着当前图形中的宽线显示。
(2)如果把QTEXT设为ON,文本会被显示为方框。这样,在图样中新添加的文本会被隐匿起来只显示一个边框,打印输出时也是如此。该设置对已有文本的影响效果,可使用REGEN命令进行显示。另外,系统变量QTEXTMODE也控制着文本是否显示。这在图样中的文本较多时,对系统性能的影响是很明显的。

(3)禁止显示标示点。所谓标示点,是在选择图形对象或定位一点时出现在CAD绘图区内的一些临时标记。它们能作为参考点,能用REDRAW或REGEN命令清除,但打印输出时并不出现在图纸上。欲禁止标示点显示,可将BLIPMODE设为OFF,以增强CAD的性能。
(4)取消加亮选择。在缺省情况下,CAD使用”加亮”来表示当前正被选择的图形。然而,将系统变量HIGHLIGHT的值从1改为0,取消加亮选择时,也可增强CAD的性能。
(5)顺便一提的是,将系统变量REGENMODE的值设为0,或者将REGENAUTO设为OFF,可以节省图形自动重新生成的时间。

(6)如果把FILL设为OFF,则关闭实体填充模式,新画的迹线、具有宽度的多义线、填充多边形等,只会显示一个轮廓,它们在打印时不被输出。而填充模式对已有图形的影响效果,可使用REGEN命令显示出来。另外,系统变量FILLMODE除控制填充模式之外,还控制着所有阴影线的显示与否。你如果在图中画填充显示不出来,需要检查一下FILL参数的设置。
  当然现在硬件性能越来越好,如果图纸不大,象填充、文字、选择亮显这些还是保留比较好。
  五、及时清理图形
  在一个图形文件中可能存在着一些没有使用的图层、图块、文本样式、尺寸标注样式、线型等无用对象。这些无用对象不仅增大文件的尺寸,而且能降低CAD的性能。用户应及时使用PURGE(清理)命令进行清理。由于图形对象经常出现嵌套,清理是可勾选“清理嵌套项目”。
  六、使用命令别名和加速键
  CAD为一些比较常用的命令或菜单项定义了别名和加速键。使用命令别名和加速键可以明显节省访问命令的时间。命令别名是在acad.pgp文件(浩辰CAD是icad.pgp)中定义的。用任何文本编辑器打开并编辑该文件,就可以添加、删除或更改命令别名。用这种方法定义的别名,当重新进入CAD时即可使用。浩辰CAD不必退出就可以利用菜单中:工具>自定义>编辑程序参数重新定义命令别名,定义后就直接可以使用。AutoCAD的扩展工具也提供了类似的工具,但需要在第一次使用新定义的别名之前,执行REINIT命令以对软件重新初始化。
  命令加速键是在cui文件中定义的。欲添加、删除或更改命令加速键,用户可以用自定义界面工具对界面cui文件进行编辑,老版本也可以用文本编辑器对*cad.mnu文件进行编辑修改。修改过的*.mnu文件必须用MENU或MENULOAD命令加载并编译后,新定义的命令加速键方可使用。

以上只是总结了一些常规的技巧,熟话说得好:孰能生巧,当你长时间使用CAD后都会发现一些非常适合自己的操作技巧,利用这些技巧可以成倍提高工作效率,也希望也能写出来供大家分享。

发表在 CAD技巧 | 留下评论

CAD中如何控制填充、文字等各类图形\效果的显示?如何提高显示和操作性能?

图形的复杂程度影响到CAD执行命令和刷新屏幕的速度。打开或关闭一些可视要素(如填充、宽线、文本、标示点、加亮选择等)能够增强CAD的性能。
  (1)关闭填充显示。如果输入Fill命令,设为OFF(或0),则关闭实体填充模式,新画的迹线、具有宽度的多义线(包括标注的箭头)、填充多边形等,只会显示一个轮廓,它们在打印时不被输出,如下图所示。系统变量Fillmode和命令Fill的作用是相同的,“选项”对话框(op)的“显示”选项卡中的“应用实体填充”的选项设置的就是Fill参数。

Fill

(2)关闭线宽显示。图层和图形都可以设置线宽,在图中显示的线宽是按象素比例显示的,可以大致了解线宽设置,但这些并不是准确的线宽值。线宽值通常是毫米设置的,他的主要作用控制打印的线宽值。在CAD绘图时,可通过底部状态条上的LWT(或线宽)按钮,即可关闭线宽显示。如果不需要在绘图过程中检查线宽的设置,最好不要显示线宽,以优化其显示性能。对于建筑工程设计,通常用颜色或多段线宽度来控制打印输出的线宽,根本没有必要在图中显示线宽。
  (3)将文字显示为方框。如果把Qtext设为ON(或1),则打开快显文本模式。这样,图中的文字都会显示为一个方框,不会显示内容,打印输出时也是如此。当图中的文字很多时,尤其使用TTF字体(操作系统自带的字体)时,文字显示对显示速度和操作速度会有非常大的影响。当我们在处理其他图形,不关注文字内容时,可以将文字显示为方框,这样缩放、平移、编辑图纸的速度都会快很多。
  (4)禁止显示标示点。所谓标示点,是在选择图形对象或定位一点时出现在CAD绘图区内的一些临时标记。它们能作为参考点,能用REDRAW或REGEN命令清除,但打印输出时并不出现在图纸上。欲禁止标示点显示,可将Blipmode设为Off(或1),以增强CAD的性能,目前CAD版本默认都关闭此变量。
  (5)取消选择预览显示。在默认状态下,在CAD中将光标移动到图形上,图形会亮显及加粗,这成为选择预览,也就提示将会被选中的对象。预览会给我们提供很多方便,但同时也会影响操作的速度。很多建筑图里会将整个或部分平面图做成一个复杂的图块,当光标停留到这类图块上,可以看到图形是逐渐亮显的,可以明显感觉到选择预览是会占用系统资源的。如果想关掉选择预览或设置选择预览的效果,可以输入OP,打开“选项”对话框,在“选择”选项卡内设置取消勾选“选择预览”相关选项,或点“视觉效果设置”。如下图所示:

浩辰CAD等国产CAD的设置类似,但可能没这么多选项。

(6)取消选择区域指示。在CAD中,从左向右或从右向左分别表示交叉(cross)和窗口(window)选择,会CAD的基本都知道,高版本CAD为了更明确这两种区别,用颜色进行了区分,默认状态下用蓝色表示窗口选择,绿色表示交叉选择。如果你对CAD了解的话,这些提示显然是没有必要的,你可以关掉颜色指示效果。在上面的视觉效果设置对话框中就可以看到“指示选择区域”的勾选项。

(7)取消选定图形亮显。被选中的图形通常会亮显(虚线显示),如果将系统变量Highlight值从1改为0,取消选择亮显时,选中对象后将只显示夹点。

(8)控制圆弧显示精度。在CAD中圆都是以多边形的方式显示的,CAD会自动根据圆在视图中的大小决定显示的边数,当将一个小圆突然放大很多倍时,可以明显看出是一个多边形,这种情况下,RE(重画)一下就可以恢复正常。圆弧的精度也是有参数控制的,变量是viewres,在“选项”对话框中的“显示”选项卡中也可以设置此参数。有些设计人员为了圆在放大和缩小的时候都显示得比较圆,将此参数设置得特别大,例如15000,这显然是没有必要的,因为图纸显示效果并不重要,只要打印效果能保证就可以了,而无论VIEWRES只要合理设置,CAD默认值为100,打印时圆都不会出现打印成多边形的现象。而如果将此参数设置得过大,图中每个圆都要用更多段数去显示,如果图中的圆很多,会对显示性能和操作速度有比较明显的影响。

(9)重画(redraw)和重生成(regen)。重画通常用得并不多,主要用在当 BLIPMODE 打开时,将从所有视口中删除编辑命令留下的点标记。但重生成却始终会在绘图过程经常用到,例如当圆突然放大变成多边形时,输入RE命令就会变圆,当我们缩放图纸到一定程度,CAD会提示无法继续缩放,输入RE命令就可以继续缩放。重生成就是从图形数据重新生成显示数据的过程,重生成速度对图纸打开速度和操作速度都有明显的影响。CAD在绘图过程中会进行一些优化,并不会随时进行重生成,或只对部分对象重生成。有些人为了让图形随时更新保证显示效果,打开系统变量REGENAUTO或REGENMODE的值设为1,打开自动重生成,这样虽然效果好了,但由于增加了显示数据显示的次数,对操作速度会有比较明显的影响,因此建议不要打开自动重生成。

(10)其他可影响显示性能的选项。输入OP命令,打开选项对话框,进入“显示”选项卡,可以看到右下角有“显示性能”相关选项,除了上面提到的填充、文字相关的选项外,还有关于光栅图象、实体、曲面显示的控制选项。

 

总之,在图面上显示的细节越多,显示数据越多,显示和操作性能都会相应下降。

发表在 CAD技巧 | 留下评论

CAD用到的各种文件格式,你都知道吗?

DWG 

AutoCAD创立的一种图纸保存格式,已经成为二维CAD的标准格式,浩辰CAD及很多其他CAD为了兼容AutoCAD,也直接使用DWG作为默认工作文件。

 

DXF  

CAD的另一种图形保存格式,主要用于与其他软件进行数据交互。保存的文件可以用记事本打开,看到保存的各种图形数据。

 

DWT  

CAD模板文件,可在新建图形时加载一些格式设置,除CAD提供的模板文件外,自己也可以创建符合自己需要的模板文件,可以直接替换CAD自带的模板文件,也可以重新命名。

 

DWF  

用与网络交换的图形文件格式,可以用发布功能或DWF虚拟打印机输出,用CAD无法打开,但可以用AutoCAD提供的DWF浏览器查看。在AutoCAD高版本和浩辰CAD 2012中提供了DWF参考底图功能,可以将DWF作为底图插入到图纸中,并可以进行捕捉辅助定位其他图形。

 

MNU、MNC、MNL、MNS  

是CAD低版本使用的菜单文件,高版本也可以加载。其中MNU使用较多,是菜单的源代码,可以直接用记事本编辑,各类专业软件和插件通常利用MNU文件来加载菜单。 

 

CUI   

CAD高版本使用的自定义界面文件,可以在CAD和专用工具编辑,无法直接用记事本打开。AutoCAD和浩辰CAD高版本支持此类文件,在加载MNU文件后会自动生成CUI文件,

SHX   

AutoCAD、浩辰CAD等CAD采用的字体文件,也叫形文件,其源码文件为*.SHP,可以自行定义后在AutoCAD中编译成SHX文件。SHX文件分三类,一类是符号形,保存了一些用于制作线型或独立调用的符号;一类是普通字体文件,支持字母、数字及一些单字节符号;一类是大字体文件,支持中文、日文、韩文等双字节文字。

 

PAT

AutoCAD、浩辰CAD等CAD采用的填充图案文件,纯文本文件,可以用记事本编辑。可以自己编写或将收集的PAT文件复制粘贴到CAD的填充目录或填充文件中。

 

LIN     

AutoCAD、浩辰CAD等CAD采用的线型文件,可定义虚线\点划线等各种线型。纯文本文件,可以自己编写,收集的线型文件中线型可以直接浏览加载。

 

SCR    

脚本文件,可批量执行保存命令,完成绘图工作。纯文本文件,可以手动编辑,也可以利用CAD的记录脚本功能记录操作过程。一些专业测绘软件利用脚本来绘制断面图或一些表格。

 

CTB

颜色相关打印样表,设置了每种索引色所对应打印输出的颜色、线宽及其他效果,是一种常用的控制打印输出的文件。CAD通常都附带了很多预设的打印样式表,有单色、灰度、彩色的,可以直接调用或简单做简单编辑。

 

STB

命名打印样式表,设置一些打印输出设置的样式,可以设置不同图层使用不同的打印样式。在早期版本和一些单位使用比较多,个人很少使用。

 

PCP

旧版本使用的打印设置文件。

 

PC3

打印机和绘图仪配置文件,是CAD中保存打印驱动及相关设置的文件

 

HDI   

HDI(Heidi® 设备接口)驱动程序用于与硬拷贝设备进行通信。 这些驱动程序可分为三类:文件格式驱动程序、HDI 非系统驱动程序和 HDI 系统打印机驱动程序。  

 

PLT

打印输出文件。如果使用打印机驱动时勾选“打印到文件”,将不直接输出到打印机,而是生成PLT文件,此PLT文件可以无需CAD就可以直接输出到打印机。一些设计单位统一出图或到打印社出图通常都输出为PLT文件,这样避免出现缺少字体、版本不兼容导致图纸显示和打印不正常。

 

DWS

图层标准文件,可保存一些图层定义及图层映射表,主要用于图层转换(laytrans)。浩辰CAD等软件不支持此格式,但可以将图层映射表保存为DWG文件,效果相同。

 

LAS

图层状态文件,可以将设置好的图层的开关、冻结、锁定等状态保存下来,以后需要时在当前图或其他图中加载恢复保存的状态。

 

LSP 、DCL、FAS、VLX

AutoCAD及浩辰CAD等的一种二次开发工具AutoLisp的程序文件,后续增加了一些对VBA控件的调用,并提供了编辑器,被称为Visual lisp(Vlisp)。原始的LISP程序通常为纯文本文件,可以用CAD提供的工具编辑,也可以直接用记事本编写。LISP可以加密,加密后扩展名认为LSP,但无法用记事本打开,但仍可加载。FAS和VLX是经过编译和打包的文件

  • LSP — 包含 AutoLISP 程序代码的 ASCII 文本文件。
  • DCL — 用于编辑LSP程序使用的对话框的文件。
  • FAS — 单个 LSP 程序文件的二进制编译版本。
  • VLX 一个或多个 LSP 文件和/或对话框控制语言 (DCL) 文件的编译集。

DVB

AutoCAD针对VB提供的开发工具生成的文件,类似与WORD和EXCEL中的宏。浩辰CAD及其他软件无法加载DVB,只能加载VBI,但代码基本兼容,进入两款软件的VBA编辑器,将代码复制过来,简单编辑就能用。

ARX  

AutoCAD这对C++提供的开发工具,现在一些复杂的程序通常使用ARX开发的,ARX程序的运行效率比较高。浩辰CAD等其他CAD也提供了类似ARX的接口:GRX。ARX程序通常都是编译过的,因此无法直接在不同版本的CAD中加载。

 

BAK

自动备份文件,通常在保存文件时,会将上次保存的文件修改成BAK格式,避免保存出错,可以直接将BAK改成DWG来恢复之前的版本。AutoCAD和浩辰CAD默认都会生成这个文件,在“选项”(OP)对话框的“打开和保存”选项卡中可以设置是否生成此文件。

 

SV$

自动保存文件,在“选项”对话框中可以设置自动保存的时间间隔,CAD会按此间隔自动对当前图纸进行保存,以防在编辑文件时出现异常。SV$通常会保存在系统的临时文件目录下,当然也可以在选项对话框执行设置。如果出现异常情况,可以用CAD提供的图形管理器直接绘图图纸,或者直接将找到的文件扩展名改回DWG打开。浩辰CAD等自动保存文件的恢复方法相同。

 

AC$

临时文件,在“选项”对话框中可以设置扩展名,我们在CAD中复制(CTRL+C)或剪切(CTRL+V)时会生成一个临时文件,这个临时文件等于记录剪切内容,可以复制粘贴到其他文件。临时文件通常保存在当前用户的临时文件夹下,也可以自己设置其他路径。如果临时文件路径不可写的话,就会导致无法复制粘贴。

 

ARG

配置文件,在CAD中设置好“选项”对话框的各类选项后,可以输出为*.arg文件,这样可以将配置分享给其他人。一些专业软件通常使用配置文件来加载自己的相关设置。

 

暂时就想到这么多,如果还有遗漏,或者描述中有什么错误希望大家提醒!

发表在 CAD技巧 | 留下评论

配置左手快捷键,提高操作效率

CAD最高效的操作方式就是左手键盘,右手鼠标,两只手各司其职、相互配合。但CAD很多快捷键需要用到右手,对操作效率有些影响,因此有些精益求精的设计人员会将快捷键都设置到左手。

    所谓“左手键”就是只用左手使用键盘的左半部敲打命令。主要使用15个字母:Q W E R T A S D F G Z X C V B 及空格键。因为键盘固有的结构,数字小键盘位于键盘的右边,所以在实际绘图中,需要输入尺寸的时候,还是用右手输入方便一些。右手从鼠标挪到数字小键盘,动作幅度也并不大。

   将所有快捷键都设置到左手,自然会有些命令的快捷键会跟原命令有较大差别,这些命令只有硬背,好在这种常用的命令并不太多。下面给大家介绍网上流传的一种左手快捷键设置方法。

“左手键”快捷命令表

A *ARC 创建圆弧
AD *ATTEDIT 改变属性信息
AA *AREA 计算对象或指定区域的面积和周长
AG *ALIGN 将对象与其他对象对齐
AP *APPLOAD 加载或卸载应用程序
AR *ARRAY 阵列
AT *MATCHPROP 将选定对象的特性应用到其他对象
ATT *ATTDEF 创建属性定义
AV *DSVIEWER 鸟瞰视图

 

B *BLOCK 创建块
BD *BOUNDARY 从封闭区域创建面域或多段线
BR *BREAK 打断选定对象

 

C *CIRCLE 创建圆
CA *CAL 计算算术和几何表达式
CC *COPY 复制对象
CF *CHAMFER 为对象的边加倒角
CT *CUTCLIP 剪切图形
CR *COLOR 设置新对象的颜色

 

D *DIMSTYLE 创建和修改标注样式
DA *DIMANGULAR 创建角度标注
DB *DIMBASELINE 从上一个标注或选定标注的基线处创建标注
DC *DIMORDINATE 创建坐标点标注
DD *DIMDIAMETER 创建圆和圆弧的直径标注
DE *DIMLINEAR 创建线性标注
DG *DIMALIGNED 创建对齐线性标注
DR *DIMRADIUS 创建圆和圆弧的半径标注
DT *DIST 测量两点之间的距离和角度
DV *DVIEW 定义平行投影或透视视图
DZ *LEADER 创建连结注释与几何特征的引线

 

E *ERASE 从图形中删除对象
ED *DDEDIT 编辑文字、标注文字、属性定义和特征控制框
ES *ELLIPSE 创建椭圆
EG *LENGTHEN 修改对象的长度和圆弧的包含角
EX *EXTEND 延伸对象
ER *LAYER 管理图层和图层特性
EE *LINETYPE 加载、设置和修改线型

 

F *FILLET 倒圆角
FC *POLYGON 创建闭合的等边多段线
FD *OPEN 打开现有的图形文件
FE *EXPORT 以其他文件格式输出
FF *LINE 创建直线段
FG *PLINE 创建二维多段线
FGE *PEDIT 编辑多段线和三维多边形网格
FW *LWEITH 设置线宽、线宽显示选项线宽单位
FS *OFFSET 偏移
FT *FILTER 为对象选择创建过滤器
FV *MOVE 移动对象
FX *PROPERTIES 控制现有对象的特性

 

G *GROUP 对象编组
R *PAN 在当前视口中移动视图
RW *REDRAW 刷新当前视口中的显示
RA *RAY 画射线
RD *REDO 撤销前面UNDO 或 U 命令的效果
RE *REGEN 从当前视口重生成整个图形
REE *RENAME 修改对象名
REC *RECTANG 绘制矩形多段线
RT *ROTATE 旋转
RR *RENDER 渲染

 

SA *SAVEAS 另存为
SV *SAVE 保存
SC *SCALE 按比例放大或缩小对象
SD *DDSELECT 选项设置
SS *HATCH 用无关联填充图案填充区域
ST *STYLE 创建、修改或设置命名文字样式
T *TRIM 修剪对象
TB *TOOLBAR 显示、隐藏和自定义工具栏
TE *TOLERANCE 创建形位公差
TT *TEXT 创建单行文字对象
TTT *MTEXT  创建多行文字对象

 

V *UNDO 撤消命令
VV *UNITS 控制坐标和角度的显示格式并确定精度

 

W *WBLOCK 将对象或块写入新的图形文件
WW *MIRROR 镜像
WE

 

*WEDGE

 

创建三维实体并使其倾斜面沿 X 轴方向

 

X *EXPLODE 将合成对象分解成它的部件对象
XA *XATTACH 将外部参照附着到当前图形
XB *XBIND 将外部参照依赖符号绑定到当前图形中
XC *XCLIP 定义外部参照或块剪裁边界,并且设置前剪裁面和后剪裁面
XX *XLINE 创建无限长的直线(即参照线)

 

Z *ZOOM 放大或缩小视图中对象的外观尺寸
ZA *ZOOMALL 缩放全部
ZD *ZOOMDYNAMIC 动态缩放
ZE *ZOOMEXTENTS 缩放范围

    注:上面表中有些命令设置并不完全是左手键,例如AP(加载应用程序),因为这个命令不会在绘图过程中频繁使用,因此对操作效率影响不算大。还有些快捷键跟原命令差别非常大,例如用R来表示平移(PAN),用FGE来表示Pedit(多段线编辑),刚开始将快捷键换过来的时候,肯定会有些不适应,用一段时间就习惯了。

 

    为了方便大家编辑PGP文件,下面按PGP文件中的格式发一个列表,你只需要讲下面内容复制粘贴到PGP文件中即可。

“左手键”命令别名
A,         *ARC
AD,        *ATTEDIT
AA,        *AREA
AG,        *ALIGN
AP,        *APPLOAD
AR,        *ARRAY
AT,        *MATCHPROP
ATT,       *ATTDEF
AV,        *DSVIEWER

B,         *BLOCK
BD,        *BOUNDARY
BR,        *BREAK

C,         *CIRCLE
CA,        *CAL
CC,        *COPY
CF,        *CHAMFER
CT,        *CUTCLIP
CR,        *COLOR

D,         *DIMSTYLE
DA,        *DIMANGULAR
DB,        *DIMBASELINE
DC,        *DIMORDINATE
DD,        *DIMDIAMETER
DE,        *DIMLINER
DG,        *DIMALIGNED
DR,        *DIMRADIUS
DS,        *DSETTINGS
DT,        *DIST
DV,        *DVIEW
DZ,        *LEADER

E,         *ERASE
ED,        *DDEDIT
ES,        *ELLIPSE
EG,        *LENGTHEN
EX,        *EXTEND
ER,        *LAYER
EE,        *LINETYPE

F,        *FILLET
FC,       *POLYGON
FD,       *OPEN
FE,       *EXPORT
FF,       *LINE
FG,       *PLINE
FGE,      *PEDIT
FW,       *LINEWEITH
FS,       *OFFSET
FT,       *FILTER
FV,       *MOVE
FX,       *PROPERTIES

G,        *GROUP

R,        *PAN
RW,       *REDRAW
RA,       *RAY
RD,       *REDO
RE,       *REGEN
REE,      *RENAME
REC,      *RECTANG
RT,       *ROTATE
RR,       *RENDER

SA,       *SAVEAS
SV,       *SAVE
SC,       *SCALE
SD,       *DDSELECT
SS,       *HATCH
ST,       *STYLE

T,        *TRIM
TB,       *TOOLBAR
TE,       *TOLERANCE
TT,       *TEXT
TTT,      *MTEXT

V,        *UNDO
VV,       *UNITS
VW,       *VIEW

W,        *WBLOCK
WW,       *MIRROR
WE,       *WEDGE

X,        *EXPLODE
XA,       *XATTACH
XB,       *XBIND
XC,       *XCLIP
XX,       *XLINE
Z,        *ZOOM
ZA,       *ZOOMALL
ZD,       *ZOOMDYNAMIC
ZE,       *ZOOMEXTENTS

    将上述别名定义粘贴到PGP文件后,最好将前面快捷键重复的命令删掉。如果坚定了使用左手键,而且不会用到其他命令,可以直接将原来的内容全部替换。

     以上技巧适用于AUTOCAD和浩辰CAD等CAD软件,这些软件只是别名文件名有所不同,AUTOCAD的别名文件是acad.pgp,浩辰CAD的别名文件是icad.pgp,其他CAD,可以在目录下搜一下PGP文件,如果有的话,可以用同样的方法设置。

发表在 CAD技巧 | 留下评论

CAD常用快捷键

熟练使用快捷键,可以减少鼠标操作,可以提高绘图速度,下面将AutoCAD和浩辰CAD中常用的一些快捷键列出来,希望对大家有所帮助。

F1: 获取帮助
F2: 切换图形窗口和文本窗口(命令历史记录)

F3: 打开或关闭对象捕捉

F4: 数字化仪控制(数字化仪是一个设备,如果没有此设备,就不用记这个快捷键)

F5: 等轴测平面切换。当栅格设置为“等轴测捕捉”模式,利用栅格捕捉绘图时,按F5键可切换轴测平面)

F6: 控制状态行上坐标的显示方式

F7: 栅格显示模式控制

F8: 正交模式控制

F9: 栅格捕捉模式控制

F10: 极轴模式控制

F11: 对象追踪模式控制

Ctrl+1: 打开关闭属性对话框
Ctrl+2: 打开关闭设计中心

Ctrl+3: 打开关闭工具选项板

Ctrl+4: 打开关闭图纸集管理器(浩辰CAD无)

Ctrl+6: 打开关闭图象数据源(浩辰CAD无)

Ctrl+7: 打开关闭标记集管理器(浩辰CAD无)

Ctrl+8: 打开关闭计算器

Ctrl+9: 打开关闭命令行窗口

Ctrl+A: 选择所有对象

Ctrl+B: 栅格捕捉模式控制(F9) (浩辰CAD仅支持F9)

Ctrl+C: 将选择的对象复制到剪切板上

Ctrl+F: 控制是否实现对象自动捕捉(F3)(浩辰CAD仅支持F3)

Ctrl+G: 栅格显示模式控制(F7)(浩辰CAD仅支持F7)

Ctrl+I:控制状态栏中坐标的更新。0 :指定点时更新, 1:连续更新绝对坐标,2:连续更新绝对坐标,且当要求输入距离和角度时,显示与最后一点的角度

Ctrl+J: 重复执行上一步命令 (浩辰CAD为CTRL+M)

Ctrl+K: 超级链接 (浩辰CAD不支持)

Ctrl+N: 新建图形文件

Ctrl+M: 打开选项对话框 (浩辰CAD为重复命令)
Ctrl+P: 打开打印对说框

Ctrl+S: 保存文件

Ctrl+U: 极轴模式控制(F10) (浩辰CAD仅支持F10)

Ctrl+v: 粘贴剪贴板上的内容

Ctrl+W: 对象追踪式模式控制(F11) (浩辰CAD仅支持F11)

Ctrl+X: 剪切所选择的内容

Ctrl+Y: 重做

Ctrl+Z: 取消前一步的操作

发表在 CAD技巧 | 留下评论

常用CAD命令及CAD快捷键大全

本文档虽然是转载自其他文档,但我进行了检查和整理。如果有谁发现其中问题,请留言,我会马上修改。

 

第一部分 常用功能及参数命令

 

10,20(绝对直角坐标)﹫10,20(相对直角坐标)

距离<角度(绝对极坐标)﹫距离<角度(相对极坐标)

adcenter(Ctrl+2) 设计中心

align(AL) 对齐标注

appload 加载应用程序

arc(A) 弧

arctext 弧形文本

area 面积

array(AR) 阵列

attedit 编辑属性

attout/attin 导出/导入属性值

bextend 延伸至块图元(扩展工具功能)

bhatch 填充

blipmode 显示标志

block(B) 创建块

blockreplace 替换图块(扩展工具功能)

blocktoxref 图块参照(扩展工具功能)

boundary(BO) 边界

break(BR) 打断

breakline 折断线

btrim 用块图元修剪  (扩展工具功能)

burst 分解属性为文字 (扩展工具功能)

chamfer(cha) 倒角

change 属性修改

circle(C) 圆

close 关闭图形(文件——退出)

config=options(OP) 选项

copy(CO/CP) 复制

copyclip(Ctrl+C) 复制到剪贴板

copym 多重复制  (CAD高版本此功能已无意义)

ddattdef=attdef 定义属性

ddatte(ATE) 编辑图块属性

ddedit(ED) 文本编辑、改变属性定义

ddgrips 夹点设置/绘图设置(显示)

ddim(D) 标注样式

ddinsert/insert、divide、measure 插入图块

ddptype 点样式

ddunits=units (图形)单位

dimangular 角度标注

dimbaseline(dimbase)基线标注

dimcenter 圆心标记

dimcontinue 连续标注

dimdiameter(dimdia)直径标注

dimedit、ddedit、dimtedit 尺寸标注编辑

dimex/dimim 标注样式输出和输入

dimleader 引线标注

dimlinear(dimlin) 线性标注

dimordinate 坐标标注

dimradius(dimrad) 半径标注

dist(DI) 距离

divide(DIV) 定数等分

donut(DO) 圆环系统变量Fillmode、fill

draworder 绘图顺序

ellipse(EL) 椭圆系统变量Pellipse

end 端点 (确定点位置时输入的捕捉选项)

erase(E)、delete键 删除

explode(X) 分解

extend(EX) 延伸

fill 填充显示

fillet(F) 圆角

grid  F7  栅格显示

hatch(H) 图形填充

help  F1  帮助

highlight 选择高亮显示

image 图像管理器

imageadjust 图像调整

imageattach 插入光栅图像

imagequality 图像质量

insertobj 创建新的嵌入对象

join 连接

layer(LA) 图层

lengthen(LEN)编辑长度/修改长度/拉长

limits 图形界限

line(L) 线

linetype 线型管理器

list 查图形信息、列表显示

measure(ME) 定距等分

mirror(MI) 镜像

mocoro 移动、复制、旋转

move(M) 移动

mslide 生成快照

mtext(MT) 多行文本标注

mview 创建多个浮动视口

ncopy 复制嵌套图元 (扩展工具功能)

new 创建新图形系统变量Startup会影响是否弹出相应对话框

offset(O) 偏移

open (CTRL+O) 打开图形文件

ortho 正交 F8

osnap 目标捕捉/对象捕捉 F3

pan 平移

pasteclip 粘贴

pedit(PE) 编辑多段线

pline(PL) 多段线

pmspace 图纸空间与模型空间之间的转换

point(PO) 点(只能绘制单个点)

polygon(POL) 正多边形可精确绘3~1024条边

print、plot (Ctrl+P)打印

qdim 快速标注

qlattach、qldetachset、qlattachset 引线、分离、附加(扩展工具功能)

qleader 快速引线

qsave 保存

qtext 快显文本

quit、exit 退出

ray 射线

rectangle(REC) 矩形

redraw/redrawall(R)图形重画

regen/regenall(RE)重新生成(系统设置Regenauto,可设置自动重生成,不建议设置)

revcloud 云线

rotate(RO) 旋转

rtzoom(Z) 上下滚动鼠标滚轮 实时缩放

saveas(CTRL+SHIFT+S)另保存

scale(SC) 缩放

select 选择对象

settings 草图设置-捕捉和栅格

sketch 徒手画线

snap(SN) 草图设置-光标捕捉 F9

solid(SO) 区域或二维填充

spline(SPL) 样条曲线

stopscript 停止记录脚本

stretch(S) 拉伸

style/ddstyle(ST) 文字样式

tbconfig 工具栏

tcase 文本形态

tcircle 文本外框

tcount 自动编号

text/dtext(DT) 单行文本标注

textfit 调整文本

textmask 文本屏蔽

textunmask 解除屏蔽

tjust 对齐文本

tolerance 公差标注

torient 旋转文本

trace 迹线宽线系统变量tracewid(设置迹线宽度)

trim(TR) 修剪

ucs 用户坐标系统

viewports/vports 新建视口

vsnapshot 观看快照

wblock 写块

xattach 附着外部参照

xline(XL) 构造线

xref 外部参照管理

zoom(Z) 缩放

 

第二部分 默认的快捷键

F1: 获取帮助

F2: 实现作图窗和文本窗口的切换

F3: 控制是否实现对象自动捕捉

F4: 数字化仪控制

F5: 等轴测平面切换

F6: 控制状态行上坐标的显示方式

F7: 栅格显示模式控制

F8: 正交模式控制

F9: 栅格捕捉模式控

F10: 极轴模式控制

F11: 对象追 踪式控制

Ctrl+0: 图形窗口最大化,AutoCAD支持,浩辰CAD及其他CAD暂不支持。

Ctrl+1: 打开特性对话框

Ctrl+2: 打开设计中心

Ctrl+3:打印工具选项板

Ctrl+4: 打开图纸集管理器(浩辰及其他CAD暂不支持)

Ctrl+5: 打开信息选项板(浩辰及其他CAD暂不支持)

Ctrl+6: 打开数据库连接管理器(浩辰及其他CAD暂不支持)

Ctrl+7: 打开标记集管理器(浩辰及其他CAD暂不支持)

Ctrl+8: 打开计算器

Ctrl+9: 打开关闭命令行

Ctrl+A:全选

Ctrl+B: 栅格捕捉模式控制(F9)

Ctrl+C:复制到剪贴板

Ctrl+D:打开关闭动态UCS (浩辰及其他CAD暂不支持)

Ctrl+F: 控制是否实现对象自动捕捉(f3)

Ctrl+G: 栅格显示模式控制(F7)

Ctrl+H: 切换PICKSTYLE变量,确定是否使用编组

Ctrl+K: 超链接

Ctrl+L: 正交开关

Ctrl+N: 新建图形文件

Ctrl+O:打开文件

Ctrl+P: 打开打印对话框

Ctrl+Q: 退出CAD

Ctrl+S: 保存文件

Ctrl+U: 极轴模式控制(F10)

Ctrl+V: 粘贴剪贴板上的内容

Ctrl+W: 对象追踪式控制(F11)

Ctrl+X: 剪切所选择的内容

Ctrl+Y: 重做

Ctrl+Z: 取消前一步的操作

 

A: 绘圆弧

B: 定义块

C: 画圆

D: 尺寸资源管理器

E: 删除

F: 倒圆角

G: 对相组合

H: 填充

I: 插入

S: 拉伸

T: 文本输入

W: 定义块并保存到硬盘中

L: 直线

M: 移动

X: 炸开

V: 设置当前坐标

U: 恢复上一次操做

O: 偏移

P: 移动

Z: 缩放

AA: 测量区域和周长(area)

AL: 对齐(align)

AR: 阵列(array)

AP: 加载*lsp程系

AV: 打开鸟瞰视图对话框(dsviewer)

SE: 打开捕捉和栅格设置对话框

ST: 打开字体设置对话框(style)

SO: 绘制二维面( 2d solid)

SP: 拼写检查(spell)

SC: 缩放比例 (scale)

SN: 栅格捕捉模式设置(snap)

DT: 文本的设置(dtext)

DI: 测量两点间的距离

OI: 插入外部对相

 

第三部分 个性化自定义设置

 

为了尊重用户的一些固定习惯,CAD软件甚至可支持已有的*.pgp文件导入,免去用户重复设置的麻烦。

 

通过CAD的工具菜单中的自定义选项,可对软件的命令简称和快捷方式进行自定义设置。

 

点击工具-自定义-编辑程序参数,弹出记事本文档,在里面修改快捷键,根据自己情况自定义快捷键。

通常将自己使用频率最高的命令设为一个字母,次之的设置为两个字母,例如默认设置中圆用C字母,复制用CO,但显然复制比圆的命令用得更多,很多人愿意将复制改为C,将圆定义为CI。另外考虑到左手键盘、右手鼠标的操作习惯,可以将一些常用命令设置到左手边,例如有的设计师认为直线L命令用着就很蛋疼,把L,*LINE修改为F,*LINE这样,直线命令就变为了F,很顺手。

 

AutoCAD、浩辰CAD等软件基本类似。

发表在 CAD技巧 | 留下评论

CAD入门及提高(15个命令走天下)

一、基本概念,基本操作

二、快捷键及绘图准备

三、15个基本命令

四、为什么要记这15个命令

五、附我的自定义命令

一、需要知道的概念,以及基本操作
1、CAD是由很多命令组成,命令的执行方式多种多样,基本上有两种:

一种是先输入命令(或选择命令按钮)再执行操作,另外一种是先选择,然后在执行命令。有许多命令这两种操作都是可以的。
例:删除一个物体的时候可以先选择删除命令,然后再选择物体,也可以先把物体选中再选择删除命令,两种操作的结果都是一样的。(键盘输入E 空格 选择物体 空格或者选择物体 输入E 空格,结果都是一样的)
2、透明命令

大部分命令执行的过程是单一的,也就是说在执行的过程中只能执行完,或者中途取消。但也有些命令是在一个命令的执行过程中可以执行另外一个命令,也就是说A命令执行的过程中可以执行B命令,B命令执行完后,继续执行A命令,直至结束。这样的命令叫“透明命令”
3、选择物体的方式。

有两种一种是从左上到右下选择,一种是从右下到左上选择,两种方式的选择结果是不同的,第一种:左上到右下;只能选择到被拉出来的框完全包围的物体;第二种:右下到左上;凡是和虚框相交的所有物体(包括包围了的物体)。
4、相对坐标

相对于当前点(或者你制定的点)的位置,这个非常重要!!!比如你要画一条1000mm的线,选择命令,然后从屏幕上任意取一点,然后给一个方向(移动鼠标到你想的方向,如果是水平或者竖直的线,可按F8打开正交)输入1000回车(或者空格)就得到了一条1000mm的线,这是最简单的相对坐标。比如你想画一个1000X1000的正方形,那你就需要先选择命令,然后在屏幕上任意取一点,然后输入“@1000,1000”然后回车(或空格)就得到了一个正方形。“@”就代表了相对坐标。再有,假如你想画一条1000mm长和水平方向夹角37度的线,那么你就选择线命令,然后再屏幕上任意取一点,然后输入“@1000<37”回车。OK了。这两种方式必须要记住,必须的!
5、键盘操作:
  a、在任何时候都可以直接在键盘上输入命令,并执行不需要在某个地方点一下再输入命令。
  b、命令可以输入全名,也可以输入简写。
  c、空格和回车的作用一样,是执行命令,也就说你输入完命令按空格或者回车就可以执行。
  d、如果向继续上一个命令,那么可以直接按空格,不必重新输入命令或者选择按钮了。
6、鼠标操作:
  左键,不用说了
  右键:在执行命令的时候按右键表示确定,连续操作的时候按右键表示结束,整体来说有一些和空格类似,但还有右键的一些快捷。在没有命令执行的时候按鼠标右键,会有一个菜单,默认的第一个是执行上一个命令,其他的自己看。
  滚轮:放大和缩小双击滚轮:显示当前所有的图形,按住滚轮鼠标变成“小手”可以移动屏幕。
  把鼠标翻过来,让激光或者滚轮朝上,那么鼠标就不能用了。呵呵!
 

CAD入门及提高(15个命令走天下)

1、F8 打开/关闭 正交状态:

打开正交状态,这时候只能画水平线或者数值线,移动或者复制物体的时候也只能水平移动或者数值移动。画直线的时候非常有用,所以要习惯用F8来切花,这非常重要。
2、F3 打开/关闭 自动捕捉:

打开的时候,当把鼠标移动到物体上时会有各种形状的黄色的符号,不同的符号代表不同的位置,比如□代表端点 △代表中点,要熟记这些标记,这非常重要。
3、设置捕捉:

屏幕下方有“对象捕捉”四个字,在上边按鼠标右键选择“设置”,可以看到各种符号的意义,选择你需要的,或者全部选择。点“确定”就设置好了捕捉。按左键功能和F3一样,是打开和关闭自动捕捉的状态!
4、快捷按钮的显示

假如你用另外一台电脑的时候突然发现他的CAD没有快捷按钮,或者没有标注按钮,那你可以自己调出来,是这样的,在黑色区域外围的灰色区域点鼠标右键会看到ACAD菜单立面一大串,有的打√,有的没大,打勾的,说明屏幕上有,假如你没有标注的菜单,那你就找到标注在他上面点一下,标注就出来了。然后移动到你喜欢的位置就OK!

5、CTRL+S 保存

操作方式:按住CTRL不松开,点S键,比如用左手小指点CTRL键,用左手中指点S然后松开,要养成一个习惯,做完每一个操作都要习惯的保存一下,因为你不能保证下一刻电脑不死机,也不能保证下一刻不停电,也不能保证下一刻CAD不出现“致命错误”,假设你不保存,那么你可能半个小时或者更长时间的工作就白费了!所以,养成这个习惯很重要!!!当然你也可以点上边的保存按钮,但我觉得那样麻烦!养成习惯后你不会有这个操作的意识,呵呵,感觉不到!记住,这非常重要!!!
6、自定义命令。

首先要记住基本命令,但也要有自定义命令,定义方法,工具—自定义—编辑自定义文件—程序参数acad.pgp前边有很多都是以“;”开头的,第一个不以“;”开头的就是命令的开始,一般“3A, *3DARRAY”下边的命令是我们要编辑的部分,其他不懂的不要动。比如这个 3A表示的是快捷键 *号后边是命令的完整名称 也就是说输入 3A 和输入 3DARRAY作用是一样的。修改后保存,关闭CAD,重新打开CAD你自定义的命令就可以使用了。
7、ESC 在任何时候按ESC键,取消正在执行的命令。
三、15个 基本命令
1、 线
命令:line
快捷命令:L
操作方式:输入L→空格→屏幕上点第一点→点第二点 点第三点 空格 完毕,当然你也可以无休止的画下去
2、 复制
命令:copy
快捷命令:CO(有的CAD是C)
操作方式:输入CO→空格→选择物体→空格→选择基准点→选择要复制到什么地方→空格结束(CAD2004如果要连续复制,可在选择基准点之前按一个M然后再选择基准点,就可以连续复制了,CAD2004以后的版本都直接可以连续复制)如果要复制这个物体距离1000mm,那么这样操作“CO→空格→选择物体→空格→选择基准点→输入相对坐标→空格(如果是水平或者竖直方向,那么按F8打开正交,用移动鼠标给个方向,然后输入1000然后空格)
3、 移动
命令:MOVE
快捷命令:M
操作方式:和复制一样
4、 圆
命令:CIRCLE
快捷命令:C(不同的版本稍有不同也有的是CI CR)
操作方式:输入 C 空格 点一点 输入直径 空格或者拉鼠标,点左键确定
5、 偏移
命令OFFSET
快捷命令:O
操作方式:输入O,空格,输入偏移的距离,空格(或者在屏幕上指定距离用两点的方式),选择要偏移的物体,在要偏移的方向上点鼠标。
6、 格式刷
命令MATCHPROP
快捷命令:MA
操作方式:输入MA,空格,选择基准物体,选择要刷的物体
7、 查看属性
命令PROPERTIES
快捷命令:MO(Ctrl+1)
操作方式 :输入mo,选择物体,(可以看到该物体的属性,图层颜色 几何尺寸等)
8、 阵列
命令:array
快捷命令:AR
操作步骤输入AR,空格,出现对话框,假如你想生成一个3行4列的图形,那么行里写3列里写4,下边的“偏移距离和方向”里按你自己的需要填写。
9、 延长
命令:EXTEND
快捷命令:EX
操作方式:输入EX,空格,选择想延长到那儿,空格,选择被延长的线
提示:线的前边有,有可能相交的线或物体
小技巧:输入EX,空格,空格(将图中所有线作为延伸边界),点被延长的物体,可直接延长到最近的一个物体,继续点该线,可以继续延长到下个物体。
10、 剪切
命令:TRIM
快捷命令:TR
操作方式:同,延长,同样的小技巧
11、 删除
命令:ERASE
快捷命令:E
操作方式: 输入E,空格,选择物体,空格(或者选择物体按E,空格,或者选择对象后按Delete键)
12、 撤销

命令:U
操作方式:输入U,空格,只要CAD没关过,可以一直撤销到打开图纸时的状态
13、 炸开
命令:EXPLODE
快捷命令:X
操作方式:输入X,空格,选择物体(或者选择物体输入X 空格)
提示:如果是块也许需要炸很多此才能炸开,也有的东西是炸不开的
14、 拉伸
命令:STRETCH
快捷命令:S
操作方式:输入S,用右下、左上的方式拉出一个框,让方框包围需要拉伸的部分图形,空格,选择一个基本点,输入距离或者指定下一点。

如果框选了整个对象,拉伸时整个对象会被移动。
15、 镜像
命令:MIRROR
快捷命令:MI
操作方式: 输入MI 选择要镜像的物体,选择“镜子“的第一点,选择”镜子“的第二点,空格,得到了一个以你选择的两点为对称轴的图像三、为什么要记这15个命令:因为会CAD操作的人很多,你要与众不同,你需要更快的操作才可以比别人强,用键盘看起来很酷,作一个牛X的人需要熟练的键盘操作。只会用鼠标在屏幕上点,不能说会CAD。呵呵!
CAD功能非常强大,操作也可以非常的灵活,要画一个图形,操作方式多种多样,比如画一个正方形
  方法一:用线的命令 +相对坐标,组成一个正方形 
  方法二:选择矩形命令 +相对坐标 生成一个正方形
  方法三:画两条垂直的线然后用偏移组成一个正方形
  方法四:画一条线,用阵列(环形阵列)生成一个正方形
  方法五:画两条垂直的线,用复制命令分别复制两条线,生成一个正方形
  方法六:画两条相交的线,复制两条线,基准点取交点,输入相对坐标,剪切掉多余的线,形成一个正方形。

    我起码还能写出五种方法来,你信不?
    所以要熟悉这15个命令几乎就可以走遍天下了!

其他的命令可以用按钮或者菜单里找,这15个命令一定要用键盘输入!

五、附我的自定义命令

因为原则上CAD采用左手键盘、右手鼠标的方式最方便,因此将一些常用命令都定义为左手键,这样也可以提高绘图效率。

ff, *line
ww, *move
a, *MATCHPROP
q, *PROPERTIES
c, *copy (把圆的命令改为CC)
   把这几个复制到*CAD.PGP 的命令Z, *ZOOM的后边保存
    这样几乎所有的命令就都可以用左手完成了。右手只是偶尔用一下,呵呵,当然了,根据你自己的使用习惯自己定义也可以。

我这样定义不替换原来的命令(C 复制命令除外,因为画圆的命令不常用),又增加了命令的可操作性,解放了右手和眼睛,右手只用鼠标,眼睛只盯着屏幕就可以了!

发表在 CAD技巧 | 留下评论

属性转换为文字

AcDbText* BrefAttrToText(AcDbAttribute* pAttr)
{
 AcDbText* pText=new AcDbText;
 SameEntityAttr(pText,pAttr);
 pText->setHeight(pAttr->height());
 pText->setHorizontalMode(pAttr->horizontalMode());
 pText->setVerticalMode(pAttr->verticalMode());
 pText->setNormal(pAttr->normal());
 pText->setOblique(pAttr->oblique());
 pText->setPosition(pAttr->position());
 pText->setAlignmentPoint(pAttr->alignmentPoint());
 pText->setRotation(pAttr->rotation());
 TCHAR* lpStr=pAttr->textString();
 pText->setTextString(lpStr);
 acutDelString(lpStr);
 pText->setTextStyle(pAttr->textStyle());
 pText->setThickness(pAttr->thickness());
 pText->setWidthFactor(pAttr->widthFactor());
 return pText;
}

发表在 ObjectArx | 标签为 , , | 留下评论

获取设置环境变量

//功能: 设置int型环境变量
Acad::ErrorStatus SetCADIntVar(CString sMode,int nRet)
{
 Acad::ErrorStatus es=Acad::eOk;

 resbuf *pNewRb=acutBuildList(RTSHORT,nRet,0);
 acedSetVar(sMode,pNewRb);
 acutRelRb(pNewRb);

 return es;
}
//功能: 获取int型环境变量
Acad::ErrorStatus GetCADIntVar(CString sMode,int &nRet)
{
 Acad::ErrorStatus es=Acad::eOk;

 resbuf *pRb=acutBuildList(RTSHORT,23,0);
 acedGetVar(sMode,pRb);
 if(pRb==NULL)
 {
  acutRelRb(pRb);
  return Acad::eNullHandle;
 }
 nRet=pRb->resval.rint;
 acutRelRb(pRb);

 return es;
}

发表在 ObjectArx | 标签为 , | 留下评论

体验版本V1.0.5.20131220

下载地址:http://yun.baidu.com/share/link?shareid=711270525&uk=721859502

修正了属性转成文字的BUG

解决了AutoCAD2014加载时添加信任的问题

发表在 CAD好帮手发布 | 标签为 | 留下评论

最新体验版本V1.0.5.20131218

下载地址:http://yun.baidu.com/share/link?shareid=372510910&uk=721859502

增加了新功能:

1:定位当前文件

2:临时隐藏

3:恢复显示

4:删除重叠线,删除完全重叠和被压盖的曲线

 

发表在 CAD好帮手发布 | 标签为 | 留下评论

最新体验版本V1.0.5.20131216

大家好,软件发布最新体验版本V1.0.5.20131216

下载地址:http://yun.baidu.com/share/link?shareid=236984765&uk=721859502

修正了部分电脑无法获取机器码的bug,可能导致用户以前的注册码无效,请在申请之前,联系作者获取新的注册码。

批量修改功能做了比较大的升级

发表在 CAD好帮手发布 | 标签为 | 一条评论

字符串对比算法源代码(C++版)

字符串对比

注意:需要在

BOOL CTextCompareCppApp::InitInstance()

加上

AfxInitRichEdit2();

否则CRichEditCtrl 无法使用

// TextCompareCppDlg.h : 头文件
//

#pragma once
// CTextCompareCppDlg 对话框
class CTextCompareCppDlg : public CDialog
{
// 构造
public:
 CTextCompareCppDlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据
 enum { IDD = IDD_TEXTCOMPARECPP_DIALOG };

 protected:
 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
 HICON m_hIcon;

 // 生成的消息映射函数
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 void ChangeColor(int leftStart, int leftEnd, int rightStart, int rightEnd,bool bSame);
 CRichEditCtrl richTextBox1;
 CRichEditCtrl richTextBox2;
 DECLARE_MESSAGE_MAP()
public:
 afx_msg void OnBnClickedButton1();
};

// TextCompareCppDlg.cpp : 实现文件
//

#include “stdafx.h”
#include “TextCompareCpp.h”
#include “TextCompareCppDlg.h”

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
struct IndexPair
{
 int l;
 int r;
 IndexPair()
 {
  l=0;
  r=0;
 }
};

COLORREF ColorNew = RGB(253,0,0);
COLORREF ColorDelete =RGB(254,0,0);
COLORREF ColorModify = RGB(255,0,0);
COLORREF ColorSame = RGB(0,0,0);//黑色

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
 CAboutDlg();

 // 对话框数据
 enum { IDD = IDD_ABOUTBOX };

protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

 // 实现
protected:
 DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CTextCompareCppDlg 对话框

 
CTextCompareCppDlg::CTextCompareCppDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTextCompareCppDlg::IDD, pParent)
{
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTextCompareCppDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 DDX_Control(pDX,IDC_RICHEDIT21,richTextBox1);
 DDX_Control(pDX,IDC_RICHEDIT22,richTextBox2);
}

BEGIN_MESSAGE_MAP(CTextCompareCppDlg, CDialog)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 //}}AFX_MSG_MAP
 ON_BN_CLICKED(IDC_BUTTON1, &CTextCompareCppDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
// CTextCompareCppDlg 消息处理程序

BOOL CTextCompareCppDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // 将“关于…”菜单项添加到系统菜单中。

 // IDM_ABOUTBOX 必须在系统命令范围内。
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
 //  执行此操作
 SetIcon(m_hIcon, TRUE);   // 设置大图标
 SetIcon(m_hIcon, FALSE);  // 设置小图标

 // TODO: 在此添加额外的初始化代码
 SetDlgItemText(IDC_EDIT1,_T(“CAD工具之家(www.cadgj.com)XX“));
 SetDlgItemText(IDC_EDIT2,_T(“CAD工具(cbd_gj.com)”));
 return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CTextCompareCppDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CTextCompareCppDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // 用于绘制的设备上下文

  SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

  // 使图标在工作矩形中居中
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() – cxIcon + 1) / 2;
  int y = (rect.Height() – cyIcon + 1) / 2;

  // 绘制图标
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CDialog::OnPaint();
 }
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CTextCompareCppDlg::OnQueryDragIcon()
{
 return static_cast<HCURSOR>(m_hIcon);
}
void RichEditCtrlSelect(CRichEditCtrl* pCtrl,int start, int length)
{
 if(length-1<0)
 {
  return;
 }
 pCtrl->SetSel(start,start+length);
}
void RichEditCtrlChangeTextColor(CRichEditCtrl* pCtrl,COLORREF& col)
{
 if(col==ColorDelete)
 {
  CHARFORMAT2 cf;
  pCtrl->GetSelectionCharFormat(cf);
  cf.crTextColor=col;
  cf.dwEffects&=~CFE_AUTOCOLOR;
  cf.dwMask|=CFM_COLOR;
  cf.dwEffects|=CFE_STRIKEOUT;
  pCtrl->SetSelectionCharFormat(cf);
 }
 else if(col==ColorModify)
 {
  CHARFORMAT2 cf;
  pCtrl->GetSelectionCharFormat(cf);
  cf.crTextColor=col;
  cf.dwEffects&=~CFE_AUTOCOLOR;
  cf.dwMask|=CFM_COLOR;
  cf.dwEffects&=~CFE_STRIKEOUT;
  pCtrl->SetSelectionCharFormat(cf);
 }
 else if(col==ColorNew)
 {
  CHARFORMAT2 cf;
  pCtrl->GetSelectionCharFormat(cf);
  cf.crTextColor=RGB(0,0,255);
  cf.dwEffects&=~CFE_AUTOCOLOR;
  cf.dwMask|=CFM_COLOR;
  cf.dwEffects&=~CFE_STRIKEOUT;
  pCtrl->SetSelectionCharFormat(cf);
 }
 else if(col==ColorSame)
 {
  CHARFORMAT2 cf;
  pCtrl->GetSelectionCharFormat(cf);
  cf.crTextColor=RGB(0,0,0);
  cf.dwEffects&=~CFE_AUTOCOLOR;
  cf.dwMask|=CFM_COLOR;
  cf.dwEffects&=~CFE_STRIKEOUT;
  pCtrl->SetSelectionCharFormat(cf);
 }
}
void CTextCompareCppDlg::ChangeColor(int leftStart, int leftEnd, int rightStart, int rightEnd,bool bSame)
{
 int leftLen = leftEnd – leftStart + 1;
 int rightLen = rightEnd – rightStart + 1;
 if(leftLen==0&&rightLen==0)
 {
  return;
 }
 if (leftLen > rightLen)
 {
  //删除了内容,长度为(leftLen – rightLen)
  RichEditCtrlSelect(&richTextBox1,leftStart, leftLen – rightLen);
  RichEditCtrlChangeTextColor(&richTextBox1,ColorDelete);
  if (rightLen > 0)
  {
   //修改了内容,长度为(rightLen)
   RichEditCtrlSelect(&richTextBox2,rightStart, rightLen);
   RichEditCtrlChangeTextColor(&richTextBox2,bSame ? ColorSame : ColorModify);

   RichEditCtrlSelect(&richTextBox1,leftStart + leftLen – rightLen – 1+1, rightLen);
   RichEditCtrlChangeTextColor(&richTextBox1,bSame ? ColorSame : ColorModify);
  }
 }
 else if (leftLen == rightLen)
 {
  //修改了内容,长度为(leftLen)
  RichEditCtrlSelect(&richTextBox2,rightStart, rightLen);
  RichEditCtrlChangeTextColor(&richTextBox2,bSame ? ColorSame : ColorModify);
  RichEditCtrlSelect(&richTextBox1,leftStart, leftLen);
  RichEditCtrlChangeTextColor(&richTextBox1,bSame ? ColorSame : ColorModify);

 }
 else
 {
  //增加了内容,长度为(rightLen-leftLen)
  RichEditCtrlSelect(&richTextBox2,rightStart, rightLen – leftLen);
  RichEditCtrlChangeTextColor(&richTextBox2,ColorNew);
  if (leftLen > 0)
  {
   //修改了内容,长度为(leftLen)
   RichEditCtrlSelect(&richTextBox1,leftStart, leftLen);
   RichEditCtrlChangeTextColor(&richTextBox1,bSame ? ColorSame : ColorModify);

   RichEditCtrlSelect(&richTextBox2,rightStart + rightLen – leftLen – 1+1, leftLen);
   RichEditCtrlChangeTextColor(&richTextBox2,bSame ? ColorSame : ColorModify);
  }
 }
}
void CTextCompareCppDlg::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知处理程序代码

 CString leftText,rightText;
 GetDlgItemText(IDC_EDIT1,leftText);
 richTextBox1.SetWindowText(leftText);
 GetDlgItemText(IDC_EDIT2,rightText);
 richTextBox2.SetWindowText(rightText);

 WCHAR* left=new WCHAR[leftText.GetLength()+1];
 memset(left,0,(leftText.GetLength()+1)*sizeof(WCHAR));
 //特别注意,一定要转换为宽字节的,不然对比出错
#ifdef _UNICODE
 lstrcpy(left,leftText);
#else
 MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, leftText, leftText.GetLength(), left, leftText.GetLength() + 1);
#endif
 WCHAR* right=new WCHAR[rightText.GetLength()+1];
 memset(right,0,(rightText.GetLength()+1)*sizeof(WCHAR));
 #ifdef _UNICODE
 lstrcpy(right,rightText);
#else
 MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, rightText, rightText.GetLength(), right, rightText.GetLength() + 1);
#endif
 int leftLen = lstrlenW(left);
 int rightLen = lstrlenW(right);
 if(leftLen==0&&rightLen==0)
 {
  //都是空的内容
  delete[] left;
  delete[] right;
  return;
 }
 else if(leftLen==0&&rightLen>0)
 {
  //全部都是新增的
  RichEditCtrlSelect(&richTextBox2,0, rightLen);
  RichEditCtrlChangeTextColor(&richTextBox2,ColorNew);
  delete[] left;
  delete[] right;
  return;
 }
 else if(leftLen>0&&rightLen==0)
 {
  //全部都被删除了
  RichEditCtrlSelect(&richTextBox1,0, leftLen);
  RichEditCtrlChangeTextColor(&richTextBox1,ColorDelete);
  delete[] left;
  delete[] right;
  return;
 }
 bool** V=new bool*[leftLen];//申请一个动态的二维数组
 int l = 0;
 int r = 0;
 for(l=0;l<leftLen;l++)
 {
  V[l]=new bool[rightLen];//申请动态一维数组
 }
 for (l = 0; l < leftLen; l++)
 {
  WCHAR c1 = left[l];
  for (r = 0; r < rightLen; r++)
  {
   WCHAR c2 = right[r];;
   if (c1 == c2)
   {
    V[l][r] = true;
   }
   else
   {
    V[l][r] = false;
   }
  }
 }
 int nMax = 0;
 int** N = new int*[leftLen];//申请动态二维数组
 for(l=0;l<leftLen;l++)
 {
  N[l]=new int[rightLen];//申请动态一维数组
 }
 for (l = leftLen – 1; l >= 0; l–)
 {
  for (r = rightLen – 1; r >= 0; r–)
  {
   if (l == leftLen – 1 && r == rightLen – 1)
   {
    if (V[l][r])
    {
     N[l][r] = 1;
    }
    else
    {
     N[l][r] = 0;
    }
   }
   else if (l == leftLen – 1)
   {
    if (V[l][r])
    {
     N[l][r] = 1;
    }
    else
    {
     N[l][r] = N[l][r+1];
    }
   }
   else if (r == rightLen – 1)
   {
    if (V[l][r])
    {
     N[l][r] = 1;
    }
    else
    {
     N[l][r] = N[l+1][r];
    }
   }
   else
   {
    N[l][r] = max(max(N[l+1][r], N[l][r+1]), V[l][r] ? N[l+1][r+1] + 1 : N[l+1][r+1]);
   }
   if (N[l][r] > nMax)
   {
    nMax = N[l][r];
   }
  }
 }
 if (nMax == 0)
 {
  //未找到任何匹配
  ChangeColor(0, leftLen – 1, 0, rightLen – 1,false);
  //释放二维数组V
  for(l=0;l<leftLen;l++)
  {
   delete[] V[l];
  }
  delete[] V;
  //释放二维数组N
  for(l=0;l<leftLen;l++)
  {
   delete[] N[l];
  }
  delete[] N;
  delete[] left;
  delete[] right;
  return;
 }
 CArray<IndexPair> pairList;
 for (l = leftLen – 1; l >= 0; l–)
 {
  for (r = rightLen – 1; r >= 0; r–)
  {
   if (N[l][r] == nMax && V[l][r])
   {
    //起始点
    IndexPair pair;
    pair.l = l;
    pair.r = r;
    pairList.Add(pair);
   }
  }
 }
 IndexPair firstIndex;
 //寻找最优路径
 int nMin = -1;
 int** D = new int*[leftLen];//申请动态二维数组
 for(l=0;l<leftLen;l++)
 {
  D[l]=new int[rightLen];//申请动态一维数组
 }
 for (l = leftLen – 1; l >= 0; l–)
 {
  for (r = rightLen – 1; r >= 0; r–)
  {
   if (l == leftLen – 1 && r == rightLen – 1)
   {
    if (V[l][r])
    {
     D[l][r] = 1;
    }
    else
    {
     D[l][r] = 0;
    }
   }
   else if (l == leftLen – 1)
   {
    if (V[l][r])
    {
     D[l][r] = 1;
    }
    else
    {
     if (D[l][r + 1] > 0)
     {
      D[l][r] = D[l][r + 1] + 1;
     }
     else
     {
      D[l][r] = 0;
     }
    }
   }
   else if (r == rightLen – 1)
   {
    if (V[l][r])
    {
     D[l][r] = 1;
    }
    else
    {
     D[l][r] = D[l + 1][r];
    }
   }
   else
   {
    if (V[l][r])
    {
     D[l][r] = D[l + 1][r + 1] + 1;
    }
    else
    {
     if (N[l][r + 1] > N[l + 1][r])
     {
      D[l][r] = D[l][r + 1] + 1;
     }
     else
     {
      D[l][r] = D[l + 1][r];
     }
    }
   }

  }
 }
 for (int i = 0; i < pairList.GetCount(); i++)
 {
  IndexPair& pair = pairList.GetAt(i);
  if (D[pair.l][pair.r] < nMin || nMin < 0)
  {
   nMin = D[pair.l][pair.r];
   firstIndex = pair;
  }
 }
 pairList.RemoveAll();
 pairList.Add(firstIndex);
 while (true)
 {
  //寻找下一个合理的点
  IndexPair& lastIndex = pairList.GetAt(pairList.GetCount() – 1);
  if (lastIndex.l == leftLen – 1 || lastIndex.r == rightLen – 1)
  {
   //找到边缘了
   if (V[lastIndex.l][lastIndex.r])
   {
    IndexPair newPair;
    newPair.l = lastIndex.l;
    newPair.r = lastIndex.r;
    pairList.Add(newPair);
    break;
   }
   else
   {
    if (lastIndex.r != rightLen – 1)
    {
     for (r = lastIndex.r + 1; r <= rightLen – 1; r++)
     {
      if (V[lastIndex.l][r])
      {
       IndexPair newPair;
       newPair.l = lastIndex.l;
       newPair.r = r;
       pairList.Add(newPair);
       break;
      }
     }
    }
    else if (lastIndex.l != leftLen – 1)
    {
     for (l = lastIndex.l; l <= leftLen – 1; l++)
     {
      IndexPair newPair;
      newPair.l = l;
      newPair.r = lastIndex.r;
      pairList.Add(newPair);
      break;
     }
    }
    break;
   }

  }
  if (V[lastIndex.l][lastIndex.r])
  {
   IndexPair newPair;
   newPair.l = lastIndex.l + 1;
   newPair.r = lastIndex.r + 1;
   pairList.Add(newPair);
  }
  else
  {
   if (N[lastIndex.l][lastIndex.r + 1] > N[lastIndex.l + 1][lastIndex.r])
   {
    IndexPair newPair;
    newPair.l = lastIndex.l;
    newPair.r = lastIndex.r + 1;
    pairList.Add(newPair);
   }
   else
   {
    IndexPair newPair;
    newPair.l = lastIndex.l+1;
    newPair.r = lastIndex.r;
    pairList.Add(newPair);
   }
  }
 }
 for (int i = pairList.GetCount() – 1; i >= 0; i–)
 {
  IndexPair pair = pairList.GetAt(i);
  if (!V[pair.l][pair.r])
  {
   pairList.RemoveAt(i);
  }
 }
 for (int i = pairList.GetCount() – 2; i >= 0; i–)
 {
  IndexPair& pair1 = pairList.GetAt(i+1);
  IndexPair& pair2 = pairList.GetAt(i);
  for (int j = pair1.r – 1; j >= pair2.r + 1; j–)
  {
   if (right[j] == right[pair2.r])
   {
    pair2.r = j;
    pairList.SetAt(i,pair2);
    break;
   }
  }
 }
 int leftLast = 0;
 int rightLast = 0;
 IndexPair pair0 = pairList.GetAt(0);
 IndexPair pairTmp = pair0;
 //left的pair0.l和right的pair0.r匹配
 ChangeColor(0, pair0.l – 1, 0, pair0.r – 1, false);
 RichEditCtrlSelect(&richTextBox1,pair0.l, 1);
 RichEditCtrlChangeTextColor(&richTextBox1,ColorSame);
 RichEditCtrlSelect(&richTextBox2,pair0.r, 1);
 RichEditCtrlChangeTextColor(&richTextBox2,ColorSame);
 for (int i = 1; i < pairList.GetCount(); i++)
 {
  IndexPair pair1 = pairList.GetAt(i – 1);
  IndexPair pair2 = pairList.GetAt(i);
  if (pair2.l – pair1.l == 1 &&
   pair2.r – pair1.r == 1)
  {

  }
  else
  {
   ChangeColor(pair1.l + 1, pair2.l – 1, pair1.r + 1, pair2.r – 1, false);
  }
  RichEditCtrlSelect(&richTextBox1,pair2.l, 1);
  RichEditCtrlChangeTextColor(&richTextBox1,ColorSame);
  RichEditCtrlSelect(&richTextBox2,pair2.r, 1);
  RichEditCtrlChangeTextColor(&richTextBox2,ColorSame);

  if (i == pairList.GetCount() – 1)
  {
   ChangeColor(pair2.l + 1, leftLen – 1, pair2.r + 1, rightLen – 1, false);
  }
 }
 //释放二维数组V
 for(l=0;l<leftLen;l++)
 {
  delete[] V[l];
 }
 delete[] V;
 //释放二维数组N
 for(l=0;l<leftLen;l++)
 {
  delete[] N[l];
 }
 delete[] N;
 //释放二维数组D
 for(l=0;l<leftLen;l++)
 {
  delete[] D[l];
 }
 delete[] D;
 delete[] left;
  delete[] right;
}

发表在 C++ | 标签为 , , , | 留下评论