/

30 tháng 6, 2013

Hàm toàn cục acedCommand

int acedCommand(int rtype, ... unnamed);

rtype Thông số đầu tiên trong mỗi cặp đại diện cho kiểu dữ liệu của thông số đi liền kề; một mã kiểu kết quả được định nghĩa trong adscodes.h
unnamed Thông số thứ hai trong mỗi cặp mang dữ liệu để đưa vào lệnh hoặc 0 (hay RTNONE) để chỉ ra kết thúc các cặp hệ số.

Thực hiện một hoặc nhiều lệnh AutoCAD


Note The acedCommand() function supports re-entrance up to four levels deep. AutoLISP does not support re-entrance, so if acedCommand() is called from within a function that has been executed via the AutoLISP/acedDefun() interface, there is no need to worry about re-entering acedCommand(). Commands registered via acedRegCmds->addCommand(), however, do support re-entrance and there is no way to determine how many levels of re-entrance are currently in effect to avoid exceeding the limit of four levels. If you must use acedCommand() in functions registered via acedRegCmds->addCommand(), you can avoid exceeding the re-entry limit of four levels, if you:

Do not use acedCommand() in functions registered as ACRX_CMD_TRANSPARENT
Do not use acedCommand() to execute any other commands registered via acedRegCmds->addCommand()
Do not use acedCommand() to execute anything that will allow user interaction
The acedCommand() function has a variable-length argument list. Arguments to acedCommand() are treated as pairs. The first of each pair identifies the type of the argument that follows, and the second contains the actual data. The final argument in the list must be a single argument whose value is either 0 or RTNONE. If 0 or RTNONE is the only argument in the list, this is equivalent to pressing [Ctrl]+[C] on the keyboard. Such a call cancels most AutoCAD commands (if any are in progress or are pausing for input).

A string that contains a single backslash ("\\" in source) causes the command to pause for user input, as described in the section “Pausing for User Input” later in this topic. An empty string ("") or null string is equivalent to a space entered from the keyboard.

The following restrictions apply to this function:

You cannot call acedCommand() to invoke AutoLISP functions nor other ARX applications (external functions in other ARX applications can be invoked with acedInvoke()).
You cannot call acedCommand() to invoke AutoCAD commands that directly access peripheral devices. These commands include DTEXT, SKETCH, and PLOT.
You can call acedCommand() to invoke SCRIPT or RSCRIPT (unlike the AutoLISP (command)).

Note If you call acedCommand() or acedCmd() to invoke SCRIPT or RSCRIPT, the script file is not read until the application returns control to AutoLISP. Therefore, such a call should be the external function's last call to an ARX library function; otherwise, the results can be confusing.

Nếu biến hệ thống AutoCAD CMDECHO được đặt bằng 0, dữ liệu được gửi bởi acedCommand() sẽ không được hiển thị. Ngược lại, CMDECHO = 1 thì cả lệnh và dữ liệu của nó sẽ được hiển thị trên dòng nhắc mà thôi.

Hàm acedCommand() có thể khởi động lệnh SAVE, SAVEAS của AutoCAD. Khi nó diễn ra, AutoLISp đưa ra thông điệp kSaveMsg tới tất cả các ứng dụng ARX đang được load, ngoại trừ ứng dụng đang gọi lệnh SAVE.

Giá trị trả về của acedCommand() không chỉ ra được hàm thành công hay thất bại, mà thường xuyên là RTNORM. Nó có thể trả về RTCAN nếu người dùng hủy bỏ lệnh bằng cách nhấn [Ctrl]+[C] hay [Ctrl]+[Break]. Nó trả về RTERROR hoặc RTREJ để chỉ ra thất bại của không rõ nguồn, chứ không phải của lệnh hiện hành.

Avoiding Problems with NEW and OPEN

