Delphi 연결 AutoCAD임의의 선의 길이 매크로를 계산하는 중첩
6739 단어 Delphi잇닿다Delphi 고급 편
AutoCAD2004에서 디버깅을 통과한 매크로입니다.
Sub SecFunc()
Dim SelectionSet As AcadSelectionSet
Dim lSpLine As AcadSpline
Dim sysVarName As String
Dim sysVarData As Variant
Dim DataType As Integer
ThisDrawing.SelectionSets.Item(0).Delete
Set SelectionSet = ThisDrawing.SelectionSets.Add("New_SelectionSet")
SelectionSet.SelectOnScreen
Set lSpLine = SelectionSet.Item(0)
ThisDrawing.SetVariable "USERR1", 1.5
ThisDrawing.SendCommand "(vl-load-com)"& vbCr
Dim StrCom As String
StrCom = "(setvar "& Chr(34) & "USERR1"& Chr(34) & Chr(32) & "(vlax-curve-getdistatparam (vlax-ename->vla-object (handent "& Chr(34) & lSpLine.Handle & Chr(34) & ")) (vlax-curve-getendparam (vlax-ename->vla-object (handent "& Chr(34) & lSpLine.Handle & Chr(34) & ")))))"& vbCr
ThisDrawing.SendCommand StrCom
MsgBox StrCom
sysVarData = ThisDrawing.GetVariable("USERR1")
MsgBox sysVarData
End Sub
이것은 Delphi에서 이 매크로에 대한 삽입식 호출입니다
function GetLengthOfObject(pHandle:THandle;pCadDoc:OleVariant):Real;
var
lTempVariant:OleVariant;
lTempVar:wideString;
begin
lTempVariant:=0;
lTempVar:='USERR1';
pCadDoc.SetVariable(lTempVar,lTempVariant);
lTempVar:='(vl-load-com)' + #13;
pCadDoc.SendCommand(lTempVar);
lTempVar:='(setvar ' + Chr(34) + 'USERR1'+Chr(34)+ Chr(32) +
'(vlax-curve-getdistatparam (vlax-ename->vla-object '+
'(handent '+ Chr(34) +IntToStr(pHandle)+ Chr(34)+')) '+
'(vlax-curve-getendparam (vlax-ename->vla-object '+
'(handent '+ Chr(34) +IntToStr(pHandle)+Chr(34) +
')))))'+#13;
pCadDoc.SendCommand(lTempVar);
Result:=pCadDoc.GetVariable('USERR1');
end;
체험:
1. 매크로의 문법은 바로 VB의 문법이다.
2. 매크로 안의'&'기호는 문자열의 연결이고델파이 안에는 문자열의 추가이다.예컨대
매크로 안의'(setvar'& Chr(34) &'USERR1'& Chr(34) & Chr(32)
델파이에서 "(setvar"+ Chr(34) + "USERR1"+ Chr(34) + Chr(32)
여기서 Chr(34)는 "기호 Chr(32)는 빈 문자입니다.
3 매크로 안의 VbCr는 리턴 버튼을 누르는 것과 같고델파이 안에서는 #13이다
4 델파이에 매크로를 끼워 넣으려면 반드시 빈칸과 리턴에 주의해야 한다.예를 들어 매크로 안에서'USERR1'이고델파이에서도'USERR1'이라고 써야 한다. 만약에'USERR1'이라고 쓰면 AutoCAD를 연결할 때'호출이 거부된다'고 나오거나 델파이에서 제때에 실행될 수 있지만 원하는 결과를 얻지 못한다.
5 매개 변수의 전달과 함수에 대한 호출.
AutoCAD에서 제공하는 시스템 변수를 설정하는 함수 SetVariable 원형은 다음과 같습니다.
object.SetVariable Name, Value
Object : Document
The object or objects this method applies to.
Name :String; input-only
The name of the system variable to set.
Value:Variant; input-only
The new value for the specified system variable.
Example
Sub Example_SetVariable()
' This example sets various system variables, each of
' a different data type.
Dim sysVarName As String
Dim sysVarData As Variant
Dim DataType As Integer
' Set FILEDIA system variable (data type Integer) to 1. NOTE that
' you need to declare a variable as the data type of system variable,
' assign data to that variable and then make it variant type
Dim intData As Integer
sysVarName = "FILEDIA"
intData = 1
sysVarData = intData ' Integer data
ThisDrawing.SetVariable sysVarName, sysVarData
' Check the variable using GetVariable
sysVarData = ThisDrawing.GetVariable(sysVarName)
MsgBox sysVarName & " = " & sysVarData, , "SetVariable Example"
' Set DCTCUST system variable (data type String) to "My Custom Dictionary"
Dim strData As String
sysVarName = "DCTCUST"
strData = "My Custom Dictionary"
sysVarData = strData ' String data
ThisDrawing.SetVariable sysVarName, sysVarData
' Check the variable using GetVariable
sysVarData = ThisDrawing.GetVariable(sysVarName)
MsgBox sysVarName & " = " & sysVarData, , "SetVariable Example"
' Set CHAMFERA system variable (data type Double) to 1.5
Dim dataDouble As Double
sysVarName = "CHAMFERA"
dataDouble = 1.5
sysVarData = dataDouble ' Double data
ThisDrawing.SetVariable sysVarName, sysVarData
' Check the variable using GetVariable
sysVarData = ThisDrawing.GetVariable(sysVarName)
MsgBox sysVarName & " = " & sysVarData, , "SetVariable Example"
' Set INSBASE system variable (data type array) to (1.0,1.0,0)
Dim arrayData3D(0 To 2) As Double
sysVarName = "INSBASE"
arrayData3D(0) = 1#: arrayData3D(1) = 1#: arrayData3D(2) = 0
sysVarData = arrayData3D ' 3D array data
ThisDrawing.SetVariable sysVarName, sysVarData
' Check the variable using GetVariable
sysVarData = ThisDrawing.GetVariable(sysVarName)
MsgBox sysVarName & " = " & sysVarData(0) & ", " & sysVarData(1) & ", " & sysVarData(2), , "SetVariable Example"
End Sub
AutoCAD에서 제공하는 유형의 라이브러리에서 이 함수의 원형은 다음과 같습니다.
procedure SetVariable(const Name: WideString; Value: OleVariant); safecall;
이론적으로 이렇게 호출하는 것은 문제없다
SetVariable('USERR1',1.5);
그러나 이렇게 통할 수 있는 과거를 컴파일하면 실행할 때'시스템 변수 값을 설정할 수 없음'을 잘못 보고할 수 있다.
WideString 유형의 변수를 선언하면 다음과 같습니다.
var
lName:WideString;
lName:='USERR1';
SetVariable(lName,1.5);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.