从DWG导入SKP后的封面问题

引自:http://www.sketchupbbs.com/forum.php?mod=viewthread&tid=31833


从DWG导入SKP后的封面问题

这一篇文章叙述的内容是承接前一篇『从DWG导入SKP的准备工作』的后续进度,前一篇文章是整个从DWG导入SKP的第一部份,其链接如下:
http://www.sketchupbbs.com/viewt ... &extra=page%3D1 

数码阿叔在前一篇文章里叙述了把DWG导入SKP建模之前在AutoCAD里对图形该做的准备和清理工作,本篇包含的是第二和第三部份。第二部份叙述的是导入过程中的注意事项,至于最重要的导入SKP以后的封面问题,数码阿叔会放在文章的第三部份里叙述。


第二部份 从DWG导入SKP进行中

在把DWG图形导入SKP的过程中有些得注意的事项:

[DWG图形版本问题]

导入时如果出现『这不是有效的图形文件…』这类的警示语致使导入失败,这可能是你的DWG图形版本问题。确认你的DWG图形是SketchUp当前版本可以接受的格式。AutoCAD本身版本更新的速度很快,SketchUp可能跟不上。新版本DWG图形格式经常会跟前个版本有差异,因此在导入前先把DWG图形保存为AutoCAD 2004格式(这个DWG格式是保证SU6, SU7都可以顺利导入的版本)。

[中文(双位元字符)问题]

导入时如果出现『找不到图形文件…』这类警示语致使导入失败,第一种可能性是你的DWG图形文件的命名或存放路径所引致的问题。检查你的DWG文件是不是用了中文命名,洋人为英语环境开发的软件是基于单位元ASCII编码写出来的,在SketchUp里导入DWG的"载入器" (Importer)程式可能无法辨认文件名称的双位元中文字符,所以无法开启DWG文件。因此遇上这个状况,把DWG改成英文字符或数字命名就行了。

第二种可能性是你把DWG放在了中文命名的目录下或者把DWG文件放在系统的桌面上。理由跟上述相同,SketchUp的Importer(载入器)程式无法辨认文件目录或文件夹名称的中文双位元字符(桌面也算是中文目录)。在这里要说一下,有些朋友喜欢把诸如DWG、SKP、ATL这些工作文件放在桌面上,认为空荡荡的系统桌面上放这些工作文件很方便,一目了然。但是这的确是个坏习惯,系统桌面通常是用来放置快速启动应用软件的快捷图标,最好保持它功能的专一性。拿来存放DWG或SKP工作文件,哪天清理桌面文件时一不留神删除了其他的快捷图标,又会惹出一堆意外的麻烦来。检查一下,如果你确有这种状况,那麽建立一个以英数字命名的文件夹存放DWG图形,从这个文件夹导入当可消除问题。

[汉化介面问题]

说到这里可能有的朋友会产生疑问,明明我安装的是汉化版的SketchUp,为什麽不能导入中文命名的DWG图形呢?这是一个必须说清楚的误区,开启SketchUp以后显示在屏幕上的各种菜单命令都是中文字,只表示你的SketchUp具有汉化的命令名称。汉化的来源有两种,其一是Google官方正式发行的简体中文版本,另一种是由一些热心使用者自行处理的汉化补丁。

官方正式发行的中文版会利用UTF8编码彻头彻尾的支持双位元中文字符,当然也就不存在上述Importer无法辨认中文的问题,可以顺利导入中文命名、中文路径的DWG文件。但是另一种利用汉化补丁进行汉化的就得注意了,所谓补丁就是说先得安装英文版主软件再执行汉化补丁进行汉化。如果汉化补丁的作者仅仅汉化了显示命令的介面文字,那麽软件本身骨子里就跟英文版无异,还是在单位元的ASCII编码模式下工作,Importer无法辨认中文也就不足为奇了。当然如果汉化补丁的作者真正是个编程高手,在汉化过程中考虑周详的把软件里所有可能会应用到中文的部份都处理得当,也就不会发生导入导出时无法辨认中文的问题,对于在中文环境下的使用者才能真正受益。

[导入时图形单位对应的问题]

