Kenter 发表于 2022-7-5 22:13:45

LISP中的圆角多段线

我在LISP中创建了一条多段线,并希望添加到程序中,这样它将自动对该多段线进行圆角,而无需要求用户单击他们想要的多段线。我知道你可以使用ssget,让它获得最后一个物体或类似的东西。我知道只要单击多段线,圆角就会击中多段线上的每个角。不过我不知道怎么做。我看了看帮助,它并没有为我澄清。我在页面上有一些折线,所以全选不起作用。欢迎任何想法。

jammie 发表于 2022-7-5 22:21:03

你好
 
每个角的半径是恒定的吗?是否每个角落都需要圆角?

alanjt 发表于 2022-7-5 22:21:59

你真的应该发布你的代码,以消除所有的困惑。
 
那么,您想要绘制一条LWPolyline,并用指定的半径对每个顶点进行圆角,还是想要用其他对象对绘制的LWPolyline进行圆角?

Kenter 发表于 2022-7-5 22:25:35

我有一个很长的代码。然而,我所需要的是一种方法来圆角一个多段线,我已经创建了使用LISP。所有角将有一个0.03圆角。下面是代码以供查看。你必须创建两层“x-laser”板,否则什么都不会发生。它将一块切到右侧,这是一个壁挂式,只有外部的多段线和两个内部框将被圆角。箱板90.LSP

alanjt 发表于 2022-7-5 22:31:29

在这里,我把它作为一个例子,所以你们可以从中学习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)
)
 

jammie 发表于 2022-7-5 22:35:40

(setvar 'filletrad
         (cond ((getdist (strcat "\nSpecify fillet radius <" (rtos (getvar 'filletrad)) ">: ")))
               ((getvar 'filletrad))
         )
)
 
很好的编码!

Tharwat 发表于 2022-7-5 22:38:00

既然一个图层不在图形中,我想你应该先创建一个图层,然后自动创建
设置为当前。
(setvar’clayer“x激光”)
(setvar‘clayer’板)
“.-层”
 
那么,要圆角的区域在哪里?
 
塔瓦特

alanjt 发表于 2022-7-5 22:40:45

 
很好的观点。此外,要知道,如果一个层被冻结,并且您尝试使用setvar'clayer或vla put activelayer将其设置为当前,它将崩溃。在将层设置为当前之前,请始终使用-layer并解冻该层,或在将层设置为当前之前,将冻结x:vlax false。
 
我也会查一下。
(if (tblsearch "LAYER" "BLAH")
thaw and set layer as current
create layer
)

Tharwat 发表于 2022-7-5 22:47:26

 
谢谢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变量,那么你可以把它们从例程代码中去掉,只包含名称
在你最喜欢的地方。
 
当做
 
塔瓦特

alanjt 发表于 2022-7-5 22:47:50

你可能想解决这个问题。我也不认为把它变成一个子程序有什么意义。只需在之前保存变量,并在适当的时候重置它们。
页: [1] 2
查看完整版本: LISP中的圆角多段线