本帖最后由 chg 于 2011-12-23 12:58 编辑
以前在论坛上看到过一个自动替换字体的帖子,受益匪浅,但源程序有些BUG,经自己更改并实验了一段时间,觉得有所进步,现贴出源代码,大家共享,共同改进。函数功能:在打开图纸时,将未能找到的字体文件,用指定的字体文件替代,如果是大字体文件未找到,直接取消大字体,并用指定字体替代。如果大字体文件存在,而字体文件不存在,则用SIMPLEX.SHX作为默认字体替代。
代码如下:字符分割函数- (defun vl_brkstr (string pattern
- ctrl1 ctrl2
- / ps
- strl str1
- string str2
- brstring str2
- )
- ;ctrl1表示是否要将字符串变成大写,0大小写不变,1变成小写,2变成大写;ctrl2表示
- ;是否要去除分割符pattern,当为“Y”时保留,为其他字符时去除。
- (setq strl (strlen pattern)
- string (strcat string pattern)
- )
- (if (/= pattern "")
- (progn
- (while (setq ps (vl-string-search pattern string))
- (if (/= ps 0)
- (setq str1 (substr string 1 ps)
- str2 str1
- string (substr string (+ ps strl 1))
- )
- (if (= (strcase ctrl2) "Y")
- (progn
- (if (= ctrl1 2)
- (setq str1 (strcase pattern))
- (setq str1 pattern)
- )
- (setq str2 pattern
- string (substr string (+ ps strl 1))
- )
- )
- (setq str1 nil
- string (substr string (+ ps strl 1))
- )
- )
- )
- (if str1
- (progn
- (cond
- ((and (= ctrl1 1) (/= ps 0))
- (setq str1 (strcase str1 t))
- )
- ((and (= ctrl1 2) (/= ps 0)) (setq str1 (strcase str1)))
- ((= ctrl1 0) (setq str1 str1))
- )
- (if (distof str1)
- (if (= (rtos (distof str1) 2 24) (rtos (atoi str1) 2 24))
- (setq str1 (atof str1))
- )
- )
- (if (and (= (strcase ctrl2) "Y") (/= str2 pattern))
- (progn
- (if (= ctrl1 2)
- (Setq pattern1 (strcase pattern))
- (setq pattern1 pattern)
- )
- (setq brstring (append brstring (list str1))
- brstring (append brstring (list pattern1))
- )
- )
- (setq brstring (append brstring (list str1)))
- )
- )
- )
- )
- (if (and brstring (= (strcase ctrl2) "Y"))
- (setq brstring (reverse (cdr (reverse brstring))))
- )
- brstring
- )
- (progn (princ "Partition symbol is wrong.") (princ))
- )
- )
以上函数要用到dos_lib库,请自行安装。
|