解决了上述问题,导入DWG图形的时候,还得留意DWG与SKP两边单位对应的问题。数码阿叔讲的是"对应"并不是"对等",在SketchUp的下拉菜单点取"文件" (File) > "导入" (Import)以后,弹出一个让你选取文件的"打开" (Open)对话框,首先在下端文件类型栏里指定导入"ACAD files *.dwg/*.dxf"类型,从目录里选取了准备要导入的那个DWG文件,接下来看看对话框右侧有个"选项" (Options…)按钮,按下它就会开启另一个"Import AutoCAD DWG/DXF Options"对话框,看看Scale栏里的单位是否跟你那张DWG图形单位相同(例如Milimeters, mm),只要这里设置得相同,导入的DWG图形在大小比例上就不会出错。

至于你在SKP模型里要使用哪一种单位,m, cm或mm都行,因为那是另外一回事,跟这里无关。在SKP模型上使用的单位是在SketchUp的"模型信息" (Model Info)里的"单位" (Units)面板上设置的,每个人的习惯不同,只要你愿意,大可以把mm单位的DWG导入m单位的SKP里进行建模。因而数码阿叔说DWG与SKP两边图形单位是"对应"而不是"对等"。

[DWG导入后变成群组问题]

我们把DWG导入SKP以后,在SKP模型文件里会出现二种情况:
其一,如果这个SKP是个刚刚新开的模型文件(看看视窗顶端的名称应该是默认的Untitled.skp),里面空无一物,这时导入的DWG图形还是会维持为一堆"松散"的线条。

其二,如果这个SKP是个既有的模型文件,里面原先就有模型存在(即使只有一条线),导入的DWG会自动结合成一个群组。这是SketchUp的一个贴心的设计,为的是让你在导入以后能方便的在SKP里一次选取全部导入物件调整它们的位置或角度等等,不至于因为导入的一大堆线条混杂在既有模型里弄得不可收拾。因此如果你是把DWG导入一个既有模型里,那就得把它在模型上定位好之后再把群组炸开编辑建模。

曾经看到过有的教程里建议在把DWG导入SKP模型里之后,把它们单独放在一个图层上,制作成群组当成模型底图使用,然后在这个底图上描绘边线、封面和建立模型。数码阿叔则认为,描图是上个世纪的老观念了,电脑时代就得发挥电脑的效益。如果我们在导入前的准备工作做得充分彻底,直接应用导入的图形进行封面建模才是正确的做法。

[SketchUp版本问题]
Google SketchUp当前的版本是7.0版,从7系列的下个更新版开始将会取消SketchUp 7.X (免费版)对DWG/DXF的导入功能,不再内建这个部份的Importer。只有SketchUp 7.X Pro (专业版)继续支持导入DWG/DXF图形的能力。如果您现在还在使用免费版,同时也打算亦步亦趋的追随SketchUp的更新脚步,那麽就得换成SketchUp 7.X Pro专业版使用了。


第三部份 从DWG导入SKP后的封面问题

把DWG图形导入SKP模型文件里了,成为一堆平铺在红绿平面上的黑色线条。这些都是未来模型上的边线,但是此刻只有空洞洞的线条并没有面(Face)存在。接下来就是得进行封面(Making face)的工作,封好了底层的面,从这些面开始进行拉伸经常是比较有效率的建模方式,也是最多人采用的方式。

[传统的封面方法]

传统的封面方法是利用画线(Line)工具沿着边线描绘,每描绘一条线段,SketchUp感应到线段附近产生了可以由线段首尾端点相接的闭合区域,就会产生一个面(face)填充在这个闭合区域里。逐笔描线封面的工作既辛苦又费时,也是个考验操作者耐心和细心的差事,相对于后面建模阶段的快速度,一笔一笔描边封面的缓慢过程明显的成为了效率上的瓶颈。所以…

[有效率的封面方法]

眼巴巴的望着屏幕上一大堆边线,我想绝大多数的使用者心里都会这麽想:假如导入的时候SketchUp会自动产生所有的"面"那该多好(当然这是不可能的,SU没那麽聪明)。即或不能自动产生面,那麽假如有个封面命令或按钮什麽的,让我们按一下就能一下子封好面,也是非常美的事情。这次可别说不可能,虽然SketchUp本身没有自带这个功能,倒还真有个插件能帮我们办得到。这个Ruby插件是SMUSTARD公司发行的免费插件,名称是Makefaces.rb,具体的操作方法会在后面有所说明。这个Makefaces.rb它能把选取范围里所有检测到能闭合的区域都给它们封上面,一次性的完成全部封面工作。这麽说只要拥有了这个插件,就能完美解决封面的问题,从此王子和公主过着幸福快乐的日子。

