masterlong 发表于 2013-4-18 01:18:36

各位大侠帮忙看看 entmake复杂图块出现奇怪问题

在x_s_s_1大侠的帮助下
现在可以生成复杂图块的定义了
但是碰到一个奇怪的问题
怎么也查不出出错的原因
各位大侠帮忙看看





我希望的是生成两个块定义
第一个块定义生成以后不作改变
第二个块定义的图元的组成
与第一个完全一致
只是插入点改为块的正中心
为此
在第一个块定义最后生成之前
计算出所有图元的中心点midpo
然后在定义第二个块时
将图元生成的基点进行偏移

现在的结果是
第一个块没有问题
第二个块怎么都不对
问题出在midpo上
按说所有的参数都不变的情况下
midpo的值应该是固定的
但是它偏偏在两个值之间反复切换
折腾了整整一天
实在是搞不定
请各位高手出手相助

我这边再试试
用第二个块定义的图元组计算出中心
依次对图元组进行entmod移位
最后生成块定义
看看这样行不行

masterlong 发表于 2013-4-18 01:58:18

我隐约知道问题出在哪了
生成图元定义
这时的图元还没有加入到数据库中
不能计算它们的中心点
程序里算出的中心点
实际上是其它图元的中心点

大概的原因应该就是这样
可是怎么解决呢

masterlong 发表于 2013-4-18 02:23:18

就自己目前的能力来说
唯一的解决途径
先遍历生成图元的条件表
模拟计算出各图元的位置
再生成图块定义

继续熬夜吧

lsjj 发表于 2013-4-18 09:04:38

老兄,您弄得好複雜,插入圖塊後就是一個物件了,從已插入的圖塊再處理不是比較單純嗎?而且求中心也不必遍歷形成圖塊的各圖元

masterlong 发表于 2013-4-18 10:21:23

我表达的不够清楚
打开上传的lisp会很清晰
其它函数计算得到一个列表
并将其赋值给生成图块的函数
函数依次读取子表
生成对应的块子图元定义
最后将其转为图块定义
所谓遍历指的是这个表

其实是个蛮简单的事
结果自己犯傻
以为图块定义结束前
定义的子图元可以被检索
结果悲剧了

lsjj 发表于 2013-4-18 10:29:33

本帖最后由 lsjj 于 2013-4-18 11:04 编辑

如果您是为了解决插入图块速度愈来愈慢的问题,那建议您真的不要浪费时间在ENTMAKE或COMMAND上,
还有,程序中尽量不要用append

Gu_xl 发表于 2013-4-18 12:12:03

提供一个计算图块定义图形中心的函数:

;;计算图块定义的中心坐标 参数 name = 块名称 By Gu_xl
(defun GetBlockDefCenter (name / mins maxs ll ur blkdef) (vl-load-com)
(if (not
      (VL-CATCH-ALL-ERROR-p
          (setq blkdef
               (VL-CATCH-ALL-APPLY
                   'vla-item
                   (list (vla-get-blocks
                           (vla-get-ActiveDocument (vlax-get-acad-object))
                           )
                         name
                         )
                   )
                )
          )
      )
    (progn
      (vlax-for o blkdef
      (vla-GetBoundingBox o 'll 'ur)
      (if mins
          (setq mins (mapcar 'min mins (vlax-safearray->list ll))
                maxs (mapcar 'max maxs (vlax-safearray->list ur))
                )
          (setq mins (vlax-safearray->list ll)
                maxs (vlax-safearray->list ur)
                )
          )
      )
      (mapcar '*
            '(0.5 0.5 0.5)
            (mapcar '+ mins maxs)
            )
      )
    )
)

masterlong 发表于 2013-4-19 00:04:40

G版为什么总能这么牛X呢
这段代码厉害
以后能用得上

masterlong 发表于 2013-4-19 00:16:36

lsjj 发表于 2013-4-18 10:29 static/image/common/back.gif
如果您是为了解决插入图块速度愈来愈慢的问题,那建议您真的不要浪费时间在ENTMAKE或COMMAND上,
还有,程序中 ...

能不能详细解说一下这段话的意思
速度越来越慢的现象
具体的原因是什么
append函数很耗资源吗


用command主要是方便
entmake也不用的话
其它的也不会呀

lsjj 发表于 2013-4-21 11:17:38

CPU效能似乎對CAD有較大的影響,電腦設備一直在進步,相同的程序在R12時的現象,在CAD2008已沒有感覺,
有些程序在CAD2008會愈跑愈慢,拿早期的電腦在跑,會以為它當機了
樓主可以嘗試用cons取代append,如果您的串列資料是利用循環增加的話,是會有感覺的
我的經驗,用command或entmake對程序跑圖的效率不會有明顯差異,要快的話應該是寫成DXF

页: [1]
查看完整版本: 各位大侠帮忙看看 entmake复杂图块出现奇怪问题