找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1726|回复: 15

[编程申请]:Entmake生成Dimstyle

[复制链接]
发表于 2002-11-3 00:25:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
求救!如何用Entmake生成一个新的Dimstyle?或是lisp的其他方法?:i
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-3 00:38:15 | 显示全部楼层
你去看看下面这个帖子,关于ENTMAKE创建文字样式的帖子:

http://www.xdcad.net/forum/showthread.php?postid=78444#post78444

应该能对你有帮助,因为都是对符号表下的进行操作。

试试写,写的过程遇到的问题再贴论坛和大家交流吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-11-3 09:06:28 | 显示全部楼层

Re: [编程申请]:Entmake生成Dimstyle

最初由 nwlulu 发布
[B]求救!如何用Entmake生成一个新的Dimstyle?或是lisp的其他方法?:i [/B]

  1. 命令: (entget (tblobjname "DIMSTYLE" "standard"))
  2. ((-1 . <图元名: 40190ce0>) (0 . "DIMSTYLE") (105 . "1C") (330 . <图元名:
  3. 40190cb0>) (100 . "AcDbSymbolTableRecord") (100 . "AcDbDimStyleTableRecord") (2
  4. . "STANDARD") (70 . 0) (340 . <图元名: 40190c60>))

  5. 命令: st STYLE 正在重生成模型。

  6. 命令: (entget (cdr (assoc 340 (entget (tblobjname "DIMSTYLE" "standard")))))
  7. ((-1 . <图元名: 40190c60>) (0 . "STYLE") (330 . <图元名: 40190c58>) (5 . "C")
  8. (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 .
  9. "STANDARD") (70 . 0) (40 . 0.0) (41 . 0.75) (50 . 0.0) (71 . 0) (42 . 0.2) (3 .
  10. "romans.shx") (4 . ""))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-9 09:03:29 | 显示全部楼层
谢谢晓东,谢谢eachy,下面是我写的程序,可以生成一个新的dimstyle,问题是新的dimstyle无法更新字型,如何办?新的dimstyle亦不认同dimblk,如何办?我在尝试写一个可以实时offset,stretch的程序,即按当前比例offset等。

  1. (defun MK_dimstyle (scl dstyle)
  2.   (if (findfile "_dimx.dwg")
  3.     (progn
  4.       (command "insert" "_dimx")
  5.       (command)
  6.     )
  7.   )
  8.   (setq elist (list '(0 . "DIMSTYLE")
  9.         '(100 . "AcDbSymbolTableRecord")
  10.         '(100 . "AcDbDimStyleTableRecord")
  11.          (cons 2 dstyle)
  12.         '(70 . 0)
  13.         '(5 . "_dimx")
  14.         '(6 . "_dimx")
  15.         '(7 . "_dimx")
  16.         '(40 . 1.0)
  17.         '(41 . 1.0)
  18.         '(42 . 300)
  19.         '(44 . 150)
  20.         '(140 . 350)
  21.         '(141 . 250)
  22.          (cons 144 (* 0.01 scl))
  23.         '(147 . 80)
  24.          )
  25.           )
  26.           (entmake elist)
  27. ;(setq        e1 (tblobjname "dimstyle" dstyle)
  28. ;        e2 (entget e1)
  29. ;        e2 (append e2
  30. ;            (list (cons 5 "_dimx")
  31. ;                 (cons 6 "_dimx")
  32. ;              (cons 7 "_dimx")
  33. ;            )
  34. ;           )
  35. ; )
  36. ;;;    (setq        e2 (entget (cdr (assoc 340 (entget e1))))
  37. ;;;        e2 (subst (cons 2 "dim") (assoc 2 e2) e2)
  38. ;;;  )
  39. ;  (entmod e2)
  40. ;  (entupd e1)
  41. ;;;  (entmake '((0 . "STYLE")
  42. ;;;             (5 . "11")
  43. ;;;             (100 . "AcDbSymbolTableRecord")
  44. ;;;             (100 . "AcDbTextStyleTableRecord")
  45. ;;;             (2 . "Dim")
  46. ;;;             (70 . 0)
  47. ;;;             (40 . 0.0)
  48. ;;;             (41 . 1.0)
  49. ;;;             (50 . 0.0)
  50. ;;;             (71 . 0)
  51. ;;;             (42 . 2.5)
  52. ;;;             (3 . "dim")
  53. ;;;             (4 . "hztxt")
  54. ;;;            )
  55. ;;;  )
  56. ;)
  57. (defun c:bb () (MK_dimstyle 20 "_d20"))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-9 21:39:26 | 显示全部楼层
应该 (command ".dim" "up" ....)一次。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-9 21:44:50 | 显示全部楼层
最初由 nwlulu 发布
[B]谢谢晓东,谢谢eachy,下面是我写的程序,可以生成一个新的dimstyle,问题是新的dimstyle无法更新字型,如何办?新的dimstyle亦不认同dimblk,如何办?我在尝试写一个可以实时offset,stretch的程序,即按当前比例offset?.. [/B]