只要提到封面工作,一定有些人会嗤之以鼻,不就是那个封面插件吗?谁都会用啊!不错,Makefaces.rb操作起来很容易,对于小打小闹的简单图形来说,一下子就封好了面,真是誰都会用。可是如果哪一天不巧弄了一个复杂的图形进来封面,发现Makefaces.rb封出来面稀稀落落的像个花猫,如果不了解封面失败的可能原因,那就只剩下抓耳挠腮干着急了。因此为了过上幸福快乐的日子,下面就告诉您封面失败的可能原因和解决方法。

[且慢封面!先得解决历史遗留问题]

即使封面插件很完美,但是我们导入的图形未必很完美,图形里有些线条间的衔接问题会直接影响到封面插件的运行。数码阿叔在前一篇『从DWG导入SKP的准备工作』里曾经叙述到线段衔接相关的问题,就是导致应用插件封面会出问题的主要原因(即使手工封面也是一样),我们来看看这些历史遗留问题归纳出的四种状况:

《状况一》:曲线圆弧线段化的后果
DWG里的园、弧、曲线导入SKP后会线段化,变成许多连结在一起的直线段(segment),致使原先连接在它们上面其他的线段发生端点脱离的现象,无法形成预期的闭合区域,不闭合自然就无从封面。

《状况二》:交叉而不相交
向量格式的DWG图元有个"交叉" (cross)时不"相交" (intersect)的特性,例如说二个线段交叉处只是二个线段覆叠(overlap)在一起,并不存在着交叉点。由于二个交叉的线段导入SKP以后还是维持着"交叉"而不"相交"的特性,也就无法在预期的位置进行封面。

《状况三》:线段的开放端(线头)
由于DWG容许长短不同的二条线重叠在一起互不相干,短的线段未必在其端点处衔接了其它的线端点(你也未必会发现长线段上还躺着一个短线段),这就形成了线的开放端。或者原先DWG图形里的某些线段并不是都连接在别的图元端点上,原本就存在着开放端(线头)。Makefaces.rb在执行封面中若遇到了某处存在着游离的线头,就无法认定那里是闭合区域因而跳过那些区域不执行封面。因此模型边线中存在的开放端会导致封面不完全。

《状况四》:杂乱的扫瞄线
其实我们在工作中最怕遇上那种从图纸经过扫瞄机转换出来的地形等高线图,看起来好像是一条线却是好几条长短不齐的线段重叠在一起,这种DWG图形不先处理好遽尔导入SKP将会给封面工作平添无限的麻烦。

[解决问题的方法]

对于上述《状况一》和《状况二》的情况,有二种解决方法

在SketchUp里就地解决:
在SketchUp里运用另一个插件Intersect_Overlaps.rb把交叉而不相交的边线打断建立端点,由于这个同是SMUSTARD公司发行的插件不是免费的,网路上也搜寻不到免费的资源,因此在这里不多做说明,不日我会把这个插件的操作方法放在个人空间里,哪位朋友买到了如果不会使用可以去看看。

在AutoCAD里预先解决:
另外我们还有一个比较有效率的处理方式,是在把DWG导入SKP之前先在AutoCAD里运用一个名叫breakall.lsp程式,一次性把图形中"大多数"交叉而不相交的图元都在其交叉位置打断,使得原先交叉(cross)的位置成为相交(intersect)的端点,消除以后在SketchUp里运用Makefaces.rb封面的障碍。

这里说"大多数"是因为这个breakall.lsp无法打断圆和椭圆,这个breakall.lsp程式里呼叫一个xyp_lib.VLX通用函数集里的xyp-break执行交叉点打断任务,在程式码中虽然设置了对圆和椭圆也进行打断,但是在把圆打断第一点的时候,圆就成了一个360度的弧,违反了AutoCAD对弧的定义,致使AutoLISP解译器发出无法建立360弧的警告信息而放弃打断圆(椭圆亦同)。对于其他图元诸如线(Line),自由曲线(SPLine), 多重线(Polyline), 弧(Arc)这些有交叉情况的图元则统统可以打断,整体来说还是瑕不掩瑜,是个好用的工具程式,至于圆和椭圆就只有找个不重要的位置先把它们剪开一小段先让它们变成弧再执行打断啦。
这个在AutoCAD里一次性打断全部交叉处的工作,其执行的时机是在前一篇『从DWG导入SKP的准备工作』里的[步骤九]里面,打断完成以后再导入SKP可以大量节省处理时间。

