大家好,
希望你们今天过得愉快,不要工作过度(只够勉强应付)。
只是一个简单的问题-我相信这里有人能够回答-如果没有,不用担心。
关于此线程:
http://www.cadtutor.net/forum/showthread.php?t=31790
我发布了以下LISP以响应上面线程中发布的绘图示例:
- ; Diamond ~ by Lee McDonnel [25.01.2009]
- ; Places a Diamond Block at the Intersection of a LWPolyline
- ; [Assumes Diamond Block Definition is in Drawing]
- ; [updated to remove intersecting line]
- (defun c:diamond (/ ss lEnt eLst sLin eLin pvert i int intLst)
- (vl-load-com)
- (if (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
- (setq lEnt (car (entsel "\nSelect Intersecting Line > ")))
- (eq (cdr (assoc 0 (entget lEnt))) "LINE"))
- (progn
- (setq eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
- sLin (cdr (assoc 10 (entget lEnt)))
- eLin (cdr (assoc 11 (entget lEnt))))
- (foreach ent eLst
- (setq pVert (mapcar 'cdr (vl-remove-if '(lambda (x) (/= 10 (car x))) (entget ent))))
- (if (eq (setq i (length pVert)) 4)
- (progn
- (while (not (zerop (setq i (1- i))))
- (if (setq int (inters sLin eLin (nth i pVert) (nth (1- i) pVert)))
- (setq intLst (cons int intLst))))
- (setq intLst (vl-sort intLst '(lambda (x1 x2) (< (car x1) (car x2)))))
- (SetBlkTF "3ANSYMB")
- (entmake (list (cons 0 "INSERT") (cons 2 "3ANSYMB") (cons 10 (cadr intLst))))
- (entmake (list (cons 0 "INSERT") (cons 2 "3ANSYMB") (cons 10 (cons (- (caar intLst) 6.5515) (cdar intLst))))))))
- (entdel lEnt))
- (princ "\n<!> No Line Selected, or this isn't a Line! <!>"))
- (princ))
- (defun SetBlkTF (n)
- (cond ((not (snvalid n))
- (princ "\nInvalid Block Name - " n)
- (exit))
- ((tblsearch "BLOCK" n))
- ((findfile (strcat n ".DWG"))
- (command "_.INSERT" n)
- (command))
- (T ; If all else fails....
- (entmake (list (cons 0 "BLOCK") (cons 2 n) (cons 10 (list 0 0 0)) (cons 70 0)))
- (entmake (list (cons 0 "TEXT")
- (cons 1 (strcat "BLOCK PLACECARD - " n))
- (cons 7 (cdr (assoc 2 (tblnext "STYLE" T))))
- (cons 8 "0")
- (cons 10 (list 0 0 0))
- (cons 11 (list 0 0 0))
- (cons 40 (max 1 (getvar "TEXTSIZE")))
- (cons 72 4)))
- (entmake (list (cons 0 "ENDBLK") (cons 8 "0")))))n)
但是,由于一些未知的原因(记录在链接线程中),LISP似乎在我的机器上运行,运行ACAD'04,但在OP的机器上运行'07。
我想不出发生这种情况的原因,因为在LISP中,我没有使用任何“命令”函数(消除了提示顺序不同的可能性),而且我认为AutoLISP在3年内没有发生如此大的变化。
最后,Fixo发布了该问题的另一个解决方案,使用类似的方法插入所需的块,但是他的代码在2007年正确运行。
如果有人能提供更多信息,说明为什么我的帖子在07年没有成功,但在04年成功,我将不胜感激。
谢谢你花时间阅读这篇文章,如果你还没有这样做,祝你度过愉快的一天。
干杯
李 |