明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1266|回复: 5

[求助]怎样构造这个实体选择集

[复制链接]
发表于 2008-5-12 23:56 | 显示全部楼层 |阅读模式

一个封闭图形,由若干直线、圆弧任意首尾相连组合而成。

由用户选择两个实体,则就确定了方向(顺、逆时针)

按这个方向排序,构造一个实体选择集SS包含全部实体

这个实体前两项就是用户先选择的那两个实体

请问各位高手这个AutoLISP程序怎么编呢?  鞠躬感谢!

 楼主| 发表于 2008-5-14 10:48 | 显示全部楼层

继续等待援助…………

 楼主| 发表于 2008-5-15 13:13 | 显示全部楼层
还在等待…………
发表于 2008-5-15 16:34 | 显示全部楼层
构造一个实体选择集SS包含全部实体???
不理解什么意思了?选择所有实体???
发表于 2008-5-15 19:16 | 显示全部楼层

编程思路:

1、选择两个实体后;
2、取得实体的两个端点;
3、比较实体的端点,用distance函数判断哪两个端点重合,从而知道哪个端点是开始点;
4、记录开始点;
5、在未点用(ssget "c" <未点> <未点>)得到选择集;
6、判断选择集个数是否等于2,如果不是,程序报错退出。如果选择集个数为1,选择搜索结束。
7、从选择集中去除前面最未的选择实体,并将剩下的实体加入前面实体选择集中;
8、用distance函数判断新选择集相联点,从而知道未点;
9、进而判断未点是否与记录点重合,如重合线条封闭,选择搜索结束。
10、重复第5步。

 楼主| 发表于 2008-5-15 22:26 | 显示全部楼层
本帖最后由 作者 于 2008-5-15 22:53:51 编辑

不是很懂ZZXXQQ的提示 自己编了一个  可以实现了 谢谢帮忙的各位
  1. (defun c:LC ()
  2.    (setq sa (ssget "x"))
  3.    (setq sx (ssget))
  4.    (setq l '(0 . "LINE"))
  5.    (setq ar '(0 . "ARC"))
  6.    (setq ena (ssname sx 0))
  7.    (setq ena_data (entget ena))
  8.    (setq tya (assoc 0 ena_data))
  9.   (if (or (equal tya l) (equal tya ar))
  10.    (progn
  11.    (setq ss (ssadd))
  12.    (setq enb (ssname sx 1))
  13.    (ssdel ena sa)
  14.    (ssdel enb sa)
  15.    (ssadd ena ss)
  16.    (ssadd enb ss)
  17.    (setq exa (VLAX-ENAME->VLA-OBJECT ena))
  18.    (setq spa (vlax-safearray->list(vlax-variant-value(VLA-GET-STARTPOINT exa))))
  19.    (setq epa (vlax-safearray->list(vlax-variant-value(VLA-GET-ENDPOINT exa))))
  20.    (setq enb_data (entget enb))
  21.    (setq exb (VLAX-ENAME->VLA-OBJECT enb))
  22.    (setq spb (vlax-safearray->list(vlax-variant-value(VLA-GET-STARTPOINT exb))))
  23.    (setq epb (vlax-safearray->list(vlax-variant-value(VLA-GET-ENDPOINT exb))))
  24.    (cond
  25.      ((equal spa spb 0.1) (setq fp epa) (setq cp epb))
  26.      ((equal spa epb 0.1) (setq fp epa) (setq cp spb))
  27.      ((equal epa spb 0.1) (setq fp spa) (setq cp epb))
  28.      ((equal epa epb 0.1) (setq fp spa) (setq cp spb))
  29.     )
  30.    (setq q 0)
  31.    (setq p (sslength sa))
  32.    (repeat (sslength sa)
  33.      (repeat p
  34.          (setq enq (ssname sa q))
  35.          (setq q (+ 1 q))
  36.          (setq enq_data (entget enq))
  37.          (setq exq (VLAX-ENAME->VLA-OBJECT enq))
  38.          (setq spq (vlax-safearray->list(vlax-variant-value(VLA-GET-STARTPOINT exq))))
  39.          (setq epq (vlax-safearray->list(vlax-variant-value(VLA-GET-ENDPOINT exq))))
  40.          (if (equal spq cp 0.1) (progn (setq cp_l epq) (ssadd enq ss) (setq td enq)))
  41.          (if (equal epq cp 0.1) (progn (setq cp_l spq) (ssadd enq ss) (setq td enq)))
  42.      )
  43.     (ssdel td sa)
  44.     (setq cp cp_l)
  45.     (setq q 0)
  46.     (setq p (- p 1))
  47.    )
  48.   )
  49.   (setq ss sx)
  50. )
  51. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-10 08:33 , Processed in 0.149697 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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