I denne artikel vil jeg diskutere SelectionSet-objektet i AutoCAD og metoder til at automatisere operationer for det samme ved hjælp af Python. Ud over det vil jeg også tilføje en lille introduktion, der dækker gruppeobjektet.
Forberedelse af koden til dette AutoCAD-eksempel
Til dette kodningseksempel bruger jeg modulerne pythoncom og win32com. Disse moduler starter min ansøgning og udfører forskellige opgaver.
import win32comu.client
import pythoncom
acad = win32com.client.Dispatch("AutoCAD.Application")
doc = acad.ActiveDocument
acadModel = doc.ModelSpace
def APoint(x, y, z = 0):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))
def aDouble(xyz):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (xyz))
def aVariant(vObject):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, (vObject))
SelectionSet AutoCAD-objektet
Lad mig først forklare SelectionSet-objektet i AutoCAD. SelectionSet-objektet refererer simpelthen til det sæt af elementer, som jeg vælger i AutoCAD. Mens jeg bruger AutoCAD, vælger jeg normalt elementer ved at oprette et vindue omkring objekter, som jeg vil vælge fra tegningen. I så fald gør jeg det normalt ved at bruge musen. Forskellige objekter kræver SelectionSet som referenceobjekt for at udføre forskellige aktiviteter. Lad os forstå, hvordan man opretter SelectionSet-objekt i Python.
Oprettelse af et SelectionSet AutoCAD-objekt i Python
I dette kodningseksempel vil jeg forsøge at oprette to linjer ved hjælp af AddLine-metoden. Jeg tilføjer disse to linjer til et SelectionSet-objekt.
l1 = acadModel.AddLine(APoint(0, 0, 0),APoint(1000, 1000, 0))
l2 = acadModel.AddLine(APoint(1000, 1000, 0),APoint(2000, 0, 0))
Nu kan jeg oprette et SelectionSet-objekt med navnet “SS1” ved hjælp af Tilføj-metoden. Jeg bruger den metode på SelectionSets-objektet. Dette SelectionSets-objekt er en samling af alle SelectionSet-objekter, der findes inde i Document-objektet.
For at vide mere om dokumentobjektet og andre AutoCAD-objekter, tjek mine andre blogindlæg.
ss1 = doc.SelectionSets.Add("SS1")
SelectionSet-objektet tager et array af objekter som inputparameter. Det er de objekter, der skal tilføjes til SelectionSet. For at gøre det bruger jeg AddItems-metoden på SelectionSet-objektet til at sende de oprettede linjer som inputværdier. Se koden nedenfor.
ss1.AddItems(aVariant([l1, l2]))
For at bekræfte om SelectionSet er oprettet, og om de to objekter er til stede i SelectionSet eller ej, kan jeg bruge to metoder: Name og Count.
print(s1.Name)
print(s1.Count)
O/p:
SS1
2
Metoder til SelectionSet AutoCAD-objektet
Der er også et par andre metoder, der kan bruges til at udføre forskellige opgaver på et SelectionSet-objekt. For eksempel Ryd, Slet, Slet, Fremhæv, Element, Fjern genstande, Vælg PåSkærm.
Fra metoden nævnt ovenfor kan varemetoden bruges til at hente varen til stede på et givet indeks i en samling, gruppe eller udvalgssæt.
print(ss1.Item(0).ObjectName)
O/p:
AcDbLine
For at slette SelectionSet eller elementer fra SelectionSet kan jeg bruge Clear, Delete, Erase eller Remove Items metoden. Funktionaliteten af disse metoder er som nævnt nedenfor:
- Ryd: Denne metode tømmer SelectionSet. SelectionSet-objektet vil stadig eksistere, men vil ikke indeholde nogen elementer. De elementer, der tidligere lå i markeringen, eksisterer stadig, men de findes ikke længere i SelectionSet.
- RemoveItems: Denne metode hjælper med at fjerne et eller flere elementer fra et SelectionSet. De fjernede elementer eksisterer stadig, men de findes ikke længere i SelectionSet.
- Slet: Denne metode sletter alle elementer i et SelectionSet. SelectionSet-objektet eksisterer stadig, men vil ikke indeholde nogen elementer. De elementer, der tidligere lå i SelectionSet, eksisterer ikke længere.
- Slet: Sletter et SelectionSet-objekt, men ikke objekterne i SelectionSet. Selvom selve SelectionSet ikke eksisterer efter opkaldet til Slet-metoden, vil de elementer, som tidligere indeholdt i SelectionSet, stadig eksistere.
Fra metoderne anført ovenfor kræver kun RemoveItems-metoden, at parametre sendes. For eksempel, fra de linjer, som jeg har tilføjet til SelectionSet, vil jeg fjerne Line2 (l2). Jeg skal videregive l2 som et element i arrayet på listen med elementer, som jeg vil fjerne fra SelectionSet.
ss1.RemoveItems(aVariant([l2]))
print(ss1.Count)
O/p:
1
Nogle gange vil jeg kun vælge objekter ved hjælp af den konventionelle metode. Dvs at trække/tegne et vindue rundt om de objekter, som jeg vil markere med min mus. Python giver mig også mulighed for at gøre det ved at bruge SelectOnScreen-metoden.
ss1.SelectOnScreen()
Når jeg anvender metoden som vist ovenfor, venter koden på, at AutoCAD-brugeren vælger objekter. Efter at have valgt objekterne skal AutoCAD-brugeren trykke på Enter på tastaturet. Dette vil afslutte valget. Koden går så til sidst videre.
Gruppér objekt i AutoCAD ved hjælp af Python
Gruppeobjektet er et navngivet SelectionSet-objekt. Da det ikke indeholder nogen specielle metoder, har jeg tilføjet dette lille indledende afsnit med det formål at diskutere gruppeobjektet.
Jeg kan tilføje Group-objektet på samme måde, som jeg tilføjede SelectionSet-objektet. Dvs ved at bruge Tilføj metoden. Her skal jeg naturligvis bruge samlingsobjektet Grupper til at tilføje en gruppe.
For at tilføje elementer til det oprettede gruppeobjekt kan jeg også bruge AppendItems-metoden. Jeg kan udføre opgaven på samme måde som jeg gjorde med AddItems-metoden for SelectionSet-objektet.
Derudover følger her en liste over forskellige metoder og egenskaber, der kan bruges til at udføre aktiviteter på AutoCAD Group-objekter:
- Slette
- GetExtensionDictionary
- Fremhæv
- Vare
- Fjerne genstande
- Opdatering
- Tælle
- Dokument
- Håndtere
- HasExtension Dictionary
- Lag
- Linjetype
- LinjetypeSkala
- Linjevægt
- Materiale
- Navn
- Objekt-ID
- Objektnavn
- EjerID
- PlotStyleName
- TrueColor
- Synlig
Afsluttende bemærkninger
Ved at bruge SelectionSet-objektet kan jeg udføre forskellige aktiviteter på andre AutoCAD-objekter. For at lære mere om automatisering af forskellige opgaver ved hjælp af Python i AutoCAD, tjek mine andre blogindlæg. I tilfælde af tvivl eller forespørgsler er du altid velkommen til at bruge kommentarsektionen nedenfor til at stille eventuelle spørgsmål, du måtte have. For enhver form for teknisk konsultation bedes du også kontakte mig via SCDA- kontaktformularen på denne blog.
Leave a Reply