跳至正文

AUTOCAD图形中的字体毛边问题

问题

你有没有过这样的疑惑,为什么在CAD图中一些图形,用如betterwmf的软件拷贝到WORD里面的时候,虽然拷贝到word打印出来是清晰的,但看起来总是有点模糊?这个时候,假如在CAD中看,其实字体的边缘也并不光滑,如何解决这个问题?

字体毛边的cad图
毛边的情况
非毛边的情况

为什么?

这个问题容易在这样的操作中,正常字体采用3do进行orbit旋转之后,再回到平面视图中,就会出现毛边了。经过搜索,此处有些相关解答 https://forums.autodesk.com/t5/autocad-forum/text-appearing-bold-and-blurry/td-p/3470506 

经过一定时间的研究,发现解决这个问题大概是可以这样的几个步骤。

width是否=1.0,倾斜角 obliquing=0.0,标高 是否=0;

这几个可以在特性里面修改,标高是Position Z=0.0

对于width,有时候有些奇怪,可以把原来的Width=1先改为Width为2,出到图中,发现均已变胖,再回去,把Width修改为1

一般而言,这几个数值取为正确数值后,问题基本解决,

假如不能解决,往下看。

这可能也是cad渲染的一个bug,可能是相机问题引起的,此时可以通过修改相机的目标点z坐标为0,来修正这个问题。

字体边缘粗糙

如图,可以发现在右下角处,相机目标点=200,此时字体均按(1)中设置,但毛边,因此,将这个数值改为0即可

你也可以通过dview回车回车(注意,高版本cad如2014只需要一次回车)po回车0,0,0回车0,0,1回车,再缩放全图这样子来解决

字体边缘光滑

2015.03.25,继续遇到这个问题,于是更新一下

近日修改文章,发现其中存在大量的字体毛边问题,用以上的方法,解决了70%,但是有一批dimension,怎么也不成功,于是继续钻研。

经过了好些研究,发现了最麻烦的就是Mtext和dimension,为了改变Mtext的毛边,必须先change E到0

而后,必须在dimension里面,去调整

从2到1才可以完成

那么,如何修改dimension的text的特性呢?继续研究

经过了仔细的对比,由于某些原因,这些dimension的内容比较奇怪

(setq diment (car (entsel)))                           ;选择标注图元

(setq elst(entget diment ‘(“ACAD”)))           ; 得到图元定义表

通过这个可以看到

选择对象: ((-1 . <图元名: -4f7670>) (0 . “DIMENSION”) (330 . <图元名: -169308>) (5 .

“54F9A”) (100 . “AcDbEntity”) (67 . 0)(410 . “Model”) (8 . “尺寸标注”)(100 .

“AcDbDimension”) (2 . “*D1810”) (10-16481.9 -36654.1 4.77236e-016) (11

-16652.9 -36631.6 4.77236e-016) (12 0.0 0.0 4.77236e-016)(70 . 32) (1 .

“2{\\fTimes New Roman|b0|i1|c0|p18;B}”) (71 . 5)(72 . 1) (41 . 1.0) (42 .

341.999) (73 . 0) (74 . 0) (75 . 0) (52 . 0.0) (53 . 0.0)(54 . 0.0) (51 . 0.0)

(210 0.0 0.0 1.0) (3 . “副本qiu”) (100 . “AcDbAlignedDimension”) (13 -16823.9

-36578.4 -4.77236e-016) (14 -16481.9 -36578.4 -4.77236e-016)(15 0.0 0.0 0.0)

(16 0.0 0.0 0.0) (40 . 0.0) (50 . 0.0) (100 .”AcDbRotatedDimension”) (-3

(“ACAD” (1000 . “DSTYLE”) (1002 .”{“) (1070 . 147) (1040 . 10.0) (1002 .

“}”))))

其内容中10到15这几个组码的内容,都是尾数为-016的一个很小的数

就是这个很小的数值,最终导致了毛边的出现。

到了这个时候,问题的解决就不是很难了,必须用Lisp来改组码。

其实也和之前的解决方法是一样的,就是这些标注的文字,出现了少量的标高问题,所以cad在解决这个字体的时候,就出现了毛边。

所以,编制了如下一个代码,可以解决这个问题

;;同时修改多个属性的一个子程序,numlst代表了各种组码,contenlst代表了需要修改的各项内容 (defun myentmod (ent numlst contentlst / i x) (setq i 0) (foreach x numlst (if (/= (assoc xent) nil) (setq ent (subst (cons x (nth i contentlst)) (assoc x ent) ent ) ) (setq ent(append ent (list (cons x (nth i contentlst))) ) ) ) (setq i (1+ i)) ) (entmod ent) ;(entupd ent) ) ; 选择集变列表 (defun std-sslist (ss / n lst) (if (eq ‘pickset(type ss)) (repeat (setq n(fix (sslength ss))) ; fixed (setq lst (cons(ssname ss (setq n (1- n))) lst)) ) ) ) ;;;用于解决dimension毛边的问题,单个 (defun c:bb( / diment elst newx10 newx11 newx12 newx13newx14 newx15 x10 x11 x12 x13 x14 x15) (setq diment (car(entsel))) ; 选择标注图元 (setq elst(entgetdiment ‘(“ACAD”))) ; 得到图元定义表 (setq x10 (cdr(assoc 10 elst)) x11 (cdr(assoc 11 elst)) x12 (cdr(assoc 12 elst)) x13 (cdr(assoc 13 elst)) x14 (cdr(assoc 14 elst)) x15 (cdr(assoc 15 elst)) ) (setq newx10 (list(car x10) (cadr x10) 0.0) newx11(list (car x11) (cadr x11) 0.0) newx12(list (car x12) (cadr x12) 0.0) newx13(list (car x13) (cadr x13) 0.0) newx14(list (car x14) (cadr x14) 0.0) newx15(list (car x15) (cadr x15) 0.0) ) (myentmod elst (list10 11 12 13 14 15) (list newx10 newx11 newx12 newx13 newx14 newx15)) ) ;;;用于解决dimension毛边的问题,多个 (defun c:ccc( / c diment elst newx10 newx11 newx12 newx13newx14 newx15 x10 x11 x12 x13 x14 x15) (setq c (ssget ‘((0. “DIMENSION”)))) (setq c (std-sslistc)) (foreach x c (setq elst (entgetx ‘(“ACAD”))) ; 得到图元定义表 (setq x10 (cdr(assoc 10 elst)) x11 (cdr (assoc 11 elst)) x12 (cdr (assoc 12 elst)) x13 (cdr (assoc 13 elst)) x14 (cdr (assoc 14 elst)) x15 (cdr (assoc 15 elst)) ) (setq newx10 (list(car x10) (cadr x10) 0.0) newx11 (list (car x11) (cadr x11) 0.0) newx12 (list (car x12) (cadr x12) 0.0) newx13 (list (car x13) (cadr x13) 0.0) newx14 (list (car x14) (cadr x14) 0.0) newx15 (list (car x15) (cadr x15) 0.0) ) (myentmod elst(list 10 11 12 13 14 15) (list newx10 newx11 newx12 newx13 newx14 newx15)) ) )

终于解决了。记录一下。 

标签:
© 2022 -个人版权所有 粤ICP备2022097210号-1

粤公网安备 44010602010819号