Esempio n. 1
0
def DrawCreator(name, type, parameter, material, thickness=0, address=dirc):

    file_name = name + '.dxf'  #加一步判据
    file_name = re.sub('[\\\]|[\/]|[\*]', '_', file_name)
    drawing = dxf.drawing(file_name)

    if 'od' in parameter and not ('id' in parameter):

        drawing.add(dxf.circle(radius=(parameter['od']) / 2, center=(0, 0)))
        # drawing.add(dxf.text(file_name,height=parameter[0]/4,alignpoint =(0,0)))
    elif 'od' in parameter and 'id' in parameter and not ('angle'
                                                          in parameter):

        drawing.add(dxf.circle(radius=(parameter['od']) / 2, center=(0, 0)))
        drawing.add(dxf.circle(radius=(parameter['id']) / 2, center=(0, 0)))
        # drawing.add(dxf.text(file_name,height=parameter[1]/4, alignpoint =(0,0)))
    elif 'od' in parameter and 'id' in parameter and 'angle' in parameter:
        drawing.add(
            dxf.arc(radius=parameter['od'] / 2,
                    center=(0, 0),
                    startangle=0,
                    endangle=parameter['angle']))
        drawing.add(
            dxf.arc(radius=(parameter['id']) / 2,
                    center=(0, 0),
                    startangle=0,
                    endangle=parameter['angle']))
        drawing.add(
            dxf.polyline(points=[(parameter['od'] / 2,
                                  0), ((parameter['id']) / 2, 0)]))
        drawing.add(
            dxf.polyline(
                points=[((parameter['od']) / 2 *
                         math.cos(parameter['angle'] * math.pi / 180),
                         (parameter['od']) / 2 *
                         math.sin(parameter['angle'] * math.pi / 180)),
                        ((parameter['id']) / 2 *
                         math.cos(parameter['angle'] * math.pi / 180),
                         (parameter['id']) / 2 *
                         math.sin(parameter['angle'] * math.pi / 180))]))
    elif 'w' in parameter and 'l' in parameter:

        drawing.add(
            dxf.polyline(points=[(0, 0), (
                0, parameter['w']), (parameter['l'],
                                     parameter['w']), (parameter['l'],
                                                       0), (0, 0)]))
    else:
        print(file_name + '无对应图形')
        # 创建对应_厚度_的文件夹
    if not path.exists(address + '//' + '材料_' + material + '_厚度_' +
                       str(thickness)):
        #如果文件夹不存在创建
        mkdir(address + '//' + '材料_' + material + '_厚度_' + str(thickness))
    chdir(address + '\\材料_' + material + '_厚度_' + str(thickness))
    drawing.save()
def main():
    parser = OptionParser()
    parser.add_option(
        "-n",
        "--name",
        dest="name",
        help=
        "Name of the hinge.  Program will load file called <name>.json and output <name>-face.dxf and <name>-temple.dxf.",
        metavar="HINGENAME")

    (options, args) = parser.parse_args()

    if options.name == None:
        sys.stderr.write("Not enough arguments")
        parser.print_help()
        sys.exit(0)

    name = options.name
    infile = open(name + ".json")
    hinge = json.loads(infile.read())

    face = hinge["face_contour"]
    temple = hinge["temple_contour"]
    face_hole_diam = hinge["drill_dia"]
    temple_hole_diam = hinge["drill_dia"]
    face_holes = hinge["face_holes"]
    temple_holes = hinge["temple_holes"]

    face_drawing = dxf.drawing("./%s-face.dxf" % name)
    temple_drawing = dxf.drawing("./%s-temple.dxf" % name)
    face_drawing.add_layer("OUTLINE", color=1)
    face_drawing.add_layer("HOLES", color=2)
    temple_drawing.add_layer("OUTLINE", color=1)
    temple_drawing.add_layer("HOLES", color=2)

    face_outline = dxf.polyline(layer="OUTLINE", thickness=0.1)
    face_outline.add_vertices(face)
    face_drawing.add(face_outline)
    for hole in face_holes:
        circ = dxf.circle(face_hole_diam / 2.0,
                          hole,
                          layer="HOLES",
                          thickness=0.1)
        face_drawing.add(circ)
    face_drawing.save()

    temple_outline = dxf.polyline(layer="OUTLINE", thickness=0.1)
    temple_outline.add_vertices(temple)
    temple_drawing.add(temple_outline)
    for hole in temple_holes:
        circ = dxf.circle(temple_hole_diam / 2.0,
                          hole,
                          layer="HOLES",
                          thickness=0.1)
        temple_drawing.add(circ)
    temple_drawing.save()
Esempio n. 3
0
def tile(width, height, offsetX=0, offsetY=0, drawing=None, allNegative=False):
    if drawing is None:
        drawing = empty_drawing()
    entities = []
    for x in range(0, width):
        px = 32 * x + offsetX
        xDir = Direction.NORTH if x % 2 == 0 else Direction.SOUTH
        for y in range(0, height):
            yDir = Direction.WEST if y % 2 == 0 else Direction.EAST
            py = 32 * y + offsetY
            # right
            if x == width - 1:
                right = notchedLine(px + 32, py, yDir)
                if allNegative:
                    right = notchedLine(px + 32, py, Direction.EAST)
                entities.append(right)
            # top
            if y == height - 1:
                top = notchedLine(px, py + 32, xDir)
                if allNegative:
                    top = notchedLine(px, py + 32, Direction.NORTH)
                entities.append(top)
            # bottom
            bottom = dxf.line((px, py), (px + 32, py), layer='mark')
            if y == 0:
                bottom = notchedLine(px, py, xDir)
                if allNegative:
                    bottom = notchedLine(px, py, Direction.SOUTH)
            entities.append(bottom)
            # left
            left = dxf.line((px, py), (px, py + 32), layer='mark')
            if x == 0:
                left = notchedLine(px, py, yDir)
                if allNegative:
                    left = notchedLine(px, py, Direction.WEST)
            entities.append(left)
            # circles
            entities.append(
                dxf.circle(radius=circle_rad,
                           center=(px + 4, py + 4),
                           layer='engrave'))
            entities.append(
                dxf.circle(radius=circle_rad,
                           center=(px + 28, py + 28),
                           layer='engrave'))
    for entity in entities:
        drawing.add(entity)
    return drawing
Esempio n. 4
0
def create_dxf(filename):
    dxf_drawing = dxf.drawing(filename)

    for y in range(0, 5):
        x = 0
        dxf_drawing.add(dxf.circle(radius=y, center=(x, y * 2)))
    dxf_drawing.save()
Esempio n. 5
0
 def arc(self, end, center, layer=None):
     if self.enable:
         r = xyDist(end, center)
         if self.svg is not None:
             self.path.push_arc(self.scaleOffset(end), 0, r, \
                                 large_arc=True, angle_dir='+', \
                                 absolute=True)
         if self.d is not None:
             if layer is None:
                 layer = self.lPath
             else:
                 if not layer in self.definedLayers:
                     self.definedLayers[layer] = True
                     self.d.add_layer(layer, color=self.color, lineweight=0)
             p0 = self.last
             p1 = end
             if xyDist(p0, p1) < MIN_DIST:
                 self.d.add(dxf.circle(r, center, layer=layer))
             else:
                 # dprt("p0 (%7.4f, %7.4f) p1 (%7.4f, %7.4f)" % \
                 #      (p0[0], p0[1], p1[0], p1[1]))
                 # if orientation(p0, center, p1) == CCW:
                 #     (p0, p1) = (p1, p0)
                 a0 = degrees(calcAngle(center, p0))
                 a1 = degrees(calcAngle(center, p1))
                 if a1 == 0.0:
                     a1 = 360.0
                 # dprt("a0 %5.1f a1 %5.1f" % (a0, a1))
                 self.d.add(dxf.arc(r, center, a0, a1, layer=layer))
             self.last = end
Esempio n. 6
0
def Draw(p):

    lay=0
    path=p['path']
    n=p['nodes']
    d=p['drawing']
    rx=p['position'][0]
    ry=p['position'][1]
    if 'layer' in p.keys(): lay=p['layer']

    for c in path:
        if c[0]=='line':
            d.add(dxf.line((rx+n[c[1]][0],ry+n[c[1]][1]),
                           (rx+n[c[2]][0],ry+n[c[2]][1]),layer=lay))
        elif c[0]=='arc':
            cr=geo.CircleFrom3Points(n[c[1]],n[c[3]],n[c[2]])
            if cr['Direction']<0:
                d.add(dxf.arc(center=(rx+cr['Center'][0],ry+cr['Center'][1]),
                              radius=cr['Radius'],
                              startangle=math.degrees(cr['P1Degree']),
                              endangle=math.degrees(cr['P3Degree']),
                              layer=lay))
            else:    
                d.add(dxf.arc(center=(rx+cr['Center'][0],ry+cr['Center'][1]),
                              radius=cr['Radius'],
                              startangle=math.degrees(cr['P3Degree']),
                              endangle=math.degrees(cr['P1Degree']),
                              layer=lay))
            
        elif c[0]=='circle':
            rds=n[c[2]][0]-n[c[1]][0]
            d.add(dxf.circle(rds,(rx+n[c[1]][0],ry+n[c[1]][1]),layer=lay))
Esempio n. 7
0
def outline_circle(ai_center, ai_radius, ai_backend):
    """ Generates a circle according to the selected backend.
      Possible backend: freecad, mozman dxfwrite, mozman svgwrite, Tkinter.
  """
    #r_outline = ''
    # check the radius
    if (ai_radius <= 0):
        six.print_(
            ("ERR409: Error, the radius {:0.3f} is negative or null!".format(
                ai_radius)))
        sys.exit(2)
    # select backend
    if (ai_backend == 'freecad'):
        r_outline = Part.Circle(Base.Vector(ai_center[0], ai_center[1], 0),
                                Base.Vector(0, 0, 1), ai_radius).toShape()
    elif (ai_backend == 'svgwrite'):
        svg_circle = svgwrite.shapes.Circle(center=(ai_center[0],
                                                    ai_center[1]),
                                            r=ai_radius)
        svg_circle.fill('green', opacity=0.25).stroke('black', width=1)
        r_outline = [
            svg_circle
        ]  # circle wrapped in list to help the integration in the function write_figure_in_svg()
    elif (ai_backend == 'dxfwrite'):
        dxf_circle = DXFEngine.circle(radius=ai_radius,
                                      center=(ai_center[0], ai_center[1]))
        r_outline = [
            dxf_circle
        ]  # circle wrapped in list to help the integration in the function write_figure_in_dxf()
    elif (ai_backend == 'tkinter'):
        r_outline = outline_circle_with_tkinter(ai_center, ai_radius)
    return (r_outline)
