发布于:2007-08-11 09:27:11
来自:建筑设计/CAD下载及教程
[复制转发]
看看下面的程序到底有什么毛病,计算是正确的,就是运行的时候会发生错误
当文字的基准点位中间(只要不是左)就不能正常运行~
(DEFUN C:ttq ( / count ent gop next pt_base pt_new temp1 temp2 temp3 total yesno)
(setvar "OSMODE" 0)
(SETQ ENT (ENTSEL "\n 选择参照单行文本"))
(IF (= ENT NIL)
(PRINC "\n 没有选中物体")
(PROGN
(SETQ ENT (ENTGET (CAR ENT)))
(IF (/= (CDR (ASSOC 0 ENT)) "TEXT")
(PRINC "\n 选中的物体不是单行文本")
(PROGN
(INITGET 128 "X Y")
(SETQ YESNO (GETKWORD "\n 参照字的X轴(X) / 参照字的Y轴(Y):(X) "))
(IF (OR (= YESNO "X") (= YESNO NIL))
(SETQ PT_BASE (CADR (ASSOC 10 ENT)))
(SETQ PT_BASE (CAR (CDDR (ASSOC 10 ENT))))
)
(PRINC "\n 选择对齐的文本")
(SETQ GOP (ssget ":L")
COUNT 0
TOTAL 0
)
(REPEAT (SSLENGTH GOP)
(SETQ NEXT (ENTGET (SSNAME GOP COUNT)))
(IF (= (CDR (ASSOC 0 NEXT)) "TEXT")
(PROGN (SETQ TEMP1 (CAR (CDR (ASSOC 10 NEXT)))
TEMP2 (CADR (CDR (ASSOC 10 NEXT)))
TEMP3 (CAR (CDDR (CDR (ASSOC 10 NEXT))))
)
(IF (OR (= YESNO "X") (= YESNO NIL))
(SETQ PT_NEW (LIST PT_BASE TEMP2 TEMP3))
(SETQ PT_NEW (LIST TEMP1 PT_BASE TEMP3))
)
(SETQ
NEXT (SUBST (CONS 10 PT_NEW) (ASSOC 10 NEXT) NEXT)
)
(ENTMOD NEXT)
;(PRINC NEXT)
(SETQ TOTAL (1+ TOTAL))
)
)
(SETQ COUNT (1+ COUNT))
)
(PRINC "\n 共 ")
(PRINC TOTAL)
(PRINC "字体改变")
)
)
)
)
(PRINC)
)
全部回复(2 )
只看楼主 我来说两句抢地板(defun c:wq (/ DATA1 DATA2 DQ1 DQ2 ENT1 ENT2 HV I
P P1 P1X P1Y P2 P2X P2Y SS VAL0
)
(if (and
(setq ent1 (car (entsel "\n>>>对齐的目标文本<退出>:")))
(setq data1 (entget ent1)
val0 (cdr (assoc 0 data1))
p1 (cdr (assoc 10 data1))
p1x (car p1)
p1y (cadr p1)
)
(= val0 "TEXT")
)
(progn
(initget "h v")
(setq hv (getkword "\n>>>水平对齐[h]或竖向对齐[v]<默认竖向v>:"))
(if (= hv nil)
(setq hv "v")
)
(princ "\n>>>选择欲对齐的文本:")
(if (setq ss (ssget ’((0 . "TEXT")))
i 0
)
(progn
(repeat (sslength ss)
(setq ent2 (ssname ss i)
data2 (entget ent2)
p2 (cdr (assoc ’10 data2))
p2x (car p2)
p2y (cadr p2)
i (+ i 1)
)
(cond ((= hv "v") (setq p (list p1x p2y)))
((= hv "h") (setq p (list p2x p1y)))
)
(setq data2 (subst (cons 72 0) (assoc ’72 data2) data2)
data2 (subst (cons 73 0) (assoc ’73 data2) data2)
data2 (subst (cons 10 p) (assoc ’10 data2) data2)
)
(entmod data2)
)
)
)
)
)
(princ)
)
http://acad.net.cn/viewthread.php?tid=340&extra=page%3D1
来这里好看些,代码比较好看
回复 举报
TEMP2 (CADR (CDR (ASSOC 10 NEXT)))
TEMP3 (CAR (CDDR (CDR (ASSOC 10 NEXT))))
)
;;;这句可以改一下.用car cdr cadr cddr 太累人了.
(setq val10 (cdr (ASSOC 10 NEXT))
px (nth 0 val10)
py (nth 1 val10)
pz (nth 2 val10)
)
;;;这个我以前自己写过一个,扔了....
;;;建议:
;;;既然(只要不是左)就不能正常运行.
;;;那你就把全改左..可以研究一下TEXT的dxf组码
回复 举报