明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1069|回复: 8

[提问] entmake填充遇到一个比较奇怪的问题

[复制链接]
发表于 2015-8-25 17:56:40 | 显示全部楼层 |阅读模式
本帖最后由 124803430 于 2015-8-25 17:59 编辑
  1. (setq pt1 (getpoint )
  2.   pt2 (polar pt1 (* pi 1.5) 200)
  3.   pt3 (polar pt2 0 200)
  4.   pt4 (polar pt3  (/ pi 2) 200))
  5. (entmake (list '(0 . "LWPOLYLINE")
  6.          '(100 . "AcDbEntity")
  7.          '(100 . "AcDbPolyline")
  8.          (cons 90 10)
  9.          (cons 10 (list(car pt1)(cadr pt1)))
  10.          (cons 10 (list(car pt2)(cadr pt2)))
  11.          (cons 10 (list(car pt3)(cadr pt3)))
  12.          (cons 10 (list(car pt4)(cadr pt4)))
  13. (cons 10 (list(car pt1)(cadr pt1)))
  14. ))
我想利用entmake生成hatch对象,但是老提示出错
上面这段代码生成正方形后

我想先生成一段组码,然后照着这个组码写entmake的所需表元素
直接在CAD上运行H命令在该正方形内部填充,填充选的是“添加拾取点"直接填充,然后利用下面代码查看DXF组码
(setq en (entget (car (entsel))))
然后想
照着已经生成好的组码用entmake直接生成填充对象
  1. (entmake '((0 . "HATCH") (100 . "AcDbEntity") (8 . "0") (100 . "AcDbHatch")
  2.      (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . "SOLID")
  3.       (70 . 1)(71 . 0) (91 . 8) (92 . 7) (72 . 0)(73 . 1) (93 . 4)
  4. (cons 10 pt1) (cons 10 pt2) (cons 10 pt3) (cons 10 pt4)
  5. (97 . 0) (75 . 0) (76 . 1) (47 . 2.15525) (98 . 1) (10 38388.3 13720.1 0.0) (450 . 0) (451 . 0) (460 . 0.0) (461 . 0.0) (452 . 1) (462 . 1.0) (453 . 2) (463 . 0.0) (63 . 5) (421 . 255) (463 . 1.0) (63 . 7) (421 . 16777215) (470 . "LINEAR")))
复制代码
运行上面这段代码,老提示”DXF 组不正确: (CONS 10 PT1)“
有高人知道这里到底是什么问题吗???

发表于 2015-8-25 18:14:04 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-8-25 18:20 编辑

