CadFrank 发表于 2022-7-5 17:58:57

使用Entmake创建块

你好
 
我试图创建一个块,我不知道为什么它不起作用。
 
有人能帮我一下吗。
 
(defun CreationBois (Nom Dim1 Dim2)
   
   
    (entmake (list '(0 . "BLOCK")
                   (cons 2 nom)
                   (cons 10 (list (/ Dim1 2) Dim2))
                   '(70 . 1)
              )
    )
    (entmake
        (list '(0 . "LINE")
              '(8 . "-LU BOIS")
              '(10 0 0)
              (cons 11 (list Dim1 0))
        )
    )
    (entmake (list '(0 . "LINE")
                   '(8 . "-LU BOIS")
                   (cons 10 (list Dim1 0))
                   (cons 11 (list Dim1 Dim2))
             )
    )
    (entmake (list '(0 . "LINE")
                   '(8 . "-LU BOIS")
                    (cons 10 (list Dim1 Dim2))
                    (cons 11 (list 0 Dim2))
             )
    )
    (entmake (list '(0 . "LINE")
                   '(8 . "-LU BOIS")
                  (cons 10 (list 0 Dim1))
                   '(11 0 0)
             )
    )
    (entmake (list '(0 . "LINE")
                   '(8 . "-LU BOIS")
                   '(10 0 0)
                   (cons 11 (list Dim1 Dim2))
             )
    )
    (entmake (list '(0 . "LINE")
                   '(8 . "-LU BOIS")
                   (cons 10 (list Dim1 0))
                   (cons 11 (list 0 Dim2))
             )
    )
    (entmake (list '(0 . "ENDBLK")                          
                   '(8 . "_LU BOIS")
                )
    )

)
 
它曾经有用!但并不完全像这样。
我没有收到任何错误。
 
当做

rkmcswain 发表于 2022-7-5 18:05:44

你是不是特别想制造一个匿名区块?
 
如果是这样,您将向函数传递什么块名?
 
这对我有用:(CreationBois“*U1”8 9)

CadFrank 发表于 2022-7-5 18:09:09

我试图传递4x4的块名。
 
这不是匿名的

CadFrank 发表于 2022-7-5 18:10:18

好吧,我想出来了!!
 
不得不把
(70 . 1) to (70 . 2)

Tharwat 发表于 2022-7-5 18:14:08

嗨,弗兰克,
 
试试这个最小化的代码
 

(defun CreationBois(nom Dim1 Dim2)
(if (tblsearch "BLOCK" nom)
   (princ
   (strcat "\nBlock name <" nom "> is already existed !"))
   (progn
   (entmake (list '(0 . "BLOCK")
                  (cons 2 nom)
                  (cons 10 (list (/ Dim1 2) Dim2))
                  '(70 . 0)
                  )
            )
   (mapcar '(lambda (x y)
                (entmake
                  (list '(0 . "LINE")
                        '(8 . "-LU BOIS")
                        x
                        y
                        )
                  ))
             (list '(10 0 0)
                   (cons 10 (list Dim1 0))
                   (cons 10 (list Dim1 Dim2))
                   (cons 10 (list 0 Dim1))
                   '(10 0 0)
                   (cons 10 (list Dim1 0)))
             (list (cons 11 (list Dim1 0))
                   (cons 11 (list Dim1 Dim2))
                   (cons 11 (list 0 Dim2))
                   '(11 0 0)
                   (cons 11 (list Dim1 Dim2))
                   (cons 11 (list 0 Dim2)))
             )
   (entmake (list '(0 . "ENDBLK")
                  '(8 . "-LU BOIS")
                  )
            )
   )
   )
(princ)
)

CadFrank 发表于 2022-7-5 18:20:02

我试图用foreach最小化代码
 
如果我做不到。我试试你的。
 
感谢
 
干杯和啤酒!

rkmcswain 发表于 2022-7-5 18:20:52

 
如果将位代码1传递给组70,则块名必须以开头
[*]因为这将是一个匿名块。
您应该将组70更改为0,而不是2,因为2表示您将向其附加属性。

CadFrank 发表于 2022-7-5 18:26:13

好的,我已经走了这么远,我认为他们的一些东西,我没有得到与列表和引用。
 
(defun CreationBois (Nom Dim1 Dim2)


   (entmake (list '(0 . "BLOCK")
           '(100 . "AcDbEntity")
           '(100 . "AcDbBlockBegin")
           (cons 2 nom)
           '(8 . "_LU BOIS")
           (cons 10 (list (/ Dim1 2) Dim2))
           '(70 . 0)
   )
   )
   
   (setq points(list (list (list(0 0)) (list (Dim1 0)))
;;;                        '((list Dim1 0) (list Dim1 Dim2))
;;;                        '((list Dim1 Dim2) (list 0 Dim2))
;;;                        '((list 0 Dim1) (list 0 0))
;;;                        '((list Dim1 Dim2) (list 0 0))
;;;                        '((list Dim1 0) (list 0 Dim2))
           )
   )
   
   (foreach point points
(entmake
    (list '(0 . "LINE")
          '(8 . "_LU BOIS")       
          (cons 10 (car points))
          (cons 11 (cadr points))
    )
)
   )
   (entmake (list '(0 . "ENDBLK")
           '(100 . "AcDbBlockEnd")
           '(100 . "AcDbBlockEnd")
           '(8 . "_LU BOIS")
   )
   )
)
 
现在无论我做什么,它总是给我和错误。
 
有什么建议吗?

David Bethel 发表于 2022-7-5 18:28:36

对于初学者:
 
将(车点)更改为(车点)等
 
据我所知,这100个小组没有真正的必要
 
“块”组10需要x、y和z值

Lee Mac 发表于 2022-7-5 18:31:20

提示:
(cons 1 (list 2 3 4)) == (1 2 3 4) == (list 1 2 3 4)
页: [1] 2
查看完整版本: 使用Entmake创建块