Esempio n. 8
0
 def build_dxf(self, scale, offset, diameter):
     drawing = dxf.drawing('Drawing.dxf')
     print('\n' + Fore.RESET + 'Выполняется построение объекта...')
     counter = 0
     for pin in self.pins:
         x = int(pin[0]) * scale
         y = int(pin[1]) * scale
         drawing.add(dxf.circle(diameter / 2, (x, y)))
         counter += 1
         print('item added', x, y)
     drawing.add(dxf.line((min(self.rangex) * scale - offset, min(self.rangey) * scale - offset),
                          (max(self.rangex) * scale + offset, min(self.rangey) * scale - offset),
                          color=1))
     drawing.add(dxf.line((max(self.rangex) * scale + offset, min(self.rangey) * scale - offset),
                          (max(self.rangex) * scale + offset, max(self.rangey) * scale + offset),
                          color=1))
     drawing.add(dxf.line((max(self.rangex) * scale + offset, max(self.rangey) * scale + offset),
                          (min(self.rangex) * scale - offset, max(self.rangey) * scale + offset),
                          color=1))
     drawing.add(dxf.line((min(self.rangex) * scale - offset, max(self.rangey) * scale + offset),
                          (min(self.rangex) * scale - offset, min(self.rangey) * scale - offset),
                          color=1))
     print('Построение завершено.')
     printtable()
     try:
         drawing.save()
         print('Результат сохранен в файл ' + Fore.CYAN + 'Drawing.dxf' + Fore.RESET)
     except PermissionError:
         print(Fore.RED + 'ФАЙЛ ЗАНЯТ ДРУГИМ ПРИЛОЖЕНИЕМ.' + Fore.RESET)
Esempio n. 9
0
    def writeDXF(self):
        
        fname = self.ui.lineEditOutputDXF.text()
        file = open(fname, 'w')
        
        rad = 0.25
        scale = 1.0
        col = 7
        dec = self.ui.spinBoxDecimal.value()
        dwg = dxf.drawing(fname)
           
        # create block
        scalarsymbol = dxf.block(name='symbol')
        scalarsymbol.add( dxf.circle(radius=rad, color=0) )

        # define some attributes
        scalarsymbol.add( dxf.attdef(insert=(1.25, -1.25), tag='VAL1', height=1.25, color=0) )

        # add block definition to the drawing
        dwg.blocks.add(scalarsymbol)

        for nID in self.points:
            x = self.points[nID][0]
            y = self.points[nID][1]
            val1 = self.points[nID][2]
            values = {'VAL1': "%.{0}f".format(dec) % val1}
            
            dwg.add(dxf.insert2(blockdef=scalarsymbol, insert=(x, y),
                                attribs=values,
                                xscale=scale,
                                yscale=scale,
                                layer='0',
                                color = col))

        dwg.save()
def main():
    parser = OptionParser()
    parser.add_option("-n", "--name", dest="name",
            help="Name of the hinge.  Program will load file called <name>.json and output <name>-face.dxf and <name>-temple.dxf.", metavar = "HINGENAME")

    (options, args) = parser.parse_args()

    if options.name == None:
        sys.stderr.write("Not enough arguments")
        parser.print_help()
        sys.exit(0)

    name = options.name
    infile = open(name + ".json")
    hinge = json.loads(infile.read())

    face = hinge["face_contour"]
    temple = hinge["temple_contour"]
    face_hole_diam = hinge["drill_dia"]
    temple_hole_diam = hinge["drill_dia"]
    face_holes = hinge["face_holes"]
    temple_holes = hinge["temple_holes"]

    face_drawing = dxf.drawing("./%s-face.dxf" % name)
    temple_drawing = dxf.drawing("./%s-temple.dxf" % name)
    face_drawing.add_layer("OUTLINE", color=1)
    face_drawing.add_layer("HOLES", color=2)
    temple_drawing.add_layer("OUTLINE", color=1)
    temple_drawing.add_layer("HOLES", color=2)

    face_outline = dxf.polyline(layer="OUTLINE", thickness = 0.1)
    face_outline.add_vertices(face)
    face_drawing.add(face_outline)
    for hole in face_holes:
        circ = dxf.circle(face_hole_diam/2.0, hole, layer="HOLES", thickness=0.1)
        face_drawing.add(circ)
    face_drawing.save()

    temple_outline = dxf.polyline(layer="OUTLINE", thickness = 0.1)
    temple_outline.add_vertices(temple)
    temple_drawing.add(temple_outline)
    for hole in temple_holes:
        circ = dxf.circle(temple_hole_diam/2.0, hole, layer="HOLES", thickness=0.1)
        temple_drawing.add(circ)
    temple_drawing.save()
Esempio n. 11
0
 def circle(self, end, r, layer=None):
     if self.enable:
         if self.d is not None:
             if layer is None:
                 layer = self.lHole
             else:
                 if not layer in self.definedLayers:
                     self.definedLayers[layer] = True
                     self.d.add_layer(layer, color=self.color, lineweight=0)
             self.d.add(dxf.circle(r, end, layer=layer))
     self.last = end
Esempio n. 12
0
 def hole(self, end, drillSize):
     if self.enable:
         if self.svg is not None:
             self.path.push('L', self.scaleOffset(end))
             # dprt("svg line %7.4f %7.4f" % self.scaleOffset(end))
             self.svg.add(Circle(self.scaleOffset(end), \
                                 (drillSize / 2) * self.pScale, \
                                 stroke='black', stroke_width=.5, \
                                 fill="none"))
         if self.d is not None:
             self.d.add(dxf.line(self.last, end, layer=self.lPath))
             self.d.add(dxf.circle(drillSize / 2, end, layer=self.lHole))
     self.last = end
Esempio n. 13
0
    def samples_to_dxf(self):
        print('Converting samples to dxf...')
        x_center = 0
        y_center = 0

        for row in self.sample_data:
            for sample_luminance_value in row:
                circle = dxf.circle(radius=self.luminance_to_circle_radius(
                    sample_luminance_value))
                self.dxf_drawing.add(circle, center=(x_center, y_center))
                x_center += self.output_spacing
            x_center = 0
            y_center += self.output_spacing
        print('Converting Complete.')
def create_cad():
    '''
    :return: a cad file(.dxf)
    '''
    global cad_name
    project_list = []
    excel_name = input("请输入Excel文件名称(粘贴复制无后辍哦~): ")
    num_projects = int(input("请输入写入项目数(同Excel但除XY): "))
    for project_num in range(1, num_projects + 1):
        pk_num = int(input("请输入项目%s所在列号:" % project_num))
        project_list.append(pk_num)
    pk_x_cood = int(input("请输入排口横坐标所在列号:"))
    pk_y_cood = int(input("请输入排口纵坐标所在列号:"))
    cad_name = input("请输入要保存的CAD文件名称:")
    # draw a cad picture
    drawing = dxf.drawing(os.getcwd() + "/%s.dxf" % cad_name)
    # read excel datas
    wb = load_workbook(os.getcwd() + "/" + excel_name + ".xlsx")
    ws = wb.active
    for row in ws.rows:
        for project_column in project_list:
            if str(row[pk_x_cood - 1].value).replace(
                    ".", "").isdigit() == True and str(
                        row[pk_y_cood - 1].value).replace(
                            ".", "").isdigit() == True:
                print(row[project_column - 1].value, row[pk_x_cood - 1].value,
                      row[pk_y_cood - 1].value)
                x_cood = float(row[pk_x_cood - 1].value)
                y_cood = float(row[pk_y_cood - 1].value)
                pai_num = row[project_column - 1].value
                circle = dxf.circle(2.0)
                circle['layer'] = 'paikou'
                circle['color'] = 2
                text = dxf.text(pai_num,
                                (x_cood, y_cood -
                                 1.35 * project_list.index(project_column)),
                                height=1.207)
                text['layer'] = 'paikou'
                text['color'] = 2
                block = dxf.block(name='paikou')
                block.add(circle)
                drawing.blocks.add(block)
                blockref = dxf.insert(blockname='paikou',
                                      insert=(x_cood, y_cood))
                drawing.add(blockref)
                drawing.add(text)

    drawing.save()
Esempio n. 15
0
def make_dxf(xyrra_list):
    """turn an xyrra_list (xcenter, ycenter, radius_x, radius_y, angle of rotation)
    into a dxf file """
    directory_now = os.path.dirname(os.path.realpath(__file__))
    drawing = dxf.drawing(os.path.join(directory_now, 'test.dxf'))
    for i in range(xyrra_list.shape[0]):
        if i % 10000 == 0:
            print(xyrra_list.shape[0] - i, 'ellipses remaining in dxf creation...', flush=True)
        x,y,rx,ry,a = xyrra_list[i,:]
        if rx == ry:
            circ = dxf.circle(radius=rx / um, center=(x/um,y/um))
            drawing.add(circ)
        else:
            ellipse = dxf.ellipse((x/um,y/um), rx/um, ry/um, rotation=a/degree, segments=16)
            drawing.add(ellipse)
    print('saving dxf...', flush=True)
    drawing.save()