(cons 10 pt1)以及后边几个CONS本来都是能直接运行的代码,它的运行结果可以作为组码。但提示出错的并来是运行这句代码的结果而是直接是这句代码,也就是说它没得到执行而被直接当成了组码,当然是错的!这说明这句代码它没能得到执行,原因是它在前边的'(....)里边,由于‘的作用,使得它不能被运行。
可以改成(entmake(list'(0 . "HATCH").....(93 .  4)(cons 10 pt1).....))
 楼主| 发表于 2015-8-26 09:45:50 | 显示全部楼层
llsheng_73 发表于 2015-8-25 18:14
(cons 10 pt1)以及后边几个CONS本来都是能直接运行的代码,它的运行结果可以作为组码。但提示出错的并来是运 ...

感谢回复
你的方法还是有问题,如果前端用list之后,点表结构好像出问题了
函数调用语法错误: (100 . "AcDbEntity")
出现这种提示
(entmake (list('(0 . "HATCH") (100 . "AcDbEntity") (8 . "0") (100 . "AcDbHatch")
     (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . "SOLID")
      (70 . 1)(71 . 0) (91 . 8) (92 . 7) (72 . 0)(73 . 1) (93 . 4)
(cons 10 pt1) (cons 10 pt2) (cons 10 pt3) (cons 10 pt4)
(97 . 0) (75 . 0) (76 . 1) (47 . 2.15525) (98 . 1) (10 38388.3 13720.1 0.0) (450 . 0) (451 . 0) (460 . 0.0) (461 . 0.0) (452 . 1) (462 . 1.0) (453 . 2) (463 . 0.0) (63 . 5) (421 . 255) (463 . 1.0) (63 . 7) (421 . 16777215) (470 . "LINEAR"))))
运行代码
发表于 2015-8-26 09:59:47 | 显示全部楼层
哎,依样学样要学象。。。。别的点对表前边也要加撇号,除了cons的不加
 楼主| 发表于 2015-8-26 10:08:43 | 显示全部楼层
llsheng_73 发表于 2015-8-26 09:59
哎,依样学样要学象。。。。别的点对表前边也要加撇号,除了cons的不加

你的方法还是不成立
直接就函数错误: (0 . "HATCH")
(entmake (LIST('(0 . "HATCH") '(100 . "AcDbEntity") '(8 . "0") '(100 . "AcDbHatch")
     '(10 0.0 0.0 0.0) '(210 0.0 0.0 1.0) '(2 . "SOLID")
      '(70 . 1)'(71 . 0) '(91 . 8) '(92 . 7) '(72 . 0)'(73 . 1) '(93 . 4)
(cons 10 pt1) (cons 10 pt2) (cons 10 pt3) (cons 10 pt4)
'(97 . 0) '(75 . 0) '(76 . 1) '(47 . 2.15525) '(98 . 1) '(10 38388.3 13720.1 0.0) '(450 . 0) '(451 . 0) '(460 . 0.0) '(461 . 0.0)
'(452 . 1) '(462 . 1.0) '(453 . 2) '(463 . 0.0) '(63 . 5) '(421 . 255) '(463 . 1.0) '(63 . 7) '(421 . 16777215) '(470 . "LINEAR"))))
 楼主| 发表于 2015-8-26 10:09:18 | 显示全部楼层
还是点表写的有问题

点评

我回头买块豆腐去  发表于 2015-8-26 12:30
发表于 2015-8-26 10:44:04 | 显示全部楼层
很大的问题,你还没弄懂 ' 的作用与区别。
'(0 . "hatch")和(cons 0 "hatch")
用cons 函数可以构造点对函数,cons后面才能用变量,而'实际是quote函数简写'(0 . "hatch")=(quote (0 . "hatch"))
说说你的entmake表结构。
如果使用了变量,那么entmake为
  1. (entmake (list (cons 0 "hatch")
  2.                (cons 100 "AcDbEntity")
  3.                (cons 8 "0")
  4.                (cons 100 "AcDbHatch")
  5.                (cons 10 (list 0 0 0))
  6.                省略
  7.                )
  8.          )


因为0 100等组码值固定那么可以简写为
  1. (entmake (list '(0 . "hatch")
  2.                '(100 . "AcDbEntity")
  3.                '(8 . "0")
  4.                '(100 . "AcDbHatch")
  5.                (cons 10 (list 0 0 0))
  6.                省略
  7.                )
  8.          )

另外,用entmakex是可以返回创建的新图元名的。
发表于 2015-8-26 17:33:49 | 显示全部楼层
  1. (entmake (list '(0 . "HATCH") '(100 . "AcDbEntity") '(8 . "0") '(100 . "AcDbHatch")
  2.      '(10 0.0 0.0 0.0) '(210 0.0 0.0 1.0) '(2 . "SOLID") '(70 . 1)'(71 . 0) '(91 . 8) '(92 . 7) '(72 . 0)'(73 . 1) '(93 . 4)
  3. (cons 10 pt1) (cons 10 pt2) (cons 10 pt3) (cons 10 pt4)
  4. '(97 . 0) '(75 . 0) '(76 . 1) '(47 . 2.15525) '(98 . 1) '(10 38388.3 13720.1 0.0) '(450 . 0) '(451 . 0) '(460 . 0.0) '(461 . 0.0)
  5. '(452 . 1) '(462 . 1.0) '(453 . 2) '(463 . 0.0) '(63 . 5) '(421 . 255) '(463 . 1.0) '(63 . 7) '(421 . 16777215) '(470 . "LINEAR")  ))
复制代码
发表于 2015-8-28 14:07:52 | 显示全部楼层
学习学习,省得大师都惨在豆腐上
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-21 09:39 , Processed in 0.219243 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表