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; ;