明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 907|回复: 4

[提问] 矩形等分小程序,运行报错

[复制链接]
发表于 2020-12-8 16:58:04 | 显示全部楼层 |阅读模式
请问各位前辈,我最近写了一个小程序,想要将一个矩形等分为多个小矩形,中间留有一定间隙。运行程序后发现,有些矩形可以等分,有些矩形等分过程中电脑直接死机,请问各位前辈可以帮忙看一下吗?程序如下:
  1. (defun c:mm ()
  2.   (setvar "cmdecho" 0)
  3.   (setvar "blipmode" 0)
  4.   (setvar "osmode" 0)
  5.   (setq ent (entsel "选择对象:"))
  6.   (command "offset" 10 ent 1 "")
  7.   (setq ent1 (entlast))
  8.   (setq ent_data (entget ent1))
  9.   (setq name (cdr (assoc 0 ent_data)))
  10.   (setq jdgs (cdr (assoc 90 ent_data)))
  11.   (setq ort (getint "沿x/y向拆分[1/2]:"))
  12.   (setq nn (getint "拆分的块数:"))
  13.   (setq hj 300)

  14.   (if (and (= name "LWPOLYLINE") (= jdgs 4))
  15.     (progn
  16.       (setq pts (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) ent_data)))
  17.       (setq p1 (car pts)
  18.       p2 (cadr pts)
  19.             p3 (caddr pts)
  20.       p4 (cadddr pts)
  21.       )
  22.       (setq c1 (distance p1 p2))
  23.       (setq c2 (distance p1 p4))

  24.       (if (= ort 1)
  25.         (progn (princ "沿x方向拆分:")
  26.          (setq bb (- (/ (+ c2 hj) nn) hj))
  27.          (if (= (rem bb 10) 0)
  28.                  (progn (setq pp3 (list (+ (car p1) c1) (- (cadr p1) bb) 0))
  29.                   (command "rectang" p1 pp3)
  30.             (command "snapang" Pause)
  31.             (command "_array" (entlast) "" "R" nn 1 (- 0 (+ hj bb)) "")
  32.            )
  33.      (progn
  34.        (while (/= (rem bb 10) 0)
  35.          (setq hj (+ hj 5))
  36.          (setq bb (- (/ (+ c2 hj) nn) hj))
  37.        )
  38.                    (setq pp3 (list (+ (car p1) c1) (- (cadr p1) bb) 0))
  39.              (command "rectang" p1 pp3)
  40.        (command "snapang" Pause)
  41.        (command "_array" (entlast) "" "R" nn 1 (- 0 (+ hj bb)) "")
  42.      )
  43.          )
  44.   )
  45.       )

  46.       (if (= ort 2)
  47.         (progn (princ "沿y方向拆分:")
  48.          (setq aa (- (/ (+ c1 hj) nn) hj))
  49.          (if (= (rem aa 10) 0)
  50.                  (progn (setq pp3 (list (+ (car p1) aa) (- (cadr p1) c2) 0))
  51.                   (command "rectang" p1 pp3)
  52.             (command "snapang" Pause)
  53.             (command "array" (entlast) "" "r" 1 nn (+ hj aa) "")
  54.            )
  55.      (progn
  56.        (while (/= (rem aa 10) 0)
  57.          (setq hj (+ hj 5))
  58.          (setq aa (- (/ (+ c1 hj) nn) hj))
  59.        )
  60.                    (setq pp3 (list (+ (car p1) aa) (- (cadr p1) c2) 0))
  61.              (command "rectang" p1 pp3)
  62.        (command "snapang" Pause)
  63.        (command "array" (entlast) "" "r" 1 nn (+ hj aa) "")
  64.      )
  65.          )
  66.   )
  67.       )
  68.     )
  69.   )
  70.   (command "_.ERASE" ent "" )
  71.   (command "_.ERASE" ent1 "" )
  72.   (princ)
  73. )




发表于 2020-12-8 17:46:39 | 显示全部楼层
(command "offset" 10 ent 1 "")  这句不可靠,内外偏移都有可能
发表于 2020-12-8 19:50:43 | 显示全部楼层
start4444 发表于 2020-12-8 17:46
(command "offset" 10 ent 1 "")  这句不可靠,内外偏移都有可能

大侠分析好有效率,就看出问题来了。
发表于 2020-12-8 20:40:37 | 显示全部楼层
start4444 发表于 2020-12-8 17:46
(command "offset" 10 ent 1 "")  这句不可靠,内外偏移都有可能

怎么改进?
发表于 2020-12-8 21:07:48 | 显示全部楼层
本帖最后由 wzg356 于 2020-12-8 21:12 编辑

(vla-Offset (vlax-ename->vla-object ent) 10);前进方向右侧偏移10
(vla-Offset (vlax-ename->vla-object ent) -10);前进方向左侧偏移10
(command "rectang"。。。。) 的矩形,放大偏移10==》 (vla-Offset (vlax-ename->vla-object ent) -10)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-17 17:12 , Processed in 0.137098 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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