重画多段线
(defun c:redrawpl ()(setq sset (ssget "x" '(0 . "lwpolyline") (cons 67 (logand (1+ (getvar "TILEMODE"))1)) ))
(setq ctr 0)
(repeat (sslength sset)
(setq item (ssname sset ctr))
(vl-cmdf "_isolateobjects" item "")
(setq ron (vlax-ename->vla-object item))
(setq olayer (vla-get-layer ron))
(command "-layer" "set" olayer "" )
(setq p1 (pline-centroid item))
(vl-cmdf "_.-boundary" "_A" "_O" "polyline" "_I" "_N" ""p1 "")
(vl-cmdf "_unisolateobjects" "")
(vla-delete ron)
(command "_change" (entlast) "" "p" "la" "layer1" "")
(setq ctr (1+ ctr))
)
)
我正试图用上述方法重新绘制所有多段线。为了避免创建错误的多段线,我使用isolateobjects的功能来关闭其他对象。然后,它将基于保留的多段线创建新的多段线。但我发现当我使用这种方法应用于绘图时,里面有很多物体,速度很慢。此外,某些多段线无法使用此方法创建。还有其他好的方法来创建多段线吗?
非常感谢。 请看一下ENTMAKE函数作为替代解决方案。
或者,可以尝试禁用OSMODE系统变量,而不是隔离实体-不要忘记稍后恢复它。
(setq PrevOsnapMode (getvar "OSMODE")) ;retain current state
(setvar "OSMODE" 0) ;disable auto OSNAP
; your procesing here
(setvar "OSMODE" PrevOsnapMode) ;restore previous state
Regrads,
米尔恰 谢谢你的快速回复!你能教我怎么写这个测试条件吗。
(defun c:creg ()
(setq a (car (entsel)))
(command "region" a "")
;if convert to region is failed then explode it and then rejoin by pedit
(while
(setq ent (vlax-ename->vla-object a))
(vla-explode ent)
(command "_.pedit" "_m"
(ssget "_p") "" "_y" "_j" 0.0 "")
)
)
将图形中最后一个可用图元(尝试创建区域之前)与发出区域命令后的最后一个图元进行比较如何?如果向区域的转换成功,这些应该是不同的。
(setq LastItem (entlast)) ;retain last item in drawing
(setq a (car (entsel)))
(command "_REGION" a "") ;attempt to create a region
(setq DrawItem (entlast)) ;list again last item in drawing
(if (not (equal LastItem DrawItem)) ;compare above entities
(prompt "\The region was created!")
(prompt "\The region wasn't created!")
)
当做
米尔恰 谢谢你Mircea,我正在尝试使用这种方法创建区域,但没有成功。
(defun c:creg ()
(setq a (car (entsel)))
(setq lastitem (entlast ))
(command "region" a "")
(setq drawitem (entlast))
(if (not (equal lastitem drawitem))
(prompt "The region was created")
(progn
(setq ent (vlax-ename->vla-object a))
(vla-explode ent)
(command "_.pedit" "_m"
(ssget "_p") "" "_y" "_j" 0.0 "")
)
(command "region" (entlast))
)
) 尝试通过ENTNEXT解析新创建的实体(来自爆炸命令),该实体从爆炸前绘制的最后一个实体开始;使用SSADD创建新的选择集。
当做
米尔恰 再次感谢!我会按照这个方向完成这个项目。
页:
[1]