明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 681|回复: 7

[经验] 块的动比、角

[复制链接]
发表于 2024-9-7 20:07:52 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2024-9-7 23:11 编辑

从画图效率上来说,放大缩小似乎补充另一种XY同步状况,
图纸的块需要这种操作时候,并不多,逐渐接近于“拉边拉伸定位”,这一要求。


  1. ;;动态图块比例-----(一级)---------
  2. ;Modify by SLdesign V3.0 尘缘一生 QQ: 15290049
  3. (defun dyblk (blknam / plis dx0 dx dy0 dy bx by p1 p0 els0 els pt loop ang f3 f8 bb p00 k1 k2 k3 kk)
  4.   (command "_.undo" "be")
  5.   (setq p1 (dxf1 blknam 10) plis (ebox4 blknam) p0 (car plis) dx0 (distance p0 (cadr plis)) dy0 (distance p0 (cadddr plis)))
  6.   (sl-blockbaseedit blknam p0)
  7.   (setq els0 (entget blknam))
  8.   (princ (slmsg
  9.            "\n->[XY同时(TAB斜拉)/横向(X)/竖向(Y)/调角(A)/正交(F8)/扑捉(F3)](左右键...>退出)"
  10.            "\n->[XY(TAB弊┰)/绢(X)/捷(Y)/秸à(A)/タユ(F8)/汲(F3)](オ龄...>癶)"
  11.            "\n->[XY-Simultaneous(TAB)/Horizontal(X)/Vertical(Y)/Angle adjustment(A)/Orth(F8)/Osmode(F3)] (left and right keys...>exit)"
  12.          )
  13.   )
  14.   (setq loop t k1 t k2 t els els0 f8 (getvar "ORTHOMODE") f3 (getvar "OSMODE"))
  15.   (while loop
  16.     (setq bb (grread t 15 2) p00 (cadr bb))
  17.     (redraw)
  18.     (cond
  19.       ((equal bb '(2 6));F3切换捕捉开关
  20.         (cond
  21.           ((and (< f3 16384) (/= f3 0))
  22.             (setq f3 (+ f3 16384))
  23.             (prompt (slmsg "\n <对象捕捉 关>" "\n <癸禜 闽>" "\n <OSnap Off>"))
  24.           )
  25.           ((or (= f3 0) (>= f3 16384))
  26.             (setq f3 16383)
  27.             (prompt (slmsg "\n <对象捕捉 开>" "\n <癸禜 秨>" "\n <OSnap On>"))
  28.           )
  29.         )
  30.         (setvar "OSMODE" f3)
  31.       )   
  32.       ((equal bb '(2 15)) ;F8切换正交开关
  33.         (if (= f8 0)
  34.           (progn (setq f8 1) (prompt (slmsg "\n <正交 开>" "\n <タユ 秨>" "\n <Orth open>")))
  35.           (progn (setq f8 0) (prompt (slmsg "\n <正交 关>" "\n <タユ 闽>" "\n <Orth off>")))
  36.         )
  37.         (setvar "ORTHOMODE" f8)
  38.       )
  39.       ((= (car bb) 5)
  40.         (redraw)
  41.         (if (= f8 1)
  42.           (progn
  43.             (setq ang (angle p0 p00))
  44.             (cond
  45.               ((or (and (> ang pi4) (< ang 3pi4)) (and (> ang 5pi4) (< ang 7pi4)))
  46.                 (setq pt (list (car p0) (cadr p00)))
  47.               )
  48.               (t (setq pt (list (car p00) (cadr p0))))
  49.             )
  50.           )
  51.           (setq pt p00)
  52.         )
  53.         (if (and (<= f3 16384) (> f3 0) (/= f8 1))
  54.           (setq pt (slosnappt nil pt) kk t)
  55.         )
  56.         (grdraw p0 pt 1 3)
  57.         (cond
  58.           ((and k1 (not k2))
  59.             (setq bx (dxf1 els 41) dx (abs (- (car p0) (car pt))))
  60.             (grdraw-drawjx p0 (list (car pt) (cadr (caddr plis)) 0))
  61.             (entmod (emod els 41 (* bx (/ dx dx0))))
  62.           )
  63.           ((and k2 (not k1))
  64.             (setq by (dxf1 els 42) dy (abs (- (cadr p0) (cadr pt))))
  65.             (grdraw-drawjx p0 (list (car (cadr plis)) (cadr pt) 0))
  66.             (entmod (emod els 42 (* by (/ dy dy0))))
  67.           )
  68.           ((and k1 k2)
  69.             (setq bx (dxf1 els 41) by (dxf1 els 42) dx (abs (- (car p0) (car pt))) dy (abs (- (cadr p0) (cadr pt))))
  70.             (grdraw-drawjx p0 pt)
  71.             (entmod (emod (emod els 41 (* bx (/ dx dx0))) 42 (* by (/ dy dy0))))
  72.           )
  73.           (k3
  74.             (setq ang (angle p0 pt))
  75.             (entmod (emod els 50 ang))
  76.           )
  77.         )
  78.         (entupd blknam)
  79.       )
  80.       ((member bb '((2 9)))      ;;table XY同时
  81.         (setq k1 t k2 t k3 nil els els0)
  82.       )
  83.       ((member bb '((2 88) (2 120)))  ;;定X比
  84.         (setq k1 t k2 nil k3 nil els els0)
  85.       )
  86.       ((member bb '((2 89) (2 121)))  ;;定Y比
  87.         (setq k1 nil  k2 t k3 nil els els0)
  88.       )
  89.       ((member bb '((2 65) (2 97)))   ;;A定角
  90.         (setq k1 nil  k2 nil k3 t els els0)
  91.       )
  92.       ((or
  93.          (member (car bb) '(11 25)) ;;右键
  94.          (member bb '((2 13))) ;;左键
  95.          (= (car bb) 3) ;;回车
  96.        )
  97.         (setq loop nil)
  98.       )
  99.     )
  100.   )
  101.   (redraw)
  102.   (if (> (distance p0 p1) 0.001)
  103.     (sl-blockbaseedit blknam p1) ;基点恢复
  104.   )
  105.   (if kk (sl:erase (ssget "X" (list (cons 8 "f-i-n-d")))))
  106.   (command "_.undo" "e")
  107.   (princ)
  108. )
  109. ;;测试
  110. (defun c:tt ()
  111.   (setq blknam (car (entsel))) ;选块
  112.   (dyblk blknam)
  113. )

本帖子中包含更多资源

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

x

评分

参与人数 3明经币 +3 收起 理由
嘒彼小星 + 1 赞一个!
zhoupeng220 + 1 很给力!
tranque + 1

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-9-8 06:48:54 | 显示全部楼层
哈哈,增加了自定义函数:sl-blockbaseedit、grdraw-drawjx
回复 支持 1 反对 0

使用道具 举报

发表于 2024-9-7 20:57:20 | 显示全部楼层
看起来似乎是操作矢量图,我们机械行业绝对禁止这样,只允许按固定整数比例对待DWG,一就是一。否则,CAD,CAM,CAE,都没法玩了。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-9-7 21:27:51 | 显示全部楼层
本帖最后由 尘缘一生 于 2024-9-7 21:36 编辑
GEGEYANG88 发表于 2024-9-7 20:57
看起来似乎是操作矢量图,我们机械行业绝对禁止这样,只允许按固定整数比例对待DWG,一就是一。否则,CAD,C ...
嗯,这个就会把块的比例搞的随意性,是一个用户要求这个功能,我才试试,准确定位这一点,还是不行,包容盒与比例的换算等等,还是考虑不周。

对于模型空间用了大量的图块情况下,在图纸空间,块的比例就会乱起来,那么,会出现炸开,数字跑的很大,或很小,。
那么,这个拉大,再炸开,可以避免文字错乱。

对于室内设计的来说,可能需要这个功能,比如:门窗块什么的,拉到位目标边界,并不需要考虑这个块变换后,比例到底多少。
发表于 2024-9-9 09:20:12 | 显示全部楼层
我更多时候是在做固定造型不同尺寸时用来“偷懒”用的,比如固定的造型填充,xy方向不同比时。哈。。
发表于 2024-9-9 15:40:42 | 显示全部楼层
bai2000 发表于 2024-9-8 06:48
哈哈,增加了自定义函数:sl-blockbaseedit、grdraw-drawjx

陈董的专属自定义函数
(sl-blockbaseedit blknam p1) ;基点恢复
sl:erase
grdraw-drawjx
slosnappt
dxf1
ebox4
slmsg
 楼主| 发表于 2024-9-9 21:14:15 | 显示全部楼层
寒潮大冬瓜 发表于 2024-9-9 15:40
陈董的专属自定义函数
(sl-blockbaseedit blknam p1) ;基点恢复
sl:erase

我实在是没有功夫提取,应该做个了,不然,没法测试。
发表于 2024-9-13 19:18:07 | 显示全部楼层
请楼主不要在AutoLISP/Visual LISP 编程技术区乱发伪lisp源码!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 20:03 , Processed in 0.197785 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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