基本Lisp
大家好,我正在编写我的第一个Lisp例程,这是非常基本的。
我的目标是拥有一个lisp,当用户定义的点被选中时,它将在某一层上绘制一个点,并在另一层上绘制z值。
我有点卡住了,如果有人能给我指出正确的方向,我可能需要一些关于我哪里出错的指导。
我在代码旁边加入了注释,以突出我认为自己在编程的内容!
提前感谢
低音符
廷列夫。lsp (defun C:tinlev (/ pt1 z)
(setq pt1 (getpoint "\nSpecify point on tin: ")
z (caddr pt1)
)
(entmake (list (cons 0 "point")(cons 8 "cross")(cons 10 pt1)))
(entmake (list (cons 0 "text")(cons 1 (rtos z))(cons 8 "detail")(cons 10 pt1)(cons 40 0.4)))
(princ)
) 这是根据你的结构。。。。
(defun C:tinlev (/ pt1 z)
(setq pt1 (getpoint "\nPick point on TIN....")
z(caddr pt1)
)
(command "_.-layer" "_s" cross "" "")
(command "_.point" pt1 )
(command "_.-layer" "_s" "lev" "" "")
(command "_.text" "s" "DETAIL" "J" "MR" pt1 "0.4" "0" (rtos z 2 2 ))
(princ)
)
任何其他变化都可以问。
当做
塔瓦特 谢谢Dans Legs和Tharwat中尉。
我可以在更基于宏的编程Tharwat中看到逻辑。我将把宏函数与Lisp函数进行比较,找出每个cons括号的作用。
亲切的问候
低音符
请记住,在Lisp编程中不能像使用(dt)而不是(text)那样使用命令缩写
和(-la)而不是(-layer)。。。。。。等等。
祝你好运 (defun C:tinlev (/ pt1 z)
(setq pt1 (getpoint "\nSpecify point on tin: ")
z (caddr pt1)
)
(entmake
(list
(cons 0 "point");;create a point
(cons 8 "cross");;set the layer
(cons 10 pt1);;set the insertion point
)
);;set the insertion point
(entmake
(list
(cons 0 "text");;create a text
(cons 1 (rtos z));;content's of text
(cons 8 "detail");;set the layer
(cons 10 pt1);;set the insertion point
(cons 40 0.4);;set the text height
)
)
(princ)
) 谢谢Dan中尉的腿,
网络在工作中崩溃了,但我认为这是编码过程中发生的事情。我无法让AutocAD通过插入点零件识别lisp,但稍后将重试。
我确实设法让Lisp用于插入由定义的集合块。csv文件条目,因此所有内容都没有丢失!
廷列夫。txt文件 首先,丹中尉在第6号帖子中很好地解释了所有代码。因此,没有必要重新描述它们。
第二,你的文件中有两个偏执缺失。txt,再次查看。
;picklev.lsp. Monumental as this is Lownote's first LISP application.
(DEFUN C:tinlev (/ pt1 z) ;set local variables to be used ie.pt1
(setq pt1 (getpoint "\nPick point on TIN:") ;set value for pt1 by asking user to define
z (caddr pt1) ;set value for variable 'z' is z coord of picked point
) ;close parenth and end define function
(entmake (list (cons 0 "point")(cons 8 "cross")(cons 10 pt1))) ;makes an point entity (not sure what the list is for), assigns it to layer cross and assigns value of variable z
(entmake (list (cons 0 "text") (cons 1 (rtos z))(cons 8 "lev") (cons 10 pt1)(cons 40 0.4))) ;makes an text entity, gives it the value of z, assigns it to layer lev, (not sure on cons 10 or cons 40)
(princ) ; exits quietly
) ;closes last parenth
当做 如果您想添加一个点,我认为最好更改或将Sys Var“pdmode”添加到代码中,以便能够
清楚地看到这一点。
当做 这里有一些更强大的功能:
(defun c: tinelv (/ pt1 z)
(initget 1)
(setq pt1 (getpoint "\nPick Point on TIN: "))
(setq z (caddr pt1))
(entmake (list (cons 0 "POINT")
(cons 6 "BYLAYER")
(cons 8 "CROSS")
(cons 10 (trans pt1 1 0))
(cons 39 0.0)
(cons 62 256)))
(entmake (list (cons 0 "TEXT")
(cons 1 (rtos z 2 4))
(cons 6 "BYLAYER")
(cons 7 (getvat "TEXTSTYLE"))
(cons 8 "0")
(cons 10 pt1)
(cons 11 pt1)
(cons 39 0.0)
(cons 40 (getvar "TEXTSIZE"))
(cons 62 256)))
(prin1))
(initget)强制用户输入,否则它将在空输入上崩溃
点图元仅使用WCS点值。(trans)呼叫解决了这个问题
组6、39和62都默认为其当前系统变量状态,因此在调用(entmake)之前,清楚地调用其值或设置其系统变量是一个好习惯
与组7、8、40相同,但其设置更难配置。
基于任何文本的先验存在,对文本使用(命令)可能很棘手。如果dwg中没有现有文字图元,则需要额外输入1个(高度)
使用(命令)需要对层的当前状态进行一些错误检查。即,当层使用冻结或不存在时,不能将其设置为层。
看到有人试图创建宏,然后寻求帮助,而不是相反,这总是很好的
祝你好运-大卫
页:
[1]
2