乐筑天下

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

[编程交流] AutoLisp例程帮助

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:31:54 | 显示全部楼层 |阅读模式
大家好,这是我第一次以会员身份访问该网站。过去我从这个网站上收集了很多有用的信息,为此我感谢大家。
 
我需要一个在任何地方都找不到的lisp例程,并且对lisp还不够熟悉,无法编写一个。所以基本上,我说的是‘救命!’
 
我画了一堆平面图案,其中我画了一堆小弧段和偏移线。偏移距离随我选择的每个连续弧长的长度而变化。现在,我必须选择“List”来获取弧长,然后在请求偏移距离时将其复制并粘贴到命令行中。听起来很简单,但当我处理一大堆事情时,它会变得乏味。我只想在要求偏移距离时能够拾取一条弧,偏移距离与拾取的弧长相同。有道理?
 
非常感谢任何人的帮助!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:46:22 | 显示全部楼层
以下是一个简短而快速的计划:
 
  1. (defun c:arcoff ( / en ex )
  2.    (while
  3.        (progn (setvar 'errno 0) (setq en (car (entsel "\nSelect Arc: ")))
  4.            (cond
  5.                (   (= 7 (getvar 'errno))
  6.                    (princ "\nMissed, try again.")
  7.                )
  8.                (   (= 'ename (type en))
  9.                    (if (= "ARC" (cdr (assoc 0 (setq ex (entget en)))))
  10.                        (command "_.offset"
  11.                            (*  (cdr (assoc 40 ex))
  12.                                (rem (+ pi pi (- (cdr (assoc 51 ex)) (cdr (assoc 50 ex)))) (+ pi pi))
  13.                            )
  14.                            en "\" ""
  15.                        )
  16.                        (princ "\nObject is not an Arc.")
  17.                    )
  18.                    t
  19.                )
  20.            )
  21.        )
  22.    )
  23.    (princ)
  24. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:52:28 | 显示全部楼层
欢迎来到CADTutor!
 
**编辑-按照惯例,李打败了我!哈哈,无论如何,至少这表明了一种选择。
 
尝试一下:
  1. (vl-load-com)
  2. (defun c:OFAM () (c:OffsetArcMultiple))
  3. (defun c:OffsetArcMultiple (/ *error* eName acDoc oArc)
  4. (princ "\rOFFSETARCMULTIPLE ")
  5. (defun *error* (msg)
  6.    (if acDoc
  7.      (vla-endundomark acDoc)
  8.    )
  9.    (cond ((not msg))                                                   ; Normal exit
  10.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  11.          ((princ (strcat "\n** Error: " msg " ** ")))                  ; Fatal error, display it
  12.    )
  13.    (princ)
  14. )
  15. (while (and (/= nil (setq eName (car (entsel "\nSelect arc to offset: "))))
  16.              (= "ARC" (cdr (assoc 0 (entget eName))))
  17.         )
  18.    (progn
  19.      (or
  20.        acDoc
  21.        (not
  22.          (vla-startundomark
  23.            (setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
  24.          )
  25.        )
  26.      )
  27.      (vla-offset
  28.        (setq oArc (vlax-ename->vla-object eName))
  29.        (vla-get-arclength oArc)
  30.      )
  31.      (*error* nil)
  32.    )
  33. )
  34. )
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:01:26 | 显示全部楼层
谢谢大家!这些对于偏移弧段非常有用!我应该在我的请求中更具体一点-对不起,我实际上是想偏移一条单独的直线,但当被问及偏移距离时,我想为偏移距离选择一个弧段(见附件) 083157nfjzzyz0fll4fpgg.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:09:49 | 显示全部楼层
我建议如下:
 
[列表]
  • 偏移
  • 多个
  • 选择弧端点。
    [/列表]
  • 回复

    使用道具 举报

    1

    主题

    4

    帖子

    3

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-6 08:17:50 | 显示全部楼层
    谢谢李,我们快到了。当我选择两个端点时,它使用它们之间的直线距离,而不是实际弧长(见附件)。虽然这两个距离很近,但我需要在这些模式中非常精确,十行累积误差可以相加。
     
    083159azzhujhhj2hf3f2c.jpg
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 08:26:27 | 显示全部楼层
     
    对不起,当然,我不知道我是怎么忽略了这个事实的。
     
    尝试快速修改我以前的代码:
     
    1. (defun c:arcoff ( / _select en ex )
    2.    (defun _select ( msg obj / en )
    3.        (while
    4.            (progn (setvar 'errno 0) (setq en (car (entsel msg)))
    5.                (cond
    6.                    (   (= 7 (getvar 'errno))
    7.                        (princ "\nMissed, try again.")
    8.                    )
    9.                    (   (= 'ename (type en))
    10.                        (if (not (wcmatch (cdr (assoc 0 (entget en))) obj))
    11.                            (princ "\nInvalid object selected.")
    12.                        )
    13.                    )
    14.                )
    15.            )
    16.        )
    17.        en
    18.    )
    19.    (if (setq en (_select "\nSelect Object to Offset: " "*LINE"))
    20.        (while (setq ex (_select "\nSelect Arc: " "ARC"))
    21.            (setq ex (entget ex))
    22.            (command "_.offset"
    23.                (*  (cdr (assoc 40 ex))
    24.                    (rem (+ pi pi (- (cdr (assoc 51 ex)) (cdr (assoc 50 ex)))) (+ pi pi))
    25.                )
    26.                en "\" ""
    27.            )
    28.            (setq en (entlast))
    29.        )
    30.    )
    31.    (princ)
    32. )
    回复

    使用道具 举报

    1

    主题

    4

    帖子

    3

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-6 08:34:58 | 显示全部楼层
    天哪,就是这样!!!!!谢谢李-它工作得很好,我应该在几年前发布这个。谢谢你们的帮助-我将永远感激!!
     
    同时,您是否可以推荐一本专门的书来开始学习AutoLisp?
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-10 04:36 , Processed in 0.540314 second(s), 70 queries .

    © 2020-2025 乐筑天下

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