明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 87282374

[求助]关于lisp中command调用scale命令的问题!

  [复制链接]
 楼主| 发表于 2008-5-22 13:38:00 | 显示全部楼层
我把代码中的

(command "_scale" a1on "" p1 "" scal "")

改为:

(command "_scale" (ssget "x" '(2 a1on))  p1 "" scal “” )后

却需要在屏幕上点取基点。郁闷ing!
发表于 2008-5-22 14:49:00 | 显示全部楼层
本帖最后由 作者 于 2008-5-22 14:50:04 编辑

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

 楼主| 发表于 2008-5-22 21:59:00 | 显示全部楼层

感谢楼上的不懈帮助!

但可能您没有完全理解我程序要完成的任务!

他的任务就是:一个同名块的选择集,要把个集内的每个块的比例设成我所输入得值!而这个集内的块又有不一致插入比例!

发表于 2008-5-23 08:59:00 | 显示全部楼层
  1. (defun c:tykb (/ en sc dat ss 41d 42d 43d)
  2.    (if (and (setq en (entsel "请选择图块: "))
  3.             (setq sc (getreal "\n请输入要缩放块的比例: "))
  4.        )
  5.      (progn
  6.        (setq dat (entget (car en))
  7.              ss  (ssget "_x" (list '(0 . "insert") (assoc 2 dat)))
  8.              41d (cons 41 sc)
  9.              42d (cons 42 sc)
  10.              43d (cons 43 sc)
  11.        )
  12.        (repeat (setq n (sslength ss))
  13.          (setq en  (ssname ss (setq n (1- n)))
  14.                dat (entget en)
  15.                dat (subst 43d
  16.                           (assoc 43 dat)
  17.                           (subst 42d
  18.                                  (assoc 42 dat)
  19.                                  (subst 41d (assoc 41 dat) dat)
  20.                           )
  21.                    )
  22.          )
  23.          (entmod dat)
  24.        )
  25.      )
  26.    )
  27.    (princ)
  28. )
 楼主| 发表于 2008-5-23 11:16:00 | 显示全部楼层

再次感谢!

但以上程序对带有属性文字的块,有点小问题!

就是属性文字大小不能随着块的比例而改变!不是跟“Scale”命令一样缩放!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2008-5-23 12:50:00 | 显示全部楼层
  1. (defun c:tykb (/ en sc dat ss 41d 42d 43d n th)
  2.     (if (and (setq en (entsel "请选择图块: "))
  3.              (setq sc (getreal "\n请输入要缩放块的比例: "))
  4.         )
  5.       (progn
  6.         (setq en  (car en)
  7.               dat (entget en)
  8.               ss  (ssget "_x" (list '(0 . "insert") (assoc 2 dat)))
  9.         )
  10.         (repeat (setq n (sslength ss))
  11.           (setq en  (ssname ss (setq n (1- n)))
  12.                 dat (entget en)
  13.                 41d (assoc 41 dat)
  14.                 42d (assoc 42 dat)
  15.                 43d (assoc 43 dat)
  16.                 att (assoc 66 dat)
  17.                 dat (subst (cons 41 (* sc (cdr 41d)))
  18.                            41d
  19.                            (subst (cons 42 (* sc (cdr 41d)))
  20.                                   42d
  21.                                   (subst (cons 42 (* sc (cdr 41d)))
  22.                                          43d
  23.                                          dat
  24.                                   )
  25.                            )
  26.                     )
  27.           )
  28.           (entmod dat)
  29.           (if (equal att '(66 . 1))
  30.             (while
  31.               (equal (assoc 0 (setq dat (entget (setq en (entnext en)))))
  32.                      '(0 . "ATTRIB")
  33.               )
  34.               (setq th  (assoc 40 dat)
  35.                     dat (subst (cons 40 (* (cdr th) sc)) th dat)
  36.               )
  37.               (entmod dat)
  38.             )
  39.           )
  40.         )
  41.       )
  42.     )
  43.     (princ)
  44. )
发表于 2008-5-23 12:53:00 | 显示全部楼层
楼上的思路还是有问题,就是属性的缩放与块插入点有关系,现在忙,有空帮你调试!
发表于 2008-5-23 13:55:00 | 显示全部楼层
为什么不用vla方法?这样就不用管什么属性了,,,,,
 楼主| 发表于 2008-5-23 15:24:00 | 显示全部楼层
caoyin发表于2008-5-23 12:53:00楼上的思路还是有问题,就是属性的缩放与块插入点有关系,现在忙,有空帮你调试!

是我表达的有问题!

我是希望块的属性文字大小随着块的比例而同步改变!跟“Scale”命令一样缩放!

但按你14楼的程序运行后就出现上图的情形!

另:楼上的朋友能给出 用什么 vla函数实现吗?

发表于 2008-5-24 00:35:00 | 显示全部楼层

;;自己完善下吧

;;自己完善下吧
  1. (defun c:tt ()
  2.   (SETQ SC (GETREAL "\N 比例:"))
  3.   (while (setq ss (ssget ":s" '((0 . "INSERT"))))
  4.     (command ".scale"
  5.       ss "" "non"
  6.       (cdr (assoc 10 (entget (ssname ss 0))))
  7.       sc
  8.     )
  9.   )
  10. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-19 17:31 , Processed in 0.282050 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表