1372826956:AAFe2Py65GSQkfGiRnXuOQ-eD9yXcwMv988

Uygulama Programlama Arayüzü (UPA) “Application Programming Interface (API)” Örnekleri- AutoCAD’de Çizgi Çizme

AutoCAD’de ister 2 boyutlu 2B “2D” tasarım yapıyor isterse 3 boyutlu 3B “3D” modelleme yapıyor olsun, birçok kişi için,

AutoCAD tasarımlarını ve inşaat planlarını yaratmak için, kullandığı bir araçtır. Bununla birlikte, AutoCAD‘in en büyük yararlarından biri, çeşitli Uygulama Programlama Arayüzleri (UPA) Application Programming Interface (API)” ve özelleştirme teknikleri ile genişletilebilen bir platform olmasıdır. Şayet AutoCAD istediğiniz bir görevi gerçekleştirmez ise, bu işlevselliği kendiniz yazabilir veya yapabilecek birini bulabilirsiniz. AutoCAD‘in çözebileceği sorunlar ve kullanım alanları yalnızca hayal gücünüzle sınırlıdır.

AutoCAD2017 için sunumlarımı tamamlarken aynı işi yapan, ancak AutoCAD‘in desteklediği beş farklı Uygulama Programlama Arayüzlerinin (UPA) Application Programming Interface (API)” her birine örnek kod yazmaya karar verdim. Örnek kod model alanına nasıl çizgi çizileceğini göstermektedir; elbette her programcı için belirli bir sorunu çözmek için, a yaklaşırken her zaman çeşitli yollar mevcuttur.

·       AutoLISP – Command Fonksiyonu

; 5,0 koordinatından 10,5 koordinatına bir çizgi çizme

(defun c:DL_AutoLISP ( / )

  (command “._LINE” “5,0,0” “10,5,0” “”)

 (princ)

)

·       AutoLISP – COM API

; 10,0 koordinatından 15,5 koordinatına bir çizgi çizme

(defun c:DL_AutoLISPCOM ( / acDoc acModelSpace pt1 pt2)

; Load the AutoCAD COM Library

(vl-load-com)

; o anki geçerli (aktif) çizimi elde etme

  (setq acDoc (vla-get-activedocument (vlax-get-acad-object)))

; o anki geçerli (aktif) çizimin model alanını elde etme

(setq acModelSpace (vla-get-modelspace acDoc))

; çizgi için başlangıç ve bitiş noktalarını tanımlama

(setq pt1 (vlax-3D-point 10 0 0)

        pt2 (vlax-3D-point 15 5 0))

; yeni çizgiyi model alana ekleme

(vla-addline acModelSpace pt1 pt2)

(princ)

)

·       AutoLISP – Entmake Fonksiyonu

; 15,0 koordinatından 20,5 koordinatına bir çizgi çizme

(defun c:DL_AutoLISPENTMAKE ( / )

(entmake ‘((0 . “LINE”)          ; yaratılacak nesne tipini tanımlama

             (10 15.0 0.0 0.0)     ; 15,0,0 koordinatı olan başlangıç noktasını tanımlama

             (11 20.0 5.0 0.0)     ; 20,5,0 koordinatı olan bitiş noktasını tanımlama

            )

  )

(princ)

)

·       Uygulamalar için Visual Basic (VBA)

‘ 20,0 koordinatından 25,5 koordinatına bir çizgi çizme

Public Sub DrawLine()

  Dim pt1(0 To 2) As Double, pt2(0 To 2) As Double

  pt1(0) = 20: pt1(1) = 0: pt1(2) = 0

  pt2(0) = 25: pt2(1) = 5: pt2(2) = 0

  ‘ çizgiyi model alana ekleme

ThisDrawing.ModelSpace.AddLine pt1, pt2End Sub

·       JavaScript

// LINE komutunu çalıştıran fonksiyon

function drawLine()

