AutoCAD LISP 自动化折线图

AutoCAD LISP automatizing polyline drawings

我想问一个关于自动绘制多段线的问题。这里我有一个 FUNC,我想添加更具体的命令。我的意思是:我希望将多段线 自动分配给选定的层 并且我还想将 线型 设置为我的自定义线型.感谢您的回答。

Here is my code:

您可以使用entlast函数获取新创建的折线,并使用_chprop命令更改其属性。

(defun c:nyomvodal (/ pt lst)
  ;; create a new layer
  (command "_layer" "_new" "nyomvodal"  "_color" 3 "nyomvodal" "")

  ;; get points form user
  (while (setq pt (getpoint "\nPick point: "))
    (setq lst (cons pt lst))
  )

  (if (< 2 (length lst))
    (progn
      ;; create the polyline
      (command "_pline")
      (foreach p (reverse lst)
    (command "_non" p)
      )
      (command "")
      (command "_chprop" (entlast) "" "_layer" "nyomvodal" "_ltype" "axes" "")
    )
  )
  
  (princ)
)

但是,通常情况下,我们会保存 OSMODE、CLAYER 和 CELTYPE 系统变量的当前值、设置新值、绘制折线并恢复以前的值。

(defun c:nyomvodal (/ osmode clayer celtype)
  ;; save the current osmode, clayer and  celtype
  (setq osmode (getvar "osmode"))
  (setq clayer (getvar "clayer"))
  (setq celtype (getvar "celtype"))

  ;; create a new layer and make it current
  (command "_layer" "_make" "nyomvodal" "_color" 3 "nyomvodal" "")
  ;; set the current osmode and line type
  (setvar "osmode" 0)
  (setvar "celtype" "AXES")

  ;; use vla-catch-all-apply to avoid exiting code if user cancels
  (vl-catch-all-apply
    '(lambda (/ pt lst)
       ;; get points form user
       (while (setq pt (getpoint "\nPick point: "))
     (setq lst (cons pt lst))
       )
       (if (< 2 (length lst))
     (progn
       ;; create the polyline
       (command "_pline")
       (foreach p (reverse lst)
         (command p)
       )
       (command "")
     )
       )
     )
  )
  
  ;; restore the previous system variables values
  (setvar "osmode" osmode)
  (setvar "clayer" clayer)
  (setvar "celtype" celtype)
  (princ)
)