- UID
- 10065
- 积分
- 682
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-9-16
- 最后登录
- 1970-1-1
|
发表于 2004-3-31 22:41:13
|
显示全部楼层
[PHP]
;| 2003/3/19
Locking AutoCAD LINEs by converting LINES into spacebar content text with underline and TXT.SHX style.
Using the underline to simulate the native lines. Design Idea by Yota Masaru.
Each version of AutoCAD has the same and most common text style file "TXT.SHX", so the underline texts
can be displayed normally in most all AutoCAD platform. By doing so, the end point of lines can NOT be osnap
by any AutoCAD (assistant) commands or methods.
To convert back the underlines into common lines, we MUST run AutoCAD WMFOUT and WMFIN to make a back
converting operation. Even in this case, the proper location can NOT be revived 100%.
=======================================================================================================
转换直线为空格的下划线 版本0.1Alpha by KozMos Inc.
使用TXT.SHX字体的空格的下划线来代替文本,用户将无法捕捉到准确的直线端点,也无法进行普通方式的改动一
般情况下可以限制用户对图形的进一步修改。
为保持程序的简单化,本程序仅仅处理直线,至于哪些复杂实体需要转换成直线由用户手动解决,本程序不作处理。
本程序全部采用AutoLISP函数功能,适用于所有版本的AutoCAD。
注意:不要处理虚线。这样处理过的图形,无法精确地转换回来。只有使用模拟的方法将图形转换回来,方法图
形WMFOUT后再导入,不过这样处理后,图形的准确度会降低。|;
(Defun C:XLock (/ GatherBlock txt2line mkstyle mkblock cmdecho osmode sset dxf8 n)
(Defun txt2line (Obj / DXF10 DXF11 DXF8 DXF62 Scale Rtn)
(setq DXF8 (cdr (assoc 8 (entget Obj)))
DXF10 (cdr (assoc 10 (entget Obj)))
DXF11 (cdr (assoc 11 (entget Obj)))
DXF62 (cdr (assoc 62 (entget Obj)))
Scale (/ (distance DXF10 DXF11) 1.0)
)
(if (or (null DXF62) (= DXF62 0))
(setq DXF62 (cdr (assoc 62 (tblsearch "Layer" DXF8))))
)
(if (entmake (list (cons 0 "INSERT")
(cons 2 "TXT2LINE")
(cons 8 "0")
(cons 10
(polar DXF10
(angle DXF10 DXF11)
(* 0.5 (distance DXF10 DXF11))
)
)
(cons 41 Scale)
(cons 42 Scale)
(cons 42 Scale)
(cons 50 (angle DXF10 DXF11))
)
)
(progn
(entdel Obj)
(command "_.Explode" (entlast))
(command "_.Change" (ssget "p") "" "_P" "_C" DXF62 "")
)
)
)
(Defun mkstyle (/ Rtn)
(if (null (setq Rtn (tblsearch "Style" "XLOCK")))
(progn
(command "_.Style" "XLOCK" "TXT.SHX")
(while (/= (getvar "CmdNames") "") (command ""))
)
)
(setq Rtn (tblsearch "Style" "XLOCK"))
Rtn
)
(Defun mkblock (/ Rtn)
(if (null (setq Rtn (tblsearch "Block" "TXT2LINE")))
(progn
(entmake (list (cons 0 "BLOCK")
(cons 2 "TXT2LINE")
(list 10 0.0 0.0 0.0)
(cons 70 2)
)
)
(entmake (list (cons 0 "TEXT")
(cons 1 "%%U ")
(cons 7 "XLOCK")
(cons 8 "0")
(list 10 -0.35 0.2 0.0)
(cons 40 1.0)
(cons 41 1.0)
(cons 50 0.0)
(cons 71 0)
(cons 72 0)
(cons 73 0)
)
)
(entmake (list (cons 0 "ENDBLK")))
)
)
(setq Rtn (tblsearch "Block" "TXT2LINE"))
Rtn
)
(setq cmdecho (getvar "cmdecho")
osmode (getvar "osmode")
)
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(if (and (mkstyle)
(mkblock)
)
(progn
(princ
"\n 转换直线为空格的下划线 版本0.1Alpha by KozMos Inc.\n 版权所有(1994-2003) 保留所有权利\n\n 请选择转换的直线 <退出>:"
)
(if (setq sset (ssget (list (cons 0 "LINE"))))
(progn
(setq n -1)
(repeat (sslength sset)
(princ (strcat "\r 正在转换 "
(itoa (1+ (setq n (1+ n))))
"/"
(itoa (sslength sset))
"; 请稍候......"
)
)
(txt2line (ssname sset n))
)
)
)
(princ " 转换完成!")
;|(initget "Yes No")
(setq YN (getkword"\n Lock named block (This may take a while) [Yes/No] <Y>:"))
(if (or (null YN) (equal YN "Yes"))
(progn
(setq BlockX (tblnext "Block" t))
(while BlockX
(setq BlockX (tblnext "Block"))
)
))|;
)
)
(setvar "osmode" osmode)
(setvar "cmdecho" cmdecho)
(princ)
)
;;; Codes for transfer between "%%U " and " "
;;; XL0: "%%U " => " "
;;; XL1: " " => "%%U "
(Defun C:XL0 (/ sset n ent)
(if (setq sset
(ssget "x"
(list (cons 0 "TEXT") (cons 1 "%%U ") (cons 7 "XLOCK"))
)
)
(progn
(setq n -1)
(repeat (sslength sset)
(setq ent (entget (ssname sset (setq n (1+ n))))
ent (subst (cons 1 " ") (assoc 1 ent) ent)
)
(entmod ent)
)
)
)
(princ)
)
(Defun C:XL1 (/ sset n ent)
(if
(setq
sset (ssget "x"
(list (cons 0 "TEXT") (cons 1 " ") (cons 7 "XLOCK"))
)
)
(progn
(setq n -1)
(repeat (sslength sset)
(setq ent (entget (ssname sset (setq n (1+ n))))
ent (subst (cons 1 "%%U ") (assoc 1 ent) ent)
)
(entmod ent)
)
)
)
(princ)
)
[/php] |
|