明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 蒹葭_Keirll

一个实现梁交线自动断开的程序,非实用(源码)

  [复制链接]
 楼主| 发表于 2012-12-10 19:54 | 显示全部楼层
crazylsp 发表于 2012-12-9 13:35

感谢crazylsp兄,要是梁宽能记忆就更好了
 楼主| 发表于 2012-12-10 19:57 | 显示全部楼层
本帖最后由 蒹葭_Keirll 于 2012-12-10 20:05 编辑
bdboy 发表于 2012-12-10 19:34
代码应该反过来用,已有梁线实现自动断开还算有用处,虽然网上有几个但识别率不高
  1. (defun c:trimall(/ os ss ssline n index index1 l_p1 l_p2 l_int len ent p1 p2 p3 p4 pselect a b )
  2. (command "undo" "be")
  3.   (command "ucs" "w")
  4.   (setq os (getvar "osmode"))
  5.   (setvar "osmode" 0)
  6.   (setq ss (ssget))
  7.   (setq index 0
  8.         l_p1 '()
  9.         l_p2 '()
  10.         l_int '()
  11.         len (sslength ss)
  12.   );end set
  13.   
  14.   (repeat len ;把直线端点存入表中
  15.     (setq ent (entget (ssname ss index))
  16.           index (+ 1 index)
  17.           p1 (cdr (assoc 10 ent))
  18.           p2 (cdr (assoc 11 ent))
  19.           l_p1 (cons p1 l_p1)
  20.           l_p2 (cons p2 l_p2)
  21.     );end set
  22.   );end repeat
  23.   
  24.   (setq index 0
  25.         n (length l_p1)
  26.   );end set
  27.   (repeat n
  28.     (setq p1 (nth index l_p1)
  29.           p2 (nth index l_p2)
  30.           index1 0
  31.     );end set
  32.     (repeat n ;计算某线与其他所有线的交点
  33.       (if (/= index1 index)
  34.         (setq p3 (nth index1 l_p1)
  35.               p4 (nth index1 l_p2)
  36.               index1 (+ 1 index1)
  37.               pt (inters p1 p2 p3 p4)
  38.               l_int (if pt (cons pt l_int) l_int)
  39.         );end set
  40.         (setq index1 (+ 1 index1))
  41.       );end if
  42.     );end repeat
  43.     (if (= (car p1) (car p2)) ;排序
  44.       (setq l_int (vl-sort l_int (function (lambda (e1 e2)(< (cadr e1) (cadr e2)))) ))
  45.       (setq l_int (vl-sort l_int (function (lambda (e1 e2)(< (car e1) (car e2)))) ))
  46.     );end if
  47.     (setq
  48.           pselect p1
  49.           b pselect
  50.     );end set
  51.     (setq i 0
  52.           len (length l_int)
  53.     );end set
  54.     (while (< i len) ;打断
  55.       (setq
  56.             pselect b
  57.             a (nth i l_int);a<b
  58.             b (nth (+ i 1) l_int)
  59.             pselect (list (/ (+ (car pselect) (car a)) 2.0) (/ (+ (cadr pselect) (cadr a)) 2.0))
  60.       );end set
  61.       (setq ssline (nentselp pselect))
  62.       (command "break" ssline "f" a b);break之后已经不是ssline了
  63.       (setq i (+ i 2))
  64.     );end while
  65.     (setq l_int '()
  66.           index (+ 1 index)
  67.     );end set
  68.   );end repeat
  69. (setvar "osmode" os)
  70. (command "ucs" "p")
  71. (command "undo" "e")
  72. );end fun
其实这个代码是在 已有梁线自动断开的代码 基础上做出来的,程序前半段是画梁线并把画出来的梁线作为一个选择集,后半段是实现梁线的自动断开。 梁线自动断开的单独程序可以是这个样子的,识别率可能也不会太高,若有高手看到,请指正。

本帖子中包含更多资源

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

x
发表于 2012-12-10 20:18 | 显示全部楼层
谢谢楼上的,但实际测试了下,还是不行,有些整条线都被误删了
发表于 2012-12-10 20:23 | 显示全部楼层
本帖最后由 bdboy 于 2012-12-10 20:26 编辑

裁剪效果如下,单独对某个交点裁剪可以,但批量裁剪就会出下面的错误

本帖子中包含更多资源

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

x
发表于 2012-12-10 20:29 | 显示全部楼层
再就是十字交叉单独裁剪可以,T型交叉不行
发表于 2012-12-10 22:18 | 显示全部楼层
;; 对话框方式+动态捕捉

本帖子中包含更多资源

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

x
 楼主| 发表于 2012-12-10 22:47 | 显示全部楼层
xyp1964 发表于 2012-12-10 22:18
;; 对话框方式+动态捕捉

很厉害的程序。请问院长grread函数下的捕捉是如何实现的,除了用G版的函数还有其他方法吗?

点评

可能用的就是G版的函数……  发表于 2012-12-11 13:08
发表于 2012-12-11 12:15 | 显示全部楼层
哈哈经过一天研究出对应十字交叉的修剪了!

本帖子中包含更多资源

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

x
发表于 2013-4-9 08:40 | 显示全部楼层
血学习学习,!
发表于 2014-4-21 16:52 | 显示全部楼层
最后那个不错,很实用,就需要断开的命令
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 09:44 , Processed in 0.581681 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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