- 积分
- 66346
- 明经币
- 个
- 注册时间
- 2010-5-9
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|

楼主 |
发表于 2011-5-1 19:27:40
|
显示全部楼层
;;;这个能处理块,因功力不足,不能继续...
;;;局部放大===========================================
;;;全部变量JBHD-A(标记字母),JBHD-SC(放大倍数)
(DEFUN C:JBFD (/ CIR_R CLAY CP DATA DATA_A
DATA_B DATA_C DATA_D DATA_G DIMCE DIMT
HD IN_P JBHD-STRD JBHD-STRIN
LAST1 LASTP LASTT MODE OSMO PD
SCA_TT STRD STRD1 STRD2 X
)
(SETVAR "CMDECHO" 0)
(SETVAR "MENUECHO" 0)
(COMMAND "_.UNDO" "_GROUP")
(IF (NULL (TBLSEARCH "LAYER" "DIM"))
(COMMAND "LAYER" "M" "DIM" "C" "256" "" "" "" "" "")
)
(SETVAR "CLAYER" "DIM")
(INITGET 1)
(SETQ CP (GETPOINT "\n局部放大中心点: "))
(PROMPT "\n放大范围: ")
(COMMAND "_.CIRCLE" CP PAUSE)
(SETQ LAST1 (ENTLAST)) ;圆
(setq lastt (cons last1 (list (GETVAR "LASTPOINT")))) ;(圆.圆心)
(SETQ CIR_R (CDR (ASSOC 40 (ENTGET LAST1))))
(SETQ DATA_G (list 0.0 0.0872665 0.174533 0.261799
0.349066 0.436332 0.523599 0.610865
0.698132 0.785398 0.872665 0.959931
1.0472 1.13446 1.22173 1.309
1.39626 1.48353 1.5708 1.65806
1.74533 1.8326 1.91986 2.00713
2.0944 2.18166 2.26893 2.35619
2.44346 2.53073 2.61799 2.70526
2.79253 2.87979 2.96706 3.05433
3.14159 3.22886 3.31613 3.40339
3.49066 3.57792 3.66519 3.75246
3.83972 3.92699 4.01426 4.10152
4.18879 4.27606 4.36332 4.45059
4.53786 4.62512 4.71239 4.79966
4.88692 4.97419 5.06145 5.14872
5.23599 5.32325 5.41052 5.49779
5.58505 5.67232 5.75959
)
)
(SETQ DATA_A (MAPCAR '(LAMBDA (X) (POLAR CP X CIR_R)) DATA_G))
;;;DATA_A各点坐标
(SETQ DATA (SSGET "CP"
DATA_A
'((-4 . "<NOT")
(0 . "TEXT")
(-4 . "NOT>")
(-4 . "<NOT")
(0 . "MTEXT")
(-4 . "NOT>")
(-4 . "<NOT")
(0 . "DIMENSION")
(-4 . "NOT>")
(-4 . "<NOT")
(0 . "insert")
(-4 . "NOT>")
(-4 . "<NOT")
(0 . "HATCH")
(-4 . "NOT>")
)
)
)
(SETQ DATA (SSDEL LAST1 DATA)) ;去除圆
(command "_copy" DATA "" CP CP)
;;;DATABlocks为含块的选择集
(SETQ DATABlocks
(SSGET "CP"
DATA_A
'((-4 . "<and")
(0 . "insert")
(-4 . "and>")
)
)
)
(command "_copy" DATABlocks "" CP CP)
(setq DATABlocks (ListToSS DATABlocks))
;;;用原选择的块爆后各实体组成的选择集
(setq DATAjoin (SS_SSjoin DATA DATABlocks))
;;;合并两个选择集
(if (numberp JBHD-A)
(setq JBHD-A (1+ JBHD-A))
(setq JBHD-A 65)
)
(SETQ JBHD-STRD (chr JBHD-A))
(setq JBHD-strin (STRCAT "\n放大标记字母<" JBHD-STRD ">: "))
(SETQ STRD1 (GETSTRING JBHD-strin))
(if (= STRD1 "")
(SETQ STRD1 JBHD-STRD)
)
(SETQ STRD2 (STRCAT STRD1 " 放大"))
(SETQ HD (* 1.5 (GETVAR "DIMTXT") (GETVAR "DIMSCALE")));;;字体高度
(INITGET 6)
(SETQ JBHD-SC (GETREAL "\n放大倍率<2.5>: "))
(if (= JBHD-SC nil)
(setq JBHD-SC 2.5)
)
(command "_copy" LAST1 "" CP CP);;;产生一个新的圆
(setq entCircl2 (entlast))
(command "scale" entCircl2 "" cp JBHD-SC);;;放大圆
(PROMPT "\n放大图形放置中心点: ")
(command "move" entCircl2 "" CP PAUSE)
(SETQ LASTP (GETVAR "LASTPOINT"));;;放大图形的圆心
(command "_move" DATAjoin "" CP LASTP)
(command "scale" entCircl2 "" LASTP (/ 1 JBHD-SC));;;还原成原大小
;;;以下进行剪切
(SETQ CIR_R (/ CIR_R (COS (ANGTOF "2.5"))))
(SETQ DATA_B (MAPCAR
'(LAMBDA (X)
(POLAR LASTP X (1+ CIR_R))
)
DATA_G
)
)
(COMMAND "_.TRIM" entCircl2 "" "F")
(WHILE (CAR DATA_B)
(SETQ IN_P (CAR DATA_B))
(COMMAND IN_P)
(SETQ DATA_B (CDR DATA_B))
) ; WHILE
(COMMAND "" "")
;;;剪切完毕
;;;取得剪切后的实体
(SETQ DATA_B (MAPCAR
'(LAMBDA (X)
(POLAR LASTP X CIR_R)
)
DATA_G
)
)
(SETQ trimafter (SSGET "CP" DATA_B))
(command "_copy" trimafter "" LASTP LASTP)
;;;删除
(command "erase" DATAjoin "")
;|;;;放大图形
(SETQ DATA_B (MAPCAR
'(LAMBDA (X)
(POLAR LASTP X CIR_R)
)
DATA_G
)
)
(SETQ trimafter (SSGET "CP" DATA_B))
(command "scale" trimafter "" LASTP JBHD-SC)
(SETQ PD (GETPOINT CP "\n标记字母放置点: "))
(COMMAND "_.TEXT" "_J" "_M" PD HD 0 STRD)
(COMMAND "_.UNDO" "_E")
(gc)
;|;
)
;;;-----------------------------------------------------------------------------
;;;本函数将块选择集内各元素组成一个新的选择集,并滤去尺寸、文字、填充、块等
;;;ListToSS列表滤去尺寸、文字、填充、块等的选择集
(defun ListToSS (ss / BOOL EN ENLIST LIS N SS1)
(setq ss1 (ssadd))
(setq lis (SSBlocks_sslist ss))
(setq n 0)
(repeat (length lis)
(setq en (nth n lis))
(setq enlist (LI_item 0 (entget en)))
(setq bool (wcmatch enlist
"*TEXT,ATTDEF,DIMENSION,HATCH,insert,ATTRIB"
)
)
(if bool
(entdel en)
(setq ss1 (ssadd en ss1))
)
(setq n (1+ n))
)
ss1
)
;;;ListToSS列表滤去尺寸、文字、填充、块等的选择集
;;;SSBlocks_sslist将块选择集内各元素列成表
(defun SSBlocks_sslist (ss / CNT EL ELST SINGLEBLOCKSS SSL)
(setq
ssl (if ss
(sslength ss)
0
)
cnt 0
ELst '()
)
(repeat ssl
(setq EL (ssname ss cnt))
(command "_explode" EL "")
(setq singleblockss (ssget "_P"))
(setq ELst (append (SS_sslist singleblockss) ELst))
(setq cnt (1+ cnt))
)
(reverse ELst)
)
;;;SSBlocks_sslist将块选择集内各元素列成表
;;;SS_sslist将选择集各元素列成表
(defun SS_sslist (ss / ssl cnt ELst)
(setq
ssl (if ss
(sslength ss)
0
)
cnt 0
ELst '()
)
(repeat ssl
(setq
ELst (cons (ssname ss cnt) ELst)
cnt (1+ cnt)
)
)
(reverse ELst)
)
;;;SS_sslist将选择集各元素列成表
;;;-----------------------------------------------------------------------------
;;;选择集合并
(defun SS_SSjoin (ss1 ss2 / EN N)
(setq n 0)
(repeat (sslength ss2)
(setq en (ssname ss2 n))
(setq ss1 (ssadd en ss1))
(setq n (1+ n))
)
ss1
)
;;;选择集合并 |
|