{

  try {

    Acad.Editor.executeCommandAsync(

      ‘_.Line ‘ +

      ‘0,0,0 ‘ +

      ‘5,5,0 ‘

    );

  }

  catch(e) {

    write(e.message);

  }

}

// drawLine fonksiyonuna ulaşmak için, komut ekleme

Acad.Editor.addCommand(

  “DrawLine_JS”,

  “DL_JavaScript”,

  “DL_JavaScript”,

  Acad.CommandFlag.MODAL,  drawLine );

·       Managed .NET – VB.NET

<CommandMethod(“DL_VBNET”)> _

Public Sub DrawLine()

    ” o anki geçerli (aktif) dokümanı ve veri tabanını elde etme

    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument

    Dim acCurDb As Database = acDoc.Database

    ” işlem başlatma

    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

        ” okumak için, blok tablosunu açma

        Dim acBlkTbl As BlockTable

        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)

        ” yazmak için, model alan kaydı blok tablosunu açma

        Dim acBlkTblRec As BlockTableRecord

        acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace),

_                                         OpenMode.ForWrite)

        ” 25,0 koordinatından başlayan ve 30,5 koordinatında biten bir çizgi çizme

        Dim acLine As Line = New Line(New Point3d(25, 0, 0), _

                                      New Point3d(30, 5, 0))

        ” yeni nesneyi blok tablosu ve işlem kaydına ekleme

        acBlkTblRec.AppendEntity(acLine)

        acTrans.AddNewlyCreatedDBObject(acLine, True)

        ” yeni nesneyi veri tabanına kaydetme

        acTrans.Commit()

    End Using

End Sub

·       ObjectARX/C++

static void Drawline();

extern “C” AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)

{

    switch(msg)

    {

        case AcRx::kInitAppMsg:

            acrxDynamicLinker->unlockApplication(pkt);

            acrxDynamicLinker->registerAppMDIAware(pkt);

            // ekleme komutları

            acedRegCmds->addCommand(_T(“DrawLine_ARX”),

T(“DL_ObjectARX”),                                     _T(“DL_ObjectARX”), ACRX_CMD_MODAL, Drawline);

            break;

        case AcRx::kUnloadAppMsg:

            // kaldırma komut grupları

            acedRegCmds->removeGroup(_T(“DrawLine_ARX”));

            break;

        default:

            break;

    }

    return AcRx::kRetOK;

}

static void Drawline()

{

    // o anki geçerli (aktif) veri tabanını elde etme

    AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();

    // blok tablosunu salt okunur açma

    AcDbBlockTable *pBlockTable;

    pDb->getSymbolTable(pBlockTable, AcDb::kForRead);

    // model alan bloğunu elde etme

    AcDbBlockTableRecord *pBlockTableRecord;

    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);

    pBlockTable->close();

    // Çizgiyi tanımlayacak olan noktaları tanımlama

    AcGePoint3d startPt(30.0, 0.0, 0.0);

    AcGePoint3d endPt(35.0, 5.0, 0.0);

    // Hafızada yeni çizgi nesnesini yaratma

    AcDbLine *pLine = new AcDbLine(startPt, endPt);

    // yeni nesneyi model alana ekleme

    pBlockTableRecord->appendAcDbEntity(pLine);

    // model alan loğunu kapatma

    pBlockTableRecord->close();

    // yeni nesne bloğunu kapatma

    pLine->close();

}

 

Hakkında Sertan Türkan

AutoCAD Beyni

Bunu da Kontrol edin

Revitte Plan Görünüşünün Derinliğini Ayarlama Hakkında

Revit’te bir modelin parçalarını kesme düzleminin altında görüntülemek için, Derinlik Kırpma “Depth Clipping“ parametresini kullanın. …

Bir cevap yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yardıma mı ihtiyacınız var? Chat with us
Bir görüşme başlatmak için lütfen önce gizlilik politikamızı kabul edin.