乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 50|回复: 19

[编程交流] 用于绘制多段线的Lisp

[复制链接]

13

主题

46

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 15:25:37 | 显示全部楼层 |阅读模式
用户好!
 
我需要一个lisp,可以绘制如下所示的特定多段线:
 
162542suyrxcokj0e5tuea.jpg
 
用户必须给出:
 
1、用户点1和2。
2、长度X
 
关于Lisp代码:
 
该程序必须找出如何绘制多段线,所以我认为它必须自己计算y长度。
 
水平:
 
-如果用户首先给出用户点1和点2,则lisp命令
必须绘制如图1所示的多段线。
-如果用户首先给出用户点2和点1,则lisp命令
必须绘制如图2所示的折线。
 
垂直:
 
-如果用户先给用户点1,然后给用户点2。lisp命令
必须如图3所示绘制。
-如果用户先给用户点2,然后给用户点1。lisp命令
必须如图4所示绘制。
 
我为什么需要这个:
 
我在平面图上使用多段线作为焊接签名,以便焊工/铁匠知道在焊接a时是否必须焊接x长度
“扁平模式”板上的扁平条。
 
Thanx提前。
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-5 15:31:36 | 显示全部楼层
看起来你需要一个新的线型。。。不是Lisp程序
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:32:23 | 显示全部楼层
下面是一些非常简单的代码:
  1. ([color=BLUE]defun[/color] c:zigzag ( [color=BLUE]/[/color] a d i l p q x y )
  2.    
  3.    ([color=BLUE]defun[/color] l ( a b )
  4.        ([color=BLUE]entmake[/color] ([color=BLUE]list[/color] '(0 . [color=MAROON]"LINE"[/color]) ([color=BLUE]cons[/color] 10 a) ([color=BLUE]cons[/color] 11 b)))
  5.    )
  6.    ([color=BLUE]setq[/color] x 10.0
  7.          y 10.0
  8.    )
  9.    ([color=BLUE]if[/color] ([color=BLUE]and[/color]
  10.            ([color=BLUE]setq[/color] p ([color=BLUE]getpoint[/color] [color=MAROON]"\n1st Point: "[/color]))
  11.            ([color=BLUE]setq[/color] q ([color=BLUE]getpoint[/color] [color=MAROON]"\n2nd Point: "[/color] p))
  12.        )
  13.        ([color=BLUE]progn[/color]
  14.            ([color=BLUE]setq[/color] p ([color=BLUE]trans[/color] p 1 0)
  15.                  q ([color=BLUE]trans[/color] q 1 0)
  16.                  a ([color=BLUE]angle[/color] p q)
  17.                  d ([color=BLUE]distance[/color] p q)
  18.                  i ([color=BLUE]/[/color] [color=BLUE]pi[/color] 2.0)
  19.            )
  20.            ([color=BLUE]repeat[/color] ([color=BLUE]fix[/color] ([color=BLUE]/[/color] d x))
  21.                (l p ([color=BLUE]setq[/color] p ([color=BLUE]polar[/color] p a x)))
  22.                (l p ([color=BLUE]setq[/color] p ([color=BLUE]polar[/color] p ([color=BLUE]+[/color] a ([color=BLUE]setq[/color] i ([color=BLUE]-[/color] i))) y)))
  23.            )
  24.            ([color=BLUE]if[/color] ([color=BLUE]not[/color] ([color=BLUE]equal[/color] 0.0 ([color=BLUE]rem[/color] d x) 1e-)
  25.                (l p ([color=BLUE]polar[/color] p a ([color=BLUE]rem[/color] d x)))
  26.            )
  27.        )
  28.    )
  29.    ([color=BLUE]princ[/color])
  30. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 15:35:51 | 显示全部楼层
李,如果出现以下条件,最后一行可能变为零长度。
 
  1. (rem 100. 10.)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:40:53 | 显示全部楼层
很好的捕捉塔尔瓦特,更新如上。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:42:48 | 显示全部楼层
你可以做各种各样的普林线的东西,包括弧,我写了一些击球例程之字形波浪曲线等他们的工作方式,你想开始结束宽度,我不能后代码复制,但非常乐意帮助如何做。
 
在这里搜索打击有一些例子
 
162544u4vaziiygzcjqvaz.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 15:47:38 | 显示全部楼层
另一个具有多段线实体。
希望你喜欢。
 
  1. (defun c:PolyZag (/ a ang d l p1 p2 p3 p4)
  2. ;;; Author: Tharwat Al Shoufi     ;;;
  3. ;;; Codes to make zig zag polyline     ;;;
  4. (vl-load-com)
  5. (setq x (if x
  6.            *x*
  7.            1.0
  8.          )
  9. )
  10. (setq y (if y
  11.            *y*
  12.            1.0
  13.          )
  14. )
  15. (if
  16.    (and (setq *x* (cond ((getdist (strcat "\n Specify X segment < "
  17.                                           (rtos x 2 2)
  18.                                           " > :"
  19.                                   )
  20.                          )
  21.                         )
  22.                         (t x)
  23.                   )
  24.         )
  25.         (setq *y* (cond ((getdist (strcat "\n Specify Y segment < "
  26.                                           (rtos y 2 2)
  27.                                           " > :"
  28.                                   )
  29.                          )
  30.                         )
  31.                         (t y)
  32.                   )
  33.         )
  34.         (setq p1 (getpoint "\n Specify start point :"))
  35.         (setq p2 (getpoint "\n Specify next point :" p1))
  36.         (if (< (setq d (distance p1 p2)) *x*)
  37.           (progn
  38.             (alert
  39.               " Distance between points must be bigger than X segment "
  40.             )
  41.             nil
  42.           )
  43.           t
  44.         )
  45.    )
  46.     (progn (setq ang (angle p1 p2)
  47.                  a   '-
  48.                  x   *x*
  49.                  y   *y*
  50.            )
  51.            (setq l (cons p1 l))
  52.            (repeat (fix (/ d *x*))
  53.              (setq l (cons (setq p3 (polar p1 ang *x*)) l))
  54.              (setq l (cons (setq p4 (polar p3
  55.                                            ((if (eq a '-)
  56.                                               (eval (setq a '+))
  57.                                               (eval (setq a '-))
  58.                                             )
  59.                                              ang
  60.                                              (* pi 0.5)
  61.                                            )
  62.                                            *y*
  63.                                     )
  64.                            )
  65.                            l
  66.                      )
  67.              )
  68.              (setq p1 p4)
  69.            )
  70.            (cond ((eq (rem d *x*) 0.0) (setq l (vl-remove (car l) l)))
  71.                  ((not (equal (/ d *x*) 0.0))
  72.                   (setq l (cons (polar p1 ang (rem d *x*)) l))
  73.                  )
  74.            )
  75.            (entmakex
  76.              (append
  77.                (list '(0 . "LWPOLYLINE")
  78.                      '(100 . "AcDbEntity")
  79.                      '(100 . "AcDbPolyline")
  80.                      '(70 . 0)
  81.                      (cons 90 (length l))
  82.                )
  83.                (mapcar '(lambda (x) (cons 10 (list (car x) (cadr x)))) l)
  84.              )
  85.            )
  86.     )
  87.     (princ)
  88. )
  89. (princ "\n Written by Tharwat Al Shoufi")
  90. (princ)
  91. )
回复

使用道具 举报

13

主题

46

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 15:48:07 | 显示全部楼层
很好的回复了这个帖子中的所有回复!非常感谢。。。
 
Tha****:
 
-你能解释一下代码的作用吗。然后我可以更好地理解代码,也许可以修改它。
-如果你看到我的图片,你会注意到y是x线段之间的水平线段,也许我应该把它叫做X1-one,那么这里没有误解,我的错。。。但是无论如何,lisp代码都必须自己计算y线段。
-代码要求从起点开始的y坐标,但在图片中它说它始终必须为20mm。
-第一个x线段和最后一个x线段必须具有相同的y坐标,如图所示。
-多边形旋转方向的方式取决于用户提供起点和终点接缝的方式。。谢谢
 
Thanx论坛成员。。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:51:58 | 显示全部楼层
这里有一个有趣的游戏供你玩:
 
  1. [color=GREEN];; Dynamic Zig-Zag  -  Lee Mac[/color]
  2. ([color=BLUE]defun[/color] c:zz ( [color=BLUE]/[/color] a d g i l p q r x y )
  3.    ([color=BLUE]setq[/color] x 10.0
  4.          y 10.0
  5.          i ([color=BLUE]/[/color] [color=BLUE]pi[/color] 2.0)
  6.    )
  7.    ([color=BLUE]if[/color] ([color=BLUE]setq[/color] p ([color=BLUE]getpoint[/color] [color=MAROON]"\nSpecify 1st Point: "[/color]))
  8.        ([color=BLUE]progn[/color]
  9.            ([color=BLUE]princ[/color] [color=MAROON]"\nSpecify 2nd Point [+/-] <Exit>: "[/color])
  10.            ([color=BLUE]while[/color]
  11.                ([color=BLUE]progn[/color]
  12.                    ([color=BLUE]setq[/color] g ([color=BLUE]grread[/color] [color=BLUE]t[/color] 15 0)
  13.                          q ([color=BLUE]cadr[/color] g)
  14.                          g ([color=BLUE]car[/color]  g)
  15.                    )
  16.                    ([color=BLUE]cond[/color]
  17.                        (   ([color=BLUE]member[/color] g '(3 5))
  18.                            ([color=BLUE]redraw[/color])
  19.                            ([color=BLUE]setq[/color] a ([color=BLUE]angle[/color] p q)
  20.                                  d ([color=BLUE]distance[/color] p q)
  21.                                  i ([color=BLUE]abs[/color] i)
  22.                                  r p
  23.                            )
  24.                            ([color=BLUE]repeat[/color] ([color=BLUE]fix[/color] ([color=BLUE]/[/color] d x))
  25.                                ([color=BLUE]grdraw[/color] r ([color=BLUE]setq[/color] r ([color=BLUE]polar[/color] r a x)) 1 1)
  26.                                ([color=BLUE]grdraw[/color] r ([color=BLUE]setq[/color] r ([color=BLUE]polar[/color] r ([color=BLUE]+[/color] a ([color=BLUE]setq[/color] i ([color=BLUE]-[/color] i))) y)) 1 1)
  27.                            )
  28.                            ([color=BLUE]if[/color] ([color=BLUE]not[/color] ([color=BLUE]equal[/color] 0.0 ([color=BLUE]rem[/color] d x) 1e-)
  29.                                ([color=BLUE]grdraw[/color] r ([color=BLUE]polar[/color] r a ([color=BLUE]rem[/color] d x)) 1 1)
  30.                            )
  31.                            ([color=BLUE]=[/color] 5 g)
  32.                        )
  33.                        (   ([color=BLUE]=[/color] 2 g)
  34.                            ([color=BLUE]cond[/color]
  35.                                (   ([color=BLUE]member[/color] q '(43 61))
  36.                                    ([color=BLUE]setq[/color] x ([color=BLUE]1+[/color] x))
  37.                                )
  38.                                (   ([color=BLUE]member[/color] q '(45 95))
  39.                                    ([color=BLUE]setq[/color] x ([color=BLUE]max[/color] ([color=BLUE]1-[/color] x) 1))
  40.                                )
  41.                            )
  42.                        )
  43.                    )
  44.                )
  45.            )
  46.            ([color=BLUE]if[/color] ([color=BLUE]=[/color] 3 g)
  47.                ([color=BLUE]progn[/color]
  48.                    ([color=BLUE]setq[/color] i ([color=BLUE]abs[/color] i)
  49.                          p ([color=BLUE]trans[/color] p 1 0)
  50.                          q ([color=BLUE]trans[/color] q 1 0)
  51.                          a ([color=BLUE]angle[/color] p q)
  52.                    )
  53.                    ([color=BLUE]repeat[/color] ([color=BLUE]fix[/color] ([color=BLUE]/[/color] d x))
  54.                        ([color=BLUE]setq[/color] l ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] 10 p) l)
  55.                              l ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] 10 ([color=BLUE]setq[/color] p ([color=BLUE]polar[/color] p a x))) l)
  56.                              l ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] 10 ([color=BLUE]setq[/color] p ([color=BLUE]polar[/color] p ([color=BLUE]+[/color] a ([color=BLUE]setq[/color] i ([color=BLUE]-[/color] i))) y))) l)
  57.                        )
  58.                    )
  59.                    ([color=BLUE]if[/color] ([color=BLUE]not[/color] ([color=BLUE]equal[/color] 0.0 ([color=BLUE]rem[/color] d x) 1e-)
  60.                        ([color=BLUE]setq[/color] l ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] 10 ([color=BLUE]polar[/color] p a ([color=BLUE]rem[/color] d x))) l))
  61.                    )
  62.                    ([color=BLUE]entmake[/color]
  63.                        ([color=BLUE]append[/color]
  64.                            ([color=BLUE]list[/color]
  65.                               '(000 . [color=MAROON]"LWPOLYLINE"[/color])
  66.                               '(100 . [color=MAROON]"AcDbEntity"[/color])
  67.                               '(100 . [color=MAROON]"AcDbPolyline"[/color])
  68.                                ([color=BLUE]cons[/color] 90 ([color=BLUE]length[/color] l))
  69.                               '(70 . 0)
  70.                            )
  71.                            ([color=BLUE]reverse[/color] l)
  72.                        )
  73.                    )
  74.                )
  75.            )
  76.            ([color=BLUE]redraw[/color])
  77.        )
  78.    )
  79.    ([color=BLUE]princ[/color])
  80. )

 
例子:
 
回复

使用道具 举报

13

主题

46

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 15:54:46 | 显示全部楼层
谢谢李麦克。。。但是这不是很恰当。
 
我会再次解释:
 
162545zao4ouu0onrnzvau.jpg
 
用户必须提供以下信息:
 
-其中一条水平x线段的长度。(标记为红色)
-起点。(标记为红色)
-终点。(标记为红色)
 
1.当用户给定起点和终点时,代码已计算水平y线段。y的长度并不重要。(标记为绿色)
2、起点必须是一条X线段,终点前必须有一条水平X线段。
3.X线段和Y线段之间的距离始终为20mm。
4.poly线必须根据我在这个线程中写的第一篇帖子改变方向。
 
Thx提前。。。李·麦克。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-2 15:01 , Processed in 1.076795 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表