各位大侠帮忙看看 entmake复杂图块出现奇怪问题
在x_s_s_1大侠的帮助下现在可以生成复杂图块的定义了
但是碰到一个奇怪的问题
怎么也查不出出错的原因
各位大侠帮忙看看
我希望的是生成两个块定义
第一个块定义生成以后不作改变
第二个块定义的图元的组成
与第一个完全一致
只是插入点改为块的正中心
为此
在第一个块定义最后生成之前
计算出所有图元的中心点midpo
然后在定义第二个块时
将图元生成的基点进行偏移
现在的结果是
第一个块没有问题
第二个块怎么都不对
问题出在midpo上
按说所有的参数都不变的情况下
midpo的值应该是固定的
但是它偏偏在两个值之间反复切换
折腾了整整一天
实在是搞不定
请各位高手出手相助
我这边再试试
用第二个块定义的图元组计算出中心
依次对图元组进行entmod移位
最后生成块定义
看看这样行不行
我隐约知道问题出在哪了
生成图元定义
这时的图元还没有加入到数据库中
不能计算它们的中心点
程序里算出的中心点
实际上是其它图元的中心点
大概的原因应该就是这样
可是怎么解决呢 就自己目前的能力来说
唯一的解决途径
先遍历生成图元的条件表
模拟计算出各图元的位置
再生成图块定义
唉
继续熬夜吧 老兄,您弄得好複雜,插入圖塊後就是一個物件了,從已插入的圖塊再處理不是比較單純嗎?而且求中心也不必遍歷形成圖塊的各圖元 我表达的不够清楚
打开上传的lisp会很清晰
其它函数计算得到一个列表
并将其赋值给生成图块的函数
函数依次读取子表
生成对应的块子图元定义
最后将其转为图块定义
所谓遍历指的是这个表
其实是个蛮简单的事
结果自己犯傻
以为图块定义结束前
定义的子图元可以被检索
结果悲剧了
本帖最后由 lsjj 于 2013-4-18 11:04 编辑
如果您是为了解决插入图块速度愈来愈慢的问题,那建议您真的不要浪费时间在ENTMAKE或COMMAND上,
还有,程序中尽量不要用append
提供一个计算图块定义图形中心的函数:
;;计算图块定义的中心坐标 参数 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)
)
)
)
) G版为什么总能这么牛X呢
这段代码厉害
以后能用得上 lsjj 发表于 2013-4-18 10:29 static/image/common/back.gif
如果您是为了解决插入图块速度愈来愈慢的问题,那建议您真的不要浪费时间在ENTMAKE或COMMAND上,
还有,程序中 ...
能不能详细解说一下这段话的意思
速度越来越慢的现象
具体的原因是什么
append函数很耗资源吗
用command主要是方便
entmake也不用的话
其它的也不会呀
CPU效能似乎對CAD有較大的影響,電腦設備一直在進步,相同的程序在R12時的現象,在CAD2008已沒有感覺,
有些程序在CAD2008會愈跑愈慢,拿早期的電腦在跑,會以為它當機了
樓主可以嘗試用cons取代append,如果您的串列資料是利用循環增加的話,是會有感覺的
我的經驗,用command或entmake對程序跑圖的效率不會有明顯差異,要快的話應該是寫成DXF
页:
[1]