明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 446|回复: 3

[提问] 实体名创建成的选择集,如何遍历?

[复制链接]
发表于 2019-8-10 19:24 | 显示全部楼层 |阅读模式
如题:

如果我们用实体名来创建个选择集,如何一个个取出来处理?因为:ssname  这时候不能用。
 楼主| 发表于 2019-8-11 21:46 | 显示全部楼层
本帖最后由 尘缘一生 于 2019-8-11 22:01 编辑

       本来不该问的,就是懒得研究,程序写好了,不知道大家觉得怎么样,有人说你怎么要这个玩艺,对,我确实需要,批量画这些小点,下面程序是不能直接用的,因为有些全局变量没有给数据。
       拼凑程序来自本坛,不一一注明。




  • ;;-------标准尺寸界线--开始----------------------------
  • (defun c:ccjx-h(/ ss n p ang pts spname 1st )
  •   (setq spname (nth 0 (entsel "\n请选择尺寸线【定角度】:"))) ;;;;;;取得线性实体的实体名
  •   (setq ang (sl-entang spname))
  •   (setq ang (* 180.0 (/ ang pi)))  ;弧度转角度
  •   (setq 1st (list spname)) ;;;;;实体名构建表1st
  •   (setq ss (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
  •   (setq p (sslength ss))
  •   (setq n 0)
  •   (setq p (- p 1))
  •   (while (<= n p)
  •     (setq spname (ssname ss n))
  •     (setq 1st (cons spname 1st))  ;;;;;创建1st表,并把 spname 放在开头
  •     (setq n (+ n 1))
  •   )
  •   (setq 1st (gps->lst-delsame 1st)) ;;;删除表中重复图元
  •   (setq pts (sl-ssinters 1st))
  •   (foreach pt pts
  •     (command "-insert" "_archtick" pt SLBL SLBL ang)
  •   )
  • )
  • ;;;xshrimp的函数(一级函数)
  • ;;;删除表中重复图元.不支持表中表的重复图元.
  • ;;; (gps->lst-delsame '(1 2 1 2 (1 1) (1 2 1 2 1) 1 2 (1 1) (1 2)))
  • ;;;  -->(1 2 (1 1) (1 2 1 2 1) (1 2))
  • (defun gps->lst-delsame (lst / lstitem lstnew)
  •   (foreach lstitem lst
  •     (if (not (member lstitem lstnew))
  •       (setq lstnew (append lstnew (list lstitem)))
  •     )
  •   )
  •   lstnew
  • )
  • ;;--取线性实体角度 ang-输出为弧度-(一级函数)---------------------------------------------------
  • ;;--spname为线性实体的实体名-----------------------------------------------------
  • (defun sl-entang (spname / pt1 pt3 pt4  k1 k2 ang)
  •   (if (= "LINE" (cdr (assoc 0 (entget spname))))
  •     (progn
  •       (setq pt1 (entget spname))
  •       (setq pt3 (cdr (assoc 10 pt1)))
  •       (setq pt4 (cdr (assoc 11 pt1)))
  •     )
  •   )
  •   (if (= "LWPOLYLINE" (cdr (assoc 0 (entget spname))))
  •     (progn
  •       (setq pt3 (vlax-curve-getstartpoint spname)) ; 对象的起点
  •       (setq pt4 (vlax-curve-getendpoint spname)) ; 对象的终点
  •     )
  •   )
  •   (setq k1 (nth 0 pt3))  ;;;;;点的X坐标
  •   (setq k2 (nth 0 pt4))  ;;;;;点的X坐标
  •   (if (< k1 k2)
  •     (setq ang (angle pt3 pt4))
  •   )
  •   (if (< k2 k1)
  •     (setq ang (angle pt4 pt3))
  •   )
  •   (if (= k2 k1)
  •     (setq ang (/ pi 2))
  •   )
  •   ang   ;;;;弧度角度
  • )
  • ;;;曲线【实体名表】--求交点(一级函数)
  • (defun sl-ssinters (spname / pts en1 en2 spname1)
  •   (while (setq en1 (car spname))
  •     (setq spname (cdr spname));;;剩下的元素
  •     (setq spname1 spname)
  •     (while (setq en2 (car spname1));;;返回表中的第一个元素
  •       (setq pts (append pts (sl-Curveinters en1 en2)))
  •       (setq spname1 (cdr spname1));;;剩下的元素
  •     )
  •   )
  •   pts
  • )
  • ;;;曲线【选择集交点】-求交点(一级函数)(备用)
  • (defun ss-ssinters (ss / pts en1 en2)
  •   (while (> (sslength ss) 1)
  •     (setq en1 (ssname ss 0))
  •     (ssdel en1 ss)
  •     (setq n (sslength ss))
  •     (repeat n
  •       (setq en2 (ssname ss (setq n (1- n))))
  •       (setq pts (append pts (sl-Curveinters en1 en2)))
  •     )
  •   )
  •   pts
  • )
  • ;;说明:;;;两实体交点,en1 en2 为实体名 (一级函数)
  • (defun sl-Curveinters (en1 en2 / pl pts)
  •   (setq pl (vlax-invoke (vlax-ename->vla-object en2) 'IntersectWith (vlax-ename->vla-object en1) acExtendNone))
  •   (while pl
  •     (setq pts (append pts (list (list (car pl) (cadr pl) (caddr pl))))
  •       pl (cdr (cdr (cdr pl)))
  •     )
  •   )
  •   pts
  • )
  • ;;说明:;;---------尺寸界线----结束

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2019-8-11 18:00 | 显示全部楼层
不知道这个是不是你需要的?
(vlax-for symbol collection [expression1 [expression2 ...]])
功能
     遍历对象集,对每个表达式进行求值。
说明
1)参数 symbol 为符号,将其指定给集合中的每个 VLA 对象。
2)参数 collection 为VLA 对象,表示集合对象。
3)参数 expression1, expression2... 为要计算的表达式。
返回值:
集合中最后一个对象最后一次对表达式的求值结果。
举个栗子:
(setq name-lst '("1" "2" "3")  除了1 2 3层其它都锁上
(vlax-for x (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)))
                (if (member (vlax-get x 'name) name-lst)
                        (Vla-put-Lock x :vlax-false)
                        (Vla-put-Lock x :vlax-true)
                )
        )

回复 支持 1 反对 0

使用道具 举报

发表于 2019-8-11 19:39 | 显示全部楼层
转成表再处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2019-12-14 06:07 , Processed in 0.419066 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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