想要使用这个breakall.lsp程式的朋友可以在下面追风版主的帖子里下载:
http://www.sketchupbbs.com/viewt ... ght=%2B%D7%B7%B7%E7 
安装方法:下载后解压缩然后把breakall.lsp和xyp_lib.VLX复制到AutoCAD的安装目录下。
使用方法:在AutoCAD的命令提示号后面键入(load "breakall")按Enter键载入程式后,再次键入执行命令qingli就可以选取图元进行一次性打断交叉点的工作,注意滑鼠从左向右拉是框选,从右向左拉是全选。

由于原先这个breakall.lsp程式码好像是拼凑起来的,每执行一次就会自动把xyp_lib.VLX载入一次。重复载入不是什麽好事情,数码阿叔已经修正了这个程式,不日会把修正后的程式码放在数码阿叔个人空间里。


对于上述《状况三》的解决方法
在SketchUp里面就地解决,可以执行StrayLines.rb插件找出模型里具有开放端的线段,这个插件同样是SMUSTARD公司发行的免费插件。StrayLines.rb执行中有Label(标记), Select(选取), Delete(删除) or Show(显示)四个选项。

其中Label(标记)这个选项会在各个线段的开放端加上文字标签。会把它们标记成从"1 of n"到"n of n" ( n是所发现开放端的总数,例如1 of 4, 2 of 4,…等等)。整个操作可以用一次UNDO命令回复操作前的状态。在你执行了Label以后,并且你判断某些线端本来应该相接但是实际上却没接在一起,你可以执行另一个ExtendCloseLines.rb插件在两个没连在一起的线端点之间自动画一条线把它们真正连接起来。也可以运用另一个CloseOpens.rb插件自动封闭应该闭合的线段开口。把图形里的线段都弄"清爽",这样接下来你就可以放心的进行封面了。


对于上述《状况四》的解决方法

在SketchUp里面可以说无解,把那些长短不齐重叠在一起的线段一一理清楚,花费大量的时间实在不值得,所以建议放弃导入的SKP回到AutoCAD里重新处理。
在AutoCAD里面把这些扫瞄出来杂乱的等高线单独锁在一个图层上,然后在一个新图层上另行描绘出一份等高线图,然后删除原先的杂乱线条,留下一份清洁的等高线图。

如果等高线图是来自测绘单位的电子图形文档,则几乎每一圈等高线都不在Z=0的X-Y平面上。除非你为特定目的有意要把三维地形图导入SKP里运用别的插件产生三维地形,否则就利用Flatten.lsp程式把所有等高线Z值归零到X-Y平面上去。


第四部份  在SketchUp里使用的封面插件

解决了上述四种状况里陈述的问题以后,再开始利用插件执行封面工作,当然成功率会比闷着头一昧硬干要高得多。当然,吃烧饼没有不掉芝麻的,百密总有一疏,导入的DWG图形越复杂,发生问题的机率越高。有时导入了比较复杂图形,执行封面以后发现一些零星问题,这时生米煮成了熟饭,再回到AutoCAD里重新处理再重新导入恐怕是不合效率的做法。对于这种情况我们还是可以在SketchUp里利用插件就地解决。下面列出封面插件与跟封面插件配套的插件:(注:里面有三个重要的插件不是免费取得的,如果您的米多,倒是可以买回来用,用些许银子换取长期提升工作效率,还是值得的。)

Makefaces.rb 封面
ProgressBar.rb 进度条(必须跟Makefaces.rb同时安装)
StrayLines.rb 找出线的游离端(线头)
Intersect_Overlaps.rb 在线的交叉处产生交点(有点类似breakall.lsp的Ruby插件,$20.00)
CloseOpens.rb自动封闭应该闭合的线段开口,($20.00)
Flatten.rb 把模型构件的Z值归零(有点类似Flatten.lsp或FLT.lsp的Ruby插件)
ExtendCloseLines.rb 自动找出并连接应该衔接而未衔接的线段,($20.00) 

上述Ruby插件都是SMUSTARD公司发行的插件,没注明价格的就是免费的插件,需要的朋友可以到SMUSTARD官方网站下载。下载地址:
http://www.smutard.com/scripts/


[Makefaces.rb封面插件的操作]

Makefaces.rb (v.1.400版),作者为Todd Burch。这个Makefaces.rb插件执行时会来回遍访你的模型,在需要产生"面" (face)的位置产生面。

安装方法:把Makefaces.rb复制到您SketchUp安装目录下的Plugins文件夹里。Makefaces加载时会呼叫另一个插件progressbar.rb,这个插件必须跟Makefaces同时安装到Plugins文件夹里。