Esempio n. 16
0
def outline_circle(ai_center, ai_radius, ai_backend):
  """ Generates a circle according to the selected backend.
      Possible backend: freecad, mozman dxfwrite, mozman svgwrite, Tkinter.
  """
  #r_outline = ''
  # check the radius
  if(ai_radius<=0):
    print("ERR409: Error, the radius {:0.3f} is negative or null!".format(ai_radius))
    sys.exit(2)
  # select backend
  if(ai_backend=='freecad'):
    r_outline = Part.Circle(Base.Vector(ai_center[0], ai_center[1], 0), Base.Vector(0,0,1), ai_radius).toShape()
  elif(ai_backend=='svgwrite'):
    svg_circle = svgwrite.shapes.Circle(center=(ai_center[0], ai_center[1]), r=ai_radius)
    svg_circle.fill('green', opacity=0.25).stroke('black', width=1)
    r_outline = [svg_circle] # circle wrapped in list to help the integration in the function write_figure_in_svg()
  elif(ai_backend=='dxfwrite'):
    dxf_circle = DXFEngine.circle(radius=ai_radius, center=(ai_center[0], ai_center[1]))
    r_outline = [dxf_circle] # circle wrapped in list to help the integration in the function write_figure_in_dxf()
  elif(ai_backend=='tkinter'):
    r_outline = outline_circle_with_tkinter(ai_center, ai_radius)
  return(r_outline)
