明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: zzl9105

多点打断问题,及想问下list的用法

  [复制链接]
发表于 2011-10-19 13:31:20 | 显示全部楼层
break 命令后必须使用(list(图元 拾取点))构建一个新表,因为命令本身要求使然。
这个跟其它不一样,还需要(car(entsel))什么的
 楼主| 发表于 2011-10-19 14:00:53 | 显示全部楼层
本帖最后由 zzl9105 于 2011-10-19 14:33 编辑

也有直线有多个交点的,它能打断其中的两个交点,有的,则只能打断唯一的一个交点,我想应该还是点表有特殊要求,要有对应关系,而不是一根线不能一次性的在多点处打断。
我知道有人提议说打断一个点,再增加一个en1,再判断点在哪个上面,再打断,再增加,我想这个方法,是基本的,能实现,但总感觉比较烦琐,愚钝之见,望不吝赐教,谢谢

点评

我没提议对增加的图元再进行判断打断。 其实交点的数量是不会变的, 对交点进行循环操作,打断通过每个交点的选择集中的图元不也是一种做法么,当然每次打断要把新产生的图元放到选择集里。  发表于 2011-10-19 16:31
发表于 2011-10-19 14:28:56 | 显示全部楼层
zzl9105 发表于 2011-10-19 14:00
也有直线有多个交点的,它能打断其中的两个交点,有的,则只能打断唯一的一个交点,我想应该还是点表有特殊 ...

好像没有必要这么复杂的?用别的方法可以实现的
 楼主| 发表于 2011-10-19 14:48:30 | 显示全部楼层
本帖最后由 zzl9105 于 2011-10-19 14:50 编辑

