在一个
我试图编写一个lisp例程来自动选择天花板网格中点的中心。因此,当您在天花板网格的“框”中为该点选择一个点时,无论网格是否旋转,它都会在该网格点的死点插入一个块。那么,在一个长方体中选取一个点,并返回该长方体的死点,无论旋转如何?
像泥一样清澈?我有一个这样做的网格是在0度运行。。。。。没有优化的代码,所以不要锤我。它适用于我们:-)
(defun c:MULT8 ()
(setq aper (getvar "aperture"))
(setvar "aperture" 50)
(command "setvar" "cmdecho" "0")
(if (= VALUE nil) (setq VALUE " "))
; (setq q1 (strcat "\nWhat is attribute value? <" VALUE ">.."))
; (setq OL VALUE VALUE (strcase (getstring q1)))
(if (= VALUE "") (setq VALUE OL))
(SETQ PT NIL)
(SETQ PT (GETPOINT))
(while (NOT (NULL PT))
(setq newpt (osnap pt "int"))
(if (/= newpt nil)
(progn
(setq angfound (rtd (angle newpt pt)))
(cond
(
(and
(> angfound 0)
(< angfound 90)
)
(setq angins 45)
)
(
(and
(> angfound 90)
(< angfound 180)
)
(setq angins 135)
)
(
(and
(> angfound 180)
(< angfound 270)
)
(setq angins 225)
)
(
(and
(> angfound 270)
(< angfound 360)
)
(setq angins 315)
)
(
(= angfound 180)
(setq angins 0)
)
(
(= angfound 90)
(setq angins 270)
)
(
(= angfound 0)
(setq angins 180)
)
(
(= angfound 270)
(setq angins 90)
)
)
)
)
(if (= newpt nil)
(progn
(setq newpt pt)
(print "newpt")
(command "insert" block newpt "" "" "")
)
(progn
(print"past")
(setq inpt (polar newpt (dtr angins) (sqrt 288)))
(command "insert" block inpt "" "" "")
)
)
(COMMAND "SETVAR" "HIGHLIGHT" "1")
(SETQ PT NIL)
(SETQ PT (GETPOINT))
)
)
这里是一些网格图片
尝试使用-boundary命令(命令“-boundary”pt)
(setq pt getpoint)
(命令“-边界”pt)
(setq ent(entget(entlast))
现在获取相反的角点,并找到插入点的中点
(entdel(entlast))_删除边界 另一种方法是使用CAL(int+int)/2.0
或者只是两个点中间的Lisp程序 感谢您的输入!如果广场上没有其他东西,边界就可以了。但很多时候里面可能有一扇门或一个房间的名字。我们可以把房间的名字关掉,但我尽量避免。 “mtp”或“m2p”(给你一个介于2点之间的点)
然后选择两个相对的角。 是的,我可以选择两点,但我的任务是选择一点。当网格为0和90度时,它工作正常,但当建筑师或建筑不是0和90度时,我不知所措。。。。。 好的,这就是我想到的。如果你被放大到很远的地方,它肯定很慢,但可以工作。
(defun c:headins ()
(SETQ PT NIL)
(SETQ PT (GETPOINT))
(while (NOT (NULL PT))
(Command "-boundary" pt "")
(setq item (entlast))
;convert to vl object
(setq item (vlax-ename->vla-object item))
; (setq cPl (vlax-ename->vla-object(car(entlast))))
(vla-GetBoundingBox item 'blPt 'trPt)
(setq lPt(vlax-safearray->list blPt))
(setq tPt(vlax-safearray->list trPt))
(setq inspt (CAL "(lpt + tpt) / 2.0"))
(entdel (entlast))
(command "insert" block inspt "" "" "")
(SETQ PTOLD PT)
(SETQ PT NIL)
(SETQ PT (GETPOINT))
)
) 这大大加快了速度。我创建了一个包含文本“grid”的所有层的边界选择集。
(defun c:headins ()
;(ssget gridl (ssget "_X" (list "GRID")))
(setq gridl (ssget "_X" '((8 . "GRID"))))
(SETQ PT NIL)
(SETQ PT (GETPOINT))
(while (NOT (NULL PT))
(Command "-boundary" "a" "b" "n" (ssget "_X" '((8 . "*GRID*"))) "" "" pt "")
(setq item (entlast))
;convert to vl object
(setq item (vlax-ename->vla-object item))
; (setq cPl (vlax-ename->vla-object(car(entlast))))
(vla-GetBoundingBox item 'blPt 'trPt)
(setq lPt(vlax-safearray->list blPt))
(setq tPt(vlax-safearray->list trPt))
(setq inspt (CAL "(lpt + tpt) / 2.0"))
(entdel (entlast))
(command "insert" block inspt "" "" "")
(SETQ PTOLD PT)
(SETQ PT NIL)
(SETQ PT (GETPOINT))
)
)
页:
[1]