doerner 发表于 2022-7-6 07:09:56

闭合多段线的图案填充

我对lisps很陌生,但我认为我已经把它变得比需要的更复杂了一点。
 
我试图围绕一组多段线创建一个偏移框,然后对该框进行图案填充。我已经成功地使它适用于四个用户指定的点,但我正在寻找更多。
 
我希望能够运行lisp,绘制一条具有无限弯曲和角度的多段线,然后让它填充生成的偏移框。
 
如果有人有任何优化想法,我很乐意听听
沟槽lsp

Dadgad 发表于 2022-7-6 07:25:51

欢迎来到CADTutor。
 
你可以很容易地定义一个多行样式,它会画出你的线条,
你可以任意设置直线对正,我猜是居中。
它将动态地同时创建所有三条线,要么使用端盖
或者不是。
 
作为lisp的学生,你可能想访问李的网站,你一定能学到很多东西
学习他美妙的Lisp程序。
 
他有一个可能为你目前正在开发的Lisp程序提供一些线索,
http://www.lee-mac.com/dynamicoffset.html
 
谢谢李!

GP_ 发表于 2022-7-6 07:31:42

尝试,在宽度>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
)

pBe 发表于 2022-7-6 07:38:06

编写代码看起来很有趣。。。

Lee Mac 发表于 2022-7-6 07:48:07

我的版本:
 
OffHatchV1-0。lsp

doerner 发表于 2022-7-6 07:54:02

 
李,那看起来正是我想要的。谢谢你们其他人。这个周末我还没有拿到考卷,但我会在周一把它们都考出来。
 
再次感谢

Lee Mac 发表于 2022-7-6 08:06:36

 
不客气,我写这篇文章很开心。
让我知道你进展如何!

pBe 发表于 2022-7-6 08:10:44

 
我很确定你做到了,李
 
这里有一个毫无意义的普通代码来打发时间
 
(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]
查看完整版本: 闭合多段线的图案填充