LISP中的圆角多段线
我在LISP中创建了一条多段线,并希望添加到程序中,这样它将自动对该多段线进行圆角,而无需要求用户单击他们想要的多段线。我知道你可以使用ssget,让它获得最后一个物体或类似的东西。我知道只要单击多段线,圆角就会击中多段线上的每个角。不过我不知道怎么做。我看了看帮助,它并没有为我澄清。我在页面上有一些折线,所以全选不起作用。欢迎任何想法。 你好每个角的半径是恒定的吗?是否每个角落都需要圆角? 你真的应该发布你的代码,以消除所有的困惑。
那么,您想要绘制一条LWPolyline,并用指定的半径对每个顶点进行圆角,还是想要用其他对象对绘制的LWPolyline进行圆角? 我有一个很长的代码。然而,我所需要的是一种方法来圆角一个多段线,我已经创建了使用LISP。所有角将有一个0.03圆角。下面是代码以供查看。你必须创建两层“x-laser”板,否则什么都不会发生。它将一块切到右侧,这是一个壁挂式,只有外部的多段线和两个内部框将被圆角。箱板90.LSP 在这里,我把它作为一个例子,所以你们可以从中学习suite。
(defun c:PF (/ pt eLast ent)
;; Alan J. Thompson, 07.21.10
(setvar 'filletrad
(cond ((getdist (strcat "\nSpecify fillet radius <" (rtos (getvar 'filletrad)) ">: ")))
((getvar 'filletrad))
)
)
(if (setq pt (getpoint "\nSpecify start point: "))
(progn
(setq eLast (entlast))
(command "_.pline" "_non" pt)
(while (= 1 (logand (getvar 'cmdactive) 1))
(princ "\nSpecify next point: ")
(command PAUSE)
)
(or (equal eLast (setq ent (entlast)))
(command "_.fillet" "_P" ent)
)
)
)
(princ)
)
(setvar 'filletrad
(cond ((getdist (strcat "\nSpecify fillet radius <" (rtos (getvar 'filletrad)) ">: ")))
((getvar 'filletrad))
)
)
很好的编码! 既然一个图层不在图形中,我想你应该先创建一个图层,然后自动创建
设置为当前。
(setvar’clayer“x激光”)
(setvar‘clayer’板)
“.-层”
那么,要圆角的区域在哪里?
塔瓦特
很好的观点。此外,要知道,如果一个层被冻结,并且您尝试使用setvar'clayer或vla put activelayer将其设置为当前,它将崩溃。在将层设置为当前之前,请始终使用-layer并解冻该层,或在将层设置为当前之前,将冻结x:vlax false。
我也会查一下。
(if (tblsearch "LAYER" "BLAH")
thaw and set layer as current
create layer
)
谢谢Alanjt。
还有更多。
)
(BPReset)
)
(defun BPReset ()
(setvar 'plinewid plw)
(setvar 'osmode osm)
(setvar 'blipmode blipm)
(setvar 'clayer curlay)
(command "_.undo" "_end")
(setvar 'cmdecho cmde)
) ; end defun
(setq cmde (getvar 'cmdecho))
(setvar 'cmdecho 0)
(command "_.undo" "_begin")
(setq osm (getvar 'osmode))
(setvar 'osmode 0)
(setq blipm (getvar 'blipmode))
(setqcurlay (getvar 'clayer)
plw (getvar 'plinewid)
函数的defun必须在获得Sys Vars的值后调用,只是为了让defun获得每个SETVAR的值。
如果你想先关闭特定的Sys变量,那么你可以把它们从例程代码中去掉,只包含名称
在你最喜欢的地方。
当做
塔瓦特 你可能想解决这个问题。我也不认为把它变成一个子程序有什么意义。只需在之前保存变量,并在适当的时候重置它们。
页:
[1]
2