初来乍到,还请多关照:我的第一个问题是谁知道AutoCAD中混凝土材料的填充原理,它在Delphi中如何实现?(100分)

  • 主题发起人 主题发起人 tttt_tttt
  • 开始时间 开始时间
T

tttt_tttt

Unregistered / Unconfirmed
GUEST, unregistred user!
混凝土材料是由一些不规则的三角形和黑点组成,互相没有重叠
 
用Brush.Bitmap来搞定。
 
我知道可以给Brush设位图,但Brush的位图非常小,一般都用于规则填充的,但混凝土的位图为一种不规则的位图,还请想办法,谢谢
 
[red]图形嘛,正下不行.呵呵,那就听课吧!
UP一下吧.[/red]
 
我不知道你说的"不规则"是有多不规则,但是应该有规律的吧?能否Copy一分图片给我?
不然你得自己写填充算法.
 
to 吕雪松:多次在论坛上看到你的名字,知道你是一个热心人,十分感谢!
不过我还不知道你的邮箱是多少?我已将图片做好。其实该填充问题可能也是采用改变
画刷的Bitbmp,因为在AutoCAD中实现时首先是选填充的样式,然后设定填充比例,
选择填充的物体或边界,OK即可。
 
My email: taozhong1@263.net
 
leisure.lv@263.net
 
图片已发出,请查收,谢谢
 
你可以先创建一个混凝土材料的位图,然后用API函数CreatePatternBrush()用该位图创建一个画刷啊!
感觉有点像3D游戏的贴图方法 ^_^
 
to 吕雪松: 收到我的图片了么?谢谢
 
我问个不休
 
tttt_tttt
我收到你的图片了,其实你只要仔细看看,还是可以发现该图片是有规律的,也就是说,还
是由“运算子”图片构成的。
我自己用“画笔”画了一个混凝土样子的(很多三角形,小方块等,比你给我的还要好看)
400*400的图片,注意要设置为“黑白”,然后在Delphi中调用Brush.Bitmap := ...
效果很好的。

并且,我发现400*400并不是上限,还可以再大一些。
 
to 吕雪松: 能不能将你的图片及编的程序发给我参考一下,一定加分,十分感谢!

taozhong@fzu.edu.cn
 
//很简单的,图片已经发给你了。
procedure TForm1.Button1Click(Sender: TObject);
var
BMP : TBitMap;
begin
BMP := TBitmap.Create;
BMP.LoadFromFile('c:/1.bmp');
Canvas.Brush.Bitmap := BMP;
Canvas.Polygon([Point(10, 10), Point(300, 10),
Point(430, 30), Point(240, 120)]);
BMP.Free;
end;
 
TO 吕雪松老师:
我觉得用LoadBitmap()读取作为画刷的图片,然后用CreatePatternBrush()将其作为画刷输出更好!
另不知用StretchDIBits()如何???
 
to 吕雪松: 谢谢你的图片,不过我用你贴出来的程序段绘出的Polygon没有进行任何填充,而
用Form1.Canvas.FillRect()是有填充效果的,另外,请问一下,在填充时能否设定比例,也就是说
能否将图片放大或缩小后再填充,还有,能不能达到平铺的效果,也就是说当我的图片尺寸不够时
自动进行平铺?
 
对了,好像Polygon填充时的图片只能用到8*8像素的小图片,对于大于8*8像素,只用上面8*8像素

我又作了一个8*8像素的小图片, 是有填充效果的,且自动平铺

但对于吕雪松老师做的图片,怎么来填充?
 
to 很多t
不会吧,我就是用这段代码来显示的,有填充,很好的效果。
 
to 吕雪松: 那就很奇怪了,我用的是D5,查TCanvas.Bitmap是申明了8*8像素要求的,不知
你是不是用D6,如果不是请帮我查一下TCanvas.Bitmap的用法,谢谢。
 
后退
顶部