Lee Mac 发表于 2022-7-5 18:36:06

我还建议在层“0”上嵌入块和ENDBLK实体,以避免潜在的不可压缩层。
(defun creationbois ( nom dim1 dim2 )
   (if (not (tblsearch "block" nom))
       (progn
         (entmake (list '(0 . "BLOCK") '(8 . "0") (cons 2 nom) (list 10 (/ dim1 2.0) dim2) '(70 . 0)))
         (foreach x
               (list
                   (list '(10 0 0)            (list 11 dim1 0))
                   (list(list 10 dim1 0)    (list 11 dim1 dim2))
                   (list(list 10 dim1 dim2) (list 11 0 dim2))
                   (list(list 10 0 dim2)   '(11 0 0))
                   (list '(10 0 0)            (list 11 dim1 dim2))
                   (list(list 10 0 dim2)    (list 11 dim1 0))
               )
               (entmake (list '(0 . "LINE") '(8 . "_LU BOIS") (car x) (cadr x)))
         )
         (entmake '((0 . "ENDBLK") (8 . "0")))
       )
   )
)

CadFrank 发表于 2022-7-5 18:39:57

好的,谢谢大家!
 
我本应该把清单放在桌子里的
 
不管是谁!
 
Works like a charm现在希望使我的代码更小、更可读。
 
干杯
 
总有一天我会成为像你们这样的专家!

Lee Mac 发表于 2022-7-5 18:44:10

 
不客气-但请注意,列表并不是foreach表达式的“内部”,它仍然构成foreach函数的列表参数(即,您之前代码中的“points”变量)。

BIGAL 发表于 2022-7-5 18:47:21

如果你有3行、4行、5行或20行,我会采取一种稍微不同的方法来制作代码。每次我制作列表外部使用长度时,你都需要重做代码,以找出有多少行,并使用第n个函数处理10和11个点((1 2)(3 4)(5 6)(7……)

CadFrank 发表于 2022-7-5 18:48:59

 
是的,我可能在这里表达了我自己,但这正是我的意思。谢谢李!

CadFrank 发表于 2022-7-5 18:55:23

 
不知道你的意思!我的清单总是不同的。你有更多的例子吗。
 
看到不同的思维方式总是很好。
 
干杯

BIGAL 发表于 2022-7-5 18:56:27

如果你看Lees代码,你已经硬编码了6行,你可以传递任意数量的行,例如((0 0)(1 1))((1 1)(11 5 5))((5 5)(22 6)),这将是3行。

CadFrank 发表于 2022-7-5 19:02:14

 
好吧,我明白你的意思。但这段代码将始终使用6行。因为它创建了相同类型的块。
 
但如果我想用它在其他地方,但它将是一个好主意,把它作为你说。
 
比如说,我想做一个矩形或一个5号的多边形。
 
谢谢你的建议!
页: 1 [2]
查看完整版本: 使用Entmake创建块