明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: kucha007

【S】填充拉伸_v8.4——支持记忆拉伸

    [复制链接]
发表于 2024-6-19 22:17:48 | 显示全部楼层
kucha007 发表于 2024-2-24 14:01
20240316_v8.2
1-修复了多次选择,后选的对象不会拉伸而是变为移动的bug
2-改写了获取块在位编辑时,是否 ...

选择的图形不在窗口范围内拉伸有问题
发表于 2024-6-30 15:05:18 | 显示全部楼层
感谢作者的分享!
发表于 2024-8-27 21:18:10 | 显示全部楼层
精简填充拉伸_v8.2 (仅保留记忆拉伸)
楼主的代码功能强大,但在浩辰始终不太好用,所以有了精简的想法,只保留记忆拉伸。
但也还是有问题,当画图到一定步骤后,执行这段记忆拉伸功能时,会卡住
有懂的朋友帮看看,只保留记忆拉伸功能,这段代码还能精简哪些代码。

  1. ;;; 精简填充拉伸_v8.2 (仅保留记忆拉伸)
  2. ;;; 填充拉伸_v8.2——支持记忆拉伸原贴:http://bbs.mjtd.com/thread-189485-1-1.html

  3. (if (null vlax-dump-object) (vl-load-com))
  4. (defun C:SVV (/ CurDoc *Old_SysVar* SS e0 XX BoxLst1 BoxLst2 TmpSS SSRE K:SSRedo4Redit K:STRETCH4SS)
  5.   (setq CurDoc (vla-get-ActiveDOCument (vlax-get-acad-object)))
  6.   (defun *error* (msg)
  7.     (if *Old_SysVar* (foreach xx *Old_SysVar* (apply 'setvar xx))) ;参数恢复
  8.     (princ "\n拉伸退出!\n")
  9.     (vla-endundomark CurDoc) ;错误时结束编组
  10.   )
  11.   (progn  ;基础函数1
  12.     (defun K:SS->EntLst (SS / i EntLst)  ;选择集转图元表@LeeMac
  13.       (if SS
  14.         (repeat (setq i (sslength SS))
  15.           (setq EntLst (cons (ssname SS (setq i (1- i))) EntLst))
  16.         )
  17.       )
  18.     )

  19.     (defun K:Lst->STR (Lst Del / STR)  ;使用分隔符串联字符串@LeeMac
  20.       (setq STR (car Lst))
  21.       (foreach itm (cdr Lst) (setq STR (strcat STR Del itm)))
  22.       STR
  23.     )
  24.   )

  25.   (progn  ;基础函数2
  26.     (defun K:SSRedo4Redit (SS / AcProNam XX)  ;重新获取选择集,避免外部参照出错
  27.       (if
  28.         (and
  29.           (not (null (getvar "RefEditName"))) ;在位编辑ing
  30.         )
  31.         (progn
  32.           (ssget "P") ;重新获取选择集
  33.         )
  34.         SS
  35.       )
  36.       SS
  37.     )

  38.     (defun K:STRETCH4SS (SS / NoZero FstPT NxtPT a b XX)  ;拉伸程序改写,支持空格默认@Kucha
  39.       (if (not Global:STRMvTyp) (setq Global:STRMvTyp 1)) ;1基点-1位移
  40.       (if (not Global:STRBsePT) (setq Global:STRBsePT (list 0.0 0.0 0.0))) ;默认位移量为0
  41.       (setq NoZero (not (vl-every '(lambda (a b) (equal a b 0.001)) Global:STRBsePT (list 0.0 0.0 0.0)))) ;不为0.0
  42.       (if (not (null SS))  ;选择集不为空
  43.         (progn
  44.           (if NoZero
  45.             (princ
  46.               (strcat
  47.                 "\n空格为默认位移量(相对于UCS原点)"
  48.                 (K:Lst->STR (mapcar '(lambda (xx) (rtos xx 2 1)) Global:STRBsePT) ", ")
  49.                 ">"
  50.               )
  51.             )
  52.           )
  53.           (while  ;get*
  54.             (progn
  55.               (initget "F S") ;关键词
  56.               (setq FstPT (getpoint
  57.                             (if (eq 1 Global:STRMvTyp)  ;1基点-1位移
  58.                               (strcat "\n指定基点,反向(F)/切换(S)")
  59.                               (strcat "\n输入拉伸值,反向(F)/切换(S)")
  60.                             )
  61.                           )
  62.               )
  63.               (cond
  64.                 ((and (eq (type FstPT) 'STR) (eq (strcase FstPT) "F")) ;字母Ff
  65.                  (if NoZero
  66.                    (progn
  67.                      (setq Global:STRBsePT (mapcar '(lambda (XX) (* -1 XX)) Global:STRBsePT))
  68.                      (command "_.STRETCH" SS "" "non" (list 0.0 0.0 0.0) "non" Global:STRBsePT)
  69.                      (princ "\n拉伸值反向,拉伸完毕!\n")
  70.                      Nil ;退出循环
  71.                    )
  72.                    (progn
  73.                      (princ "\n拉伸值为零,无法反向拉伸\n")
  74.                      T ;继续循环
  75.                    )
  76.                  )
  77.                 )
  78.                 ((and (eq (type FstPT) 'STR) (eq (strcase FstPT) "S")) ;字母Ss
  79.                  (if (eq 1 (setq Global:STRMvTyp (* -1 Global:STRMvTyp)))
  80.                    (princ "\n拉伸模式为基点\n")
  81.                    (princ "\n拉伸模式为位移\n")
  82.                  )
  83.                  T ;继续循环
  84.                 )
  85.                 ((not FstPT) ;空格回车使用位移(如果有)
  86.                  (if NoZero
  87.                    (progn
  88.                      (command "_.STRETCH" SS "" "non" (list 0.0 0.0 0.0) "non" Global:STRBsePT)
  89.                      (princ "\n拉伸完成!\n")
  90.                      Nil ;退出循环
  91.                    )
  92.                    T ;继续循环
  93.                  )
  94.                 )
  95.                 ((and FstPT (eq (type FstPT) 'LIST)) ;指定了点
  96.                  (if (eq 1 Global:STRMvTyp)  ;1基点-1位移
  97.                    (progn
  98.                      (princ "\n注:此时不要空格") ;换行
  99.                      (command "_.STRETCH" SS "" "non" FstPT pause)
  100.                      (setq Global:STRBsePT (mapcar '- (getvar "lastpoint") FstPT)) ;更新位移量
  101.                      (princ "\n拉伸完成!\n")
  102.                    )
  103.                    (progn
  104.                      (setq Global:STRBsePT FstPT) ;更新位移量
  105.                      (command "_.STRETCH" SS "" "non" (list 0.0 0.0 0.0) "non" FstPT)
  106.                      (princ "\n拉伸完成!\n")
  107.                    )
  108.                  )
  109.                  Nil ;退出循环
  110.                 )
  111.                 (T
  112.                  (princ "\n拉伸退出!\n")
  113.                  Nil ;退出循环
  114.                 )
  115.               )
  116.             )
  117.           )
  118.         )
  119.       )
  120.       (princ)
  121.     )
  122.   )

  123.   (while (eq 8 (logand 8 (getvar 'undoctl)))
  124.     (vla-endundomark CurDoc)
  125.   ) ;关闭以前的编组
  126.   (vla-startundomark CurDoc)

  127.   (setq Old_SysVar '()) ;清空变量,避免出错
  128.   (setq Old_SysVar (mapcar
  129.                      '(lambda (a / b)
  130.                         (if (setq b (getvar (car a)))
  131.                           (progn
  132.                             (apply 'setvar a)
  133.                             (list (car a) b)
  134.                           )
  135.                         )
  136.                       )
  137.                      (list

  138.                        ;;(list "CECOLOR" "bylayer") ;颜色红色
  139.                        ;;(list "PICKSTYLE" 0) ;忽略编组选择
  140.                        (list "DIMZIN" 0) ;实数不消零
  141.                        (list "CMDECHO" 0) ;关闭回显
  142.                      )
  143.                    )
  144.   ) ;记录参数

  145.   (if (setq SS (K:SSRedo4Redit (ssget)))
  146.     (K:STRETCH4SS SS) ;带记忆拉伸
  147.   )

  148.   (command "redraw")
  149.   (if Old_SysVar (foreach xx Old_SysVar (apply 'setvar xx))) ;参数恢复
  150.   (vla-endundomark CurDoc)
  151.   (princ)
  152. )

  153. (princ)

发表于 2024-8-28 17:52:42 | 显示全部楼层
感谢大佬分享
发表于 2024-8-29 11:12:54 | 显示全部楼层
填充拉伸什么下载不了LSP格式的
发表于 2024-8-29 15:35:24 | 显示全部楼层
超级好用,特意过来感谢
发表于 2024-10-17 16:08:39 | 显示全部楼层
【S】填充拉伸_v8.2——支持记忆拉伸  LPS格式的能不能发我一份,我只下载了fas的,LPS显示我的权限不够下载不下来。跪求!!!邮箱23221287@qq.com
发表于 2024-10-18 21:49:27 | 显示全部楼层
居然要特定用户组,等级这么久了还没提升起来,哎。
发表于 2024-10-20 11:12:34 | 显示全部楼层
8.2测试如果拉伸过程按ESC取消后,会导致CAD出现问题,希望优化

本帖子中包含更多资源

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

x
发表于 2024-10-20 13:12:26 | 显示全部楼层
没权限啊,   改
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-28 03:04 , Processed in 0.171013 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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