对圆圈的天真怀疑
我已经画了一个圈,我想知道如何得到这4分。我几乎可以肯定,它将使用角度的东西,90º,180º,270º和360º。
但我不知道如何让这个代码工作哈哈D:
你们能帮帮我吗? 试试这个。。。
(defun c:Test (/ s e d lst)
(if (and (setq s (car (entsel "\n Select circle :")))
(eq (cdr (assoc 0 (setq e (entget s)))) "CIRCLE")
(setq d (cdr (assoc 40 e)))
)
(foreach x (list 0. (* pi 0.5) pi (* pi 1.5))
(setq lst (cons (polar (cdr (assoc 10 e)) x d) lst))
)
)
lst
)
或者,
(defun c:cpt ( / cn en rd )
(if (setq en (ssget "_+.:E:S" '((0 . "CIRCLE"))))
(progn
(setq en (entget (ssname en 0))
cn (cdr (assoc 10 en))
rd (cdr (assoc 40 en))
)
(mapcar '(lambda ( x ) (mapcar '+ cn x))
(list (list rd 0.0) (list 0.0 rd) (list (- rd) 0.0) (list 0.0 (- rd)))
)
)
)
) 另一个
(defun c:Test (/ FindQuadrants s e)
(defun FindQuadrants (e / d l)
(setq d (cdr (assoc 40 e)))
(mapcar (function
(lambda (x)
(setq l (vl-list* (polar (cdr (assoc 10 e)) x d) l))
)
)
(list 0. (* pi 0.5) pi (* pi 1.5))
)
l
)
(if (and (setq s (car (entsel "\n Select circle :")))
(eq (cdr (assoc 0 (setq e (entget s)))) "CIRCLE")
)
(FindQuadrants e)
)
)
还有一个
(defun C:QPOINTS ( / e)
(if
(setq e (ssget ":E:S" '((0 . "CIRCLE"))))
((lambda (p e)
(mapcar
(function
(lambda (x)
(vlax-curve-getPointAtParam e (* pi x))
)
)
p
)
)
'(0.0 0.5 1.0 1.5)
(ssname e 0)
)
)
) 谢谢大家
总有一天我会学到足够的lisp语言):
有没有办法让这段代码更漂亮?
(setq s (ssget "_+.:E:S" '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "CIRCLE")(-4 . "OR>"))))
(setq tipo (cdr(assoc 0(entget(ssname s 0)))))
(if (= "LWPOLYLINE" tipo)
................................
)
(if (= "CIRCLE" tipo)
................................
)
)
(defun LM:MAssoc ( key lst / item )
(if (setq item (assoc key lst))
(cons (cdr item) (LM:MAssoc key (cdr (member item lst))))
)
)
你在哪里写代码?
你们什么时候开始学Lisp程序的?
对不起,问题太多了哈哈 这个也可以。
(defun c:TesT (/ s e d i l) (vl-load-com)
(if (and (setq s (car (entsel "\n Select circle :")))
(eq (cdr (assoc 0 (setq e (entget s)))) "CIRCLE")
)
(progn
(setq d (/ (* pi (* (cdr (assoc 40 e)) 2.)) 4.) i d )
(repeat 4 (setq l (vl-list* (vlax-curve-getpointatdist s i) l)
i (+ i d)
))
))
l
) 另一个:
(defun c:cpts ( / cn en pt pl )
(if (setq en (ssget "_+.:E:S" '((0 . "CIRCLE"))))
(progn
(setq en (entget (ssname en 0))
cn (cdr (assoc 10 en))
pt (list (cdr (assoc 40 en)) 0.0)
)
(repeat 4
(setq pt (list (cadr pt) (- (car pt)))
pl (cons (mapcar '+ cn pt) pl)
)
)
)
)
)
我猜你在找这样的东西:
(defun c:myprogram ( / cen enx pnt sel )
(if (setq sel (ssget "_+.:E:S" '((0 . "LWPOLYLINE,CIRCLE"))))
(if (= "LWPOLYLINE" (cdr (assoc 0 (setq enx (entget (ssname sel 0))))))
(while (setq pnt (assoc 10 enx))
(entmake (list '(0 . "POINT") pnt))
(setq enx (cdr (member pnt enx)))
)
(progn
(setq cen (cdr (assoc 10 enx))
pnt (list (cdr (assoc 40 enx)) 0.0)
)
(repeat 4
(setq pnt (list (cadr pnt) (- (car pnt))))
(entmake (list '(0 . "POINT") (cons 10 (mapcar '+ cen pnt))))
)
)
)
)
(princ)
)
PS:我希望你以后能保留我的函数头 两个位置之一:
[列表=1]
[*]ACad的VLIDE(只需在命令提示符下键入VLIDE)。允许您在acad中直接运行代码并进行调试,您还可以检查其他内容或列出所有lisp符号,还具有自动格式化功能,通过放置新行和缩进来重新排列代码。
[*]使用程序员的文本编辑器(http://sixrevisions.com/tools/12-excellent-free-text-editors-for-coders/),普通的记事本之类的东西在我看来有点无用。我要么使用记事本++要么使用SciTE,但其他很多人都有类似的功能。这些工具通常有更多用于编辑代码的工具,如正则表达式搜索和替换、折叠、行号、括号级别指示等。编辑器在确定代码正在做什么以及是否在某处出现拼写错误方面起着很大的作用,例如,有了一个像样的编辑器,你永远不需要计算需要多少右括号。
[/列表]
我认为这里的大多数人都来自各行各业的编程。特别是在Lisp中,你会发现许多人只是因为需要一些使任务更容易/更快的东西才开始。一直到其他以前是程序员,现在也做AutoLisp的人。这完全取决于他们想要达到的程度。
就我个人而言,我从80年代末开始使用AutoLisp,自己动手处理。实际上,我第一次接触编程是在学校的时候,在一台旧的IBM-PC上玩GWBasic,但我真的不算,因为我只是玩了一会儿。后来我实际上获得了计算机科学学位,并“学会”编程(用其他语言,如Pascal、C++、Java)。从那时起,编程就是我喜欢做的事情。只要有可能,我就会努力学习一门“新”语言。当你看到其他语言如何处理某些任务时,你会发现新的想法,使你能够用一种旧语言以不同的方式做一些事情——尽管不一定更好。
虽然从我所学的所有语言中,只有lisp给了我如此大的帮助。其他任务从极其复杂到无法完成类似任务,再到过于简单而无法发挥作用。但是,在如此简单的安排中,没有其他人像lisp那样有如此多的能力。注意,这里我指的是布拉德意义上的Lisp——AutoLisp只是一种方言,它已经被切碎,忽略了真正的Lisp实际上可以做的大量工作。
页:
[1]
2