闭合多段线的图案填充
我对lisps很陌生,但我认为我已经把它变得比需要的更复杂了一点。我试图围绕一组多段线创建一个偏移框,然后对该框进行图案填充。我已经成功地使它适用于四个用户指定的点,但我正在寻找更多。
我希望能够运行lisp,绘制一条具有无限弯曲和角度的多段线,然后让它填充生成的偏移框。
如果有人有任何优化想法,我很乐意听听
沟槽lsp
欢迎来到CADTutor。
你可以很容易地定义一个多行样式,它会画出你的线条,
你可以任意设置直线对正,我猜是居中。
它将动态地同时创建所有三条线,要么使用端盖
或者不是。
作为lisp的学生,你可能想访问李的网站,你一定能学到很多东西
学习他美妙的Lisp程序。
他有一个可能为你目前正在开发的Lisp程序提供一些线索,
http://www.lee-mac.com/dynamicoffset.html
谢谢李! 尝试,在宽度>0.00的LWD多段线上
(孔夫塔蒂斯)
(defun C:PL2CAN ()
(setvar "PEDITACCEPT" 1)
(setvar "CMDECHO" 1)
(setq gru(ssget '((0 . "LWPOLYLINE")))
index -1
modelspace(vla-get-Modelspace (vla-get-activedocument(vlax-get-acad-object)))
)
(setvar "HPNAME" "ANSI31")
(setvar "HPSCALE" 1)
(repeat (sslength gru)
(setq spessore(vla-get-ConstantWidth (vlax-ename->vla-object (ssname gru (setq index(1+ index))))))
(vla-put-ConstantWidth (vlax-ename->vla-object (ssname gru index)) 0.0)
(setq ent1(car(vlax-safearray->list (vlax-variant-value (vla-offset (vlax-ename->vla-object (ssname gru index)) (/ spessore 2))))))
(setq ent2(car(vlax-safearray->list (vlax-variant-value (vla-offset (vlax-ename->vla-object (ssname gru index)) (-(/ spessore 2)))))))
(setq coord1 (variant2lista (vla-get-coordinates ent1) 2))
(setq coord2 (variant2lista (vla-get-coordinates ent2) 2))
(cond
((eq (vla-get-Closed ent1) :vlax-true)
(vl-cmdf "_HATCH" "" "" "" (vlax-vla-object->ename ent1)(vlax-vla-object->ename ent2) "")
)
((eq (vla-get-Closed ent1) :vlax-false)
(vla-addLine modelspace (vlax-3d-point (car coord1))(vlax-3d-point (car coord2)))
(vl-cmdf "_PEDIT" (entlast) "_J" (vlax-vla-object->ename ent1)(vlax-vla-object->ename ent2) "" "_CL" "")
(vl-cmdf "_HATCH" "" "" "" (entlast) "")
)
)
)
)
;;; ***************************FUNZIONE VARIANT2LISTA*******************************
;;; Trasforma un variant in una lista a gruppi con numero elementi per gruppo
(defun variant2lista (listavariant numero / listaparz listafin)
(setq listaparz '()
listafin '()
)
(foreach elemento (vlax-safearray->list (vlax-variant-value listavariant))
(setq listaparz (append listaparz (list elemento)))
(if (= (length listaparz) numero)
(setq listafin(append listafin (list listaparz))
listaparz '()
)
)
)
listafin
)
编写代码看起来很有趣。。。 我的版本:
OffHatchV1-0。lsp
李,那看起来正是我想要的。谢谢你们其他人。这个周末我还没有拿到考卷,但我会在周一把它们都考出来。
再次感谢
不客气,我写这篇文章很开心。
让我知道你进展如何!
我很确定你做到了,李
这里有一个毫无意义的普通代码来打发时间
(defun c:hatsoff ( / ss e ent fp sp el el2 elj)
(setvar 'cmdecho 0)
(if (and(setq dist (getdist "\nEnter Offset Distance: "))
(setq ss (ssget '((0 . "LWPOLYLINE")))))
(repeat (sslength ss)
(if (and
(setq e (ssname ss 0))
(setq ent (entget e))
(setqfp (assoc 10 ent) ent (member fp ent)
sp (cdr (assoc 10 (cdr ent))) fp (cdr fp))
(setq fp (polar fp (setq ang (+ (angle fp sp) (/ pi 2.0)))dist))
(not (command "_offset"dist e "_non" fp "E"))
(setq el (entlast))
(not (eq el e))
(not (command "_offset"dist e "_non" (setq sp (polar fp (+ ang pi) (+ dist dist))) "E"))
(setq el2 (entlast))
(not (eq el el2)))
(progn
(if (= 1 (cdr (assoc 70 (entget el))))
(command "_hatch" "ANSI31" "" "" "_s" el el2 "")
(progn
(command "_pline" "_non" fp "_non" sp "")
(command "_pedit" "_multiple" el el2 (entlast) "" "_join" "" "")
(setq elj (entget (entlast)))
(entmod (subst '(70 . 1) (assoc 70elj) elj))
(setvar 'Hpname "ANSI31")
(command "_hatch" "" "" ""(entlast) "")
)
)
)
)
(ssdel e ss)
)
)
(princ)
)
页:
[1]