dnovember99 发表于 2022-7-5 15:46:42

帮助修改现有lisp

大家好,
 
(抱歉,如果这是长的)我发现了一个Lisp程序,我认为它的工作方式本身绝对令人惊讶。我想知道是否有人能帮我修改一下。我试过了,但我的英语被电脑听不懂!
 
这是一个break-all-lisp(见下文),它最初是由李·麦克唐纳在2009年创建的。(非常感谢。)
我所说的一切都是二维的。
我想知道是否有一种方法可以修改它,使其具有特定的层(例如:冷水、热水等)可以给定一个值,以表示“只要a层和B层交叉,B层就会以特定的距离断开(我通常在线路的任一侧做3”),以表明B层比a层“低”
 
我知道2D没有高度。我正在做的项目有很多管道交叉,我希望能够加快速度。现在我一次只能做一个十字路口。下面是我使用的管道列表(我在这些()中放的只是希望管道是这样的,认为这可能有助于为其他管道提供价值。)
 
PNDCW(冷水)
PNDHW(热水)
PNHWR(热水回水)
PNDCW RO(RO水)
PNDCW ROR(再矿化反渗透水)
PNDCW RO-B(地板下的RO水)
PNDCW ROR-B(地板下的再矿化反渗透水)
PNGWB(油脂废料)
PNSNB(油脂废料)
PNVNT(通风)
VBF-管道(地板下方的通风口)
这是我开始用的Lisp程序。
 
 
 
;;; Break All, by Lee McDonnell.25/07/2009

(defun c:brkAll (/ *error* doc spc ss Objlst Obj iLst Altlst lst)
(vl-load-com)

(defun *error* (msg)
   (if doc (vla-EndUndoMark doc))
   (if ov (mapcar 'setvar vl ov))
   (if (not
         (wcmatch
         (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
   (princ
       (strcat "\n** Error: " msg " **")))
   (princ))

(setq doc (vla-get-ActiveDocument
             (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
               (vla-get-modelspace doc)
               (vla-get-paperspace doc))
             (vla-get-modelspace doc)))

(setq vl '("CMDECHO" "OSMODE")
       ov (mapcar 'getvar vl))

(vla-StartUndoMark doc)
(or *brk$dis* (setq *brk$dis* 5.))
(if (setq ss (ssget '((0 . "*LINE,ARC"))))
   (progn
   (or (not
         (setq tmp
             (getdist
               (strcat "\nSpecify Break Distance <" (rtos *brk$dis* 2 2) "> : "))))
         (setq *brk$dis* tmp))
   (setq Objlst
       (mapcar 'vlax-ename->vla-object
         (vl-remove-if 'listp
         (mapcar 'cadr (ssnamex ss)))))
   (while (setq Obj (car Objlst))
       (foreach iObj (setq Objlst (cdr Objlst))
         (setq iLst
         (cons
             (cons Obj
               (vlax-list->3D-point
               (vlax-invoke Obj
                   'IntersectWith iObj acExtendNone))) iLst))))
   (mapcar 'setvar vl '(0 0))
   (foreach Int (vl-remove-if-not
                  (function
                      (lambda (x)
                        (vl-consp (cdr x)))) iLst)
       (setq Obj (car Int))
       (foreach Pt (cdr Int)
         (and Altlst (setq lst Altlst))
         (if (not (setq bDis (vlax-curve-getDistatPoint Obj Pt)))
         (while (and (not bDis) lst)
             (setq bDis (vlax-curve-getDistatPoint (setq Obj (car lst)) Pt)
                   lst (cdr lst))))
         (if bDis
         (progn
             (or (setq bPt1 (vlax-curve-getPointatDist Obj
                              (+ bDis (/ *brk$dis* 2.))))
               (setq bPt1 (vlax-curve-getEndPoint Obj)))
             (or (setq bPt2 (vlax-curve-getPointatDist Obj
                              (- bDis (/ *brk$dis* 2.))))
               (setq bPt2 (vlax-curve-getStartPoint Obj)))
             (command "_.Break"
               (list (vlax-vla-object->ename Obj) pt) "_F" bPt1 bPt2)
             (setq AltLst (cons (vlax-ename->vla-object (entlast)) AltLst)))))))
   (princ "\n** Nothing Selected **"))
(vla-EndUndoMark doc)
(mapcar 'setvar vl ov)
(princ))
            

(defun vlax-list->3D-point (lst)
(if lst
   (cons (list (car lst) (cadr lst) (caddr lst))
         (vlax-list->3D-point (cdddr lst)))))

Grrr 发表于 2022-7-5 15:54:57

你要么读这个。
或者你可以使用手动修改你的帖子(但使用O而不是0,所以是“代码”)。

dnovember99 发表于 2022-7-5 15:57:26

谢谢你的回复。虽然我学到了这一点点知识,但我对学习LISP还是那么陌生(就像刚学了两天),我仍然坐在这里茫然地瞪着眼睛。我知道我想做什么,我可以想象出来,但我的大脑无法让我的手指来执行。

ronjonp 发表于 2022-7-5 16:04:14

 
一幅动画胜过千言万语

Grrr 发表于 2022-7-5 16:05:30

 
哇,他们应该把这个附加到代码发布指南线程中!

dnovember99 发表于 2022-7-5 16:12:01

好吧,我在这里听起来真的很傻。但是我该怎么做呢?在工作电脑上我什么都不能下载?有什么想法吗?
 
但在那张照片中,我有三条线从北向南延伸。(热水、冷水和热水回流。)其他管道是反渗透水,我只想打破界限,让它一直保持不变。对不起,如果我把事情弄得更糟了,我只是想用我知道的唯一方式来解释。

tombu 发表于 2022-7-5 16:16:59

无需下载或安装。只需单击帖子底部的[编辑帖子],选择代码,然后单击工具栏上的#按钮来放置代码标签。你看了动画还是读了代码发布指南?

dnovember99 发表于 2022-7-5 16:21:31

对不起,不,我没有阅读发帖指南,那是我的错。我对fourm的东西很陌生,所以这完全是我的错。我会回去编辑。
 
谢谢你为我指出这一点。我会在以后的帖子中记住这一点。

tombu 发表于 2022-7-5 16:26:35

更简单的是,只需添加一个链接,链接到李·麦克唐纳(李·麦克饰)的《代码全包》。
更简单,并提供了代码编写目的的历史记录。

dnovember99 发表于 2022-7-5 16:30:44

谢谢你,就像我说的,我还在学习这个过程,所以很抱歉造成了一些问题。这根本不是我的意图。
页: [1] 2
查看完整版本: 帮助修改现有lisp