标注样式中的字型和箭头块是引用,要求引用的对象数据库中必须存在,所以在ENTMAKE标注样式的时候,用到的字型和箭头块程序应该先判断是否存在,如果不存在,创建他们。然后再ENTMAKE标注样式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-10 11:21:21 | 显示全部楼层
在我的程序里不希望出现command,否则字型、尺寸块均很能容易修改。之所以字型和尺寸块不能在entmake里修改,我理解是因为嵌套的缘故,如eachy所列的第二点(340)一项,这种嵌套如何修改?在我的当前图形里已经有了想用的字型与箭头块,可以看我的程序,首先插入了箭头块。这个问题实在困惑我太久了,希望得到各位大侠的帮助。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-10 11:35:38 | 显示全部楼层
引自cad帮助:
如果使用 entmod 修改了三维(或早期样式)多段线顶点或块属性,则在屏幕上不会更新全部图元。entupd 函数可以在屏幕上更新修改后的多段线或块。以多段线或块的任一部分的图元名为参数,都可以调用该函数。entupd 适用于块和带有属性的多段线,任何图元都可以调用该函数。该函数重生成屏幕上的该图元(包含所有子图元)。
注意 如果对嵌套图元(块内的图元)或包含嵌套图元的块使用 entupd 函数,则有些图元可能不能重生成。要确保顺利完成重生成操作,必须调用 REGEN 命令。


我想dim "up"是不是用了局部regen?
最近整理以前的lsp,有些重新改写了。发现当修改dimstyle后,用entupd更新dim也不起作用,但是用 dim "up" 就可以更新。
xd知道怎么回事么?
是不是对 dimstyle 也要entupd一次?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-10 18:52:06 | 显示全部楼层


  1.   (if (findfile "_dimx.dwg")
  2.     (progn
  3.       (command "insert" "_dimx")
  4.       (command)
  5.     )
  6.   )
  7.   


你这段代码好像有问题。

首先应该判断块_DIMX是否存在,没有插入。有就略过。

上面的代码有问题,插入不进来,缺参数。如果有块存在,ACAD交互时候会提示你是否重新定义,这些都要判断。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-11-10 19:40:08 | 显示全部楼层
这样判断
  1. (if (and  (findfile "_dimx.dwg")
  2.             (tblobjname "block" "_dimx")
  3.     )
  4. (progn
  5.    (comand ".insert" "_dimx" '(0 0 0) "1" "1" "0")
  6.    (entdel (entlast))
  7.   )
  8. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-10 19:46:03 | 显示全部楼层
应该把:(tblobjname "block" "_dimx")放到判断的第一个条件。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-10 20:05:41 | 显示全部楼层
最初由 eachy 发布
[B]这样判断
  1. (if (and  (findfile "_dimx.dwg")
  2.             (tblobjname "block" "_dimx")
  3.     )
  4. (progn
  5.    (comand ".insert" "_dimx" '(0 0 0) "1" "1" "0")
  6.    (entdel (entlast))
  7.   )
  8. )
[/B]


[B]  用 (comand ".insert" "_dimx" ^c)  就已经可以得到块定义了。

  1. (if (not (tblobjname "block" "_dimx"))
  2.   (if (findfile "_dimx.dwg")
  3.       (command ".insert" "_dimx" ^c)
  4.       (princ "\n没有块定义或块文件!")
  5.   )
  6. )
[/B]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-10 21:15:54 | 显示全部楼层
关于箭头块我认为不是问题关键,此段代码我曾略去过,而在图内插入,亦无法在entmake中用'(5 . "_dimx")等生成,如前eachy所写:
命令: (entget (tblobjname "DIMSTYLE" "standard"))
((-1 . <图元名: 40190ce0>) (0 . "DIMSTYLE") (105 . "1C") (330 . <图元名:
40190cb0>) (100 . "AcDbSymbolTableRecord") (100 . "AcDbDimStyleTableRecord") (2
. "STANDARD") (70 . 0) (340 . <图元名: 40190c60>))
此中并无任何箭头块属性。在Acad2002中若以acadiso.dwt为模板,可以有比上例多一些的DXF代码,但无箭头块和字型,字型在(340 . <图元名: 40190c60>)中,我希望各位能告知这种嵌套的代码有否方法更新,无论entmod拟或entupd之类。听探索者公司的一位朋友说,晓东可以编出天正一样的软件,那么天正这个问题是怎么实现的呢?上面的代码我曾这样写过:
(if (null (tblsearch "block" "_dimx"))
  (if (findfile "_dimx.dwg")
    (progn
      (command "insert" "_dimx")
      (command)
    )
  )
)
我以前的写法应该也没什么问题,它的作用是插入一个块,但在提示插入点或其它什么时cancel,此时在图中块表里已有该块,但在图形中无,免得再删除它。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-10 21:23:27 | 显示全部楼层
我也喜欢用entmake,因为可以直接设定图层色线,也快,
不过dimstyle和block等例外,因为entmake更麻烦。
你可以参考一下stdlib的entmake写法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-10 22:02:09 | 显示全部楼层
STDLIB看过了,真的很复杂,看人家写的程序,觉得我是在浪费青春,自已程序写得太糟,没有层次,什么时候国产软件能达到人家那个水平呢?写程序是种乐趣,但一点点小问题就难住了,很无奈!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-26 15:16 , Processed in 0.491984 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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