I vores tidligere blogindlæg har vi diskuteret, hvordan man laver 2D- og 3D-objekter og leger med deres egenskaber.
Nu, i dette blogindlæg, skal vi lære, hvordan man luger objekter ved hjælp af pywin32 i AutoCAD-skabelonen.
Opsætning af miljø ved hjælp af pywin32-modul
Først og fremmest vil vi sætte vores arbejdsmiljø op til at integrere python og AutoCAD ved hjælp af pywin32-modulet og importere nogle pakker.
import win32com.client
import pythoncom
import math
acad = win32com.client.Dispatch("AutoCAD.Application")
acadModel = acad.ActiveDocument.ModelSpace
Oprettelse af nødvendige konstruktører ved hjælp af pywin32 & pythoncom
Mens vi beskæftiger os med skraveringsobjekter i AutoCAD ved hjælp af python, har vi brug for visse typer af en række specifikke datatyper.
For at udruge et objekt skal vi lave en løkke. Denne løkke er en gruppe af tegneobjekter, der resulterer i et lukket område.
Der kan være flere sådanne objekter, der kan overføres til denne række af sløjfer. Derfor har vi i henhold til AutoCAD-dokumentationen brug for en række “varianter” for at skabe denne sløjfe.
Her vil vi bruge VT_DISPATCH-datatypen til at hente tegneobjekterne fra AutoCAD-skabelonen.
Vi har også brug for andre konstruktører såsom APoint og Double til at tegne objekter. Vi har diskuteret det samme i vores tidligere blogs.
def variants(object):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, (object))
Oprettelse af loop af objekter i AutoCAD
Nu skal vi skabe et lukket rum ved hjælp af et enkelt eller flere tegneobjekter og konvertere det samme til en løkke.
Dette array kan indeholde et eller flere tegneobjekter, der danner et lukket rum.
out_loop = []
sq = acadModel.AddPolyline(ADouble([0,0,0,1000,0,0,1000,1000,0,0,1000,0]))
arc = acadModel.AddArc(APoint(0, 500, 0), 500, 90*pi/180, 270*pi/180)
out_loop.append(sq)
out_loop.append(arc)
outer = variants(out_loop)
Oprettelse af lugeobjekt og tilføjelse af luge
Nu hvor vi har oprettet det lukkede objekt, der skal skraveres, vil vi oprette et skraveringsobjekt for at tilføje det til det lukkede sløjfe.
For at oprette et skraveringsobjekt skal vi bruge AddHatch-kommandoen med følgende syntaks:
object.AddHatch( PatternType, PatternName, Associativity )
Her er mønstertyper 0 for foruddefinerede skraveringstyper, 1 for mønsteret af linjer, der bruger den aktuelle linjetype, & 2 for mønsternavn fra en anden PAT-fil end acad.pat -filen.
På stedet for parametermønsternavnet kan vi videregive mønsternavnet som leveret af AutoCAD eller i henhold til de tilpassede mønsternavne.
Associativitet vil indeholde en boolesk værdi for at angive, om lugen er associativ eller ikke-associativ. Den kan kun indstilles under oprettelse af skraveringsobjektet.
En associativ luge opdateres, når dens grænser ændres. En ikke-associativ luge opdateres ikke, når dens grænser ændres.
Lad os skabe skraveringsobjektet nu.
hatch = acadModel.AddHatch(0, "ANSI37", True)
For nu at tilføje denne luge til den løkke, vi har oprettet, vil vi bruge AppendOuterLoop-metoden.
hatch.AppendOuterLoop(outer)
Egenskaber for AutoCAD-skraveringsobjekt i Python
Som vi ved om andre AutoCAD-objekter, kan vi ved hjælp af forskellige metoder også hente eller ændre egenskaber for skraveringsobjekter.
print(hatch.HatchStyle)
print(hatch.PatternName)
print(hatch.AssociativeHatch)
print(round(hatch.Area,2))
print(hatch.PatternAngle)
print(hatch.PatternDouble)
print(hatch.PatternScale)
print(hatch.PatternSpace)
print(hatch.PatternType)
print(hatch.NumberOfLoops)
O/p:
0
ANSI37
True
1392699.08
0.0
False
1.0
1.0
1
1
Lad os nu ændre mønsterskalaen til 10.
hatch.PatternScale = 10
Tilføjelse af indre løkke til skraveret AutoCAD objektløkke
Hvis vi ønsker, at lugen skal være der omkring det indre objekt, skal vi udføre omvendt arbejde, som vi gør her.
Vi har udklækket en ydre genstand. Nu vil vi tilføje en indre genstand, som jeg ikke ønsker at udklække.
På samme måde kan vi tilføje flere sådanne indre løkker til det skraverede område én efter én.
in_loop = []
in_loop.append(acadModel.AddCircle(APoint(250, 250, 0), 100))
inner = variants(in_loop)
hatch.AppendInnerLoop(inner)
Lad os nu tjekke det skraverede område efter tilføjelse af denne indre løkke.
print(round(hatch.Area,2))
O/p:
1361283.16
Som vi kan se fra kodeoutputtet og figur 3, er arealet reduceret med 31415,92 (cirklens areal), siden vi tilføjede den indre sløjfe til det eksisterende skraverede område.
Leave a Reply