Wojciech 发表于 2022-7-5 23:21:06

像smart off之类的东西

你好
 
我在这个论坛上呆了将近两个月,你帮助我解决了一些问题,对此我非常感谢。从一开始我就在想一个剧本,可能写起来不那么简单。我认为,它需要一点数学知识(与圆相切)和多段线的长度。
 
我花了很多时间使用函数镜像等绘制与直线、圆弧和多段线垂直的直线。如果它能在AutoCAD中用作偏移函数,那就太好了。
 

 
最后一张图显示了辅助尺寸。每第二行的长度为eg 20。
 
我希望,帮助别人不是那么困难。。

Tharwat 发表于 2022-7-5 23:26:31

试试这个。
 

(defun c:test (/ s d i l ang sn pt)
;;    Tharwat 11. Mar. 2014    ;;
(if (setq s (ssget "_+.:S:E" '((0 . "LWPOLYLINE,SPLINE,LINE,ARC"))))
   (progn
   (setq d (/ (vlax-curve-getdistatparam
                  (setq sn (ssname s 0))
                  (vlax-curve-getendparam sn)
                )
                1.5
             )
         i 1.5
         n i
         l '(1.5 7.0)
   )
   (repeat (fix d)
       (setq
         ang (angle '(0.0 0.0 0.0)
                  (vlax-curve-getfirstderiv
                      sn
                      (vlax-curve-getparamatpoint
                        sn
                        (setq pt (vlax-curve-getpointatdist sn n))
                      )
                  )
             )
         n (+ n i)
       )
       (entmake
         (list
         '(0 . "LINE")
         (cons 10 pt)
         (cons
             11
             (polar pt (+ ang (* pi 0.5)) (car (setq l (reverse l))))
         )
         )
       )
   )
   )
)
(princ)
)
(vl-load-com)

Wojciech 发表于 2022-7-5 23:28:35

非常感谢。你真快!我不好意思要求微调。你能做4件事吗?
-给机会选择要创建的线的哪一侧,
-在“测试”层中绘制线,
-给我机会指定一个养老院,第一行的长度-现在是1.5(我想选择0到1.5之间,以适应其他模块)。
-提供指定多段线“起点”的机会
 

 
最后三次恳求不太需要,但很酷!(这是一个非常舒适的脚本)。指定绘制线的侧面很重要。
 
非常感谢。

Tharwat 发表于 2022-7-5 23:31:03

我现在太累了,现在是时候在这里睡觉了,因为现在已经过了午夜10分钟了,所以如果没有人介入并帮助你解决你需要这些修改的问题,那么明天可能还会继续

Wojciech 发表于 2022-7-5 23:34:28

好啊非常感谢。

我想如果我想选择多段线的起点,这将是另一条多段线的起点,我的多段线必须在顶部才能选择它。

Tharwat 发表于 2022-7-5 23:39:56

接下来,我们将进行一场精彩的动态演示。
 

(defun c:test (/ *error* Draw_Dynamic_Real s ang sn pt a b d g p gp len x)
;;    Tharwat 12. Mar. 2014    ;;
(defun *error* (x)
   (redraw)
   (if (wcmatch (strcase x) "*EXIT*,*CANCEL*,*BREAK*")
   (princ x)
   (princ (strcat "\n Error: " x))
   )
)
(if (and (setq p (getpoint "\n Specify point at the End Side of Polyline :"))
          (if (setq s (ssget p '((0 . "LWPOLYLINE,SPLINE,LINE,ARC"))))
            t
            (Alert "Pick a point at the end of [ LWPOLYLINE,SPLINE,LINE,ARC ] only .")
          )
   )
   (progn (defun Draw_Dynamic_Real (sn o x sp r / d i n l ang pt)
            (setq d (/ (vlax-curve-getdistatparam sn (vlax-curve-getendparam sn)) o)
                  i o
                  l (list (* o 0.5) (* o 1.5))
            )
            (if (> sp 0.)
            (setq n sp)
            (setq n i)
            )
            (repeat (fix d)
            (setq ang (angle '(0.0 0.0 0.0)
                               (vlax-curve-getfirstderiv
                                 sn
                                 (vlax-curve-getparamatpoint sn (setq pt (vlax-curve-getpointatdist sn n)))
                               )
                        )
                  n   (+ n i)
            )
            (if r
                (entmake (list '(0 . "LINE")
                               (cons 8 "test")
                               (cons 10 pt)
                               (cons 11
                                     (polar pt
                                          (if x
                                              (+ ang (* pi 0.5))
                                              (+ ang (* pi 1.5))
                                          )
                                          (car (setq l (reverse l)))
                                     )
                               )
                         )
                )
                (grdraw pt
                        (polar pt
                               (if x
                                 (+ ang (* pi 0.5))
                                 (+ ang (* pi 1.5))
                               )
                               (car (setq l (reverse l)))
                        )
                        1
                        0
                )
            )
            )
            (princ)
          )
          (setq d   1.5
                len (vlax-curve-getdistatparam (setq sn (ssname s 0)) (vlax-curve-getendparam sn))
          )
          (if (< (distance (setq a (vlax-curve-getstartpoint sn)) p)
               (distance (setq b (vlax-curve-getendpoint sn)) p)
            )
            (setq pa
                  gp 0.
            )
            (setq pb
                  gp (rem len d)
            )
          )
          (while (eq (car (setq g (grread t 13 0))) 5)
            (redraw)
            (if (minusp (sin (- (angle p (polar p (angle b a) (/ len 1000.))) (angle p (cadr g)))))
            (setq x nil)
            (setq x t)
            )
            (Draw_Dynamic_Real sn d x gp nil)
          )
          (if (eq (car g) 3)
            (Draw_Dynamic_Real sn d x gp t)
          )
   )
)
(redraw)
(princ)
)
(vl-load-com)

shailujp 发表于 2022-7-5 23:40:14

Tharwat,动态演示确实很棒。顺便问一下,你用了什么软件来创建这个?

Tharwat 发表于 2022-7-5 23:46:04

 
谢谢
 
这是卡姆塔西亚。

Wojciech 发表于 2022-7-5 23:47:13

嗨Tharwat!我对你的第二个剧本有意见。我不知道为什么它只在第一个文件中第一次起作用,但在那之后,它就不起作用了。。第一个脚本有效!
 
我在命令窗口中放置“test”文本,然后我看到“指定多段线末端的点”,单击后,我看到“指定偏移距离”,我放置1.5。单击Enter,什么也没有!脚本在这一刻停止。
 
你用比我预期的更好的方式编写这个程序,我认为“指定偏移距离”可以输入到代码中(不需要在Autocad中输入)。
 
你能纠正这个吗?非常感谢。

Tharwat 发表于 2022-7-5 23:50:45

命令行中是否有任何错误消息?
你确定你提供的距离不超过物体的长度吗?
页: [1] 2
查看完整版本: 像smart off之类的东西