Comunitate de programatori autodesk în CSI

Cum să inserați un bloc cu atribute în spațiul modelului

Definiția blocului este cuprinsă în BlockTableRecord. Dacă blocul are atribute, atunci ele sunt conținute în BlockTableRecord ca AttributeDefinition - la fel ca orice alte primitive.







Atunci când inserăm un bloc în desen (mai precis în spațiul modelului), vom introduce o BlockReference. Dacă blocul are atribute, atunci pentru toate (cu excepția constantă) AttributeDefinition în BlockTableRecord sunt AttributeReference corespunzătoare anexate la BlockReference. Atributele constante nu sunt tratate deoarece textul lor este același în toate inserțiile acestui bloc (în toate BlockReference). Ele sunt în BlockTableRecord și nu au atributul corespunzător referitor atașat la BlockReference.

Mai jos este un simplu cod C # pentru inserarea unui bloc cu atribute în spațiul modelului. Creați un desen care conține un bloc numit "CHECK" care conține mai multe atribute (parte din constante, parte nu este) pentru a verifica codul.

# 91; CommandMethod # 40; "AddBlockTest" # 41; # 93;

static public void AddBlockTest # 40; # 41;

Bază de date db = Aplicație. DocumentManager. MdiActiveDocument. Baza de date;







utilizând # 40; Tranzacție myT = db. TransactionManager. StartTransaction # 40; # 41; # 41;

// Obțineți definiția blocului "Verificați".

șirul blocName = "CHECK";

db. BlockTableId. GetObject # 40; OpenMode. ForRead # 41; ca BlockTable;

bt # 91; blockname # 93;. GetObject # 40; OpenMode. ForRead # 41; ca BlockTableRecord;

// Deschideți spațiul de model - adăugăm BlockReference la el

bt # 91; BlockTableRecord. ModelSpace # 93;. GetObject # 40; OpenMode. ForWrite # 41;

// Creați o BlockReference și asociați-o cu definiția blocului

Punctul point3d = nou punct3d # 40; 2.0. 4.0. 6 # 41; ;

utilizând # 40; BlockReference blockRef =

noi BlockReference # 40; punct, blockDef. objectId # 41; # 41;

// Adăugați inserarea blocului în spațiul modelului

ms. AppendEntity # 40; blockRef # 41; ;

MYT. AddNewlyCreatedDBObject # 40; blockRef, adevărat # 41; ;

// Trecem prin definirea blocului pentru căutarea tuturor atributelor neconstante

foreach # 40; ObjectID id în blockDef # 41;

DBObject obj = id. GetObject # 40; OpenMode. ForRead # 41; ;

AttributeDefinition attDef = obj ca AttributeDefinition;

dacă # 40; # 40; attDef! = null # 41; # 40; attDef. constant # 41; # 41;

// Aceasta este o definire non-constanta a atributelor

// Creați un nou attributeReference

utilizând # 40; AtributReferență attRef = Atribut nou # 40; # 41; # 41;

attRef. SetAttributeFromBlock # 40; attDef, blockRef. BlockTransform # 41; ;

attRef. TextString = "Hello World";

// Adăugați AtributReferență la BlockReference

blockRef. AttributeCollection. AppendAttribute # 40; attRef # 41; ;

MYT. AddNewlyCreatedDBObject # 40; attRef, adevărat # 41; ;







Trimiteți-le prietenilor: