Mrqq18 发表于 2005-1-11 14:24:00

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 (&lt;= 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 "&gt;&gt;" zkname       ))<BR>                                                                       (princ)<BR>                                                                                                                               (setq n (+ n 1))<BR>                                                                                               )<BR>                                                               )<BR>                               );if<BR>)

meflying 发表于 2005-1-12 09:05:00

你再试试吧,我不是很清楚的过程,不过使用你注释掉的部分和原程序执行结果是一样的

行天下 发表于 2022-9-27 11:09:20

亡羊补牢,学而不晚,走走看看
页: [1]
查看完整版本: Lisp大夫请进...