Revised Visualization Source Code

    Visualization 模块中部分代码存在 bug,以下修改来自Open Cascade 官方论坛中有人做的patch,及自己修改的(少部分):

1: TKV3d.dll

1.1

File:
Visual3d_TransientManager.cxx

Func:
BeginDraw();
BeginAddDraw();
ClearDraw();

Source:
// after the line
theCiew = *(CALL_DEF_VIEW*)AView->CView();
// add these lines

if( !AView->UnderLayer().ISNull()){
 theCView.ptrUnderLayer = (CALL_DEF_LAYER*) & (AView->UnderLayer()->CLayer());
}

if( !AView->OverLayer().ISNull()){
 theCView.ptrOverLayer = (CALL_DEF_LAYER*) &(AView->OverLayer()->CLayer());
}

//在原来的代码中,每次重绘,Layer没有被绘制,修改后,每次场景重绘,Layer都会刷新。


2: TKOpenGL.dll

2.1

File:
OpenGL_triedron.c

Func:
call_zbuffer_triedron_redraw()

Source:

//ln836

if(!isWithinView) // delete

//ln1168

if(!iswithinView) // delete

// 原代码中,坐标系模型(ZBUFFER模式下)的原点位于视锥体内时,模型永远位于屏幕中央,修改后,位于所//设置的参数所对应的位置


2.2

File:
OpenGL_triedron.c

Func:
call_zbuffer_triedron_redraw()

Source:

// ln 961
// add this line
  glDisable(GL_DEPTH_TEST);

//ln 935
LightOn();// replace this sentence with function: LightOff();

// 关闭深度测试和光照


2.3

File:
OpenGL_togl_begin_layer_mode.c

Func:
call_togl_redraw_layer2d();

Source:
// ln310
glOrtho()// the last two parameters (-1.0,1.0) should be revised to (-10000.0,10000.0)

// 修改后在layer上可以绘制3d图形(原先只能绘制2D,z坐标为0的点)


2.4

File:
OpenGL_txfm.c

Func:
loadTextFont();

Source
// ln 829
// before " return; ", add these sentences
DeleteObject(font);
DeleteObject(hBmp);
DeleteDC(hMenDC);

// 原代码中未释放资源

这个汇编程序是一个简单的示例,演示了如何在汇编语言中实现加法运算和退出程序。 ``` ; Example assembly language program -- adds two numbers ; Author: R. Detmer ; Date: revised 7/97 .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE io.h cr EQU 0dh ; carriage return character Lf EQU 0ah ; line feed .STACK 4096 .DATA a DD 5 ; first number b DD 7 ; second number result DD ? ; result of addition .CODE _start: mov eax, a ; move first number into EAX register add eax, b ; add second number to EAX register mov result, eax ; store result in memory print_str "The sum of ", a, " and ", b, " is ", result, cr, Lf INVOKE ExitProcess, 0 ; exit with return code 0 print_str PROC STDCALL push ebp mov ebp, esp pushad mov edx, 0 .print_loop: mov eax, [ebp + 8 + edx * 4] cmp eax, 0 je .print_end push eax call print_int add esp, 4 inc edx jmp .print_loop .print_end: mov eax, [ebp + 8 + edx * 4] cmp eax, cr je .print_return cmp eax, Lf je .print_return push eax call print_char add esp, 4 jmp .print_end .print_return: popad mov esp, ebp pop ebp ret print_str ENDP print_char PROC STDCALL push ebp mov ebp, esp push ebx mov bl, byte ptr [ebp + 8] mov eax, 1 mov ecx, esp mov [ecx], bl mov ebx, 0 mov edx, 1 int 0x80 pop ebx mov esp, ebp pop ebp ret print_char ENDP print_int PROC STDCALL push ebp mov ebp, esp push ebx push esi push edi mov eax, [ebp + 8] mov ebx, 10 xor edx, edx mov esi, esp cmp eax, 0 jge .int_positive neg eax mov ah, '-' mov byte ptr [esi], ah inc esi .int_positive: cmp eax, 0 jne .int_loop mov byte ptr [esi], '0' inc esi jmp .int_end .int_loop: xor edx, edx div ebx add dl, '0' mov byte ptr [esi], dl inc esi cmp eax, 0 jne .int_loop .int_end: mov byte ptr [esi], 0 mov edi, esi dec esi mov ebx, esp .int_reverse: cmp esi, edi jge .int_return mov al, byte ptr [esi] mov byte ptr [esi], byte ptr [edi] mov byte ptr [edi], al dec edi inc esi jmp .int_reverse .int_return: push ebx call print_str add esp, 4 pop edi pop esi pop ebx mov esp, ebp pop ebp ret print_int ENDP PUBLIC _start END ``` 这个程序使用了 IO.h 头文件中的 PRINT_STRING, PRINT_CHAR 和 PRINT_INT 函数来打印输出。程序将两个数字相加,并将结果存储在 memory 中,然后将结果打印到控制台。最后,程序调用 ExitProcess 函数退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值