AutoCADæä¾äºä¸ç§ä¸»è¦çå¼åå·¥å
·ï¼åå«æ¯ï¼ä½¿ç¨C/C++çObjectARXï¼VB/VBAçActiveXå¼åï¼ä»¥åAutoLISP/VisualLISPå¼åå·¥å
·ãæ¯ä¸ä¸ªå¼åè
é½æèªå·±çç±å¥½ï¼ä½æ¯æå¼ææçåç±ï¼äººä»¬ç»å¸¸æ³ç¥éåªä¸ç§æ好ï¼æå°åºåºè¯¥éæ©åªç§å·¥å
·ï¼ç»è¿äºäººççæ¡æ¯ï¼âå®åå³äºä½ è¦å®æä»ä¹å·¥ä½ãâæ¯ä¸ç§å¼åå·¥å
·é½æä¸åçä¸è¥¿ï¼å¨æè°¢æ
åµä¸é½æä¸å¯æ¯æçä¼ç¹ãå½å³å®ç©¶ç«ä½¿ç¨ä»ä¹å¼åå·¥å
·æ¶ï¼ä½ å¯ä»¥é®èªå·±å个é®é¢ï¼åªç§è¯è¨è®©ææè§æ顺æï¼èæï¼ï¼ææå¤å°æ¶é´ï¼è°æ¯æçç®æ ç¨æ·ï¼ä»ä»¬æå¤å°ä½¿ç¨AutoCADçç»éªï¼æå°åºéè¦å¯¹AutoCADæ§å¶å°ä»ä¹ç¨åº¦ï¼éè¦å¤å°å¯è½ççªå£ç±»åæ¥å°½å¿«å®æå·¥ä½ï¼å½æä»ç»ä¸åå¼åå·¥å
·æå
·æçä¸ååè½æ¶ï¼ä½ å¯è½ä¼æç½ä¸ºä»ä¹è¿å个é®é¢æ¯éè¦çãå¨è°åè¿å ç§å¼åå·¥å
·æ¶ï¼æä»
ä»
å°å®ä»¬çä½å¨AutoCADä¸ä½¿ç¨çåè½ï¼èä¸å°å®ä»¬çä½ç¬ç«çåºç¨ç¨åºã
ObjectARXï¼
å¨ä¸ç§å¼åå·¥å
·ä¸ï¼è¿ç§å·¥å
·æ¥æ对AutoCADææ·±å
¥çæ§å¶è½åï¼è½å¤æä¾æå¤ç±»åççªä½ã使ç¨ARXå¯ä»¥åAutoCAD注åèªå·±çå½ä»¤ï¼ç¨æ·è¿è¡ä½ çç¨åºæ¶æ éäºè§£å
³äºAutoCADæ´å¤çç¥è¯ãè¿ç§ä¾¿å©ç代价就æ¯ç¼å¶ARXç¨åºæ¯VBAåLISPç¨åºéè¦è±è´¹æ´å¤çæ¶é´ï¼å æ¤ç¨æ¥ç¼å¶ç®åçç»å¾å·¥å
·æç¹æµªè´¹äºãè¦ææ¡ARXçåææ¯ä½ 对CåC++é常çæï¼ä»ä¸ªäººè§ç¹æ¥è¯´ï¼ææå欢è¿ç§å·¥å
·ï¼ä½é£æ¯å 为æåç99ï¼
çç¨åºé½æ¯ç¨CåC++è¯è¨ï¼éæ©ARXæå³çæä¸ç¨å¦ä¹ ä¸é¨æ°è¯è¨ã对ææ¥è¯´ï¼åçâåªç§è¯è¨è®©ææè§æ顺æï¼â就足å¤äºãARXè½å¤è®¿é®å¾å¤çAutoCADåºå±å·¥å
·ï¼è¿äºä¸è¥¿å¯è½VBAåLISP并ä¸è½è®¿é®ï¼ï¼è¿æ¯å¤§å¤æ°å¼åè
éæ©ARXç主è¦åå ï¼ä»ä»¬éè¦ä½ä¸äºç¨å
¶ä»ä¸¤ç§å¼åå·¥å
·ä¸è½å®æçå·¥ä½ãæ¤å¤ï¼è¿ä¹æ¯å¯ä¸ä¸ç§è½å¤ç¡®ä¿ä½ ç代ç å®å
¨ï¼ä¸è¢«å«äººé
读æéæ³å¤å¶ï¼çå¼åå·¥å
·ãå¦æä½ éè¦å¼åèªå®ä¹å®ä½ï¼ä½¿ç¨ç©ºé´è¿æ»¤ï¼æ©å±ä¸ä¸ªä½¿ç¨å
¶ä»å¼åå·¥å
·çåºç¨ç¨åºçåè½ï¼æ£å¨å¼åç¨äºéå®ç第ä¸æ¹å·¥å
·ï¼æè
ç¨å°ä¸å¤§å ç¨VBAåLISPä¸è½è®¿é®çä¸è¥¿ï¼æè
è´¹å¾å¤§åæ°å»å®ç°çä¸è¥¿ï¼ï¼é£ä¹ObjectARXæ¯ä½ çæä½³éæ©ã
VBAï¼
å¦æä½ æ¯ç¬¬ä¸æ¬¡å¼åAutoCADåºç¨ç¨åºï¼é£ä¹è¿å°±æ¯æéåä½ çå·¥å
·ï¼è¿ç§å·¥å
·å¯¹åå¦è
æ¥è¯´é常å好ï¼Visual
Basicç代ç é
读起æ¥é常容æï¼å¾å¤åå¦è
ä»
读äºå½æ°çå称就è½ç解ä¸ä¸ªé®é¢ãæ 论å¦ä½å建æè
æ§è¡LISPå½ä»¤æ¥æ©å
ä½ ç访é®æ段ï¼è¿ç§å¼åå·¥å
·æ²¡æARXåLISPé£ä¹å¤å¯¹AutoCAD访é®çæ¹å¼ï¼è¯è
注ï¼è¿ä¹ææ
å¯åï¼æ¯ç«VBAåå¦å¤ä¸¤ç§å¼åå·¥å
·æ¯èµ·æ¥å¹´è½»å¾å¤ï¼ï¼å¦æä½ å¯¹VBAé常精éï¼å¯ä»¥éè¿å对AutoCADå½ä»¤è¡è¿è¡ä»ç»ç 究ååç±»ï¼è¿å¥è¯å¯è½ä¸å¤ªé顺ï¼åææ¯ï¼you
can subclass the AutoCAD command
lineï¼ï¼è¿æ ·ä½ å°±è½å®ç°LISPæè½å®æçææåè½ï¼å¯¹VBAæ¥è¯´ï¼æ大çéæ¾å°±æ¯ä¸è½åAutoCAD注åå½ä»¤ï¼å¿
é¡»å
ç¨åç§å å¨åºç¨ç¨åºçæ¹æ³å°å
¶å¯¹åºçdvbæ件å è½½ï¼ç¶åéè¿âå·¥å
·ï¼å®ï¼å®âèå项æ§è¡ï¼æè
å¨èå项åèªå®ä¹çå·¥å
·æ æé®ä¸æ§è¡ï¼å¦æä½ çç¨æ·çåºç¡ç¥è¯å®å¨æéï¼è¿å¯¹ä½ æ¥è¯´æ¯ä¸ªä¸å°çé®é¢ï¼è¯è
注ï¼å·²æåéç解å³æ¹æ¡ï¼ãææ¾ç»ç 究è¿å¾å¤ååï¼è®¸å¤å¶å¾è
å欢ç´æ¥å¨å½ä»¤è¡æ§è¡å½ä»¤ï¼è¿å¯¹VBAï¼å¼åå·¥å
·ï¼çéå®ä¸æ¯ä¸ªå¥½æ¶æ¯ï¼è¯è
注ï¼å·²ç»æåéçæ¹æ³å®ç°è¿ç§åè½ï¼ï¼å¦æç¨æ·ç»ä¸ä¼å¨è¿ä¸ªé®é¢ä¸çº ç¼ ï¼é£ä¹VBAé常æ¯å¾å¥½çååï¼ç¹å«æ¯å½ä»ä»¬çå°ä½ è½ä½¿ç¨å®å¤ä¹è¿
éå°å建åºç¨ç¨åºãåLISPç»åèµ·æ¥ï¼VBAé¦å
æ¯ä¸ä¸ªå¼åå
¬å¸å
é¨ä½¿ç¨çç¨åºçå©å¨ï¼æè
å¨ä½ å·²ç»å
工并ä¸éè¦å¨ç°åºç¼åèªå®ä¹çå·¥å
·æ¶ä½¿ç¨å®ãå¨ææçå¼åå·¥å
·ä¸ï¼è¿æ¯ä¸ç§å¼åé度æå¿«çå·¥å
·ï¼ç¹å«æ¯å¨å¼åéè¦å¾å½¢çé¢ï¼å¯¹è¯æ¡ï¼çç¨åºæ¶ã使ç¨è¿ç§å·¥å
·ï¼ä½ åæ ·è½ä»AutoDeskè·å¾æ好çææ¯æ¯æï¼
LISPï¼
å½æè°å°LISPçæ¶åï¼ä¸è¬æ¯ä¸æAutoLISPåVisualLISPï¼èä¸æ¯å¨è®¨è®ºANSIçéç¨LISPè¯è¨ãé¦å
ç®åæè¿°ä¸ä¸AutoLISPï¼AutoLISPå
¼å¤å¿«éå¼åå·¥å
·çç¹ç¹åCOBOLè¯è¨ççµæ´»æ§ï¼å¾å¤å¼åè
éæ©LISPç主è¦åå æ¯å®ç¬¦åä»ä»¬å¯¹âä»ä¹è¯è¨è®©ææå°å¾é¡ºæï¼âé®é¢ççæ¡ï¼å¯¹å¾å¤äººæ¥è¯´ï¼è¿æ¯ä»ä»¬ç¬¬ä¸æ¬¡å¼åAutoCADæ使ç¨çè¯è¨ï¼å¹¶ä¸å¾å¿«ä½¿ç¨è¯¥è¯è¨è¿è¡å¼åãå¦ä¸ä¸ªä½¿ç¨è¿ç§å¼åå·¥å
·çåå æ¯ï¼ä½ æå·¥ä½çç¯å¢å¯è½å·²ç»å
·æå¾å¤LISPç¨åºï¼çç¡®ï¼AutoLISPç使ç¨åå²æ为æ ä¹
ï¼ãå¦ä¹ LISPæ¯VBAé¾ï¼å´åæ¯CåC++ç®åãç´å°AutoCAD
2000ï¼VBAè¿ä¸è½å¾å¥½çå¨AutoCADå
é¨æ§è¡ï¼å¹¶ä¸çä¸å¾å¤å¼åè
å¸æ解å³çé®é¢ãLISPæ¯å¿«éç¼ååºç¨ç¨åºçæåçå¼åå·¥å
·ï¼å¤§éçLISPç¨åºåºåå¨äºä¸çåå°å¨çæ¶é´å
ç¨VBAéåè¿äºä¸è¥¿ä¸å¼å¾ï¼ä¹ä¸å®¹æãå¦ææ¯è¿ç§æ
åµï¼é£ä¹LISPå°±æ¯ä¸ºä½ èæé çå¼åå·¥å
·ï¼ä¹è®¸æ¯ä¸å¸å¯æä½ ï¼åµåµï¼å¼ä¸ªç©ç¬ãè¿äºå¹´æ¥ä½¿ç¨LISPç人大大åå°äºï¼å¦æä½ æ¯AutoCADäºæ¬¡å¼åçåå¦è
ï¼å¹¶ä¸ä½ çç¨åºå¯è½è¦åå
¶ä»çWindowsç¨åºäº¤æ¢æ°æ®ï¼ä½ æ好å»ççVBAãæ»ä½æ¥è¯´ï¼å¦æä½ æ£å¨å建åä¸ä¸ªç¨ARXç¼åçç¨åºäº¤æ¢æ°æ®çç¨åºï¼å¯¹ARXç¨åºåæ¥è¯´ï¼ä¸ºLISPç¨åºåé¢çæ¥å£æ¯ä¸ºVBAé¢çæ¥å£è¦ç®åä¸äºï¼ä½æ¯ä¸ä¸ªå¥½çç¨åºååºè¯¥ä¸¤è
é½è½åï¼å æ¤ç©¶ç«ä¸ºåªç§è¯è¨é¢çæ¥å£å®é
ä¸åå³äºåC++æ¹é¢çä¸è¥¿ç人ã
ä¸é¢å°±æ¯ä¸ä¸ªç®åçæ¸
åï¼ç¨äºå³å®å°åºåªç§å¼åå·¥å
·å¯¹ä½ ç项ç®æåéï¼
ObjectARXï¼
ä½ å¿
é¡»æå°ç¨CåC++æ为顺æï¼è¯è
注ï¼é¡ºææ¯å¯¹ä¸ç§è¯è¨æ ç¼æ
çå欢ï¼ï¼
ä½ éè¦å¤§éç对AutoCADçæ§å¶åå¤ç§ç±»åççªä½ï¼
ä½ éè¦èªå®ä¹å¯¹è±¡ï¼
ä½ éè¦è®¿é®ä¸äºç¨VBAåLISPæ æ³è®¿é®çä¸è¥¿ï¼
ä½ çç¨åºéè¦æ´é«çæçï¼VBAåLISPæ æ³è¾¾å°ï¼ï¼
ä½ çå·¥ä½ç¯å¢éè¦ä½¿ç¨Cæè
C++å¼åçç¨åºï¼
ä½ éè¦ä½¿ç¨ä¸äºAutoCADå¤é¨çåºå½æ°ï¼è¿äºåºå½æ°ä»
è½å¨CåC++ä¸è°ç¨ã
VBAï¼
ä½ æè§ç¨VBAç¼ç¨æ顺æï¼
ä½ éè¦ä½¿ç¨å¯¹è¯æ¡ï¼
ä½ éè¦åWindowsæè
ä¸ç§Officeåºç¨ç¨åºï¼ä¾å¦Excelï¼äº¤æ¢æ°æ®ï¼
ä½ åå¦AutoCADäºæ¬¡å¼åï¼æè
åå¦ç¼ç¨ï¼
ä½ éè¦å°½å¿«å®æä¸ä¸ªç¨åºçå¼åï¼èç¨åºçæçä¸æ¯é£ä¹éè¦ï¼
ä½ ç¥éå¨å¼åè¿ç¨ä¸ä½ éè¦ä»Autodeskè·å¾å¤§éç帮å©ã
LISPï¼
ä¸çæ«æ¥ï¼æ²¡æå
¶ä»çå·¥å
·å¯éï¼è¯è
注ï¼å°±æ¯ä½ è§å¾VBAåARXé½ä¸éåä½ ï¼ï¼
ä½ æè§ç¨LISPç¼ç¨å¾é¡ºæï¼
ä½ è¦å¼åçç¨åºå¨AutoCAD 2000以åççæ¬ä¸è¿è¡ï¼
ä½ çå·¥ä½æ¶åå°ä¸äºç¹æ®çä¸è¥¿ï¼è¿äºä¸è¥¿ç¨LISPå¯ä»¥ç´æ¥å®ç°ï¼ä½æ¯å¦æç¨VBAæ¥å®ç°è¦è±è´¹å¾å¤§çåæ°ï¼
ä½ çå·¥ä½ç¯å¢éè¦å®ï¼
ä½ çå·¥ä½ç¯å¢éè¦ä½¿ç¨å·²ç»åå¨çLISPå½æ°åºï¼
ä½ å欢享åçè¦ï¼è¯è
注ï¼å¯è½æä½è
çä¸äºä¸ªäººææ
è²å½©ï¼ï¼
å¨ä½ çç¨åºä¸é¤äºå½ä»¤è¡åå¾å½¢å¯¹è±¡ä¹å¤ä¸éè¦ä»»ä½å¯¹è¯æ¡æè
å¾å½¢ç¨æ·çé¢ï¼
Parensè®©ä½ å¿«ä¹ï¼è¯è
注ï¼ä¸ç解è¿å¥è¯çææï¼ä¼°è®¡Parensæ¯ä¸ªçæLISPå¼åç人çååï¼ï¼å¦ï¼çè¿è¾¹ï¼é£ä¸ªç©¿ç½å¤§è¡£ç人æ¥æ¾ä½ äºã
ç°å¨æå°æä¾ä¸äºä½ 们æ¥è¿éçææ人é½æ³è¦çä¸è¥¿ï¼å
è´¹ç代ç ï¼è¯è
注ï¼ä½è
ä»ç¶æ¯å¨å¼ç©ç¬ï¼ï¼å½ç¶ï¼æ们ç´å°è¿ä¹æ¯ä½ 读è¿ä¸ç¯æç« çåå ï¼ä¸æ¯åï¼å æ¤ï¼æ¢ç¶ä½ 费尽åè¾ä¸è¦è¯»å®äºä¸é¢çæåï¼ææ³æåºè¯¥ç»ä½ ä¸äºå
è´¹ç代ç ï¼è¿æ ·è¯´ä¸å®ä¸æ¬¡ä½ è¿ä¼æ¥è¿éãå¨æ¯ç§å¼åå·¥å
·ç示ä¾ä»£ç ä¸ï¼æé½ç»åºäºä¸ç§ç¼è¾ä¸ä¸ªååç
§ä¸ç¬¬ä¸ä¸ªå¯ç¼è¾çå±æ§çæ¹æ³ï¼å¨ä»£ç ä¸ä¸ä¼çå°ä½¿ç¨å½ä»¤è¡çè¯å¥ï¼å 为æä¸å欢使ç¨é£äºä¸è¥¿ãå¦æä½ ä½¿ç¨âCommandâï¼è¯è
注ï¼LISPä¸çcommandå½æ°ï¼VBAä¸çSendCommandæ¹æ³ï¼ARXä¸çacedCommandå½æ°ï¼ï¼ä½ ä¸æ¯å¨ç¼ç¨ï¼é¡¶å¤ç®æ¯å¨åèæ¬ï¼è¯è
注ï¼èæ¬å¨è¿éæ³æé£äºè§£éæ§è¡çè¯è¨ï¼ä»æç§æä¹ä¸è®²ï¼ä½¿ç¨âCommandâç¡®å®æ¯è¦æ±å½ä»¤è¡è§£é并ä¸æ§è¡ä½ ææä¾çè¯å¥ï¼ï¼è¿æ¯ä¸¤ç äºã
ObjectARXç代ç ï¼
void chngAtt()
{
ads_name entres;
ads_point ptres;
AcDbObjectId _Id, _attId;
AcDbObjectIterator *pIttr
= NULL;
if(acedEntSel("Select a Block Reference", entres, ptres) != RTNORM )
{
//Selection failed
return;
}
acdbGetObjectId(_Id, entres);
AcDbObjectPointer pRef(_Id,AcDb::kForRead);
if(pRef.openStatus()!=Acad::eOk)
{
//Open failed
return;
}
pIttr = pRef->attributeIterator();
while(!pIttr->done())
{
_attId = pIttr->objectId();
AcDbObjectPointer
pAtt(_attId,AcDb::kForWrite);
if(pAtt.openStatus()==Acad::eOk)
{
pAtt->setTextString("We changed this");
break;
}
pIttr->step();
}
delete pIttr;
}
VBA代ç ï¼
Option Explicit
Sub chngAtt()
Dim objEnt As AcadObject
Dim
objRef As AcadBlockReference
Dim varAtts As Variant
Dim objAtt As
AcadAttributeReference
Dim emptyPt As Variant
ã
ThisDrawing.Utility.GetEntity objEnt, emptyPt, "Select Block: "
If
objEnt.ObjectName = "AcDbBlockReference" Then
Set objRef = objEnt
If
objRef.HasAttributes Then
varAtts = objRef.GetAttributes
Set objAtt =
varAtts(0)
objAtt.TextString = "We changed this"
End If
End If
End Sub
LISP代ç ï¼
(defun C:chngAtt ()
(setq Mainent
(entsel))
(setq entList (entget (car Mainent)))
(setq entAtt (entget
(entnext (cdr (assoc -1 entList)))))
(setq entNewAttVal
(subst (cons 1
"We changed this") (assoc 1 entAtt) entAtt))
(entmod entNewAttVal)
(entupd (car Mainent))
(princ)
)(end)
温馨提示:内容为网友见解,仅供参考
vb问题: vb调用cad画线问题,总是出错,百思不得其解(本人小白,请大神帮 ...
Set LineObj = activeDoc.ModelSpace.AddLine(startpoint, endpoint) '画线中的参数只需两个点,而你的数组是多点的,不匹配。要画多点连续线可用Set myl = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) '画多段线 。要分段线可以渐次画出。sub 划线()'作为一模块 Dim myAcadApp As Auto...
谁能帮我编一段用VB对CAD进行二次开发的程序代码啊
ThisDrawing.Utility.GetPoint()在ACAD中这是最常用的方法之一,它需要两个参数,在逗号前面的参数应该是一个点坐标,它的作用是在屏幕上画一条线,前一个端点位于点坐标位置,后一个端点跟随鼠标移动,逗号之前可以什么都不填,这时没有线条会跟随鼠标移动,但逗号必须保留。逗号后面使用一串字符,程序在命令行显示这串字符...
CAD的快截键。。最好全点,建筑那方面的!
20.AutoCAD二次开发工具很多,Lisp早就有了,R11提供了ADS(Acad Develop system),R12中提供了ADS对实模式下C编译器(如BC,MS C)的支持,R13提供ARX(Acad Runtime eXtend),R14提供了VB Automation,这个Automation使VB编写CAD程序成为可能,渴望CAD编程的人有了一个最好的选择,不必学习ADS、ARX、Object ARX,和AutoLisp,...