Cholomanchuten 发表于 2022-7-6 11:27:47

谢谢大家。事实上,第一个答案之一对我很有效。
这个scr包含以下代码:
 
(命令“_text”“10001000,0”“40”“0”“TEXTLINE”)
 
适用于Autocad 2008。
 
谢谢,祝你好运!

Lee Mac 发表于 2022-7-6 11:29:04

这会给你在绘图中使用不同的文本样式带来问题——我倾向于使用entmake。

CHLUCFENG 发表于 2022-7-6 11:33:15

根据我的建议,我已经开始了理解entmake的旅程,并将努力摆脱使用(命令…)的旧习惯总是
 
李,我有你指示我去的entmakex实体的列表,谢谢。我决定采用每个实体类型,并尝试通过将正确的参数传递给entmake引擎来调用它们。简单的实体(线、圆、文本等)是我可以实现的。然而,区块仍然是一个谜。我查看了一些不同的代码,认为如果先定义块,然后定义子实体,然后关闭(结束)块定义,我应该会看到块出现在屏幕上。
 
该代码在图形数据库中创建块图元的实例,但不会显示在屏幕上。
 

(defun c:LOLLIPOP ()
(entmake '((0 . "BLOCK")
   (100 . "AcDbEntity")
   (67 . 0)
   (8 . "0")
   (100 . "AcDbBlockReference")
   (66 . 1)
   (2 . "LOLLIPOP")
   (10 0.0 0.0 0.0)
   (70 . 2)
    )
)
(entmake '((0 . "CIRCLE")
   (100 . "AcDbEntity")
   (67 . 0)
   (8 . "NewLayer1")
   (100 . "AcDbCircle")
   (10 0.0 3.0 0.0)
   (40 . 1.0)
    )
)
(entmake '((0 . "LINE")
   (100 . "AcDbEntity")
   (67 . 0)
   (8 . "NewLayer2")
   (100 . "AcDbLine")
   (10 0.0 0.0 0.0)
   (11 0.0 2.0 0.0)
    )
)
(entmake '((0 . "ATTDEF")
   (100 . "AcDbEntity")
   (67 . 0)
   (8 . "NewLayer3")
   (100 . "AcDbText")
   (10 -0.375 2.4375 0.0)
   (40 . 1.125)
   (1 . "X")
   (50 . 0.0)
   (41 . 1.0)
   (51 . 0.0)
   (7 . "MONOSIFR")
   (71 . 0)
   (72 . 4)
   (11 0.0 3.0 0.0)
   (100 . "AcDbAttributeDefinition")
   (3 . "PROMPT X:")
   (2 . "TAGX")
   (70 . 0)
   (73 . 0)
   (74 . 0)
    )
)
(entmake '((0 . "ENDBLK") (100 . "AcDbBlockEnd") (8 . "0")))
(command "_.Layer" "c" "1" "NewLayer1" "c" "2" "NewLayer2" "c" "3" "NewLayer3" "")
(princ)
)

 
为什么不显示?此外,我使用命令更改图层颜色。我研究了entmod,但它并没有解释修改层属性。有没有更合适的方法可以在不使用命令调用的情况下修改图层特性?

fixo 发表于 2022-7-6 11:35:54

 
只是一个快速而肮脏的版本
(更改代码中的textstyle名称)

(defun emake_lollipop (p)
(entmake (list (cons 0 "INSERT")
(cons 2 "LOLLIPOP")
(cons 10 p)
(cons 66 1)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER"))
   )

(entmake (list (cons 0 "ATTRIB")
                (cons 8"NewLayer3")
                (cons 10 (mapcar '+ p '(-0.375 2.4375 0.0)))
                (cons 11 (mapcar '+ p '(0.0 3.0 0.0)))
                (cons 40 1)
                (cons 1 "Blablabla")
                (cons 2 "TAGX")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 73 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER"))
   )
(entmake (list
   (cons 0 "SEQEND")
   (cons 8 "0"))
   )
   )
(defun c:LOLLIPOP ()

(command "_.Layer" "m" "NewLayer1" "c" "1" "NewLayer1"
   "m" "NewLayer2" "c" "2" "NewLayer2"
   "m" "NewLayer3" "c" "3" "NewLayer3" "")

   (if (not (tblsearch "block" "lollipop"))
   (progn
   (entmake '((0 . "BLOCK")
   (100 . "AcDbEntity")
   (67 . 0)
   (8 . "0")
   (100 . "AcDbBlockReference")
   (66 . 1)
   (2 . "LOLLIPOP")
   (10 0.0 0.0 0.0)
   (70 . 2)
    )
)
(entmake '((0 . "CIRCLE")
   (100 . "AcDbEntity")
   (67 . 0)
   (8 . "NewLayer1")
   (100 . "AcDbCircle")
   (10 0.0 3.0 0.0)
   (40 . 1.0)
    )
)
(entmake '((0 . "LINE")
   (100 . "AcDbEntity")
   (67 . 0)
   (8 . "NewLayer2")
   (100 . "AcDbLine")
   (10 0.0 0.0 0.0)
   (11 0.0 2.0 0.0)
    )
)
(entmake '((0 . "ATTDEF")
   (100 . "AcDbEntity")
   (67 . 0)
   (8 . "NewLayer3")
   (100 . "AcDbText")
   (10 -0.375 2.4375 0.0)
   (40 . 1.125)
   (1 . "X")
   (50 . 0.0)
   (41 . 1.0)
   (51 . 0.0)
   (7 . "STANDARD")
   (71 . 0)
   (72 . 4)
   (11 0.0 3.0 0.0)
   (100 . "AcDbAttributeDefinition")
   (3 . "PROMPT X:")
   (2 . "TAGX")
   (70 . 0)
   (73 . 0)
   (74 . 0)
    )
)
(entmake '((0 . "ENDBLK")(8 . "0"))
   )
)
   )
(while
(setq p (getpoint "\nPick insertion point >> "))
(emake_lollipop p)
)
(princ)
)

 
在输入块定义后,您需要
创建块实例和属性引用的步骤
同样的方法
 
~'J'~

CHLUCFENG 发表于 2022-7-6 11:40:10

谢谢菲索。这是我误解的部分。
 
扔出

alanjt 发表于 2022-7-6 11:43:21

所有这些使用entmake和您使用命令来创建层。感觉就像是买了一辆捷豹,但为了节省100美元,在真皮座椅上省钱。
 
 
别介意,我只是随便挑。

CHLUCFENG 发表于 2022-7-6 11:45:30

实际上,在我的代码中,我省略了层的创建,因为当输入块实体时,层是自动创建的。我在什么地方读过这篇文章,但忘了在哪里。这是真的吗?
 
我这样做的原因是因为我试图先entmake层,在生成错误的同时,发现我不必在块中,但任何关于正确entmake层过程的额外教程都将不胜感激。
 
扔出

alanjt 发表于 2022-7-6 11:47:39

下面是几个创建层的示例。Vovka在entmake上做得很好。
 
http://www.theswamp.org/index.php?topic=33041.0
 
另外,要知道,在使用entmake时,如果指定了一个层(cons 8“LayerName”),如果该层不存在,则会创建该层。

CHLUCFENG 发表于 2022-7-6 11:51:41

哇,四个版本可供学习!
 
非常好的链接,谢谢。

alanjt 发表于 2022-7-6 11:55:21

大多数示例(我的和罗恩的)都在VLA中,但沃夫卡的是一个很好的entmake示例。
页: 1 [2]
查看完整版本: 插入带有