明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1549|回复: 11

[提问] 如何批量偏移的问题

[复制链接]
发表于 2023-11-21 15:52:35 | 显示全部楼层 |阅读模式
本帖最后由 taocatt 于 2023-11-22 09:16 编辑




如何用lisp代码实现框选左边的图型,批量偏移得到右侧的图型。

左边的图形是用LINE命令绘制,田字型的中间线条是也是用‘LINE’命令绘制,一般批量偏移的方法是先用BOUNDARY命令在每个小方格中点击创建边界,然后让程序识别多段线并对每个多段线进行偏移。



这是我原来的方式,需要点击每一个方格。

(defun c:vv()  
   (setq a (getpoint))
   (while (/= a nil)
      (command "boundary" a "")
      (setq rec (entlast))
      (command "offset" 100 rec a "")
      (command "erase" rec "")
      (setq a (getpoint))     
      )
    (princ)
  )

现在的需求是想省去点击每个小方格创建边界的这一步,直接框选所有图形让程序识别这样的方格后创建边界并进行偏移操作。



本帖子中包含更多资源

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

x
发表于 2023-11-21 16:18:27 | 显示全部楼层
  1. (DEFUN C:TT (/ SS I LEN E PLST)
  2.   (SETQ I 0)
  3.   (SETQ LEN 100);;;;;偏移距离设置
  4.   (SETQ SS (SSGET '((70 . 1))))
  5.   (IF SS
  6.     (PROGN
  7.      
  8.       (REPEAT (SSLENGTH SS)
  9.         (SETQ E           (SSNAME SS I)
  10.               PLST (LH:Massoc 10 (ENTGET E))
  11.               I           (1+ I)
  12.         )
  13.         (IF (LH:ListClockwise-p PLST)
  14.           (vl-catch-all-apply
  15.             'VLA-OFFSET
  16.             (LIST (vlax-ename->vla-object E) LEN)
  17.           )
  18.           (vl-catch-all-apply
  19.             'VLA-OFFSET
  20.             (LIST (vlax-ename->vla-object E) (* -1 LEN))
  21.           )
  22.         )
  23.       )
  24.     )
  25.   )
  26.   (PRINC)
  27. )


  28. ;; List Clockwise-p - Lee Mac
  29. ;; Returns T if the point list is clockwise oriented
  30. ;; 顺时针列出-p-Lee Mac
  31. ;; 如果点列表为顺时针方向,则返回T
  32. (defun LH:ListClockwise-p (lst)
  33.   (minusp
  34.     (apply '+
  35.            (mapcar
  36.              (function
  37.                (lambda (a b)
  38.                  (- (* (car b) (cadr a)) (* (car a) (cadr b)))
  39.                )
  40.              )
  41.              lst
  42.              (cons (last lst) lst)
  43.            )
  44.     )
  45.   )
  46. )
  47. ;;46.1 [功能] 多段线各顶点(见99.3)
  48. ;;示例 (MJ:Massoc 10 (entget (car (entsel))))
  49. ;; Notes:特别适合多段线各顶点
  50. (defun LH:Massoc (key alist)
  51.   (apply
  52.     'append
  53.     (mapcar '(lambda (x)
  54.                (if (eq (car x) key)
  55.                  (list (cdr x))
  56.                )
  57.              )
  58.             alist
  59.     )
  60.   )
  61. )




内偏移
 楼主| 发表于 2023-11-21 18:57:33 | 显示全部楼层

使用这段代码需要先将图形的每个小格创建边界,生成多段线后才能识别每个小方格进行向内偏移。有没有方法可以让程序自动识别每一个小方格并进行创建边界。
发表于 2023-11-21 16:05:35 | 显示全部楼层
1 选执行(APPLY 'bpoly (list p ss '(1 0)))产生封闭多段线。
2 向内偏移生成的封闭多段线,生成新的封闭多段线。
3 删除最先生成的封闭多段线
发表于 2023-11-21 19:28:11 | 显示全部楼层
可以通过框选得到每个图形的四个角点,然后通过距离定点的方法,用pline连点成线
发表于 2023-11-21 19:40:04 | 显示全部楼层
求交点,bpoly,offset


本帖子中包含更多资源

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

x
发表于 2023-11-21 20:34:01 | 显示全部楼层
mini工具有这个功能
 楼主| 发表于 2023-11-22 09:15:05 | 显示全部楼层
本帖最后由 taocatt 于 2023-11-22 09:22 编辑
xyp1964 发表于 2023-11-21 19:40
求交点,bpoly,offset

求指教,如何识别每个小方格。
发表于 2023-11-22 10:32:18 来自手机 | 显示全部楼层
请大神完善
发表于 2023-11-23 12:40:51 | 显示全部楼层
这个帖子沉下去了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-27 17:34 , Processed in 0.174453 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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