|
|
|
|
|
|
|
Last Edit: 2 years 8 months ago by jerwin.
Report to moderator
|
|
latest results:
The last image is what my script generates. (If you can use python, I can post the source, and if you use a cad program like draftsight, I can supply a dxf file.) I'm not too happy with the front's hip extension-- it looks a little short. Corset droit en 6 Pièces EXPLICATION DE LA QUATRIÈME LEÇON Dos Le Dos de ce corset étant identiquement le même que le précédent, nous ne répéterons cette leçon, chères lectrices, que pour la forme, en nous reportant aux nouvelles mesures de ce modèle. Tracez donc les lignes de construction du dos comme il est expliqué. Les lignes fondamentales terminées, indiquez de suite les 3 centimètres de lacet. par une ligne pleine, parallèle à la ligne verticale pointillée. Commencez ensuite le tracé de vos pièces, sur la ligne de taille, en déduisant d'abord les 3 centimètres du lacet de votre point d'aplomb de taille, afin d'obtenir la largeur de chacune de ces pièces. Exemple : point d'aplomb de la taille . . . . . . . . . .. 11 centimètres. moins le lacet . . . . . . . . . . . . . . . . . . . . . ... 3 centimètres. reste 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 8 centimètres. ll nous reste donc 8 centimètres, soit 4 centimètres pour chaque pièce sur la ligne de taille. Portez une première fois ces la centimètres de 1 à 2, et tracez une ligne verticale pointillée, parallèle à la ligne pleine du lacet, dans toute la hauteur du corset. À 10 centimètres environ du point 2, comptez encore une fois la centi- mètres et formez un deuxième rectangle, en l'indiquant par des lignes pointillées et parallèles au premier rectangle, qui vous donnent les Chiffres 3 et 4 De 4 u 5, descendez la ligne de taille du 1/3 du renversement. Exemple : longueur de taille devant . . . . . . . . . 42 centimètres. longueur du dos . . . . . . . . . . . . . . . . . ... 37 centimètres 1/2. le renversement est donc de . . . . . . . .4 1/2 centimètres dont vous portez le 1/3, soit 1 cent. 1/2, de 4 à 5, Votre point d'aplomb de taille est complet. Exemple : lacet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 centimètres première pièce . . . . . . . . . . . . . . . . . . . . . . .4 centimètres . . deuxième pièce . . . . . . . . . . . . . . . . . . . . . . .4 centimètres Total . . . . . . . . . . . . .11 centimètres Occupez-vous maintenant de la ligne de poitrine. sur laquelle vous avez actuellement la même largeur que sur la ligne de taille, soit 11 centimètres. Votre point d `aplomb de poitrine étant de 17 centimètres, il vous manque pour le compléter 6 centimètres dont vous porterez le 1/3, soit 2 centimètres, de 6 à 7, de 8 à 9, et de 10 à 11. Réunissez 5 à 11 par une ligne pleine sur laquelle vous portez en partant de 5, la hauteur du dessous de bras moins 4 centimètres; joignez aussi 2 à 7 et 3 à 9 par des lignes pleines. Rapprochez vos pièces à la taille en pliant votre papier, comme on vous l'a indiqué, et tracez alors votre ligne de taille. Pour terminer le haut de vos pièces, réunissez 6 à 11 comme l'indique la fig. 12. Passez maintenant à la ligne des hanches, prise å 12 centimètres au- dessous de la ligne de taille, et cherchez la diférence qui existe entre votre point d'aplomb des hanches à 12 centimètres, et votre point d'aplomb de taille. Exemple : point d'aplomb des hanches à 12centimètres 17 centimètres. point d`aplomb de la taille . . . . . . . . . . . . . .. . 11 centimètres. c`est donc le tiers de ces 6 centimètres, soit 2 centimètres, qu'il faut ajouter à droite et gauche des lignes verticales pointillées, sur la ligne des hanches à 12 centimètres, pour trouver le point d'aplomb. Sur la ligne des hanches, prise 20 centimètres au-dessous de la ligne de taille, procédez comme sur la ligne des hanches à 12 centimètres, mais en se basant sur le point d'aplomb des hanches à 20 centimètres. Exemple : point d'aplomb des hanches à 20 centimètres….. 19 centimètres. point d'aplomb de la taille . . . . . . . . . . . . .. . 11 centimètres. c'est donc le tiers de ces 8 centimètres, soit 2 centimètres 7 mm., que vous porterez de 12 à 13, de 14 à 15 et de 16 à 17. Réunissez par des lignes pleines arrondies 2 à 13, 3 à 14 et 5 à 17, en passant par les points trouvés aux hanches à 12 centimètres. La longueur 5 à l7 est facultative, suivant la longueur que l'on veut donner au corset. Terminez le bas des pièces en consultant le dessin Devant Tracez d'abord les lignes de construction du devant, en consultant la deuxième leçon. Comme nous allons faire quatre pièces pour le devant de ce corset, nous partirons toujours des mêmes principes, mais en basant nos divisions sur le quart du complément des tours de poitrine, taille et hanches, au lieu du tiers. La différence de construction est si peu sensible que vous n'aurez aucune difficulté à établir ce patron. Les lignes de construction dessinées, sortez sur la ligne de poitrine, à droite de la ligne pointillée, 1 centimètre 1/2, marquez le chiffre 1 et réunissez 10 à 1 par une ligne pleine, que vous prolongerez comme à la précédente leçon, afin de pouvoir déterminer sur ce prolongement la hauteur du corset. Comptez maintenant de 1 vers 2, le demi-tour de poitrine, moins le point d'aplomb de la poitrine. Exemple : demi-tour de poitrine . . . . . . . . . . . . . . . . . .. . 47 centimètres. moins le point d'aplomb de la poitrine.. . . . 17 centimètres. la largeur 1-2 sera donc égale à . . . . . . . . . .. . 30 centimètres. De 10 à 3, sur la ligne de taille, portez cette même largeur. moins 1 centimètre 1/2. Exemple : nous avons sur la ligne de poitrine 30 centimètres, qui sont comptés entre les chiffres 1-2, vous n'aurez donc à donner entre les chiffres 10-3 qu'une largeur de 28 centimètres 5 mm. Joignez, à présent, 3 à 2 en prolongeant la ligne au-delà de ce dernier chiffre. De 3 à 4, elevez votre ligne de taille du 1/8 du demi-tour de poitrine. Exemple : demi-tour de poitrine li7 centimètres, le 1/ 8 de 47 centimètres donne 5 centimètres 9 mm., que vous comptez de 3 à 4. Réunissez 4 à 10, par une ligne pointillée qui devient la ligne de taille réelle (voir dessin), et indiquez ensuite les lignes des hanches à 12 et à 20 centimètres au-dessous de la ligne de taille, par des lignes parallèles å la ligne de taille 4-10. De 4 à 5, portez la hauteur du dessous de bras, moins 4 centimètres ce qui donne le point 5 et détermine la hauteur du corset sur le côté. Donnez, de 1 à 6, la moitié de la hauteur 2-5, et joignez 5 à 6 par une ligne pointillée (voir la fig. 13). A la moitié de cette distance, élevez de 3 à 5 centimètres, suivant que vous voudrez un corset enveloppant plus ou moins la gorge. Tracez enfin une ligne pleine arrondie qui réunit encore 5 à 6, en passant par l'élévation que vous venez de donner à votre corset (voir dessin). Divisons maintenant la largeur 5-6 en quatre parties égales. Exemple : complément du demi-tour de poitrine, 30 centimètres, soit 7 centimètres 1/2 pour chaque pièce sur cette ligne. Laissez la division 6-7 intacte, mais tracez, au milieu des trois autres pièces, des lignes pointillées dans toute la hauteur du corset, et parallèles au côté 5-3. Descendez ensuite à la ligne de taille, et donnez à chaque pièce le quart du complément du demi-tour de taille. Exemple : demi-tour de taille . . . . . . . . . . . . . . . . . . . . . 30 centimètres. moins le point d'aplomb de la taille . . . . .. . 11 centimètres. c'est donc le 1/4 de ces 19 centimètres, soit li centimètres 8 mm., que vous donnerez comme largeur à chaque pièce sur la ligne de taille. Portez une première fois ces 4 centimètres 8 mm.. de 10 à 11. A droite et à gauche des lignes verticales pointillées, reportez cette même mesure, soit 2 centimètres 4 mm. de chaque côté, ce qui donne les points 12-13, 14-15, 16-17. Réunissez par des lignes pleines 11 à 7. 12 à 7, 13 à 3, 14 à 8. 15 à 9. 16' à 9 et 17 à 5 en prolongeant ces lignes au-delà de la ligne pointillée 5-6 (consulter le dessin). A la moitié de la hauteur 15-9, et de la hauteur 16-9, cintrez d'un demi- centimètre (voir dessin). Ceci fait, rapprochez toutes les pièces sur la ligne de taille, en pliant le papier de manière que les lignes 16-9, 15-.9 se touchent, ainsi que 13-8 et 14-8. 11-7 et 12-7. Marquez enfin par une ligne pleine votre ligne de taille (voir dessin). Passons maintenant å la ligne des hanches prise à 12 centimètres au- dessous de la ligne de taille, et cherchons le complément du demi-tour des hanches à 12 centimètres. Exemple : demi-tour des hanches à 12 centimètres . 46 centimètres moins le point d`aplomb des hanches à 12 centimètres . 17 centimètres le complément du demi-tour des hanches est donc de . . 29 centimètres. dont nous porterons le 1/4, moins 2 centimètres, de 18 à 19. Exemple : le 1/4 de 29 étant 7 centimètres 3 mm, c'est donc ce 1/4 moins 2 centimètres. soit 5 centimètres 3 mm.. que nous comptons de 18 à 19. Joignez par une ligne pleine 11 à 19, en prolongeant cette ligne au-delà de la ligne des hanches à 20 centimètres (voir dessin). Puis. à droite de la première ligne pointillée, sortez 1 centimètre et marquez le chiffre 20. Réunissez encore 12 in 20 par une ligne pleine, en prolongeant cette ligne comme la précédente. Donnez de 20 à 21. le 1/4 moins 1 centimètre du complément, soit 6 centimètres 3 mm., et réunissez 13 à 21. toujours en prolongeant la ligne (voir dessin). Toujours à droite de la deuxième ligne verticale pointillée ,ressortez 1 centimètre, ce qui vous donne le point 22, et réunissez 14 à 22 en donnant à cette ligne la même longueur que celle de la ligne 13-21. De 22-23 porter le complément du demi-tour des hanches moins les largueurs 18-19 et 20-21. Exemple : le complément du demi-tour des hanches à 12 centimètres étant de 29 centimètres, moins la largeur 18-19 et 20-21, qui donnant ensemble 11 centimètres 6 mm., il reste à donner de 22 à 23 une largeur de 29 centimètres, moins 11 centimètres 6 mm., soit 17 centimètres 4 mm Faites de même pour la ligne des hanches à 20 centimètres et réunissez 17 à 23, en prolongeant cette ligne de la même longueur qu'à ligne du dos 5-17. Joignez enfin 16' à 24, par une ligne pleine, que vous prolongez jusqu'au bas du corset; réunissez ensuite 15 à 24 (voir le dessin). Termines ce corset, en arrondissant le bas comme indique le croquis.
Attachments:
|
|
Last Edit: 2 years 8 months ago by jerwin.
Report to moderator
|
|
|
|
Last Edit: 2 years 8 months ago by jerwin.
Report to moderator
|
|
Very neat!
|
|
|
|
And here I shall demonstrate my worth as a programmer. I'm not very skilled at python.
Right now, I don't have time to think about licenses; I'll probably open source it properly at some later point. #Copyright 2012Jeremy Erwin. All rights reserved
from dxfwrite import DXFEngine as dxf
import patterndxf as pat
import math
#setup dxf document
drawing = dxf.drawing('corsetdroit6.dxf')
drawing.add_layer('LINES',color=0,linetype='SOLID')
drawing.add_layer('GUIDES',color=1,linetype='DASHED')
drawing.add_layer('TEST',color=3,linetype='DOT')
def printpoint(pstring):
drawing.add(dxf.text(pstring, eval(pstring), height=0.4))
return pstring
#sizes
longDos=37.5
hatDeBra=22.5
hatPinces=24
longTailleDev=42
dtTaille=30
paTaille=11
dtPoitrine=47
paPoitrine=17
dtHanches12=46
paHanches12=17
dtHanches20=49
paHanches20=19
renversment= longTailleDev-longDos
bottomextension=4
#construction lines for the back
cb1=(0, longDos) #ligne de poitrine
cb2=pat.directionVector(cb1,pat.down,longDos/2.0) #ligne de taille
cb3=pat.directionVector(cb2,pat.down,12) #ligne de hanches 12
cb4=pat.directionVector(cb2,pat.down,20) #ligne de hanches 20
#construction lines for the front
cf1=pat.displacementVector(cb1,dtHanches20*1.5,-2*renversment) #ligne de poitrine
cf2=pat.directionVector(cf1,pat.down,longTailleDev-hatPinces) #ligne de taille
cf3=pat.directionVector(cf2,pat.down,12) #ligne de hanches 12
cf4=pat.directionVector(cf2,pat.down,20) #ligne de hanches 20
#back corset pattern
b1=pat.directionVector(cb2, pat.right, 3.0)
b1poitrine=pat.directionVector(cb1, pat.right, 3.0)
b1hanches12=pat.directionVector(cb3, pat.right, 3.0)
b1hanches20=pat.directionVector(cb4, pat.right, 3.0)
b2=pat.directionVector(b1, pat.right, paTaille -3.0)
b3=pat.directionVector(b2, pat.right, 10)
b4=pat.directionVector(b3, pat.right, paTaille -3.0)
b5=pat.directionVector(b4, pat.down, renversment/3.0)
b6= pat.angleAngleIntersectionVector(b2,pat.up, b1poitrine, pat.right )
b8= pat.angleAngleIntersectionVector(b3,pat.up, b1poitrine, pat.right )
b10= pat.angleAngleIntersectionVector(b4,pat.up, b1poitrine, pat.right )
backbustflare= (paPoitrine-paTaille)/3.0
b7= pat.directionVector(b6,pat.right, backbustflare)
b9= pat.directionVector(b8,pat.left, backbustflare)
b11= pat.directionVector(b10,pat.right, backbustflare)
b11a= pat.alongVector(b5, b11, hatDeBra-4.0)
backbustangle=math.degrees(math.atan2(b11a[1]-b11[1], paPoitrine-3.0))
b7a=pat.directionVector(b1poitrine, backbustangle, pat.dist(b1poitrine, b7) )
b9a= pat.directionVector(b11, backbustangle-180.0, pat.dist(b9, b11) )
backhip12flare= (paHanches12-paTaille)/3.0
#need to establish points along hip12 line
b18=pat.angleAngleIntersectionVector(b2,pat.up, b1hanches12, pat.right )
b21=pat.angleAngleIntersectionVector(b3,pat.up, b1hanches12, pat.right )
b23=pat.angleAngleIntersectionVector(b4,pat.up, b1hanches12, pat.right )
b19= pat.directionVector(b18,pat.right, backhip12flare)
b20= pat.directionVector(b21,pat.left, backhip12flare)
b24= pat.directionVector(b23,pat.right, backhip12flare)
printpoint("b19")
printpoint("b20")
printpoint("b24")
b12=pat.angleAngleIntersectionVector(b1hanches20,pat.right, b2, pat.down)
b15=pat.angleAngleIntersectionVector(b1hanches20,pat.right, b3, pat.down)
b16=pat.angleAngleIntersectionVector(b1hanches20,pat.right, b4, pat.down)
backhip20flare= (paHanches20-paTaille)/3.0
b13= pat.directionVector(b12,pat.right, backhip20flare)
b14= pat.directionVector(b15,pat.left, backhip20flare)
b17= pat.directionVector(b16,pat.right, backhip20flare)
b17a=pat.directionVector(b17,pat.down, bottomextension)
backhip20angle=math.degrees(math.atan2(-bottomextension, paHanches20-3.0))
b13a=pat.directionVector(b1hanches20, backhip20angle, pat.dist(b1hanches20, b13) )
b14a=pat.directionVector(b17a, backhip20angle-180.0, pat.dist(b17,b14) )
drawing.add(dxf.line(cb1,cb4,layer= 'GUIDES'))
drawing.add(dxf.line(b1poitrine,b1hanches20,layer= 'LINES'))
drawing.add(dxf.line(b1poitrine,b7a,layer= 'LINES'))
drawing.add(dxf.line(b2,b7a,layer= 'LINES'))
drawing.add(dxf.line(b2,b19,layer= 'LINES'))
drawing.add(dxf.line(b13a,b19,layer= 'LINES'))
drawing.add(dxf.line(b13a,b1hanches20,layer= 'LINES'))
drawing.add(dxf.line(b6,b12,layer= 'GUIDES'))
drawing.add(dxf.line(b8,b15,layer= 'GUIDES'))
drawing.add(dxf.line(b10,b16,layer= 'GUIDES'))
drawing.add(dxf.line(b9a,b11a,layer= 'LINES'))
drawing.add(dxf.line(b11a,b5,layer= 'LINES'))
drawing.add(dxf.line(b5,b24,layer= 'LINES'))
drawing.add(dxf.line(b24,b17a,layer= 'LINES'))
drawing.add(dxf.line(b17a,b14a,layer= 'LINES'))
drawing.add(dxf.line(b14a,b20,layer= 'LINES'))
drawing.add(dxf.line(b20,b3,layer= 'LINES'))
drawing.add(dxf.line(b3,b9a,layer= 'LINES'))
printpoint("b1")
printpoint("b2")
printpoint("b3")
printpoint("b4")
printpoint("b5")
printpoint("b6")
printpoint("b7")
printpoint("b8")
printpoint("b9")
printpoint("b10")
printpoint("b11")
printpoint("b12")
printpoint("b13")
printpoint("b14")
printpoint("b15")
printpoint("b16")
printpoint("b17")
f1=pat.directionVector(cf1,pat.right,1.5)
f2=pat.directionVector(cf1,pat.left, dtPoitrine-paPoitrine)
f10=pat.directionVector(cf1,pat.down,(longTailleDev-hatPinces))
f3=pat.angleAngleIntersectionVector(f10, pat.left, f2, pat.down)
f4=pat.directionVector(f3,pat.up, dtPoitrine/8.0)
f5=pat.directionVector(f4,pat.up, hatDeBra-4.0)
f6a=pat.circleLSIntersectionVector(cf1,f10,f1,pat.dist(f2,f5)/2.0) #we want the othe root. sigh
f6=pat.circleLSIntersectionVector(cf1,f6a,f1,pat.dist(f2,f5)/2.0) #yay. It worked.
f8=pat.midPointVector(f5,f6)
f8a=pat.directionVector(f8,pat.up,2.0)
f9=pat.midPointVector(f5,f8)
f7=pat.midPointVector(f8,f6)
#guides in the center of each panel
f59=pat.midPointVector(f5,f9)
f98=pat.midPointVector(f8,f9)
f87=pat.midPointVector(f8,f7)
#bring the guides down to the waistline
f59a=pat.teeIntersectionVector(f59,pat.down,f4,f10)
f98a=pat.teeIntersectionVector(f98,pat.down,f4,f10)
f87a=pat.teeIntersectionVector(f87,pat.down,f4,f10)
waistpanel=(dtTaille-paTaille)/4.0
f11=pat.alongVector(f10,f4, waistpanel)
f12=pat.alongVector(f87a,f10, waistpanel/2.0)
f13=pat.alongVector(f87a,f4, waistpanel/2.0)
f14=pat.alongVector(f98a,f10, waistpanel/2.0)
f15=pat.alongVector(f98a,f4, waistpanel/2.0)
f16=pat.alongVector(f59a,f10, waistpanel/2.0)
f15a=pat.perpendicularbisector(f9,f15, 0.5)
f16a=pat.perpendicularbisector(f9,f16, -0.5)
f17=pat.alongVector(f59a,f4, waistpanel/2.0)
f18=pat.directionVector(f10,pat.down, 12)
f20a=pat.directionVector(f87a,pat.down, 12)
f20=pat.alongVector(f20a,f18,1.0)
f19=pat.alongVector(f18,f20,(dtHanches12-paHanches12)/4.0-2)
f21=pat.extendVector(f19,f20,(dtHanches12-paHanches12)/4.0-1)
f22a=pat.intersectionVector(f98,f98a,f18,f21)
f22=pat.alongVector(f22a,f18,1)
f24=pat.intersectionVector(f59,f59a,f18,f21)
f23=pat.extendVector(f18,f22,(dtHanches12-paHanches12-pat.dist(f21,f20)-pat.dist(f18,f19)))
#ok time for the unlabled lower hip
f25=pat.directionVector(f10,pat.down, 20) #18
f27a=pat.directionVector(f87a,pat.down, 20) #20
f26=pat.alongVector(f25,f27a,(dtHanches20-paHanches20)/4.0-2) #19
f28a=pat.extendVector(f25,f27a,(dtHanches20-paHanches20)/4.0-1) #21
f28=pat.alongVector(f21,f28a,6) #21
f29a=pat.intersectionVector(f14,f22,f98,f98a) #22
f29=pat.alongVector(f22,f29a,6)
f30=pat.extendVector(f25,f29a,(dtHanches20-paHanches20-pat.dist(f26,f25)-pat.dist(f28a,f27a))) #23
f31=pat.extendVector(f16,f24,7)
f26a=pat.teeIntersectionVector(f25, pat.left, f19,f26)
f27=pat.alongVector(f20,f27a,pat.dist(f19, f26a)) #20
f27b=pat.directionVector(f27, pat.left, 1.5)
f30a=pat.extendVector(f23,f30, pat.dist(b24,b17a)+pat.dist(b5,b24)-pat.dist(f30,f23)-pat.dist(f17,f23))
f31a=pat.perpendicularVector(f30,f30a,4)
printpoint("f31a")
f28a=pat.alongVector(f21,f28,6)
#drawing.add(dxf.text("f1", f1))
printpoint("f1")
printpoint("f2")
printpoint("f3")
printpoint("f4")
printpoint("f5")
printpoint("f6")
printpoint("f7")
printpoint("f8")
printpoint("f9")
printpoint("f10")
printpoint("f11")
printpoint("f12")
printpoint("f13")
printpoint("f14")
printpoint("f15")
printpoint("f16")
printpoint("f17")
printpoint("f18")
printpoint("f19")
printpoint("f20")
printpoint("f21")
printpoint("f22")
printpoint("f23")
printpoint("f24")
printpoint("f25")
printpoint("f26")
printpoint("f27")
printpoint("f28")
printpoint("f29")
printpoint("f30")
printpoint("f31")
drawing.add(dxf.line(cf1,cf4,layer= 'GUIDES'))
drawing.add(dxf.line(f1,f2,layer= 'TEST'))
drawing.add(dxf.line(f3,f2,layer= 'GUIDES'))
drawing.add(dxf.line(f5,f3,layer= 'GUIDES'))
drawing.add(dxf.line(f5,f4,layer= 'GUIDES'))
drawing.add(dxf.line(f59,f24,layer= 'GUIDES'))
drawing.add(dxf.line(f98,f22a,layer= 'GUIDES'))
drawing.add(dxf.line(f87,f87a,layer= 'GUIDES'))
drawing.add(dxf.line(f10,f3,layer= 'GUIDES'))
drawing.add(dxf.line(f10,f6,layer= 'LINES'))
drawing.add(dxf.line(f10,f4,layer='GUIDES'))
drawing.add(dxf.line(f5,f6,layer= 'GUIDES'))
drawing.add(dxf.line(f7,f11,layer= 'LINES'))
drawing.add(dxf.line(f7,f12,layer= 'LINES'))
drawing.add(dxf.line(f8,f13,layer= 'LINES'))
drawing.add(dxf.line(f8,f14,layer= 'LINES'))
drawing.add(dxf.line(f9,f15,layer= 'GUIDES'))
drawing.add(dxf.line(f9,f16,layer= 'GUIDES'))
drawing.add(dxf.line(f9,f16a,layer= 'LINES'))
drawing.add(dxf.line(f9,f15a,layer= 'LINES'))
drawing.add(dxf.line(f16,f16a,layer= 'LINES'))
drawing.add(dxf.line(f15,f15a,layer= 'LINES'))
drawing.add(dxf.line(f5,f17,layer= 'LINES'))
drawing.add(dxf.line(f11,f19,layer= 'LINES'))
drawing.add(dxf.line(f12,f20,layer= 'LINES'))
drawing.add(dxf.line(f13,f21,layer= 'LINES'))
drawing.add(dxf.line(f14,f22,layer= 'LINES'))
drawing.add(dxf.line(f15,f24,layer= 'LINES'))
drawing.add(dxf.line(f16,f24,layer= 'LINES'))
drawing.add(dxf.line(f18,f23,layer= 'GUIDES'))
drawing.add(dxf.line(f25,f30,layer= 'GUIDES'))
drawing.add(dxf.line(f25,f26a,layer= 'LINES'))
drawing.add(dxf.line(f19,f26a,layer= 'LINES'))
drawing.add(dxf.line(f17,f23,layer= 'LINES'))
drawing.add(dxf.line(f20,f27,layer= 'LINES'))
drawing.add(dxf.line(f27b,f27,layer= 'LINES'))
drawing.add(dxf.line(f27b,f28,layer= 'LINES'))
drawing.add(dxf.line(f21,f28a,layer= 'LINES'))
drawing.add(dxf.line(f23,f30a,layer= 'LINES'))
drawing.add(dxf.line(f31a,f30a,layer= 'LINES'))
drawing.add(dxf.line(f31a,f31,layer= 'LINES'))
drawing.add(dxf.line(f31,f29,layer= 'LINES'))
drawing.add(dxf.line(f29,f22,layer= 'LINES'))
drawing.add(dxf.line(f8a,f5,layer= 'LINES'))
drawing.add(dxf.line(f8a,f6,layer= 'LINES'))
drawing.add(dxf.line(f10,f25,layer= 'LINES'))
drawing.save()and here is the support library. (patterndxf.py) Warning, some of the unused functions may be buggy... #Copyright 2012Jeremy Erwin. All rights reserved
import sys,math, numpy as np
up=90
down=270
left=180
right=0
def angle(vectorA, vectorB):
return math.atan2((vectorB[1]-vectorA[1]),(vectorB[0]-vectorA[0]))
def angledegrees(vectorA,vectorB):
return math.degrees(angle(vectorA,vectorB))\
def dist(vectorA, vectorB):
dx=vectorA[0]-vectorB[0]
dy=vectorA[1]-vectorB[1]
return math.sqrt(dx*dx+dy*dy)
def directionVector(vectorA, degrees, length):
theta=math.radians(degrees)
dx=math.cos(theta)*length
dy=math.sin(theta)*length
return (vectorA[0]+dx, vectorA[1]+dy)
def displacementVector(vectorA, x, y):
return (vectorA[0]+x, vectorA[1]+y)
def extendVector(vectorA, vectorB, length):
theta=angle(vectorA,vectorB)
length2=length+dist(vectorA,vectorB)
dx=math.cos(theta)*length2
dy=math.sin(theta)*length2
return (vectorA[0]+dx, vectorA[1]+dy)
def alongVector(vectorA, vectorB, length):
theta=angle(vectorA,vectorB)
dx=math.cos(theta)*length
dy=math.sin(theta)*length
return (vectorA[0]+dx, vectorA[1]+dy)
def perpendicularVector(vectorA, vectorB, length):
theta=angle(vectorA,vectorB)+math.pi/2
dx=math.cos(theta)*length
dy=math.sin(theta)*length
return (vectorB[0]+dx, vectorB[1]+dy)
def midPointVector(vectorA, vectorB):
x=(vectorA[0]+vectorB[0])/2.0
y=(vectorA[1]+vectorB[1])/2.0
return (x,y)
def perpendicularbisector(vectorA, vectorB, length):
x=(vectorA[0]+vectorB[0])/2.0
y=(vectorA[1]+vectorB[1])/2.0
theta=angle(vectorA,vectorB)+math.pi/2
dx=math.cos(theta)*length
dy=math.sin(theta)*length
return (x+dx, y+dy)
def intersectionVector(vectorA,vectorB,vectorC,vectorD):
a = np.array([[vectorB[1]-vectorA[1],vectorA[0]-vectorB[0]],[vectorD[1]-vectorC[1],vectorC[0]-vectorD[0]]])
b = np.array([a[0][0]*vectorA[0] + a[0][1]*vectorA[1],a[1][0]*vectorC[0]+a[1][1]*vectorC[1]])
x = np.linalg.solve(a, b)
return (x[0],x[1])
def teeIntersectionVector(vectorA,degrees,vectorB,vectorC):
theta=math.radians(degrees)
pseudox=vectorA[0] + math.cos(theta)*1000
pseudoy=vectorA[1] + math.sin(theta)*1000
a = np.array([[pseudoy-vectorA[1],vectorA[0]-pseudox],[vectorC[1]-vectorB[1],vectorB[0]-vectorC[0]]])
b = np.array([a[0][0]*vectorA[0] + a[0][1]*vectorA[1],a[1][0]*vectorB[0]+a[1][1]*vectorB[1]])
x = np.linalg.solve(a, b)
return (x[0],x[1])
def angleAngleIntersectionVector(vectorA, degreesA, vectorB, degreesB):
thetaA=math.radians(degreesA)
thetaB=math.radians(degreesB)
px1=vectorA[0] + math.cos(thetaA)*1000
py1=vectorA[1] + math.sin(thetaA)*1000
px2=vectorB[0] + math.cos(thetaB)*1000
py2=vectorB[1] + math.sin(thetaB)*1000
a = np.array([[py1-vectorA[1],vectorA[0] - px1],
[py2-vectorB[1],vectorB[0]-px2]])
b = np.array([a[0][0]*vectorA[0] + a[0][1]*vectorA[1],a[1][0]*vectorB[0]+a[1][1]*vectorB[1]])
x = np.linalg.solve(a, b)
return (x[0],x[1])
def circleLineIntersectionVector(vectorA, vectorB, degrees, radius):
theta=math.radians(degrees)
#vectorB where line begins,vectorA=circle center
#determine angle of line connecting lineBeginPoint and centerPoint
centerangle=angle(vectorA,vectorB)
#determine distance between A and B
distance=dist(vectorA,vectorB)
rho=centerangle-theta
determinant=radius*radius-(distance*distance*math.sin(rho)*math.sin(rho))
if determinant < 0:
return (float('nan'), float('nan'))
elif determinant==0: #one solution
s0=distance*math.cos(rho)
dx=s0*math.cos(theta)
dy=s0*math.sin(theta)
return (vectorA[0]+dx, vectorA[1]+dy)
else: #two solutions
s0=distance*math.cos(rho)+math.sqrt(determinant)
s1=distance*math.cos(rho)-math.sqrt(determinant)
if s0<0:
s0=sys.float_info.max
elif s1<0:
s1=sys.float_info.max
dx=min(s0,s1) *math.cos(theta)
dy=min(s0,s1) *math.sin(theta)
return (vectorA[0]+dx, vectorA[1]+dy)
def circleLSIntersectionVector(vectorA, vectorB, vectorC, radius):
return circleLineIntersectionVector(vectorB, vectorA, angledegrees(vectorB,vectorC), radius)
def circleCircleIntersectionVector(vectorA, radiusA, vectorB, radiusB,up):
#determine distance between A and B
distance=dist(vectorA,vectorB)
deltax=vectorA[0]-vectorB[0];
deltay=vectorA[1]-vectorB[1];
#distance to line joining points of intersection
k = (distance*distance + radiusA*radiusA - radiusB*radiusB)/(2*distance);
if up:
newx = vectorA[0] - deltax*k/distance - (deltay/distance)*math.sqrt(radiusA*radiusA - k*k);
newy = vectorA[1] - deltay*k/distance + (deltax/distance)*math.sqrt(radiusA*radiusA - k*k);
else:
newx = vectorA[0] - deltax*k/distance + (deltay/distance)*math.sqrt(radiusA*radiusA - k*k);
newy = vectorA[1] - deltay*k/distance - (deltax/distance)*math.sqrt(radiusA*radiusA - k*k);
return (newx, newy)
|
|
Last Edit: 2 years 8 months ago by jerwin.
Report to moderator
|
|

