satishrajdev 发表于 2022-7-6 06:35:39

多个偏移

大家好,
如图所示,我有中心线和翼线,
现在我想要的是从中心线开始,画出不同距离的翼线
(即10m、25m、45m,可以是任何距离,表示不在适当的间隔上)
和尽头的走廊
有什么Lisp程序可以解决我的问题吗。
 
提前非常感谢
1111.dwg

MSasu 发表于 2022-7-6 06:41:41

另一种解决方案是在定义适当的样式后将其绘制为多行。

Tharwat 发表于 2022-7-6 06:44:16

试试这段代码。
 
(defun c:Test (/ *error* d e s k)
(vl-load-com)
;;; Tharwat 09. Oct. 2012 ;;;
(defun *error* (x)
   (princ "\n*Cancel*")
)
(if (and (not (tblsearch "LAYER" "SURVEY LIMIT"))
          (not (tblsearch "LAYER" "SURVEY LINES"))
   )
   (progn
   (alert " One or two layers are not found in the drawing")
   (exit)
   )
)
(if (and (setq s (ssget "_+.:S:L" '((0 . "LINE"))))
          (progn
            (initget "WINGLINES CORRIDOR")
            (setq k
                   (cond ((getkword
                            "\n Choose one <Winglines> :"
                        )
                         )
                         ("Winglines")
                   )
            )
          )
   )
   (while
   (setq d (getdist "\n Specify offset distance :"))
      (progn
      (foreach x (list d (- d))
          (vla-offset
            (vlax-ename->vla-object (ssname s 0))
            x
          )
          (vla-put-layer
            (vlax-ename->vla-object (entlast))
            (if (eq k "Winglines")
            "SURVEY LIMIT"
            "SURVEY LINES"
            )
          )
      )
      )
   )
)
(princ)
)

satishrajdev 发表于 2022-7-6 06:45:45

天啊。。。。。。Thanx很多tharwat
这真是太棒了。。。。。。。。。。。但仍然需要很少的修正
当我试图绘制道路时,绘制的线必须具有道路线属性(即图层测量限制、蓝色、虚线类型)
但它绘制的道路具有翼线特性(即图层测量线、洋红色、线型conti)
 
除此之外,它工作得非常好。。。。。这就是我要找的

Tharwat 发表于 2022-7-6 06:50:15

 
不客气。
 
 
它可以做到这一点,当出现提示时,只需输入Corridor或第一个字母C就足够了。

satishrajdev 发表于 2022-7-6 06:51:45

我试过了。。。
我在提示后输入了C,但仍出现洋红色线
你能告诉我为什么会这样吗?
 
我修改了这个例程,如下所示
(defun c:Test (/ *error* d e s k)
(vl-load-com)
;;; Tharwat 09. Oct. 2012 ;;;
(defun *error* (x)
   (princ "\n*Cancel*")
)
(if (and (not (tblsearch "LAYER" "SURVEY LIMIT"))
          (not (tblsearch "LAYER" "SURVEY LINES"))
   )
(command "layer" "m" "Survey Limit" "lt" "dashed" "" "c" "5" "" "")
(command "layer" "m" "Survey Lines" "lt" "continuous" "" "c" "6" "" "")
)
(if (and (setq s (ssget "_+.:S:L" '((0 . "LINE"))))
          (progn
            (initget "WINGLINES CORRIDOR")
            (setq k
                   (cond ((getkword
                            "\n Choose one <Winglines> :"
                        )
                         )
                         ("Winglines")
                   )
            )
          )
   )
   (while
   (setq d (getdist "\n Specify offset distance :"))
      (progn
      (foreach x (list d (- d))
          (vla-offset
            (vlax-ename->vla-object (ssname s 0))
            x
          )
          (vla-put-layer
            (vlax-ename->vla-object (entlast))
            (if (eq k "Winglines")
            "SURVEY LIMIT"
            "SURVEY LINES"
            )
          )
      )
      )
   )
)
(princ)
)
 
但同样的错误仍在发生

Tharwat 发表于 2022-7-6 06:57:10

 
检查当前图层的颜色控制,它可能会更改为“ByLayer”以外的其他图层。

pBe 发表于 2022-7-6 07:00:15

(defun c:Test (/ *error* d e s k)
(vl-load-com)
;;; Tharwat 09. Oct. 2012 ;;;
(defun *error* (x)
   (princ "\n*Cancel*")
)
(setvar 'cmdecho 0)
(defun Lyr (/ x)
    (initget "WINGLINES CORRIDOR")
    (setq x
         (cond ((getkword
                  "\n Choose one <Winglines> :"
                  )
               )
               ("Winglines")
         )
    ) x
)
(foreach lyr '(("SURVEY LIMIT" "5" "DASHED")
       ("SURVEY LINES" "6" "CONTINUOUS"))
        (if (not (tblsearch "LAYER" (car lyr)))
        (command "_Layer" "_N"
               (car lyr)"_Color"
               (cadr lyr) (car lyr)
               "_Ltype"
               (last lyr) (car lyr)
               ""
        )))
   
(if (and (setq s (ssget "_+.:S:L" '((0 . "LINE"))))
          (setq k (lyr))
   )
   (while
   (progn (initget "L")
    (setq d (getdist "\n Specify offset distance/L To change layer :")))
        (cond
        ((eq d "L")(setq k (lyr)))       
                     ((eq (Type d) 'Real)
                 (foreach x (list d (- d))
                   (vla-offset
                   (vlax-ename->vla-object (ssname s 0))
                   x
                   )
                   (vla-put-layer
                   (vlax-ename->vla-object (entlast))
                   (if (eq k "Winglines")
                       "SURVEY LIMIT"
                       "SURVEY LINES"
                   )
                   )
                 )
           )
      )
   )
)
(princ)
)

satishrajdev 发表于 2022-7-6 07:02:38

它现在对我来说非常好,没有任何错误
 
@pBe和Tharwat。。。。。你们真是天才。。。。非常感谢您的关注和帮助。。。。。非常感谢你的工作。
 
我还需要你的帮助(很抱歉让你再次工作)
 
在翼线段中,我需要指定距离[相同/不同]的提示
1.在相同的距离下,我想指定一次距离,然后它应该在该距离的适当间隔处绘制线。
(例如,如果我指定了距离2
第一个偏移量为@-2,
第二个偏移量为@-4,
第三个偏移量将为@-6。
 
就像“偏移”命令一样(在选择对象后,它要求指定通过点或[退出/多次/撤消]:
当我们发出多个命令时,它会以指定距离的适当间隔绘制线)
 
2、对于不同的距离,它现在应该如何工作。
i、 选择对象
二、。指定距离
三、线路偏移

pBe 发表于 2022-7-6 07:05:56

听起来很有趣。但这是塔尔瓦斯的密码真的
 
干杯
页: [1] 2
查看完整版本: 多个偏移