经过对点表稍加处理,能实现交点处打断,只是水平线,还是只能打断一个点,竖向线能全部打断,望高手指教。

  1. (vl-load-com)
  2. (defun c:bbb (/ SS OS PT_LST PT_LSTALL N EN OBJ  
  3.                   E1 E2 M EM PT1 PT2 PT3 PT4 PT)
  4.     (command "_.UNDO" "BEGIN")
  5.     (setq PT_LSTALL '() )
  6.     (setq OS (getvar "osmode"))
  7.     (setvar "osmode" 0)
  8.     (setq SS (ssget '((0 . "LINE"))))
  9.     (setq N 0)
  10.     (repeat (sslength SS)
  11.         (setq EN (ssname SS N))
  12.         (setq PT_LST '() )
  13.         (setq OBJ (vlax-ename->vla-object EN))
  14.   (setq PT1 (vlax-curve-getstartpoint EN))
  15.   (setq PT2 (vlax-curve-getendpoint EN))
  16.               (setq M 0)   
  17.               (repeat (sslength SS)            
  18.                   (if (/= M N)
  19.                      (progn
  20.                          (setq EM (ssname SS M))           
  21.                    (setq PT3 (vlax-curve-getstartpoint EM))
  22.                    (setq PT4 (vlax-curve-getendpoint EM))
  23.                          (if (setq PT (inters PT1 PT2 PT3 PT4))
  24.                              (setq PT_LST (cons PT PT_LST))
  25.                          )
  26.                      )
  27.                   )
  28.               (setq M (1+ M))
  29.               )
  30.       
  31.          (setq PT_LST
  32.          (vl-sort PT_LST
  33.          (function (lambda (E1 E2)
  34.          (< (car E1) (car E2))))))
  35.          (setq PT_LST
  36.          (vl-sort PT_LST
  37.          (function (lambda (E1 E2)
  38.          (< (cadr E1) (cadr E2))))))
  39.          (setq PT_LSTALL (cons PT_LST PT_LSTALL))
  40.     (setq N (1+ N))
  41.     )
  42.     (setq PT_LSTALL (reverse (cons PT_LST PT_LSTALL)))
  43.     (setq N 0)
  44.     (repeat (sslength SS)
  45.         (setq EN (ssname SS N))
  46.         (setq PT_LST (nth N PT_LSTALL))
  47.               (foreach PT PT_LST
  48.                  (command "_.break" (list EN PT) "f" "non" PT "non" PT)
  49.               )
  50.         (setq N (1+ N))
  51.     )
  52.     (setvar "osmode" OS)
  53.     (command "UNDO" "END")
  54.     (princ)
  55. )



本帖子中包含更多资源

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

x
发表于 2011-10-19 15:21:12 | 显示全部楼层

  1. (defun c:test (/ i j en iss)
  2.   (setq cmd (getvar 'cmdecho))
  3.   (setvar 'cmdecho 0)
  4.   (while (setq ss (ssget ":S"))
  5.     (setq pts nil)
  6.     (command "undo" "g")
  7.     (ss->lst ss)
  8.     (setq sslst1 (reverse (cdr (reverse sslst)))
  9.     sslst2 (cdr sslst)
  10.     )
  11.     (interss sslst1 sslst2)
  12.     (foreach n pts
  13.       (if
  14.   (setq iss (ssget "c"
  15.        (mapcar '+ n '(1e-13 1e-13 0))
  16.        (mapcar '- n '(1e-13 1e-13 0))
  17.       )
  18.   )
  19.    (progn
  20.      (setq j 0)
  21.      (repeat (sslength iss)
  22.        (setq en (ssname iss j))
  23.        (command "break" en n "@")
  24.         (setq j (1+ j))
  25.      )
  26.    )
  27.       )
  28.     )
  29.   )  
  30.   (setvar 'cmdecho cmd)(princ)
  31. )


  32. (defun ss->lst (ss / e i)
  33.   (setq  i 0 sslst '())
  34.   (while (setq e (ssname ss i))
  35.     (setq sslst (cons (vlax-ename->vla-object e) sslst))
  36.     (setq i (1+ i))
  37.   )
  38.   sslst
  39. )

  40. (defun interss (s1 s2 / newpts ipts)
  41.   (foreach x sslst1
  42.     (foreach y sslst2
  43.       (setq ipts (vla-intersectwith x y 0)
  44.       ipts (vlax-variant-value ipts)
  45.       )
  46.       (if (> (vlax-safearray-get-u-bound ipts 1) 0)
  47.   (progn
  48.     (setq ipts (vlax-safearray->list ipts))
  49.     (while (> (length ipts) 0)
  50.       (setq newpts (list (car ipts)
  51.              (cadr ipts)
  52.              (caddr ipts)
  53.        )
  54.       )
  55.       (if  (not (member newpts pts))
  56.         (setq pts (cons newpts pts))
  57.       )
  58.       (setq ipts (cdddr ipts))
  59.     )
  60.   )
  61.       )
  62.     )
  63.   )
  64.   pts
  65. )

  66. (defun ss->po (ss)
  67.   (setq plpr (last (ssnamex ss 0)))
  68.   (setq  p1 (last (cadr plpr))
  69.   p3 (last (cadddr plpr))
  70.   )
  71.   (setq  p1 (trans p1 0 1)
  72.   p3 (trans p3 0 1)
  73.   )
  74.   (ssget "w" p1 p3)
  75. )
看看这是您要的东西吗?
打断后的实体不应该再参与运算!

发表于 2011-10-19 15:31:51 | 显示全部楼层
zzl9105 发表于 2011-10-19 14:48
经过对点表稍加处理,能实现交点处打断,只是水平线,还是只能打断一个点,竖向线能全部打断,望高手指教。 ...

一个实验 ...
测测将 水平线 旋转 180 度 ....
自己分析呗
 楼主| 发表于 2011-10-19 15:34:43 | 显示全部楼层
本帖最后由 zzl9105 于 2011-10-19 15:44 编辑
Andyhon 发表于 2011-10-19 15:31
一个实验 ...
测测将 水平线 旋转 180 度 ....
自己分析呗


经分析,把测试的线,变成不是水平和竖直的,打断成功,原来排序不全面,没包含横竖正交的,适用斜向的线,不适应横竖正交的线,奇怪???
 楼主| 发表于 2011-10-19 15:51:05 | 显示全部楼层
xiaxiang 发表于 2011-10-19 15:21
看看这是您要的东西吗?
打断后的实体不应该再参与运算!

谢谢你,这个能实现,学习了
 楼主| 发表于 2011-10-19 17:07:11 | 显示全部楼层
本帖最后由 zzl9105 于 2011-10-19 17:22 编辑

回复vormittag 的点评
打断的思路有很多的,你说的这点,早有想到,呵呵,也很好操作,不存在排序问题,但求交点集时,得判断及处理点有没有重复的问题(不好意思,暂没想好怎么判断处理),而且,我还想增加一个功能,把打断的线,比如小于300长的,集中到一个集ss1中来,好作后期操作,该如何写。
其中vormittag 回避了:一线,多点一次打断的可实现性,转而换思路了,我想说,不一次性打断,势必要加图元,势必要判断点与新增加的图元的对应性,我认为还是要判断的。否则你要重新定ss,重求点集,重新求交点,多重循环,我想这个方法,思路及过程比较混乱,欢迎更多大虾给予指点,我在17的疑问,谢谢。
发表于 2011-10-19 17:57:36 | 显示全部楼层
重新生成直线的程序。

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-8 20:56 , Processed in 0.178970 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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