寻求一些帮助
希望我来到了正确的地方,我一直在学习lisp,做得很好,非常基本的简单的东西,并决定提高一点,尝试更复杂的绘图。。。至少对我来说!,有人能告诉我我的分数、变量、数学是否正确吗?我不确定我做错了什么,我得到了一个零错误我认为这与数学有关,无论如何autolisp都会在编辑器中单步执行代码,并在出现错误或不起作用时告诉您。我上传了我试图用lisp绘制的图形以及lisp文件。。。非常感谢您的帮助
门图纸
门LSP 也许是这样?
只需遵循您的方法:
;;;; door maker.lsp
;;; starting the program
(defun c:door (/ *error* Line BR HGT IPT LR P1 P2 P3 P4 P5 P6 RR SP SPT TR WID)
(defun *error* (msg)
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ))
(defun Line (p1 p2)
(entmakex (list (cons 0 "LINE")
(cons 10 p1)
(cons 11 p2))))
(if (and (setq sPt (getpoint "\nPlease Pick Your Starting Point: "))
(setq wid (getdist "\nDoor Width: " spt))
(setq hgt (getdist "\nDoor Height: " spt))
(setq lr(getdist "\nLeft Revel: "))
(setq rr(getdist "\nRight Revel: "))
(setq tr(getdist "\nTop Revel: "))
(setq br(getdist "\nBottom Revel: ")))
(progn
(setq p1(list (car sPt) (+ (cadr sPt) hgt))
p2(list (+ (car sPt) wid) (cadr sPt))
p3(list (+ (car sPt) wid) (+ (cadr sPt) hgt)))
(setq iPt (list (+ (car sPt) lr) (+ (cadr sPt) br))
p4(list (car iPt) (+ (cadr sPt) (- Hgt tr)))
p5(list (+ (car sPt) (- wid rr)) (cadr iPt))
p6(list (car p5) (cadr p4)))
(mapcar 'line (list sPt sPt p1 p3 iPt iPt p4 p6)
(listp1p2 p3 p2p4p5 p6 p5))))
(princ))
我不确定使用getcorner是否更直观?也许可以考虑使用polar 玩得很开心
(defun c:door (/ *error* LINE BR CP GR L1 L2 LR P1 P2 P3 P4 P5 P6 PT RR TR)
(vl-load-com)
(defun *error* (msg)
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(redraw) (princ))
(defun Line (p1 p2)
(entmake (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2))))
(if (and (setq lr (getdist "\nSpecify Left Revel: "))
(setq rr (getdist "\nSpecify Right Revel: "))
(setq tr (getdist "\nSpecify Top Revel: "))
(setq br (getdist "\nSpecify Bottom Revel: "))
(setq pt (getpoint "\nPick Corner Point: " )))
(progn
(while (and (= 5 (car (setq gr (grread 't 13 0))))
(listp (setq cP (cadr gr))))
(redraw)
(setq cP (trans cP 1 0))
(setq p1 (list (car pt) (cadr cP))
p2 (list (car cP) (cadr pt))
p3 (list (+ (carpt) lr) (+ (cadr pt) br))
p4 (list (+ (carpt) (- (carcP) (carpt) rr))
(+ (cadr pt) (- (cadr cP) (cadr pt) tr)))
p5 (list (car p3) (cadr p4))
p6 (list (car p4) (cadr p3)))
(grvecs (cons -3 (append (setq l1 (list pt p1 pt p2 p1 cP p2 cP))
(setq l2 (list p3 p5 p3 p6 p5 p4 p6 p4))))))
(while (and (cadr l1) (cadr l2))
(line (car l1) (cadr l1))
(line (car l2) (cadr l2)) (setq l1 (cddr l1) l2 (cddr l2)))))
(redraw) (princ))
我非常感谢你,你的编码比我现在所做的要先进得多,但我确实理解你所做的一半。。我工作得很好,我学到了更多。。。我会说任何教你编码方法的好书。。你的男人 嗯,老实说,第二个只是在炫耀一点——这不是一个实际的例子,因为OSnap和大多数其他AutoCAD功能在grread循环中被禁用(这就是它使用的)。
至于学习,我从论坛上学到了几乎所有的知识(当然,我从一些教程网站上学到了最基本的知识),但一旦你开始学习,你想问的大多数问题都已经在论坛上得到了回答,如果没有,你可以直接问他们——这让学习语言变得更快。
我给你们的一个提示是,开始研究entmake/entmakex函数和实体的DXF组码。这给了您修改和创建实体的强大能力,事实上,这是最快的方式。
这里可以找到DXF代码的参考,我在这里创建了一个关于如何使用entmake/entmakex创建实体的线程。此外,这里和这里还解释了如何通过DXF操作实体。
祝你玩得开心,如果有什么你不喜欢的,尽管问。
李 非常感谢我会调查这一切的
不客气,巴特
页:
[1]