如何用lisp获得一个INSERT中子物体的图元名
1个回答
展开全部
;;;首先获得INSERT的2组码信息:
(setq @iName (cdr(assoc -2(entget(car(entsel"\n选取图面上的块:"))))))
;;;比如返回值为"myBlock"
之后查询block中组码相同的信息:
(setq @bEnt (tblobjname "block" @iName))
;;;由此获得insert对应的block图元名。
之后用entget获取@bEnt组码-2里包含的图元
(setq @child (cdr(assoc -2(entget @bEnt))))
;;;此时@child就是insert中第一个图元的图元名,继续entget可以获得详细信息:
(entget @child)
;;;如果要获取insert是由多个图形组成,要获取中第二个或者第三个图元或者更多:
;;;第二个图元图元名:(entnext @child)
;;;第三个图元图元名:(entnext (entnext @child))
;;;第四个图元图元名:(entnext(entnext (entnext @child)))
;;;……
;;;由此规律,可以写一个简单的函数来获取固定第几个图元的图元名
(defun GETOBJ(#num / @@gtEt)
(setq @@gtEt "@child");定义一个基础字符串
(if (>= #num 1)(fix #num)(exit));错误处理部分,如果#num<1或者不为数字,则退出
(repeat #num ;循环#num"整数部分"次
(setq @@gtEt (strcat "(entnext" @@gtEt ")"));将字符串@@gtEt前加"(entnext",后加")"
)
(eval (read @@gtEt));用read转换@@gtEt为表,并用eval执行该表
)
;;;由此,(GETOBJ 10)可以获得@child后第10个图元的图元名。如果要查看详细信息,则:
(entget(GETOBJ 10))
;;;====================================================================================
;;;汇总整段代码:
(defun GETOBJ(#num / @@gtEt)
(setq @@gtEt "@child")
(repeat #num
(setq @@gtEt (strcat "(entnext" @@gtEt ")"))
)
(eval (read @@gtEt))
)
(defun c:INSOBJ(/ @num @iName @bEnt )
(setq @iName (cdr(assoc -2(entget(car(entsel"\n选取图面上的块:"))))))
(setq @bEnt (tblobjname "block" @iName))
(setq @child (cdr(assoc -2(entget @bEnt))))
(setq @num (getint "\n输入获取的图元序号:"))
(if (< @num 0)
(progn
(princ "\n序号必须不小于0。")
(exit)
)
)
(if (= @num 0)(entget @child))
(if (> @num 0)(entget(GETOBJ @num)))
(princ)
)
;;;以上,调用后CAD输入INSOBJ就可以了。
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询