wizman 发表于 2022-7-6 12:27:14

把这个添加到你的循环中怎么样
 
(cond ((= (vlax-get-property item 'ObjectName) "AcDbCircle").........)
         
         
   ((= (vlax-get-property item 'ObjectName) "AcDbPolyline")..........))

Lee Mac 发表于 2022-7-6 12:31:32

例子:
 
(定义c:C2P(/segs i ss ent rad cent theta 2pi lst);;李Mac~06.01.10(vl load com)(setq segs 100);;多段线中的线段数(if(setq i-1 ss(ssget“_:L”'((0。“圆”))))(while(setq ent(ssname ss(setq i(1+i))))(setq rad(cdr(assoc 40(entget ent)))θ0。cen(cdr(assoc 10(entget ent)))2pi(*2 pi))(entmake(append(list(cons 0“LWPOLYLINE”)(cons 100“AcDbEntity”)(cons 100“AcDbPolyline”)(cons 90 segs)(cons 70 1))(同时(

ectech 发表于 2022-7-6 12:32:13

 
谢谢李
因为我已经有一个函数来检查所有的lwpolyline区域,并在每个lwpolyline上做一个标记,但如果它是一个循环,它将无法检查它。所以我有一个想法,将所有的多段线和圆分组到选择集,然后函数可以在每个项目上做标记。

Lee Mac 发表于 2022-7-6 12:35:13

好的,我希望我的代码能帮助你更接近你的目标。

ectech 发表于 2022-7-6 12:38:32

 
谢谢你的代码。但我发现了一些问题。
当我使用lisp将圆转换为LW多段线时,可能是使用100段来构建这个圆。与新物体和旧圆相比,总面积有所不同。如果使用lisp检查所有圆并获取中心点,可以使用bpoly命令在其上绘制新的多段线吗?因为我使用bpoly命令在圆的顶部绘制lwpolyline,该区域与圆相同。
 
谢谢

ectech 发表于 2022-7-6 12:44:05

 
谢谢这是我的代码,但在我运行程序后得到了错误的参数类型:VLA-OBJECT error。有什么问题吗?
 
(setq myset(ssget“_X”(LIST)(0。“LWPOLYLINE,CIRCLE”)(cons 410(getvar“CTAB”)))))
(setq ctr 0)
(重复(sslength sset)
(setq项目(ssname sset ctr))
(setq项目(vlax ename->vla对象项目))
(cond((=(vlax get property item'ObjectName)“AcDbCircle”)(命令“-color”红色)
((=(vlax get property item'ObjectName)“AcDbPolyline”)
(if(=(vlax-property-available-p(vlax ename->vla object item)“Closed”T)T)
(程序。。。。。。

wizman 发表于 2022-7-6 12:46:55

B多边形方法是可能的,此外,您可以使用此原则将圆转换为多段线:
 
(setq rad(vla get radius(setq ron(vlax ename->vla object(car(entsel)ЮЮ)))))
(setq cen(vlax get ron’center))
(Setq pt1(极坐标系)
(setq pt2(极坐标中心0 rad))
(命令“pline”pt1 pt2“c”)
(vla setbulge(vlax ename->vla对象(entlast))0 1。)
(vla setbulge(vlax ename->vla对象(entlast))1
 
我得先去上班。。

Lee Mac 发表于 2022-7-6 12:48:41

 
啊,忘记了膨胀因素!很好的一个巫师

wizman 发表于 2022-7-6 12:52:55

谢谢李,我知道你忘了,因为我是从你那里学来的。

Lee Mac 发表于 2022-7-6 12:54:31

 
谢谢Wiz。。。我想你指的是这个
页: 1 [2]
查看完整版本: 使用“全部”创建选择集