命令位置:在"工具" (Tool)下拉菜单里,命令名称为"MakeFaces"。

操作方法:
①首先,如果您安装的是v.1.400版,在执行之前,你可以不用先选取任何模型。或者你可以选取你模型的一部份,Makefaces将只针对那个选取部份执行。如果您安装的是v.1.300版,那麽您必须先选取整个模型或部份模型。
②从"工具" (Tool)下拉菜单上点击"MakeFaces",启动封面命令。
③启动命令后这个MakeFaces将执行封面工作。
④在执行封面过程中,在状态列上有个"进度条" (progress bar)会显示出进度。
⑤MakeFaces在执行完毕以后会报告封面的统计结果。

MakeFaces封面失败的可能原因:

如果在执行了MakeFaces之后,你对结果感觉不满意,觉得所有应该已经建立的面却没有产生。可能的原因如下:

①你的模型尺寸太小了,SketchUp不会建立小于1mm这种非常小的面。试试把模型"放大" (Scale)为10倍,然后再次执行封面插件。

②模型中可能存在着具有开放端的游离线段,因而中断了正常产生面的程序。可以执行StrayLines.rb插件找找看是否在图形里存在着这些型态的游离线段。

③有些线段可能并未围成闭合的环圈。同样去执行StrayLines插件找出未闭合的线头。如果你也安装了CloseOpens.rb插件,执行CloseOpens插件是最有可能自动封闭开口的做法。

④有些线段可能只是"交叉" (覆叠),但是不"相交" (intersect)。你可以藉由选取两条交叉线其中的一条来确定这两条线是否有交点,如果被选取线的高亮部份延伸跨越了另一条线,表示两条线交叉处没有端点。这几乎都发生在从CAD导入的图形里。要解决这个问题,可以执行IntersectOverlaps.rb插件,在所有线段交叉处都产生交点(端点),然后再次执行Makefaces。

⑤针对可能存在不共面(在同一个平面上)的情况,可以运用Tools > Utilities > Query Tool命令去检查面的座标。快速的测试方法是画一条对角线,如果画了对角线以后就能自动封面,这一圈的线段很有可能不共面。可以使用Flatten.rb插件把模型构件的Z值归零到X-Y平面上。


[StrayLines.rb寻找线段开放端插件的操作]

StrayLines.rb (v.1.000版),作者为Todd Burch。
这是个用于对导入的CAD图形评估有多少实施清理需求的一个杰出插件,对图形里所有"具有开放端的线段"进行Label(标记)、Select(选取)、Delete(删除)、Show Only(显示)操作。

安装方法:把StrayLines.rb复制到您SketchUp安装目录下的Plugins文件夹里。

命令位置:在"Plugins"下拉菜单里,命令名称为"StrayLines"。

操作方法:
这个插件对"具有开放端的线段" (open-ended line segments)进行搜寻或处理工作。如果一条线的端点并未接触到另一个实体(entity),接下来它就会被认定成一条"游离线" (stray line)。应用这个工具对游离线工作时有四个选项:
Label (标记),Select (选取),Delete (删除),Show Only (显示)

Label (标记)
这个选项会在各个线段的开放端加上文字标签,让你能在图形里清楚看到开放端的位置和数目。这个标记功能会把开放端标记成从"1 of n"到"n of n" ( n是所发现开放端的总数,例如1 of 4, 2 of 4,…等等)。整个操作可以用一次UNDO命令回复操作前的状态。在你执行了Label以后,并且你判断某些线端本来应该相接但是实际上却没接在一起,你可以执行另一个ExtendCloseLines.rb插件在两个没连在一起的线端点之间自动画一条线把它们真正连接起来。也可以运用另一个CloseOpens.rb插件自动封闭应该闭合的线段开口。

Select (选取)
这个选项仅扫描主动选取的范围(或者如果不选取则为模型的目前范围),如果以及当它发现具有开放端的线段时,会将其加进"当前选择集" (current selection)里。

Delete (删除)
在目前的活动范围内的所有具有开放端的线段将被删除。删除的全部合并在运用一次单一的UNDO操作里撤消。

Show Only (显示)
这个选项会发现所有的"具有开放端的线段" (open ended line segments,游离线)。接下来,如果发现了任何游离线,在当前的编辑范围里的所有其他实体(entity)是被隐藏的。所有的隐藏可在一次单一的UNDO命令操作下撤消。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值