明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: mnmnvmm2

[基础] 本人萌新)请教一个lisp思路 选定的矩形里面怎样画它的对角线?

[复制链接]
发表于 2018-5-10 16:05 | 显示全部楼层
fangmin723 发表于 2018-5-10 12:32
(SETQ ENT_SET (SSGET (list '(0 . "LWPOLYLINE") '(90 . 4) '(70 . 1))))

我的代码可以实现自动过滤,主要是自己加循环以后有各种错误,由于第一次接触,代码也是拼接的,不知道到底错在哪,代码如下,麻烦大神指正,最好有可以运行的代码可以让我对比学习,感谢!
  (setq ent_set (ssget '((-4 . "<AND") (0 . "LWPOLYLINE") (90 . 4) (70 . 1) (-4 . "AND>"))))
  (repeat (setq i (sslength ent_set))
  (setq pn_ent (ssname ent_set (setq i (1- i)))
  (setq entdata (entget  pn_ent))
  (foreach x entdata
        (if (= (car x) 10) (setq ptlst (cons (cdr x) ptlst)))
      )
      (setq ptlst (reverse ptlst))
      (entmake (list '(0 . "LINE") (cons 10 (car ptlst)) (cons 11 (caddr ptlst))))
      (entmake (list '(0 . "LINE") (cons 10 (cadr ptlst)) (cons 11 (cadddr ptlst))))
  (command ".UNDO" "E")         ; 设置UNDO终点
  (setq *error* $orr)  
  (prin1)
)
发表于 2018-5-10 17:08 | 显示全部楼层
qwerqweraaa 发表于 2018-5-10 16:05
我的代码可以实现自动过滤,主要是自己加循环以后有各种错误,由于第一次接触,代码也是拼接的,不知道到 ...

怎么个循环法啊
发表于 2018-5-10 17:08 | 显示全部楼层
qwerqweraaa 发表于 2018-5-10 16:05
我的代码可以实现自动过滤,主要是自己加循环以后有各种错误,由于第一次接触,代码也是拼接的,不知道到 ...

还有,把你的代码贴全了
发表于 2018-5-10 22:04 | 显示全部楼层
fangmin723 发表于 2018-5-10 17:08
还有,把你的代码贴全了

目的就是框选所有矩形,批量加对角线,我不知道具体循环代码怎么写, 上面贴的代码是全的,是我从其他lisp里拼接的,所以看着有问题,不知道怎么改
发表于 2018-5-10 22:31 | 显示全部楼层
qwerqweraaa 发表于 2018-5-10 22:04
目的就是框选所有矩形,批量加对角线,我不知道具体循环代码怎么写, 上面贴的代码是全的,是我从其他lis ...

http://bbs.mjtd.com/thread-99400-1-1.html
回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-10 23:33 | 显示全部楼层
669423907 发表于 2018-5-10 22:31
http://bbs.mjtd.com/thread-99400-1-1.html

已成功实现目标功能,感谢两位!
顺便问一下,代码中reverse原因是什么?
发表于 2018-5-11 10:20 | 显示全部楼层
qwerqweraaa 发表于 2018-5-10 22:04
目的就是框选所有矩形,批量加对角线,我不知道具体循环代码怎么写, 上面贴的代码是全的,是我从其他lis ...

全,全个鬼啊,你贴的代码,defun都没有!

这个也是我发的

算了,给你把

  1. (defun c:tt1(/ ent ent_get entdata kye n ptlst)
  2.   (setq n 0 kye T)
  3.   (while key
  4.     (if (setq ent_get (ssget (list '(0 . "LWPOLYLINE") '(90 . 4) '(70 . 1))))
  5.       (repeat (sslength ent_get)
  6.         (setq ptlst nil entdata (entget (ssname ent_get n)))
  7.         (foreach x entdata
  8.           (if (= (car x) 10) (setq ptlst (cons (cdr x) ptlst)))
  9.         )
  10.         (setq ptlst (reverse ptlst))
  11.         (entmake (list '(0 . "LINE") (cons 10 (car ptlst)) (cons 11 (caddr ptlst))))
  12.         (entmake (list '(0 . "LINE") (cons 10 (cadr ptlst)) (cons 11 (cadddr ptlst))))
  13.         (setq n (+ n 1))
  14.       )
  15.       (progn
  16.         (setq kye nil)
  17.         (alert "选择错误,请选择封闭的四边形!")
  18.       )
  19.     )
  20.    
  21.   )
  22.   (prin1)
  23. )


本帖子中包含更多资源

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

x
发表于 2018-5-11 10:32 | 显示全部楼层
fangmin723 发表于 2018-5-11 10:20
全,全个鬼啊,你贴的代码,defun都没有!

这个也是我发的

感谢感谢,请教一下ptlst为什么要reverse?
发表于 2018-5-11 15:59 | 显示全部楼层
本帖最后由 fangmin723 于 2018-5-11 16:01 编辑
qwerqweraaa 发表于 2018-5-11 10:32
感谢感谢,请教一下ptlst为什么要reverse?

用不用都可以,自己多尝试,我有强迫症
发表于 2018-5-12 00:49 | 显示全部楼层
受教了,学习中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 17:31 , Processed in 2.583479 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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