像smart off之类的东西
你好我在这个论坛上呆了将近两个月,你帮助我解决了一些问题,对此我非常感谢。从一开始我就在想一个剧本,可能写起来不那么简单。我认为,它需要一点数学知识(与圆相切)和多段线的长度。
我花了很多时间使用函数镜像等绘制与直线、圆弧和多段线垂直的直线。如果它能在AutoCAD中用作偏移函数,那就太好了。
最后一张图显示了辅助尺寸。每第二行的长度为eg 20。
我希望,帮助别人不是那么困难。。 试试这个。
(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)
非常感谢。你真快!我不好意思要求微调。你能做4件事吗?
-给机会选择要创建的线的哪一侧,
-在“测试”层中绘制线,
-给我机会指定一个养老院,第一行的长度-现在是1.5(我想选择0到1.5之间,以适应其他模块)。
-提供指定多段线“起点”的机会
最后三次恳求不太需要,但很酷!(这是一个非常舒适的脚本)。指定绘制线的侧面很重要。
非常感谢。 我现在太累了,现在是时候在这里睡觉了,因为现在已经过了午夜10分钟了,所以如果没有人介入并帮助你解决你需要这些修改的问题,那么明天可能还会继续 好啊非常感谢。
我想如果我想选择多段线的起点,这将是另一条多段线的起点,我的多段线必须在顶部才能选择它。 接下来,我们将进行一场精彩的动态演示。
(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)
Tharwat,动态演示确实很棒。顺便问一下,你用了什么软件来创建这个?
谢谢
这是卡姆塔西亚。 嗨Tharwat!我对你的第二个剧本有意见。我不知道为什么它只在第一个文件中第一次起作用,但在那之后,它就不起作用了。。第一个脚本有效!
我在命令窗口中放置“test”文本,然后我看到“指定多段线末端的点”,单击后,我看到“指定偏移距离”,我放置1.5。单击Enter,什么也没有!脚本在这一刻停止。
你用比我预期的更好的方式编写这个程序,我认为“指定偏移距离”可以输入到代码中(不需要在Autocad中输入)。
你能纠正这个吗?非常感谢。 命令行中是否有任何错误消息?
你确定你提供的距离不超过物体的长度吗?
页:
[1]
2