87282374 发表于 2008-5-22 13:38:00

我把代码中的<p><font color="#000000">(</font><a target="_black" href="../object/autolisp/command.htm"><font color="#000000">command</font></a><font color="#000000"> "_scale" a1on "" p1 "" scal "")</font></p><p><font color="#000000">改为:</font></p>(command "_scale" (ssget "x" '(2 a1on))  p1 "" scal “” )后<br/><br/>却需要在屏幕上点取基点。郁闷ing!

caoyin 发表于 2008-5-22 14:49:00

本帖最后由 作者 于 2008-5-22 14:50:04 编辑

;;求插入点不就可以了吗??(defun c:tykb (/ en sc ss ins)
(if (and (setq en (entsel "请选择图块: "))
         (setq sc (getreal "\n请输入要缩放块的比例: "))
      )
    (progn
      (setq ss (ssget "_x" (list '(0 . "insert") (assoc 2 (entget (car en))))))
      (repeat (setq n (sslength ss))
      (setq en(ssname ss (setq n (1- n)))
            ins (cdr (assoc 10 (entget en)))
      )
      (command "_.scale" en "" "_non" ins sc)
      )
    )
)
(princ)
)

87282374 发表于 2008-5-22 21:59:00

<p>感谢楼上的不懈帮助!</p><p>但可能您没有完全理解我程序要完成的任务!</p><p>他的任务就是:一个同名块的选择集,要把个集内的每个块的比例设成我所输入得值!而这个集内的块又有不一致插入比例!</p>

caoyin 发表于 2008-5-23 08:59:00

(defun c:tykb (/ en sc dat ss 41d 42d 43d)
   (if (and (setq en (entsel "请选择图块: "))
            (setq sc (getreal "\n请输入要缩放块的比例: "))
       )
   (progn
       (setq dat (entget (car en))
             ss(ssget "_x" (list '(0 . "insert") (assoc 2 dat)))
             41d (cons 41 sc)
             42d (cons 42 sc)
             43d (cons 43 sc)
       )
       (repeat (setq n (sslength ss))
         (setq en(ssname ss (setq n (1- n)))
               dat (entget en)
               dat (subst 43d
                        (assoc 43 dat)
                        (subst 42d
                                 (assoc 42 dat)
                                 (subst 41d (assoc 41 dat) dat)
                        )
                   )
         )
         (entmod dat)
       )
   )
   )
   (princ)
)

87282374 发表于 2008-5-23 11:16:00

<p>再次感谢!</p><p>但以上程序对带有属性文字的块,有点小问题!</p><p>就是属性文字大小不能随着块的比例而改变!不是跟“Scale”命令一样缩放!</p>

caoyin 发表于 2008-5-23 12:50:00

(defun c:tykb (/ en sc dat ss 41d 42d 43d n th)
    (if (and (setq en (entsel "请选择图块: "))
             (setq sc (getreal "\n请输入要缩放块的比例: "))
      )
      (progn
      (setq en(car en)
            dat (entget en)
            ss(ssget "_x" (list '(0 . "insert") (assoc 2 dat)))
      )
      (repeat (setq n (sslength ss))
          (setq en(ssname ss (setq n (1- n)))
                dat (entget en)
                41d (assoc 41 dat)
                42d (assoc 42 dat)
                43d (assoc 43 dat)
                att (assoc 66 dat)
                dat (subst (cons 41 (* sc (cdr 41d)))
                           41d
                           (subst (cons 42 (* sc (cdr 41d)))
                                  42d
                                  (subst (cons 42 (* sc (cdr 41d)))
                                       43d
                                       dat
                                  )
                           )
                  )
          )
          (entmod dat)
          (if (equal att '(66 . 1))
            (while
            (equal (assoc 0 (setq dat (entget (setq en (entnext en)))))
                     '(0 . "ATTRIB")
            )
            (setq th(assoc 40 dat)
                  dat (subst (cons 40 (* (cdr th) sc)) th dat)
            )
            (entmod dat)
            )
          )
      )
      )
    )
    (princ)
)

caoyin 发表于 2008-5-23 12:53:00

楼上的思路还是有问题,就是属性的缩放与块插入点有关系,现在忙,有空帮你调试!

danxingpen 发表于 2008-5-23 13:55:00

为什么不用vla方法?这样就不用管什么属性了,,,,,

87282374 发表于 2008-5-23 15:24:00

caoyin发表于2008-5-23 12:53:00static/image/common/back.gif楼上的思路还是有问题,就是属性的缩放与块插入点有关系,现在忙,有空帮你调试!

<p>是我表达的有问题!</p><p>我是希望块的属性文字大小随着块的比例而同步改变!跟“Scale”命令一样缩放!</p><p>但按你14楼的程序运行后就出现上图的情形!</p><p>另:楼上的朋友能给出 用什么 vla函数实现吗?</p>

狂刀无痕 发表于 2008-5-24 00:35:00

;;自己完善下吧

;;自己完善下吧
(defun c:tt ()
(SETQ SC (GETREAL "\N 比例:"))
(while (setq ss (ssget ":s" '((0 . "INSERT"))))
    (command ".scale"
      ss "" "non"
      (cdr (assoc 10 (entget (ssname ss 0))))
      sc
    )
)
)
页: 1 [2] 3
查看完整版本: [求助]关于lisp中command调用scale命令的问题!