一DWG文件,编程根据状态改变对应的图形(如颜色),怎么弄?高分相送。
解决方案 »
- 求助:树的写法
- 请问一个Form的按钮事件中,如何写代码显示同一个Form,当然显示的Form的记录不同(里面有AdoQuery组件)
- http://community.csdn.net/Expert/topic/3943/3943031.xml?temp=4.310244E-02
- adods.FieldByName('station').value是从ACCESS中读到值是乱码的?
- 可用分又多了不少,想学葛朗台,可是坚持不住了,进来吧,都给你们算了....
- 笨鸟问一个问题
- 关于Dbgrid显示的问题?
- 拿分了!快点来呀!
- 为什么不响应我的事件?一定给分!
- 求quickrep的用法
- 得到了一个窗口的句柄后,怎么才能根据这个窗口句柄找到这个窗体内控件?怎么设置这个窗体内某些控件的属性?
- 菜鸟级问题(送点分)
acad:OleVainat;
aLine:Variant;
startPoint,endPoint:Variant;
aHandle:Variant;
begin
//连接CAD
acad:=GetActiveOleObject('AutoCAD.Application'); //创建直线起点
startPoint:=VarArrayCeate([0,2],VarDouble);
startPoint[0]:=0;
startPoint[0]:=0;
startPoint[0]:=0; //创建直线终点
endPoint:=VarArrayCeate([0,2],VarDouble);
endPoint[0]:=100;
endPoint[0]:=100;
endPoint[0]:=100; //在CAD中创建一条直线
aLine:=acad.ActiveDocument.ModelSpace.addline(startPoint,endPoint); //将该直线以起点为中心,旋转90度
aLine.Rotate(startPoint,3.14/2); //取得直线句柄,CAD中的句柄好像是string类型的,不太确定,故这里用variant类型
aHandle:=aLine.Handle; //其它处理 //详细内容参考AutoCAD的VBA部分
end;直接在CAD中创建的对象,必须通过选定才能取得句柄
var
aObject:Variant;
basePoint:Variant;
aHandle:Variant;
......
begin
......
aObject:=acad.Utility.GetEntity(aObject,basePoint); //取得对象句柄
aHandle:=aObject.Handle;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, StdCtrls, ExtDlgs;type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
T_red: TTrackBar;
T_green: TTrackBar;
T_blue: TTrackBar;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
B_open: TButton;
B_close: TButton;
OpenPictureDialog1: TOpenPictureDialog;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Image_source: TImage;
Image_target: TImage;
B_reset: TButton;
procedure B_closeClick(Sender: TObject);
procedure B_openClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure T_redChange(Sender: TObject);
procedure B_resetClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;const
MaxPixelCount=32768;type
pRGBArray=^TRGBArray;
TRGBArray=ARRAY[0..MaxPixelCount-1] OF TRGBTriple;var
Form1: TForm1;
str: String; //记录文件名implementation{$R *.dfm}function Min(a, b: integer): integer;
begin
if a < b then
result:=a
else
result:=b;
end;function Max(a, b: integer): integer;
begin
if a > b then
result:=a
else
result:=b;
end;procedure TForm1.B_closeClick(Sender: TObject);
begin
Close;
end;procedure TForm1.B_openClick(Sender: TObject);
begin
T_red.Position:=0;
T_red.Enabled:=False;
T_green.Position:=0;
T_green.Enabled:=False;
T_blue.Position:=0;
T_blue.Enabled:=False;
if OpenPictureDialog1.Execute then
begin
str:=OpenPictureDialog1.FileName;
Image_source.Picture.LoadFromFile(OpenPictureDialog1.FileName);
Image_target.Picture.LoadFromFile(OpenPictureDialog1.FileName);
T_red.Enabled:=True;
T_green.Enabled:=True;
T_blue.Enabled:=True;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
T_red.Position:=0;
T_red.Enabled:=False;
T_green.Position:=0;
T_green.Enabled:=False;
T_blue.Position:=0;
T_blue.Enabled:=False;
end;procedure TForm1.T_redChange(Sender: TObject);
var
Red_value,Green_value,Blue_value: integer;
i,j: integer;
source_Row,target_Row: pRGBArray;
begin
Red_value:=T_red.Position;
Green_value:=T_green.Position;
Blue_value:=T_blue.Position;
for i := 0 to Image_source.Picture.Height-1 do
begin
source_Row:=Image_source.Picture.Bitmap.ScanLine[i];
target_Row:=Image_target.Picture.Bitmap.ScanLine[i];
for j:=0 to Image_source.Picture.Width - 1 do
begin
if Red_value>0 then
target_Row[j].rgbtRed:=Min(255,source_Row[j].rgbtRed+Red_value)
else
target_Row[j].rgbtRed:=Max(0,source_Row[j].rgbtRed+Red_value);
if Green_value>0 then
target_Row[j].rgbtGreen:=Min(255,source_Row[j].rgbtGreen+Green_value)
else
target_Row[j].rgbtGreen:=Max(0,source_Row[j].rgbtGreen+Green_value);
if Blue_value>0 then
target_Row[j].rgbtBlue:=Min(255,source_Row[j].rgbtBlue+Blue_value)
else
target_Row[j].rgbtBlue:=Max(0,target_Row[j].rgbtBlue+Blue_value);
end;
end;
Image_target.Repaint;
end;procedure TForm1.B_resetClick(Sender: TObject);
begin
T_red.Position:=0;
T_red.Enabled:=False;
T_green.Position:=0;
T_green.Enabled:=False;
T_blue.Position:=0;
T_blue.Enabled:=False;
self.Image_target.Picture.LoadFromFile(str);
end;end.
可以使用上面的代码,,处理颜色,,,,
var
aObject:Variant;
basePoint:Variant;
aHandle:Variant;
......
begin
......
aObject:=acad.Utility.GetEntity(aObject,basePoint); //取得对象句柄
aHandle:=aObject.Handle;
end;我认为只有通过 GetEntity 方法选定要选择的对象,之后在通过 Handle 属性取得句柄才行。比如在CAD中有3个直线对象La、Lb和Lc,目标是要操作La对象,那么只有通过人工选择才能断定哪个是La阿。