Guest lesliemat 发表于 2022-7-6 10:48:11

使用li制作多段线框

我正在编写一个lisp,它将在我选择的坐标处开始一条多段线。然后它会自动向90度的方向移动,输入一个距离,它会自动移动到0度,然后再次输入一个距离,然后它会自动完成该框。
 
所以我非常想要一个程序,可以从用户指定的位置开始创建一个多段线框,我只需要输入长度和宽度,它就会生成。我需要它是一条多段线,而不是一个矩形,因为我需要指定一个全局宽度。如果有更简单的方法,请帮忙。英雄联盟
 
 
(定义C:plx()
 
(命令“layer”“s”“Plate”“))
(命令“pline”pause)
 
(普林斯)
 
 
M

Guest lesliemat 发表于 2022-7-6 10:53:46

实际上,我意识到我可以用一个矩形,然后用pedit把它改成多段线。

Guest lesliemat 发表于 2022-7-6 10:57:48

https://www.cadtutor.net/forum/C:%5CUsers%5Cmleslie%5CDesktop%5CProject%20Polyline%5Cblock.jpg
 
我需要弄清楚如何制作一条会产生角度的多边形线,用户需要做的就是把长度放进去,制作一个像这样的物体

Tharwat 发表于 2022-7-6 10:59:47

你可以用F8轻松做到这一点。。。。。。
 
当做

Guest lesliemat 发表于 2022-7-6 11:02:13


 
看起来像这样

Tharwat 发表于 2022-7-6 11:07:19

这并不难,你需要知道你的姿势的不同长度和“极轴”功能,你可以轻松地创建它。
 
当做
 
塔瓦特

Lee Mac 发表于 2022-7-6 11:09:54

有些乐趣
 

(defun c:rect ( / p1 p2 )
;; © Lee Mac 2010

(if (and (setq p1 (getpoint "\nSpecify Pick Corner: "))
          (setq p2 (getcorner "\nSpecift Opposite Corner: " p1)))

   (LM:Rectangle p1 p2 (trans '(0. 0. 1.) 1 0 t))
)
(princ)
)


(defun LM:Rectangle ( ll ur norm )
;; © Lee Mac 2010
(entmakex
   (append
   (list
       (cons 0 "LWPOLYLINE")
       (cons 100 "AcDbEntity")
       (cons 100 "AcDbPolyline")
       (cons 90 4)
       (cons 70 1)
       (cons 38 (caddr ll))
       (cons 210 norm)
   )
   (mapcar '(lambda ( p ) (cons 10 p))
       (
         (lambda ( data )
         (mapcar
             '(lambda ( funcs )
                (mapcar
                  '(lambda ( func )
                     ((eval func) data)
                   )
                  funcs
                )
            )
            '((caar   cadar) (caadrcadar)
            (caadr cadadr) (caarcadadr))
         )
         )
         (mapcar '(lambda ( p ) (trans p 1 norm))
         (list ll ur)
         )
       )
   )
   )
)
)

alanjt 发表于 2022-7-6 11:12:01

直接从我的工具箱里。。。
 
(defun c:SQ (/ foo p1 pt w h p2 ent)
;; Draw square polygon at specified height and width (with option to rotate)
;; Alan J. Thompson
(defun foo (p) (list 10 (car p) (cadr p)))

(if (and (setq p1 (getpoint "\nSpecify NorthWest corner of rectangle: "))
          (setq w (getdist "\nSpecify width: "))
          (setq h (cond ((getdist (strcat "\nSpecify height <" (rtos w) ">: ")))
                        (w)
                  )
          )
   )
   (progn
   (setq p2 (polar (setq pt (trans p1 1 0)) 0. w))
   (if (setq ent (entmakex
                     (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")
                                 '(90 . 4) '(70 . 1)
                                  )
                           (mapcar 'foo
                                     (list pt p2 (polar p2 (* 1.5 pi) h) (polar pt (* 1.5 pi) h))
                           )
                     )
                   )
         )
       (command "_.rotate" ent "" "_non" p1 "_r" "_non" p1 "_non" (trans p2 0 1))
   )
   )
)
(princ)
)

alanjt 发表于 2022-7-6 11:14:34

哎呀,李,我没注意到你发了什么帖子。顺便问一下,你的矩形和命令矩形有什么不同吗(除了它与当前UCS角度不匹配并且始终与视图平行之外)?

Lee Mac 发表于 2022-7-6 11:17:00

 
没有区别-只是实验。这就是getcorner的问题。。。
页: [1] 2
查看完整版本: 使用li制作多段线框