乐筑天下

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

[编程交流] 多个偏移

[复制链接]

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-6 06:35:39 | 显示全部楼层 |阅读模式
大家好,
如图所示,我有中心线和翼线,
现在我想要的是从中心线开始,画出不同距离的翼线
(即10m、25m、45m,可以是任何距离,表示不在适当的间隔上)
和尽头的走廊
有什么Lisp程序可以解决我的问题吗。
 
提前非常感谢
1111.dwg
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 06:41:41 | 显示全部楼层
另一种解决方案是在定义适当的样式后将其绘制为多行。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:44:16 | 显示全部楼层
试试这段代码。
 
  1. (defun c:Test (/ *error* d e s k)
  2. (vl-load-com)
  3. ;;; Tharwat 09. Oct. 2012 ;;;
  4. (defun *error* (x)
  5.    (princ "\n*Cancel*")
  6. )
  7. (if (and (not (tblsearch "LAYER" "SURVEY LIMIT"))
  8.           (not (tblsearch "LAYER" "SURVEY LINES"))
  9.      )
  10.    (progn
  11.      (alert " One or two layers [sURVEY LIMIT , SURVEY LINES] are not found in the drawing")
  12.      (exit)
  13.    )
  14. )
  15. (if (and (setq s (ssget "_+.:S:L" '((0 . "LINE"))))
  16.           (progn
  17.             (initget "WINGLINES CORRIDOR")
  18.             (setq k
  19.                    (cond ((getkword
  20.                             "\n Choose one [Winglines/Corridor] <Winglines> :"
  21.                           )
  22.                          )
  23.                          ("Winglines")
  24.                    )
  25.             )
  26.           )
  27.      )
  28.    (while
  29.      (setq d (getdist "\n Specify offset distance :"))
  30.       (progn
  31.         (foreach x (list d (- d))
  32.           (vla-offset
  33.             (vlax-ename->vla-object (ssname s 0))
  34.             x
  35.           )
  36.           (vla-put-layer
  37.             (vlax-ename->vla-object (entlast))
  38.             (if (eq k "Winglines")
  39.               "SURVEY LIMIT"
  40.               "SURVEY LINES"
  41.             )
  42.           )
  43.         )
  44.       )
  45.    )
  46. )
  47. (princ)
  48. )
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-6 06:45:45 | 显示全部楼层
天啊。。。。。。Thanx很多tharwat
这真是太棒了。。。。。。。。。。。但仍然需要很少的修正
当我试图绘制道路时,绘制的线必须具有道路线属性(即图层测量限制、蓝色、虚线类型)
但它绘制的道路具有翼线特性(即图层测量线、洋红色、线型conti)
 
除此之外,它工作得非常好。。。。。这就是我要找的
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:50:15 | 显示全部楼层
 
不客气。
 
 
它可以做到这一点,当出现提示[Winglines/Corridor]时,只需输入Corridor或第一个字母C就足够了。
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-6 06:51:45 | 显示全部楼层
我试过了。。。
我在提示后输入了C,但仍出现洋红色线
你能告诉我为什么会这样吗?
 
我修改了这个例程,如下所示
  1. (defun c:Test (/ *error* d e s k)
  2. (vl-load-com)
  3. ;;; Tharwat 09. Oct. 2012 ;;;
  4. (defun *error* (x)
  5.    (princ "\n*Cancel*")
  6. )
  7. (if (and (not (tblsearch "LAYER" "SURVEY LIMIT"))
  8.           (not (tblsearch "LAYER" "SURVEY LINES"))
  9.      )
  10. (command "layer" "m" "Survey Limit" "lt" "dashed" "" "c" "5" "" "")
  11. (command "layer" "m" "Survey Lines" "lt" "continuous" "" "c" "6" "" "")
  12. )
  13. (if (and (setq s (ssget "_+.:S:L" '((0 . "LINE"))))
  14.           (progn
  15.             (initget "WINGLINES CORRIDOR")
  16.             (setq k
  17.                    (cond ((getkword
  18.                             "\n Choose one [Winglines/Corridor] <Winglines> :"
  19.                           )
  20.                          )
  21.                          ("Winglines")
  22.                    )
  23.             )
  24.           )
  25.      )
  26.    (while
  27.      (setq d (getdist "\n Specify offset distance :"))
  28.       (progn
  29.         (foreach x (list d (- d))
  30.           (vla-offset
  31.             (vlax-ename->vla-object (ssname s 0))
  32.             x
  33.           )
  34.           (vla-put-layer
  35.             (vlax-ename->vla-object (entlast))
  36.             (if (eq k "Winglines")
  37.               "SURVEY LIMIT"
  38.               "SURVEY LINES"
  39.             )
  40.           )
  41.         )
  42.       )
  43.    )
  44. )
  45. (princ)
  46. )

 
但同样的错误仍在发生
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:57:10 | 显示全部楼层
 
检查当前图层的颜色控制,它可能会更改为“ByLayer”以外的其他图层。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:00:15 | 显示全部楼层
  1. (defun c:Test (/ *error* d e s k)
  2. (vl-load-com)
  3. ;;; Tharwat 09. Oct. 2012 ;;;
  4. (defun *error* (x)
  5.    (princ "\n*Cancel*")
  6. )
  7. (setvar 'cmdecho 0)  
  8. [color="#4169e1"](defun Lyr (/ x)
  9.     (initget "WINGLINES CORRIDOR")
  10.     (setq x
  11.            (cond ((getkword
  12.                     "\n Choose one [Winglines/Corridor] <Winglines> :"
  13.                   )
  14.                  )
  15.                  ("Winglines")
  16.            )
  17.     ) x
  18.   )[/color]
  19. [color="#4169e1"](foreach lyr '(("SURVEY LIMIT" "5" "DASHED")
  20.        ("SURVEY LINES" "6" "CONTINUOUS"))
  21.         (if (not (tblsearch "LAYER" (car lyr)))
  22.         (command "_Layer" "_N"
  23.                  (car lyr)  "_Color"
  24.                  (cadr lyr) (car lyr)
  25.                  "_Ltype"
  26.                  (last lyr) (car lyr)
  27.                  ""
  28.         )))[/color]
  29.      
  30. (if (and (setq s (ssget "_+.:S:L" '((0 . "LINE"))))
  31.           (setq k (lyr))
  32.      )
  33.    (while
  34.      [color="#4169e1"](progn (initget "L")[/color]
  35.     [color="#4169e1"] (setq d (getdist "\n Specify offset distance/L To change layer :")))[/color]
  36.         (cond
  37.          [color="#4169e1"] ((eq d "L")(setq k (lyr)))[/color]       
  38.                        [color="#4169e1"]((eq (Type d) 'Real)[/color]
  39.                  (foreach x (list d (- d))
  40.                    (vla-offset
  41.                      (vlax-ename->vla-object (ssname s 0))
  42.                      x
  43.                    )
  44.                    (vla-put-layer
  45.                      (vlax-ename->vla-object (entlast))
  46.                      (if (eq k "Winglines")
  47.                        "SURVEY LIMIT"
  48.                        "SURVEY LINES"
  49.                      )
  50.                    )
  51.                  )
  52.            )
  53.       )
  54.    )
  55. )
  56. (princ)
  57. )
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

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

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:05:56 | 显示全部楼层
听起来很有趣。但这是塔尔瓦斯的密码真的
 
干杯
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:52 , Processed in 0.724871 second(s), 72 queries .

© 2020-2025 乐筑天下

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