Để tránh mất đồng bộ giao diện truyền tin giữa AutoCAD và ARX, không được đưa vào acedCommand() hay acedCmd() các lệnh NEW hoặc OPEN. Thay vào đó, đưa ra các đoạnh mã thực thi chức năng NEW và OPEN, trả lời tới dòng nhắc và gọi hàm trong ứng dụng ARX để trả lại quyền kiểm soát cho ưng dụng ARX.

Tạm dừng cho người dùng nhập liệu

Nếu một lệnh AutoCAD đang diễn ra và AutoCAD yêu cầu ký hiệu PAUSE như là một tham số cho hàm acedCommand() hoặc acedCmd(), lệnh sẽ bị đình chỉ để cho phép người dùng nhập liệu trực tiếp, bao gồm cả gắp thả (dragging). Ký hiệu PAUSE thay thể cho một ký tự "\". Nó giống như dấu gạch ngược tạm dừng cơ cấu cung cấp các menu.

Nếu bạn sử dụng một lệnh minh vô hình (transparent) trong khi lệnh đang bị tạm dừng, lệnh ban đầu sẽ bị treo trong khi lệnh transparent diễn ra. Vì vậy, người dùng vẫn có thể zoom và pan trong khi acedCommand() tạm dừng. Tạm dừng vẫn có hiệu lực cho đến khi AutoCAD có được đầu vào hợp lệ và không có lệnh transparent nào khác đang diễn ra..

Nếu AutoCAD tạm dừng khi một lệnh chờ đợi nhập vào một chuỗi ký tự, hay một giá trị attribute, AutoCAD sẽ chỉ dừng lại chỉ khi biến hệ thống TEXTVAL được đặt khác 0. Ngược lại, giá trị của ký tự tạm dừng (dấu sổ ngược) sẽ được thay thế cho text và không tạo ra quá trình tạm dừng nữa.

Khi lệnh acedCommand() tạm dừng cho người nhập liệu, hàm vẫn đang được kích hoạt, vì vậy người dùng không thể nhập một biểu thức AutoLISP để tính giá trị.

Tạo dừng không  đình chỉ đầu vào thực đơn. Nếu một thành phần trong menu đang kích hoạt khi acedCommand() tạm dừng, menu có thể làm thỏa mãn yêu cầu nhập liệu đó. Nếu muốn đình chỉ thành phần trong menu, hãy thêm một dấu sổ ngược vào trong thành phần đó. Khi AutoCAD tìm thấy đầu vào phù hợp, cả hàm acedCommand() và item đều được tiếp tục lại.

Nếu hàm acedCommand() (hoặc acedCmd()) xác định PAUSE để lựa chọn SELECT và biến PICKFIRST đang bật, lệnh lựa chọn SELECT sẽ chọn ngay tập hợp PICKFIRST đang được chọn mà không tạm dừng cho phép người dùng nhập liệu.

Đưa một điểm pick vào trong lệnh AutoCAD

Một vài lệnh của AutoCAD (như TRIM, EXTEND và FILLET) yêu cầu người dùng xác định một điểm pick point cùng với thực thể. Để đưa một cặp dữ liệu thực thể và point với hàm acedCommand(), bạn phải xác định tên của thực thể trước và đóng cặp bằng mã kiểu kết quả RTLB và RTLE. Dưới đây là sơ đồ của định dạng này
RTLB, RTENAME, entity, RTPOINT, point, RTLE
Hoặc
RTLB, RTENAME, entity, RT3DPOINT, point, RTLE
Vị trí entity phải là tên thực thể hợp lệ có kiểu ads_name và point là một điểm kiểu ads_point. Bạn không thể đưa một chuỗi ký tự thay cho một điểm được.
Một chuỗi cấu trúc bộ đệm kết quả (result-buffer) có thể được tạo ra bằng cách gọi hàm acutBuildList() và sau đó khởi động dòng lệnh AutoCAD bằng cách đưa danh sách (dạng bộ đệm) vào hàm acedCmd().


Không có nhận xét nào:

Đăng nhận xét