K Baden 发表于 2022-7-5 16:51:21

这就是我想到的。我一直得到一个错误的输入错误列表加载时,我不知道为什么。我需要用“(progn)”围绕所有内容吗?我使用_:L选择,因为它允许我选择多个对象。我已经通读了这些选项,我很难判断这是否是最好的选择。
使用ActiveX(right?lol)深入到这里给出的第二个代码有点让我不知所措。
 
编辑:此外,最后一个选择是否会从多个选择中获取新的偏移线?假设我偏移了6条矩形多段线,我希望它抓住每一条新的偏移线并更改线型。对于这个应用程序,可能需要使用ActiveX代码。
 
实际上,im拍摄的目的是使用此命令所需的唯一用户干预将是选择对象。
 
(defun c:GPOFF (/ ss e)
(setq ss (ssget "_:L")
      (command "_.offset" "3'-0" ss "_non" "0,0" "")
       (setq e (entlast))
      (command "_.chprop" e "" "_LTYPE" "DASHDOT" "")
    (princ)
)

hanhphuc 发表于 2022-7-5 16:55:49

 
常见错误缺少括号“(”“)”
 
Tharwat搜索关键字“vla offset”的简单示例

K Baden 发表于 2022-7-5 16:58:51

非常感谢。这使命令得以运行,但不幸的是,它只偏移了最后选定的矩形。我假设这是因为我只使用命令标注。回到绘图板!
 
(defun c:GPOFF ( / ss e)
(setq ss (ssget "_:L"))
      (command "_.offset" "3'" ss "_non" "0,0" "")
       (setq e (entlast))
      (command "_.chprop" e "" "_LTYPE" "DASHDOT" "")
    (princ)
)

K Baden 发表于 2022-7-5 17:04:23

我取得了一些进步!我让它完全按照我想要的做,但它正在将原始选定的线更改为DASHDOT以及新创建的偏移线。看看这个,我很难理解什么,如果有的话,变量指的是已经创建的新行。有人有什么建议吗?
 
(defun c:test ( / ss->lst pairpts revpl dist ss )
(vl-load-com)

(defun ss->lst ( ss flag / id lst )
   (if (eq 'PICKSET (type ss))
   (repeat (setq id (sslength ss))
       (
         (lambda ( name )
         (setq lst
             (cons
               (if flag (vlax-ename->vla-object name)
               name
               )lst
             )
         )
         )(ssname ss (setq id (1- id)))
       )
   )
   )
)
(defun pairpts ( _list / l pt )
   (foreach x (reverse _list)
   (if pt
       (setq l (cons (cons x pt) l) pt nil)
       (setq pt (cons x pt))
   )
   ) l
)
(defun revpl ( vla-obj / catch openpl )
   (and (eq :vlax-false (setq openpl (vla-get-closed vla-obj)))
   (vla-put-closed vla-obj :vlax-true)
   )
   (setq catch
   (vl-catch-all-apply (function vlax-invoke)
       (list vla-obj
         'offset (vla-get-length vla-obj)
       )
   )
   )
   (and (eq :vlax-false openpl)
   (vla-put-closed vla-obj :vlax-false)
   )
   (if (vl-catch-all-error-p catch)
   (vlax-put vla-obj 'coordinates
       (apply (function append)
         (reverse
         (pairpts (vlax-get vla-obj 'coordinates))
         )
       )
   ) (and catch (vla-delete (car catch)))
   )
   vla-obj
)
(if (and (setq dist (distance '(0.0 0.0) '(36.0 0.0)))
   (setq ss (ss->lst (ssget '((0 . "lwpolyline"))) t)))
   (foreach x ss
   (vla-put-linetype x "DASHDOT")
       (car
         (vlax-invoke (revpl x)
         'offset dist
         )
       )
   )
) (princ)
)

ronjonp 发表于 2022-7-5 17:05:05

 
更改为:
(foreach x ss (vla-put-linetype (car (vlax-invoke (revpl x) 'offset dist)) "DASHDOT"))
 
顺便提一下您应该检查DASHDOT是否已加载,否则程序将失败。
页: 1 [2]
查看完整版本: 偏移命令w需要Lisp