Esempio n. 17
0
def make_dxf(source=None,
             target_width=200,
             min_radius=0.,
             max_radius=3.,
             offset=True):
    def scale_r(value, min_v, max_v, min_r, max_r):
        return (value - min_v) * (max_r - min_r) / (max_v - min_v) + min_r

    src = rgb2gray(invert(imread(source)))
    dwg = dxf.drawing()
    dwg.add_layer('dots')

    h, w = src.shape
    img_max = src.max()
    img_min = src.min()
    tile_w = max_radius * 2
    scale = target_width / float(w)

    for row, ty in enumerate(xrange(0, h, int(tile_w // scale) + 1)):
        offset_x = 0
        if offset and row % 2:
            offset_x = int(tile_w // scale) // 2

        for tx in xrange(offset_x, w, int(tile_w // scale) + 1):
            # Calculate size of dot
            avg = src[ty:ty + int(tile_w), tx:tx + int(tile_w)].mean()
            dot_r = scale_r(avg, img_min, img_max, min_radius, max_radius)

            # calculate x, y corrdinates
            x = ((tx + tile_w) - tile_w // 2) * scale
            y = ((ty + tile_w) - tile_w // 2) * scale

            c = dxf.circle(radius=dot_r,
                           center=(x, (y * -1) + h * scale),
                           color=1,
                           layer='dots')
            dwg.add(c)

    return dwg
Esempio n. 18
0
def make_dxf(xyrra_list):
    """turn an xyrra_list (xcenter, ycenter, radius_x, radius_y, angle of rotation)
    into a dxf file """
    directory_now = os.path.dirname(os.path.realpath(__file__))
    drawing = dxf.drawing(os.path.join(directory_now, 'test.dxf'))
    for i in range(xyrra_list.shape[0]):
        if i % 10000 == 0:
            print(xyrra_list.shape[0] - i,
                  'ellipses remaining in dxf creation...',
                  flush=True)
        x, y, rx, ry, a = xyrra_list[i, :]
        if rx == ry:
            circ = dxf.circle(radius=rx / um, center=(x / um, y / um))
            drawing.add(circ)
        else:
            ellipse = dxf.ellipse((x / um, y / um),
                                  rx / um,
                                  ry / um,
                                  rotation=a / degree,
                                  segments=16)
            drawing.add(ellipse)
    print('saving dxf...', flush=True)
    drawing.save()
def create_cad():
    '''
    :return: a cad file(.dxf)
    '''
    global cad_name
    excel_name = input("\033[1;32m请输入Excel文件名称:(粘贴复制哦~)\033[0m")
    pk_num = int(input("\033[1;32m请输入排口编号所在列号:\033[0m"))
    pk_x_cood = int(input("\033[1;32m请输入排口横坐标所在列号:\033[0m"))
    pk_y_cood = int(input("\033[1;32m请输入排口纵坐标所在列号:\033[0m"))
    cad_name = input("请输入要保存的CAD文件名称:")
    # draw a cad picture
    drawing = dxf.drawing(os.getcwd() + "/%s.dxf" % cad_name)
    # read excel datas
    wb = load_workbook(os.getcwd() + "/" + excel_name + ".xlsx")
    ws = wb.active
    for row in ws.rows:
        if row[pk_num-1].value != None and row[pk_x_cood-1].value != None and  row[pk_y_cood-1].value != None \
                and is_number(row[pk_x_cood-1].value) == True and is_number(row[pk_y_cood-1].value) == True:
            print(row[pk_num - 1].value, row[pk_x_cood - 1].value,
                  row[pk_y_cood - 1].value)
            x_cood = float(row[pk_x_cood - 1].value)
            y_cood = float(row[pk_y_cood - 1].value)
            pai_num = row[pk_num - 1].value
            circle = dxf.circle(2.0)
            circle['layer'] = 'paikou'
            circle['color'] = 2
            text = dxf.text(pai_num, (x_cood, y_cood), height=1.207)
            text['layer'] = 'paikou'
            text['color'] = 2
            block = dxf.block(name='paikou')
            block.add(circle)
            drawing.blocks.add(block)
            blockref = dxf.insert(blockname='paikou', insert=(x_cood, y_cood))
            drawing.add(blockref)
            drawing.add(text)

    drawing.save()
Esempio n. 20
0
    def drawPath(self,
                 outlines=mePath.Outline(),
                 xy=[0,0],
                 layer=-1):
        
                     
        self.Paths.append(outlines)#???
        lay=layer
        path=outlines.Path
        n=outlines.Nodes
        d=self.DXFDrawing
        rx=xy[0]
        ry=xy[1]

        for c in path:
         if c[0]=='line':
            d.add(dxf.line((rx+n[c[1]][0],ry+n[c[1]][1]),
                           (rx+n[c[2]][0],ry+n[c[2]][1]),layer=lay))
         elif c[0]=='arc':
            cr=geo.CircleFrom3Points(n[c[1]],n[c[3]],n[c[2]])
            if cr['Direction']<0:
                d.add(dxf.arc(center=(rx+cr['Center'][0],ry+cr['Center'][1]),
                              radius=cr['Radius'],
                              startangle=math.degrees(cr['P1Degree']),
                              endangle=math.degrees(cr['P3Degree']),
                              layer=lay))
            else:    
                d.add(dxf.arc(center=(rx+cr['Center'][0],ry+cr['Center'][1]),
                              radius=cr['Radius'],
                              startangle=math.degrees(cr['P3Degree']),
                              endangle=math.degrees(cr['P1Degree']),
                              layer=lay))
            
         elif c[0]=='circle':
            rds=n[c[2]][0]-n[c[1]][0]
            d.add(dxf.circle(rds,(rx+n[c[1]][0],ry+n[c[1]][1]),layer=lay))
Esempio n. 21
0
	def converttodxf(self, nazwapliku = None, points = True, d3d = True):
		#konwertuje uzywajac modulu dxfwrite
		#points - czy wstawiac punkty wybierane podczas montazu
		if nazwapliku == None:
			nazwapliku = os.path.basename(self._nazwa_pliku)[:-3]+"dxf"
		from dxfwrite import DXFEngine as dxf
		drawing = dxf.drawing(nazwapliku)
		for OBJ in self._objects:
			#print "hehe"
			if OBJ==None:
				continue
			if OBJ.type()=='POINT':
				p=OBJ.P()
				if d3d:
					drawing.add(dxf.point((p[0],p[1],p[2])))
				else:
					drawing.add(dxf.point((p[0],p[1])))
			elif OBJ.type()=='LINE':
				p1=OBJ.P1(); p2=OBJ.P2()
				drawing.add(dxf.line((p1[0], p1[1]), (p2[0], p2[1])))
				#ent = adoc.CreateLine2(p1[0]/1000., p1[1]/1000., p1[2]/1000., p2[0]/1000., p2[1]/1000., p2[2]/1000.)
			elif OBJ.type()=='CIRCLE':
				p1=OBJ.O()
				drawing.add(dxf.circle(OBJ.d()/2.,(p1[0], p1[1])))
				#ent = adoc.CreateCircle2(p1[0]/1000., p1[1]/1000., p1[2]/1000., p2[0]/1000., p2[1]/1000., p2[2]/1000.)
			if points and not OBJ.type()=="POINT":
				PTS = OBJ.meas_points()
				print "dodawanie punktow pomiarowych:"
				for pp in PTS:
					#print (pp[0],pp[1],pp[2])
					if d3d:
						drawing.add(dxf.point((pp[0],pp[1],pp[2])))
					else:
						drawing.add(dxf.point((pp[0],pp[1])))
					
		drawing.save()
Esempio n. 22
0
 def append_to_dxf(self, drawing):
     drawing.add(dxf.circle(self.radius, (self.center[0], -self.center[1])))
Esempio n. 23
0

sample_coords = [get_random_point() for x in range(50)]

flag_symbol = [(0, 0), (0, 5), (4, 3), (0, 3)]

filename = 'flags.dxf'
dwg = dxf.drawing(filename)
dwg.add_layer('FLAGS')

# first create a block
flag = dxf.block(name='flag')
# add dxf entities to the block (the flag)
# use basepoint = (x, y) define an other basepoint than (0, 0)
flag.add(dxf.polyline(flag_symbol))
flag.add(dxf.circle(radius=.4, color=2))
# define some attributes
flag.add(dxf.attdef(insert=(0.5, -0.5), tag='NAME', height=0.5, color=3))
flag.add(dxf.attdef(insert=(0.5, -1.0), tag='XPOS', height=0.25, color=4))
flag.add(dxf.attdef(insert=(0.5, -1.5), tag='YPOS', height=0.25, color=4))

# add block definition to the drawing
dwg.blocks.add(flag)
number = 1
for point in sample_coords:
    # now insert flag symbols at coordinate 'point'
    # insert2 needs the block definition object as parameter 'blockdef'
    # see http://packages.python.org/dxfwrite/entities/insert2.html
    # fill attribtes by creating a dict(), keystr is the 'tag' name of the
    # attribute
    values = {
Esempio n. 24
0
    def render(self):
        data = self.data
        point_layers = {}

        # create the drawing and add layers to it
        drawing = dxf.drawing()
        drawing.add_layer(self.filter_layer_name('objects'))
        drawing.add_layer(self.filter_layer_name('marker'))
        drawing.add_layer(self.filter_layer_name('Mesh'))

        # Add layers from the doncodes
        for l in set([
                self.doncodes["doncodes"][lx]["CAD LAYERS"]
                for lx in self.doncodes["doncodes"]
        ]):
            if l:
                drawing.add_layer(self.filter_layer_name(l))

        # might need custom layers for major/minor contours
        have_contour_names = []
        for x in ["major", "minor"]:
            if self.settings["job"].get("contours") and self.settings["job"][
                    "contours"][x] and self.settings["job"]["contours"][x].get(
                        "layer"):
                drawing.add_layer(
                    self.filter_layer_name(
                        "Contour - " +
                        str(self.settings["job"]["contours"][x].get("layer"))))
                have_contour_names.append(x)

        if len(have_contour_names) < 2:
            # drawing.add_layer(self.filter_layer_name('Contour'))
            drawing.add_layer(self.filter_layer_name('Contour Splines'))
            drawing.add_layer(self.filter_layer_name('Contour Splines Flat'))

        # add the separated codes/shots/rls
        for x in ["Shots", "Rls", "Codes"]:
            for y in ["", "_NC", "_NL"]:
                drawing.add_layer(self.filter_layer_name(x + y))

        #drawing.header['$ANGBASE'] = self.bm["marker_angle"]

        #drawing.header['$UCSORG'] = (0, 0, 0)
        #drawing.header['$UCSXDIR'] = (1, 0, 0)
        #drawing.header['$UCSYDIR'] = (0, 1, 0)

        # set 3D Point
        #drawing.header['$EXTMIN'] = (0, 0, -10)
        #drawing.header['$EXTMAX'] = (1000, 1000, 100)

        # add the mesh
        if self.settings["options"]["threedMesh"] == "1":
            self.render_mesh(drawing)

        #add stringlines to string_lines layer
        for line in data["stringlines"]:
            if len(data["stringlines"][line]) > 1:
                # variable to store stringline colour, thickness etc. to be passed to polyline
                stringline_detail = {}
                first_point = data["stringlines"][line][0]
                ms_layer = first_point["doncode"].get("MS Properties")
                layer_codes = self.doncodes["ms_layers"].get(ms_layer)
                # make sure we have stringline properties in our doncodes array (often blank)
                if layer_codes:
                    # print data["stringlines"][line][0]["code"], ms_layer
                    # print first_point["code"], layer_codes
                    # if we have a special colour
                    if layer_codes.get("Col"):
                        stringline_detail["color"] = int(layer_codes["Col"])
                    # if we have a line weight set
                    if layer_codes.get("Line Weight") and int(
                            layer_codes.get("Line Weight")):
                        stringline_detail["thickness"] = int(
                            layer_codes.get("Line Weight"))
                    # if we have a line style TODO: map these to their actual line styles
                    if layer_codes.get("Line Style") and int(
                            layer_codes.get("Line Style")):
                        stringline_detail["linetype"] = int(
                            layer_codes.get("Line Style"))
                polyline = dxf.polyline(layer=self.filter_layer_name(
                    first_point["doncode"].get("CAD LAYERS")),
                                        **stringline_detail)
                polyline.add_vertices([
                    self.convert_point(p["point"])
                    for p in data["stringlines"][line]
                ])
                drawing.add(polyline)

        # add the regular (original) contour line
        if self.settings["options"]["origContour"] == "1":
            self.render_contour(drawing, data["contour_lines"],
                                lambda p: self.convert_point(
                                    p))  # Line was previously commented.

        # add splines contour line
        if self.settings["options"]["splinesContour"] == "1":
            # splines version
            self.render_contour(drawing, data["contour_splines"],
                                lambda p: self.convert_point(p), " Splines")
            # flat spline version
            self.render_contour(
                drawing, data["contour_splines"],
                lambda p: self.flatten_point(self.convert_point(p)),
                " Splines Flat")

        # loop through the points with 2d objects on them putting Xrefs on the ones that need it
        #print data["objects_2d"]
        for o in data["objects_2d"]:
            # //bush.position.set(objects_2d[o][0],objects_2d[o][1]+0.3,objects_2d[o][2]).multiplyScalar(psu_renderer.SCALE);
            # psu_renderer.generate_obj(bush.clone());
            drawing.add_xref(self.settings["global"].get("export", {}).get(
                "xref_path", "") + o["code"] + ".dwg",
                             insert=self.convert_point(o["point"]),
                             layer=self.filter_layer_name(
                                 o["doncode"].get("CAD LAYERS")))

        # find and add trees to plot and tree schedule
        # create the table for tree information
        tree_table = dxf.table(insert=self.convert_point(
            [self.bounding_box[0][1], 0, self.bounding_box[2][0] - 20]),
                               nrows=len(data["trees"]) + 2,
                               ncols=4)
        tree_table.set_col_width(1, 4)
        tree_table.set_col_width(2, 3)
        tree_table.set_col_width(3, 5)
        # table cell style
        ctext = tree_table.new_cell_style('ctext',
                                          textcolor=7,
                                          textheight=0.5,
                                          halign=dxfwrite.CENTER,
                                          valign=dxfwrite.MIDDLE)
        # table border style
        border = tree_table.new_border_style(color=6, priority=51)
        ctext.set_border_style(border, right=False)
        # table header
        hcell = tree_table.text_cell(0, 0, "SCHEDULE OF TREES")
        hcell.span = (1, 4)
        tree_table.text_cell(1, 1, "DIAMETER", style='ctext')
        tree_table.text_cell(1, 2, "HEIGHT", style='ctext')
        tree_table.text_cell(1, 3, "TYPE", style='ctext')
        for t in range(len(data["trees"])):
            tree = data["trees"][t]
            diameter = tree["tree_details"].get("diameter", None)
            height = tree["tree_details"].get("height", None)
            spread = tree["tree_details"].get("spread", None)
            note = tree["tree_details"].get("note", None)
            blockname = "tree_" + str(t + 1)
            layer = self.filter_layer_name(
                self.doncodes["doncodes"][tree["code"]].get("CAD LAYERS"))
            if diameter or spread:
                tree_block = dxf.block(name=blockname)
                # trunk
                if diameter:
                    tree_block.add(
                        dxf.circle(float(diameter) / 2.0, [0, 0], layer=layer))
                # leaves
                if spread:
                    tree_block.add(
                        dxf.circle(float(spread) / 2.0, [0, 0], layer=layer))
                drawing.blocks.add(tree_block)
                drawing.add(
                    dxf.insert2(blockdef=tree_block,
                                insert=self.convert_point(tree["position"]),
                                layer=layer))
            # table
            # table position is left of bounding box
            tree_table.text_cell(t + 2, 0, "T" + str(t + 1), style='ctext')
            tree_table.text_cell(t + 2,
                                 1,
                                 diameter and diameter or "",
                                 style='ctext')
            tree_table.text_cell(t + 2,
                                 2, (height and height + "m" or ""),
                                 style='ctext')
            tree_table.text_cell(t + 2,
                                 3,
                                 note and note.upper() or "",
                                 style='ctext')
        drawing.add(tree_table)

        if not self.bm.get("fake"):
            drawing.add(
                dxf.point(self.convert_point(self.bm["position"]),
                          layer=self.filter_layer_name(
                              self.doncodes["doncodes"][self.bm["code"]].get(
                                  "CAD LAYERS"))))
            drawing.add(
                dxf.text("BM",
                         self.convert_point(self.bm["position"]),
                         height=0.2,
                         layer=self.filter_layer_name(
                             self.doncodes["doncodes"][self.bm["code"]].get(
                                 "CAD LAYERS"))))

        # loop through the points adding labels to the layer
        seen = []
        for p in data["p"]:
            # uniquely identify this piece of text at this position to prevent duplicates
            text_id = tuple(
                [p["original_code"], p.get("day_id", "")] + p["position"])
            # figure out if we are NL or
            layer_postfix = ""
            for l in ["NL", "NC"]:
                if l in p["extensions"]["function"]:
                    layer_postfix = "_" + l
            # if this isn't a duplicate and isn't a tree
            if not text_id in seen or p["code"] == "TR":
                blockname = 'point_' + str(p["point_id"]) + (
                    p.get("day_id") and "-" + p["day_id"] or "")
                point_block = dxf.block(name=blockname)
                if p.get("force_point_layer"):
                    layer_code = p["force_point_layer"]["code"]
                else:
                    layer_code = p["code"]
                layer = self.filter_layer_name(
                    self.doncodes["doncodes"][layer_code].get("CAD LAYERS"))
                # create a block to unite the various elements of the point
                # for trees we just want to draw their ref
                if p["code"] == "TR":
                    point_block.add(
                        dxf.text(
                            "T" +
                            str([t["point_id"]
                                 for t in data["trees"]].index(p["point_id"]) +
                                1), [0.2, 0.2],
                            height=0.2,
                            layer="Codes" + layer_postfix))
                else:
                    # these codes don't have the original_code text printed on the plot
                    if not p["code"] in ["RC", "LC"]:
                        # everything else gets original code printed
                        point_block.add(
                            dxf.text(p["original_code"] + " (" +
                                     str(p["line_number"]) + ")", (0, 0),
                                     alignpoint=(0, -0.2),
                                     height=0.05,
                                     rotation=-90,
                                     layer="Codes" + layer_postfix,
                                     valign=MIDDLE))
                    if not "NL" in p["extensions"]["function"]:
                        point_block.add(
                            dxf.text("%.2f" % (p["position"][1]), (0, 0),
                                     alignpoint=(0.12, -0.12),
                                     height=0.3,
                                     rotation=-45,
                                     layer="Rls" + layer_postfix,
                                     valign=MIDDLE))
                point_block.add(
                    dxf.point([0, 0], layer="Shots" + layer_postfix))
                drawing.blocks.add(point_block)
                drawing.add(
                    dxf.insert2(blockdef=point_block,
                                insert=self.convert_point(p["position"]),
                                layer=layer))

                # print p["doncode"].get("Draw Cross Hair on Point")
                if self.doncodes["doncodes"][p["code"]].get(
                        'Draw Cross Hair on Point',
                        'n').lower() in ["1", "y", "yes", "true", "x"]:
                    drawing.add_xref(self.settings["global"].get(
                        "export", {}).get("xref_path", "") + "X.dwg",
                                     insert=self.convert_point(p["position"]),
                                     layer="Shots" + layer_postfix)
                seen.append(text_id)

        # save the drawing to the binary blob and then return the DXF code
        # binary blob to pretend to be a file and store our saved DXF
        blob = StringIO()
        drawing.save_to_fileobj(blob)
        return blob.getvalue()
import xlrd, dxfwrite
from dxfwrite import DXFEngine as dxf

# draw a cad picture
drawing = dxf.drawing('排口坐标.dxf')

# read excel datas
data = xlrd.open_workbook('1.xls')
num_sheets = len(data.sheets())
for n in range(num_sheets):
    table = data.sheets()[n]
    nrows = table.nrows
    for i in range(2, nrows):
        x_cood = float(table.cell(i, 2).value)
        y_cood = float(table.cell(i, 3).value)
        pai_num = table.cell(i, 1).value
        circle = dxf.circle(2.0)
        circle['layer'] = 'paikou'
        circle['color'] = 2
        text = dxf.text(pai_num, (y_cood, x_cood), height=1.207)
        text['layer'] = 'paikou'
        text['color'] = 2
        block = dxf.block(name='paikou')
        block.add(circle)
        drawing.blocks.add(block)
        blockref = dxf.insert(blockname='paikou', insert=(y_cood, x_cood))
        drawing.add(blockref)
        drawing.add(text)

drawing.save()
Esempio n. 26
0
def draw_control_point(point, tangent1, tangent2=(0, 0)):
    tp1 = vadd(point, tangent1)
    tp2 = vadd(point, tangent2)
    dwg.add(dxf.circle(0.05, center=point, color=1))
    dwg.add(dxf.line(point, tp1, color=2))
    dwg.add(dxf.line(point, tp2, color=2))
Esempio n. 27
0
def temple_dxf(o, filename, hinge, reverse):
    temple_contour = poly.mirror_y(o['ltemple_con'], False)

    # Location in y for the center of the hinge
    hinge_y = -(temple_contour[0][1]+temple_contour[-1][1])/2

    temple_contour = poly.mirror_y(temple_contour, True)
    # Only mirror the temple contour, not the hinge, because the hinge is modelled
    # for the RIGHT hinge and we have the LEFT temple
    hinge_contour = hinges.get_hinge(hinge)["temple_contour"]
    hinge_holes = hinges.get_hinge(hinge)["temple_holes"]

    # Temple should be at 6 degrees.  We tilt the hinge instead for manufacturing
    # ease.
#    hinge_contour = poly.rotate(hinge_contour, 6)
#    hinge_holes = poly.rotate(hinge_holes, 6)

    # 0 point of hinge is center of straight edge of hinge.  We want the
    # center of the hinge box.
    hinge_center_offset = (poly.top(hinge_contour)+poly.bottom(hinge_contour))/2
    y_offset = hinge_y-hinge_center_offset

    # Since we're tilted 6 degrees compared to design space we need to
    # compensate on the x axis
    x_offset = y_offset * math.tan(math.radians(6)) # This adjusts the hinge for the move to the center of the temple

    hinge_contour = poly.translate(hinge_contour, x_offset, y_offset)
    hinge_holes = poly.translate(hinge_holes, x_offset, y_offset)

    # Reverse for the right temple
    if reverse:
        temple_contour = poly.mirror_x(temple_contour, False)
        hinge_contour = poly.mirror_x(hinge_contour, False)
        hinge_holes = poly.mirror_x(hinge_holes, False)

    drawing = dxf.drawing(filename)
    drawing.add_layer("CUT", color=1)
    drawing.add_layer("POCKET", color=2)
    drawing.add_layer("TEXT", color=3)
    polyline = dxf.polyline(layer="CUT", color=1, thickness=0.1)
    polyline.add_vertices(temple_contour)
    drawing.add(polyline)
    polyline = dxf.polyline(layer="POCKET", color=2, thickness = 0.1)
    polyline.add_vertices(hinge_contour)
    drawing.add(polyline)
    for hole in hinge_holes:
        c = dxf.circle(0.5, hole, layer="CUT", color=1)
        drawing.add(c)
    if not reverse:
        # Left temple, add our company name
        # First find Y position 15mm from temple top corner
        xPos = temple_contour[0][0]-15
        yPos = -1
        yStartPos = -1
        for pt in reversed(temple_contour):
            if pt[0] < xPos and yPos < 0:
                yPos = pt[1]-3.5
            elif pt[0] < (xPos - 25):
                yStartPos = pt[1] - 3.5
                break
        angle = math.degrees(math.atan((yPos-yStartPos)/25))
        print 'text angle', angle
        text = dxf.text("GUILD eyewear", style="TIMES", color=3, rotation=angle, height=2.5, alignpoint=[xPos, yPos], halign=2, valign=2)
        drawing.add(text)


    drawing.save()
Esempio n. 28
0
 def circle(self, radius=None, center=None, color=None):
     item = dxf.circle(radius=radius, center=center, color=color)
     self.add(item)
Esempio n. 29
0
def drawCircleColouredLayer(draw, radio, pxCentre, pyCentre, colorA, capa):
    circlex = dxf.circle(radio, (pxCentre, pyCentre))
    circlex['color'] = colorA
    circlex['layer'] = capa
    draw.add(circlex)
    draw.add_layer(capa, color=colorA)
Esempio n. 30
0
def circle(drawing, geometry):
    circle = findTag(geometry, 'Circle').attrib
    drawing.add(dxf.circle(circle['Radius'], (circle['CenterX'], circle['CenterY'])))
def export_via_dxfwrite(  dxf_fn, V):
    from drawingDimensioning.XMLlib import SvgXMLTreeNode
    from drawingDimensioning.svgLib import SvgTextParser, SvgPath, SvgPolygon
    from drawingDimensioning.circleLib import fitCircle_to_path, findCircularArcCentrePoint, pointsAlongCircularArc
    from numpy import arctan2
    from dxfwrite import DXFEngine as dxf
    drawing = dxf.drawing( dxf_fn)
    
    pageSvg = open(V.page.PageResult).read()
    XML_tree =  SvgXMLTreeNode( pageSvg,0)
    defaultHeight = 0
    defaultFont = 'Verdana'
    defaultAnchor = 'left'
    def yT(y): #y transform
        return 210-y
    warningsShown = []
    SelectViewObjectPoint_loc = None
    for element in XML_tree.getAllElements():
        clr_text = None        
        if 'fill' in element.parms:
            clr_text =  element.parms['fill']
        elif 'style' in element.parms:
            for part in element.parms['style'].split(';'):
                if part.startswith('stroke:rgb('):
                    clr_text = part[ len('stroke:'):]
                elif part.startswith('font-size'):
                    defaultHeight = part[len('font-size:')]
                elif part.startswith('font-family'):
                    defaultFont = part[len('font-family:'):]
                elif part.startswith('text-anchor'):
                    defaultAnchor = part[len('text-anchor:'):]
        if clr_text == None or clr_text =='none' or not clr_text.startswith('rgb(') :
            color_code = 0
        else:
            #FreeCAD.Console.PrintMessage( "color text: %s\n" % clr_text )
            r,g,b = [ int(v.strip()) for v in clr_text[ len('rgb('): clr_text.find(')')].split(',') ]
            color_code = colorLookup(r,g,b)[0]
        if element.tag == 'circle':
            x, y = element.applyTransforms( float( element.parms['cx'] ), float( element.parms['cy'] ) )
            r =  float( element.parms['r'] )* element.scaling2()
            drawing.add( dxf.circle( r, (x,yT(y)), color=color_code) )
        elif element.tag == 'line':
            x1, y1 = element.applyTransforms( float( element.parms['x1'] ), float( element.parms['y1'] ) )
            x2, y2 = element.applyTransforms( float( element.parms['x2'] ), float( element.parms['y2'] ) )
            drawing.add( dxf.line( (x1, yT(y1)), (x2, yT(y2)), color=color_code ) )
        elif element.tag == 'text' and 'x' in element.parms:
            x,y = element.applyTransforms( float( element.parms['x'] ), float( element.parms['y'] ) )
            t = SvgTextParser(element.XML[element.pStart: element.pEnd ] )
            try:
                drawing.add(dxf.text( t.text, insert=(x, yT(y)), height=t.height()*0.8, rotation=t.rotation, layer='TEXTLAYER', color=color_code) )
            except ValueError as e:
                temp = t.text.replace('<tspan>','')
                temp = temp.replace('</tspan>','')
                t.text = temp
                t.font_size = defaultHeight
                t.font_family = defaultFont          
                if defaultAnchor == 'middle':
                    shift = t.width()/2.0   
                    x,y = element.applyTransforms( float( element.parms['x'] )-shift, float( element.parms['y'] ) )
                drawing.add(dxf.text( temp, insert=(x, yT(y)), height=t.height()*0.8, rotation=t.rotation, layer='TEXTLAYER', color=color_code) )
                #FreeCAD.Console.PrintWarning('dxf_export: unable to convert text element "%s": %s, ignoring...\n' % (element.XML[element.pStart: element.pEnd ], str(e) ) )
        elif element.tag == 'path': 
            #FreeCAD.Console.PrintMessage(element.parms['d']+'\n')
            path = SvgPath( element )
            for line in path.lines:
                drawing.add( dxf.line( (line.x1, yT(line.y1)), (line.x2,yT(line.y2)), color=color_code) ) 
            for arc in path.arcs:
                if arc.circular:
                    for r, center, angle1, angle2 in arc.dxfwrite_arc_parms( yT ):
                        drawing.add( dxf.arc( r, center, angle1, angle2 , color=color_code) )
                else:
                    for x1,y1,x2,y2 in arc.approximate_via_lines( 12 ):
                        drawing.add( dxf.line( (x1, yT(y1)), (x2, yT(y2)), color=color_code) )
            for bezierCurve in path.bezierCurves:
                x, y, r, r_error = bezierCurve.fitCircle()
                if r_error < 10**-4:
                    drawing.add( dxf.arc( *bezierCurve.dxfwrite_arc_parms(x, y, r), color=color_code ) )
                else:
                    X,Y = bezierCurve.points_along_curve()
                    for i in range(len(X) -1):
                        drawing.add( dxf.line( (X[i], yT(Y[i])), (X[i+1],yT(Y[i+1])), color=color_code ) )
        elif element.tag == 'polygon':
            p = SvgPolygon( element )
            for line in p.lines:
                drawing.add( dxf.line( (line.x1, yT(line.y1)), (line.x2,yT(line.y2)), color=color_code) ) 
        elif element.tag == 'rect':
            x, y = element.applyTransforms( float( element.parms['x'] ), float( element.parms['y'] ) )
            width =  float( element.parms['width'] )* element.scaling2()
            height =  float( element.parms['height'] )* element.scaling2()
            drawing.add(dxf.rectangle((x, yT(y)), width, -height, color = color_code) )
        elif not element.tag in warningsShown:
            FreeCAD.Console.PrintWarning('dxf_export: Warning export of %s elements not supported, ignoring...\n' % element.tag )
            warningsShown.append(element.tag)
    drawing.save()
    FreeCAD.Console.PrintMessage("dxf_export: %s successfully created\n" % dxf_fn)
Esempio n. 32
0
File: bezier.py Progetto: msarch/py
def draw_control_point(point, tangent1, tangent2=(0, 0)):
    tp1 = vadd(point, tangent1)
    tp2 = vadd(point, tangent2)
    dwg.add(dxf.circle(0.05, center=point, color=1))
    dwg.add(dxf.line(point, tp1, color=2))
    dwg.add(dxf.line(point, tp2, color=2))
Esempio n. 33
0
def create_2D_modelspace_content(dwg):
    dwg.add(dxf.rectangle((5,5), 5, 5, color=2))
    dwg.add(dxf.circle(2.5, (10, 5), color=3))
    triangle = dxf.polyline([(10, 7.5), (15, 5), (15, 10)], color=4)
    triangle.close(True)
    dwg.add(triangle)
Esempio n. 34
0
drawing.add_layer('dxfwrite')
# add a VIEWPORT-tableentry
drawing.add_vport(
        '*ACTIVE',
        center_point=(10,10),
        height = 30,
    )

# add LINE-entity
drawing.add(dxf.line((0,0),( 10,0),
    color=dxfwrite.BYLAYER,
    layer='dxfwrite'
))

# add a CIRCLE-entity
drawing.add(dxf.circle(center=(5,0), radius=5))

# add an ARC-entity
drawing.add(dxf.arc(center=(5,0), radius=4, startangle=30, endangle=150))

#add a POINT-entity
drawing.add(dxf.point(point=(1,1)))

# add a SOLID-entity with 4 points
drawing.add(dxf.solid([(0,0), (1,0), (1,1), (0,1)], color=2))

# add a SOLID-entity with 3 points
drawing.add(dxf.solid([(0,1), (1,1), (1,2)], color=3))

# add a 3DFACE-entity
drawing.add(dxf.face3d([(5,5), (6,5), (6,6), (5,6)], color=3))
Esempio n. 35
0
def stacks_layers(drawing, startx, starty):
    for x in range(0, 5):
        centreX = 12+(22.5*x)+startx
        centreY = 12+starty
        # Main outline
        drawing.add(dxf.circle(total_outline_radius, (centreX, centreY), layer='CUTSOUTER', color=5))
        # Screw holes
        # sin 45 = SQRT(2)/2 
        sin = math.sqrt(2)/2
        offset=(total_outline_radius-1-screw_radius)*sin

        drawing.add(dxf.circle(screw_radius, (centreX-offset, centreY-offset), layer='CUTSINNER', color=4))
        drawing.add(dxf.circle(screw_radius, (centreX+offset, centreY-offset), layer='CUTSINNER', color=4))
        drawing.add(dxf.circle(screw_radius, (centreX-offset, centreY+offset), layer='CUTSINNER', color=4))
        drawing.add(dxf.circle(screw_radius, (centreX+offset, centreY+offset), layer='CUTSINNER', color=4))


        # not top layer or bottom layer
        if ((x != 0) and (x !=4)):
            drawing.add(dxf.circle(battery_space/2, (centreX, centreY), layer='CUTSINNER', color=4))
            # Number each layer
            # drawing.add(dxf.text(str(x), halign=dxfwrite.const.CENTER,  valign=dxfwrite.const.MIDDLE, alignpoint=(centreX+2.5, centreY-7.5), height=1.5, layer='ENGRAVE', color=2))
        # Slot for bar (the other end of the cufflink
        if (x == 4):
            # Kurf is ~0.1mm as measured by thickness of two A4 sheets.
            drawing.add(dxf.rectangle((centreX-(bar_length/2), centreY-(p_thickness/2)) , bar_length, p_thickness-0.1, layer='CUTSINNER', color=4)) 
            # engrave_text(drawing,  centreX, centreY)
            # serial_number(drawing,  centreX, centreY, "00001")
        # Hole for button
        if (x == 2):
            drawing.add(dxf.line(
                                  (centreX-(p_thickness*1.1)/2, centreY-battery_space/3), 
                                  (centreX-(p_thickness*1.1)/2, centreY-total_outline_radius ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  
            drawing.add(dxf.line(
                                  (centreX+(p_thickness*1.1)/2, centreY-battery_space/3), 
                                  (centreX+(p_thickness*1.1)/2, centreY-total_outline_radius ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  

        if ( x == 1):
        # Hole for button - but only indent to hold button in
            drawing.add(dxf.line(
                                  (centreX-(p_thickness*1.1)/2, centreY-battery_space/3), 
                                  (centreX-(p_thickness*1.1)/2, centreY-1-battery_space/2 ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  
            drawing.add(dxf.line(
                                  (centreX+(p_thickness*1.1)/2, centreY-battery_space/3), 
                                  (centreX+(p_thickness*1.1)/2, centreY-1-battery_space/2 ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  

            drawing.add(dxf.line(
                                  (centreX-(p_thickness*1.1)/2, centreY-1-battery_space/2 ), 
                                  (centreX+(p_thickness*1.1)/2, centreY-1-battery_space/2 ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  

        if ((x != 0) and (x !=4)):
        # Tape hole for battery connection
            drawing.add(dxf.line(
                                  (centreX-(tape_width)/2, centreY+battery_space/3), # Should do trig, but what the hell 
                                  (centreX-(tape_width)/2, centreY+1.5+battery_space/2 ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  
            drawing.add(dxf.line(
                                  (centreX+(tape_width)/2, centreY+battery_space/3), # Should do trig, but what the hell 
                                  (centreX+(tape_width)/2, centreY+1.5+battery_space/2 ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  
            drawing.add(dxf.line(
                                  (centreX-(tape_width)/2, centreY+1.5+battery_space/2 ), 
                                  (centreX+(tape_width)/2, centreY+1.5+battery_space/2 ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  

        if (x == 6):
            drawing.add(dxf.line(
                                  (centreX-(bar_length/2-0.5), centreY+total_outline_radius), 
                                  (centreX-(bar_length/2-0.5), centreY-total_outline_radius ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  
            drawing.add(dxf.line(
                                  (centreX-(bar_length/2-5), centreY+total_outline_radius), 
                                  (centreX-(bar_length/2-5), centreY-total_outline_radius ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  
            drawing.add(dxf.line(
                                  (centreX+(bar_length/2-0.5), centreY+total_outline_radius), 
                                  (centreX+(bar_length/2-0.5), centreY-total_outline_radius ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  
            drawing.add(dxf.line(
                                  (centreX+(bar_length/2-5), centreY+total_outline_radius), 
                                  (centreX+(bar_length/2-5), centreY-total_outline_radius ), 
                                layer='CUTSINNEREARLY', color=3) 
                       )  
Esempio n. 36
0
 def append_to_dxf(self, drawing):
     drawing.add(dxf.circle(self.radius, (self.center[0], -self.center[1])))
    if density > densityDesired:
        print("Density Reached")
        break
#------------------------------------------------------------------------------
# Export Dxf
#------------------------------------------------------------------------------
fileName=("Panel-%dx%d-0.dxf" % (Win,Hin))
fctr=0
while os.path.isfile(fileName) == True:
    fctr += 1
    fileName=("Panel-%dx%d-%d.dxf" % (Win,Hin,fctr))

print("Outputting DXF - %s" % fileName)     
drawing = dxf.drawing(fileName)
for n in range(0,len(x)):
    circle = dxf.circle(r[n], (x[n], y[n]))
    drawing.add(circle)
    
drawing.add(dxf.rectangle((0,0),W,H))
drawing.save()
  
#------------------------------------------------------------------------------
# Write image to jpeg
#------------------------------------------------------------------------------
imageName=("Panel-%dx%d-0.jpg" % (Win,Hin))
fctr=0
while os.path.isfile(imageName) == True:
    fctr += 1
    imageName=("Panel-%dx%d-%d.jpg" % (Win,Hin,fctr))

print("Outputting JPG - %s" % imageName)    
Esempio n. 38
0
def drawCircleColouredLayer(draw, radio, pxCentre, pyCentre, colorA, capa):
    circlex = dxf.circle(radio, (pxCentre, pyCentre))
    circlex["color"] = colorA
    circlex["layer"] = capa
    draw.add(circlex)
    draw.add_layer(capa, color=colorA)
Esempio n. 39
0
 def emit_dxf(self, d):
   color = (1,2)[self.radius == 0.0]
   d.add(dxf.circle(center = (self.p[0], self.p[1]), radius = self.dxf_radius, color = color))
Esempio n. 40
0
from dxfwrite import DXFEngine as dxf

drawing = dxf.drawing("pythondxf.dxf")
# drawing.add_layer('CIRCLE2')
# drawing.add(dxf.circle((10), (10,5), layer='CIRCLE2'))
# drawing.add_layer('CIRCLE')
# drawing.add(dxf.circle((2), (5, 10), layer='CIRCLE'))
drawing.add_layer("RECT")
drawing.add(dxf.rectangle((5, 5), 6, 6, bgcolor=5, layer="RECT"))
drawing.add_layer("POLY")
polyline = dxf.polyline(linetype="LINE")
polyline.add_vertices([(7, 9.5), (6, 10), (10, 10), (10, 6), (6, 6), (6, 10)])
# polyline.add_vertices( [(6.5,10), (7,9.5)])
polyline.close(status=True)
drawing.add(polyline)
drawing.add_layer("CIRCLE")
drawing.add(dxf.circle((0.1), (6.5, 9.5), layer="CIRCLE"))
drawing.add(dxf.circle((0.1), (9.5, 9.5), layer="CIRCLE"))
drawing.add(dxf.circle((0.1), (6.5, 6.5), layer="CIRCLE"))
drawing.add(dxf.circle((0.1), (9.5, 6.5), layer="CIRCLE"))

drawing.save()
Esempio n. 41
0
def ExportDXF(self,param):
    output = cStringIO.StringIO()
    drawing = dxf.drawing('cyclon.dxf')

    cx=0
    cy=0
    cutid=1
    
    nf=[]
    nt=[]
    nl=[]


    #misure utili
    htot=param['mantello']['altezza']+param['sezione_interna']['parte_esterna']+param['cono_inferiore']['altezza_totale']

    d=param['mantello']['dia']
    dint=param['sezione_interna']['dia']
    hcono=param['cono_inferiore']['altezza_totale']-param['cono_inferiore']['tronco_diritto']

    xz=0
    yz=0

    #Vista in Pianta
    xz=0-d
    yz=xz

    drawing.add(dxf.circle(d/2,(xz,yz)))
    drawing.add(dxf.circle(dint/2,(xz,yz)))

    
    # Vista di Fronte
    yz=d*0.5+param['cono_inferiore']['altezza_totale']
    h=param['mantello']['altezza']
    nf.append([xz-d/2,yz])
    nf.append([xz+d/2,yz])
    drawing.add(dxf.rectangle((nf[0][0],nf[0][1]),d,h))
    nf.append([xz-param['cono_inferiore']['diametro_finale']/2,yz-hcono])
    nf.append([xz+param['cono_inferiore']['diametro_finale']/2,yz-hcono])
    nf.append([nf[2][0],nf[2][1]-param['cono_inferiore']['tronco_diritto']])
    nf.append([nf[3][0],nf[3][1]-param['cono_inferiore']['tronco_diritto']])
    drawing.add(dxf.line((nf[0][0],nf[0][1]),(nf[2][0],nf[2][1])))
    drawing.add(dxf.line((nf[2][0],nf[2][1]),(nf[3][0],nf[3][1])))
    drawing.add(dxf.line((nf[3][0],nf[3][1]),(nf[1][0],nf[1][1])))
    drawing.add(dxf.line((nf[2][0],nf[2][1]),(nf[4][0],nf[4][1])))
    drawing.add(dxf.line((nf[4][0],nf[4][1]),(nf[5][0],nf[5][1])))
    drawing.add(dxf.line((nf[5][0],nf[5][1]),(nf[3][0],nf[3][1])))



    # Vista Laterale

    for i in nf:
       nl.append([i[0]+d*2,i[1]])

    drawing.add(dxf.rectangle((nl[0][0],nl[0][1]),d,h))
    drawing.add(dxf.line((nl[0][0],nl[0][1]),(nl[2][0],nl[2][1])))
    drawing.add(dxf.line((nl[2][0],nl[2][1]),(nl[3][0],nl[3][1])))
    drawing.add(dxf.line((nl[3][0],nl[3][1]),(nl[1][0],nl[1][1])))
    drawing.add(dxf.line((nl[2][0],nl[2][1]),(nl[4][0],nl[4][1])))
    drawing.add(dxf.line((nl[4][0],nl[4][1]),(nl[5][0],nl[5][1])))
    drawing.add(dxf.line((nl[5][0],nl[5][1]),(nl[3][0],nl[3][1])))

    drawing.save_to_fileobj(output)
    dxf_result=[output.getvalue()]
    return dxf_result
def draw_circles(drawing, x, y, points):
    circle = dxf.circle(radius=6, center=(x, y))
    circle['color'] = 7
    drawing.add(circle)
Esempio n. 43
0
    return (x, y)

sample_coords = [get_random_point() for x in range(50)]

flag_symbol = [(0,0), (0, 5), (4, 3), (0, 3)]

filename = 'flags.dxf'
dwg = dxf.drawing(filename)
dwg.add_layer('FLAGS')

# first create a block
flag = dxf.block(name='flag')
# add dxf entities to the block (the flag)
# use basepoint = (x, y) define an other basepoint than (0, 0)
flag.add( dxf.polyline(flag_symbol) )
flag.add( dxf.circle(radius=.4, color=2) )
# define some attributes
flag.add( dxf.attdef(insert=(0.5, -0.5), tag='NAME', height=0.5, color=3) )
flag.add( dxf.attdef(insert=(0.5, -1.0), tag='XPOS', height=0.25, color=4) )
flag.add( dxf.attdef(insert=(0.5, -1.5), tag='YPOS', height=0.25, color=4) )

# add block definition to the drawing
dwg.blocks.add(flag)
number = 1
for point in sample_coords:
    # now insert flag symbols at coordinate 'point'
    # insert2 needs the block definition object as parameter 'blockdef'
    # see http://packages.python.org/dxfwrite/entities/insert2.html
    # fill attribtes by creating a dict(), keystr is the 'tag' name of the
    # attribute
    values = {
 def new_circle(self, c, r, layer = 'gearcircles', color = 0):
     return dxf.circle(center=(c.real, c.imag), radius=r,
                       layer = layer, color = color, thickness=0)
Esempio n. 45
0
 def emit_dxf(self, d):
   color = (1,2)[self.radius == 0.0]
   d.add(dxf.circle(center = (self.x, self.y), radius = self.draw_radius, color = color))
Esempio n. 46
0
def process_chess_sampling(img, screwDia, holeDia, width, height, resampleType,
                           thresholdScrew, fileName):
    w = int(round(width / screwDia, 0))
    h = int(round(height / screwDia, 0))
    w = w * 20
    h = h * 20
    BWthreshold = 200

    tempImg = img.resize((w, h), resampleType)
    (w, h) = tempImg.size

    greyscaleMap = list(tempImg.getdata())
    greyscaleMap = numpy.array(greyscaleMap)
    greyscaleMap = greyscaleMap.reshape((h, w))

    img1 = Image.fromarray(numpy.uint8(greyscaleMap), 'L')
    img1.show()

    tempArray = []

    for i in range(h):
        for j in range(w):
            if greyscaleMap[i][j] < BWthreshold:
                greyscaleMap[i][j] = 0
            else:
                greyscaleMap[i][j] = 255

    print("greyscale updated")

    for row in range(0, len(greyscaleMap), 10):
        arr = []
        for col in range(int((row / 10) % 2) * 18, len(greyscaleMap[row]), 36):
            meanImg = 0
            countPoints = 0
            if row == 0:
                if col == 0:
                    for i in range(10):
                        for j in range(10):
                            try:
                                meanImg += greyscaleMap[row + i][col + j]
                                countPoints += 1
                            except:
                                print("r=0, c=0  index [%d][%d] unsolved" %
                                      (i, j))
                else:
                    for i in range(10):
                        for j in range(-9, 10, 1):
                            try:
                                meanImg += greyscaleMap[row + i][col + j]
                                countPoints += 1
                            except:
                                print("r=0, c!=0 index [%d][%d] unsolved" %
                                      (i, j))
            elif col == 0:
                if row != 0:
                    for i in range(-9, 10, 1):
                        for j in range(10):
                            try:
                                meanImg += greyscaleMap[row + i][col + j]
                                countPoints += 1
                            except:
                                print("r!=0, c=0 index [%d][%d] unsolved" %
                                      (i, j))

            elif row == (len(greyscaleMap) - 1):
                if col == (len(greyscaleMap[row]) - 1):
                    for i in range(-9, 1, 1):
                        for j in range(-9, 1, 1):
                            try:
                                meanImg += greyscaleMap[row + i][col + j]
                                countPoints += 1
                            except:
                                print("r=w, c=h index [%d][%d] unsolved" %
                                      (i, j))
                else:
                    for i in range(-9, 1, 1):
                        for j in range(-9, 10, 1):
                            try:
                                meanImg += greyscaleMap[row + i][col + j]
                                countPoints += 1
                            except:
                                print("r=w, c!=h index [%d][%d] unsolved" %
                                      (i, j))

            elif col == (len(greyscaleMap[row]) - 1):
                if row != (len(greyscaleMap) - 1):
                    for i in range(-9, 1, 1):
                        for j in range(-9, 10, 1):
                            try:
                                meanImg += greyscaleMap[row + i][col + j]
                                countPoints += 1
                            except:
                                print("r!=w, c=h index [%d][%d] unsolved" %
                                      (i, j))
            else:
                for i in range(-9, 10, 1):
                    for j in range(-9, 10, 1):
                        try:
                            meanImg += greyscaleMap[row + i][col + j]
                            countPoints += 1
                        except:
                            print("index [%d][%d] unsolved" % (i, j))

            meanImg /= countPoints

            if meanImg / 255 > thresholdScrew:
                arr.append(1)
            else:
                arr.append(0)
        tempArray.append(arr)

    for l in tempArray:
        print(l)

    drawing = dxf.drawing(fileName)

    for row in range(len(tempArray)):
        if row % 2 == 0:
            for col in range(len(tempArray[row])):
                if tempArray[row][col] == 0:
                    drawing.add(
                        dxf.circle(holeDia / 2, (screwDia / 2 * 3.6 * col,
                                                 (-screwDia / 2) * row)))
        else:
            for col in range(len(tempArray[row])):
                if tempArray[row][col] == 0:
                    drawing.add(
                        dxf.circle(
                            holeDia / 2,
                            (screwDia / 2 * 3.6 * col + 1.8 * screwDia / 2,
                             (-screwDia / 2) * row)))

    drawing.save()
    print("done")
Esempio n. 47
0
def circle_ch(r, x, y, chl=1.0, layer='0', layerch='drill'):
    ''' Circle with cross-hair center '''
    drawing.add(dxf.circle(r, (x, y), layer=layer))
    drawing.add(dxf.line((x, y - chl), (x, y + chl), layer=layerch))
    drawing.add(dxf.line((x + chl, y), (x - chl, y), layer=layerch))
Esempio n. 48
0
File: g2.py Progetto: soldocode/g2
 def writeDXF(self, dwg, pos=Point(0, 0)):
     dwg.add(
         dxf.circle(self._radius,
                    (self._center._x + pos.x, self._center._y + pos.y)))
     return
Esempio n. 49
0
def drawCircleColoured(draw, radio, pxCentre, pyCentre, colorA):
    circlex = dxf.circle(radio, (pxCentre, pyCentre))
    circlex['color'] = colorA
    draw.add(circlex)
Esempio n. 50
0
 def circle(self, center, radius, mode, fill = False):
     circle = dxf.circle(radius, center)
     self._drawing_.add(circle)
def create_2D_modelspace_content(dwg):
    dwg.add(dxf.rectangle((5, 5), 5, 5, color=2))
    dwg.add(dxf.circle(2.5, (10, 5), color=3))
    triangle = dxf.polyline([(10, 7.5), (15, 5), (15, 10)], color=4)
    triangle.close(True)
    dwg.add(triangle)
Esempio n. 52
0
File: spline.py Progetto: msarch/py
#!/usr/bin/env python
#coding:utf-8
# Author:  mozman
# Purpose: examples for dxfwrite usage, see also tests for examples
# Created: 09.02.2010
# Copyright (C) 2010, Manfred Moitzi
# License: GPLv3

import sys
import os

try:
    import dxfwrite
except ImportError:
    # if dxfwrite is not 'installed' append parent dir of __file__ to sys.path
    import os
    curdir = os.path.dirname(os.path.abspath(__file__))
    sys.path.insert(0, os.path.abspath(os.path.join(curdir, os.path.pardir)))

import dxfwrite
from dxfwrite import DXFEngine as dxf

name = 'spline.dxf'
dwg = dxf.drawing(name)
spline_points = [(0.0, 0.0), (1., 2.), (3., 1.), (5., 3.)]
dwg.add(dxf.spline(spline_points, color=7))
for point in spline_points:
    dwg.add(dxf.circle(radius=0.1, center=point, color=1))
dwg.save()
print("drawing '%s' created.\n" % name)
def export_via_dxfwrite(  dxf_fn, V):
    from XMLlib import SvgXMLTreeNode
    from svgLib_dd import SvgTextParser, SvgPath, SvgPolygon
    from numpy import arctan2
    from circleLib import fitCircle_to_path, findCircularArcCentrePoint, pointsAlongCircularArc
    from dxfwrite import DXFEngine as dxf
    drawing = dxf.drawing( dxf_fn)
    
    pageSvg = open(V.page.PageResult).read()
    XML_tree =  SvgXMLTreeNode( pageSvg,0)
    def yT(y): #y transform
        return 210-y
    warningsShown = []
    SelectViewObjectPoint_loc = None
    for element in XML_tree.getAllElements():
        clr_text = None        
        if element.parms.has_key('fill'):
            clr_text =  element.parms['fill']
        elif element.parms.has_key('style'):
            for part in element.parms['style'].split(';'):
                if part.startswith('stroke:rgb('):
                    clr_text = part[ len('stroke:'):]
        if clr_text == None or clr_text =='none' or not clr_text.startswith('rgb(') :
            color_code = 0
        else:
            #FreeCAD.Console.PrintMessage( "color text: %s\n" % clr_text )
            r,g,b = [ int(v.strip()) for v in clr_text[ len('rgb('): clr_text.find(')')].split(',') ]
            color_code = colorLookup(r,g,b)[0]
        if element.tag == 'circle':
            x, y = element.applyTransforms( float( element.parms['cx'] ), float( element.parms['cy'] ) )
            r =  float( element.parms['r'] )* element.scaling2()
            drawing.add( dxf.circle( r, (x,yT(y)), color=color_code) )
        elif element.tag == 'line':
            x1, y1 = element.applyTransforms( float( element.parms['x1'] ), float( element.parms['y1'] ) )
            x2, y2 = element.applyTransforms( float( element.parms['x2'] ), float( element.parms['y2'] ) )
            drawing.add( dxf.line( (x1, yT(y1)), (x2, yT(y2)), color=color_code ) )
        elif element.tag == 'text' and element.parms.has_key('x'):
            x,y = element.applyTransforms( float( element.parms['x'] ), float( element.parms['y'] ) )
            try:
                t = SvgTextParser(element.XML[element.pStart: element.pEnd ] )
                drawing.add(dxf.text( t.text, insert=(x, yT(y)), height=t.height()*0.8, rotation=t.rotation, layer='TEXTLAYER', color=color_code) )
            except ValueError, msg:
                FreeCAD.Console.PrintWarning('dxf_export: unable to convert text element "%s": %s, ignoring...\n' % (element.XML[element.pStart: element.pEnd ], str(msg) ) )
        elif element.tag == 'path': 
            #FreeCAD.Console.PrintMessage(element.parms['d']+'\n')
            path = SvgPath( element )
            for line in path.lines:
                drawing.add( dxf.line( (line.x1, yT(line.y1)), (line.x2,yT(line.y2)), color=color_code) ) 
            for arc in path.arcs:
                if arc.circular:
                    for r, center, angle1, angle2 in arc.dxfwrite_arc_parms( yT ):
                        drawing.add( dxf.arc( r, center, angle1, angle2 , color=color_code) )
                else:
                    for x1,y1,x2,y2 in arc.approximate_via_lines( 12 ):
                        drawing.add( dxf.line( (x1, yT(y1)), (x2, yT(y2)), color=color_code) )
            for bezierCurve in path.bezierCurves:
                x, y, r, r_error = bezierCurve.fitCircle()
                if r_error < 10**-4:
                    raise NotImplementedError
                    drawing.add( dxf.arc( *bezierCurve.dxfwrite_arc_parms(x, y, r) ) )
                else:
                    X,Y = bezierCurve.points_along_curve()
                    for i in range(len(X) -1):
                        drawing.add( dxf.line( (X[i], yT(Y[i])), (X[i+1],yT(Y[i+1])), color=color_code ) )
drawing = dxf.drawing(name)
# add a LAYER-tableentry called 'dxfwrite'
drawing.add_layer('dxfwrite')
# add a VIEWPORT-tableentry
drawing.add_vport(
    '*ACTIVE',
    center_point=(10, 10),
    height=30,
)

# add LINE-entity
drawing.add(dxf.line((0, 0), (10, 0), color=dxfwrite.BYLAYER,
                     layer='dxfwrite'))

# add a CIRCLE-entity
drawing.add(dxf.circle(center=(5, 0), radius=5))

# add an ARC-entity
drawing.add(dxf.arc(center=(5, 0), radius=4, startangle=30, endangle=150))

#add a POINT-entity
drawing.add(dxf.point(point=(1, 1)))

# add a SOLID-entity with 4 points
drawing.add(dxf.solid([(0, 0), (1, 0), (1, 1), (0, 1)], color=2))

# add a SOLID-entity with 3 points
drawing.add(dxf.solid([(0, 1), (1, 1), (1, 2)], color=3))

# add a 3DFACE-entity
drawing.add(dxf.face3d([(5, 5), (6, 5), (6, 6), (5, 6)], color=3))
Esempio n. 55
0
def drawCircleColoured(draw, radio, pxCentre, pyCentre, colorA):
    circlex = dxf.circle(radio, (pxCentre, pyCentre))
    circlex["color"] = colorA
    draw.add(circlex)
Esempio n. 56
0
 def draw_circles(self, d):
     d.add(dxf.circle(center = (0.0, 0.0), radius = self.pr))
        d = tuple(points_list[i+1])
        drawing.add(dxf.line(c, d, color=7))

drawline(points_list)


# circle code
no_of_bars_above = 9

some_space_at_end = 5
center_to_center = ((lst['A'] - lst['ClearCover'] * 2 - some_space_at_end * 2) / float(no_of_bars_above - 1))
center_of_first_bar = (lst['ClearCover'] + some_space_at_end, lst['ClearCover'] + lst['Dia'] + lst['Dia'] / 2.0)

x_coord_of_center_of_bars = [(center_of_first_bar[0] + i * center_to_center) for i in xrange(no_of_bars_above)]
for x in x_coord_of_center_of_bars:
    drawing.add(dxf.circle(lst['Dia'] / 2.0, (x, center_of_first_bar[1])))


# text
drawing.add(dxf.text('a', height=textsize, halign=CENTER, alignpoint=(50, 33)))
drawing.add(dxf.text('D', height=textsize, halign=CENTER, alignpoint=(115, 8)))
drawing.add(dxf.text('A', height=textsize, halign=CENTER, alignpoint=(50, -10)))
drawing.add(dxf.text('4', height=textsize, halign=CENTER, alignpoint=(-10, -13)))
drawing.add(dxf.text('4', height=textsize, halign=CENTER, alignpoint=
                  (106, -4)))
drawing.add(dxf.text('y > L\U+0501',height=textsize, halign=CENTER, alignpoint=(18, -15)))
drawing.add(dxf.text('Sloped footing', height=textsize, halign=CENTER, alignpoint=(20, 33)))
drawing.add(dxf.text('Uniformly deep footing', height=textsize, halign=CENTER, alignpoint=(80, 33)))


# D
Esempio n. 58
0
 def draw_circles(self, d):
    d.add(dxf.circle(center = (0.0, 0.0), radius = self.dr))
    d.add(dxf.circle(center = (0.0, 0.0), radius = self.br, color = 1))
    d.add(dxf.circle(center = (0.0, 0.0), radius = self.pr))
    d.add(dxf.circle(center = (0.0, 0.0), radius = self.ar))