Lisp大夫请进...
以下程序想实现这样的动作:旋转坐标系,然后将所选的图块转回来使之看起来象没有变化一样(例如文字方向)。有两个问题:
1、在(RoB311)里的(entmod)不会工作,
2、若想多次执行后图块仍可方向保持正确,应如何修改呢?
多谢指点!
(defun C:RoViewPort(/ aunit c s)<BR> (if (setq a (getangle"\n第一点将在新视图左侧,第二点在右侧..."))<BR> (progn<BR> (setvar "cmdecho" 0)<BR> (setq aunit (getvar "AUNITS") )<BR> (setvar "AUNITS" 3)<BR> (setq c (getvar"VIEWCTR") s (getvar"VIEWSIZE") )
(if (wcmatch (findfile "acad.exe") "*R14*") <BR> (command "ucs" "z" a)<BR> (command "ucs" "n" "z" a)<BR> )<BR> (command "plan" "")<BR> (command "ucs" "")<BR> (command "zoom" "c" c s )<BR> (princ"\n选择图块...")<BR> (ROB311 a)<BR> (setvar "AUNITS" aunit)<BR> (setvar "cmdecho" 1)<BR> (princ)<BR> )<BR> )<BR>)
(defun ROB311(aa / ss n old_list entname zkname pt oldangle newangle )<BR> (if (setq ss (ssget '(0 . "insert")))<BR> (progn<BR> (setq n 0)<BR> (princ"\nThe Selections are...\n")<BR> (while (<= n (- (sslength ss) 1))<BR> (setq old_list (entget (ssname ss n))<BR> entname (cdr (assoc -1 old_list))<BR> pt (cdr (assoc 10 old_list))<BR> oldangle (cdr (assoc 50 old_list))<BR> newangle aa <BR> )<BR> (IF (ASSOC 66 old_list)<BR> (setq zkname (cdr (assoc 1 (entget (entnext entname)))) )<BR> (setq zkname "*" ) <BR> )<BR>
;这两句为什么不动作呢?
;(setq old_list (subst (cons 50 newangle) (assoc 50 old_list) old_list)) <BR> ;(entmod old_list)<BR> ;暂用此法<BR> (command "rotate" entname "" pt newangle )<BR> (princ(strcat ">>" zkname ))<BR> (princ)<BR> (setq n (+ n 1))<BR> )<BR> )<BR> );if<BR>) 你再试试吧,我不是很清楚的过程,不过使用你注释掉的部分和原程序执行结果是一样的 亡羊补牢,学而不晚,走走看看
页:
[1]