Содержание блога

пятница, 30 июля 2010 г.

Графический редактор - часть 2

Перемещение объектов
Задается общее смещение dx, dy, проходится по всем элементам находящимся на cnvDrawPoly и имеющим имя в списке comboBoxDrwObj
#region DrawPolyMoved(double dx, double dy) -- переместить поле
        public void DrawPolyMoved(double dx, double dy)
        {
            int i;
            #region смещение line_scale

            Line lnscale = (Line)cnvDrawPoly.Children[3];// линия масштаба
            lnscale.X1 += dx;
            lnscale.X2 += dx;
            lnscale.Y1 += dy;
            lnscale.Y2 += dy;
            #endregion смещение line_scale
            Line ln;
            for (i = 0; i < comboBoxDrwObj.Items.Count; i++)
            {
                string ss = comboBoxDrwObj.Items[i].ToString();

                #region смещение line
                if (ss.Substring(0, ss.IndexOf("_")) == "line")
                {
                    ln = (Line)cnvDrawPoly.Children[i + PrjProperty.drwCountBrush];// увеличен на PrjProperty.drwCountBrush так как 0 это линия для рисования 1-polyline
                    ln.X1 += dx;
                    ln.X2 += dx;
                    ln.Y1 += dy;
                    ln.Y2 += dy;
                }
                #endregion смещение line
                #region смещение polyline
                if (ss.Substring(0, ss.IndexOf("_")) == "polyline")
                {
                    Polyline pl = (Polyline)cnvDrawPoly.Children[i + PrjProperty.drwCountBrush];// увеличен на PrjProperty.drwCountBrush так как 0 это линия для рисования 1-polyline
                    for (int ip = 0; ip < pl.Points.Count; ip++)
                    {
                        Point pnt = new Point(pl.Points[ip].X, pl.Points[ip].Y);
                        pnt.X += dx;
                        pnt.Y += dy;
                        pl.Points[ip] = pnt;
                    }
                }
                #endregion смещение polyline
                #region смещение surve
                if (ss.Substring(0, ss.IndexOf("_")) == "surve")
                {
                    System.Windows.Shapes.Path path = (System.Windows.Shapes.Path)cnvDrawPoly.Children[i + PrjProperty.drwCountBrush];// увеличен на PrjProperty.drwCountBrush так как 0 это линия для рисования 1-polyline
                    GeometryGroup gg = (GeometryGroup)path.Data;
                    for (int ip = 0; ip < gg.Children.Count; ip++)
                    {
                        if (gg.Children[ip].GetType().Name == "LineGeometry")
                        {
                            LineGeometry line = (LineGeometry)gg.Children[ip];
                            double sx = line.StartPoint.X;
                            double sy = line.StartPoint.Y;
                            double ex = line.EndPoint.X;
                            double ey = line.EndPoint.Y;
                            sx += dx;
                            sy += dy;
                            ex += dx;
                            ey += dy;
                            line.StartPoint = new Point(sx, sy);
                            line.EndPoint = new Point(ex, ey);
                        }
                    }

                }
                #endregion смещение surve
            }
           // SelectCurentObj();
        }
        #endregion DrawPolyMoved(double dx, double dy) -- переместить поле
Масштабирование объектов
#region DrawPolyZoom(double scale) -- Zoom
        public void DrawPolyZoom(double scale)
        {
            #region смещение line_scale

            Line lnscale = (Line)cnvDrawPoly.Children[3];// линия масштаба
            lnscale.X1 *= scale;
            lnscale.X2 *= scale;
            lnscale.Y1 *= scale;
            lnscale.Y2 *= scale;
            Line ln;
            #endregion смещение line_scale
            int i;
            for (i = 0; i < comboBoxDrwObj.Items.Count; i++)
            {
                string ss = comboBoxDrwObj.Items[i].ToString();
                #region смещение line
                if (ss.Substring(0, ss.IndexOf("_")) == "line")
                {
                    ln = (Line)cnvDrawPoly.Children[i + PrjProperty.drwCountBrush];// увеличен на PrjProperty.drwCountBrush так как 0 это линия для рисования 1-polyline
                    ln.X1 *= scale;
                    ln.X2 *= scale;
                    ln.Y1 *= scale;
                    ln.Y2 *= scale;
                    ln.StrokeThickness *= scale; 
                }
                #endregion смещение line
                #region смещение polyline
                if (ss.Substring(0, ss.IndexOf("_")) == "polyline")
                {
                    Polyline pl = (Polyline)cnvDrawPoly.Children[i + PrjProperty.drwCountBrush];// увеличен на PrjProperty.drwCountBrush так как 0 это линия для рисования 1-polyline
                    for (int ip = 0; ip < pl.Points.Count; ip++)
                    {
                        Point pnt = new Point(pl.Points[ip].X, pl.Points[ip].Y);
                        pnt.X *= scale;
                        pnt.Y *= scale;
                        pl.Points[ip] = pnt;
                    }
                    pl.StrokeThickness *= scale;
                }
                #endregion смещение polyline
                #region смещение surve
                if (ss.Substring(0, ss.IndexOf("_")) == "surve")
                {
                    System.Windows.Shapes.Path path = (System.Windows.Shapes.Path)cnvDrawPoly.Children[i + PrjProperty.drwCountBrush];// увеличен на PrjProperty.drwCountBrush так как 0 это линия для рисования 1-polyline
                    GeometryGroup gg = (GeometryGroup)path.Data;
                    for (int ip = 0; ip < gg.Children.Count; ip++)
                    {
                        if (gg.Children[ip].GetType().Name == "LineGeometry")
                        {
                            LineGeometry line = (LineGeometry)gg.Children[ip];
                            double sx = line.StartPoint.X;
                            double sy = line.StartPoint.Y;
                            double ex = line.EndPoint.X;
                            double ey = line.EndPoint.Y;
                            sx *= scale;
                            sy *= scale;
                            ex *= scale;
                            ey *= scale;
                            line.StartPoint = new Point(sx, sy);
                            line.EndPoint = new Point(ex, ey);
                        }
                    }
                }
                #endregion смещение surve
               }
            //SelectCurentObj();
        }
        #endregion DrawPolyZoom(double scale)

Подсветка кода

Долго искал нормальный рабочий хайлайтер, и вот УРА!!!
SyntaxHighlighter

В Блоггере заходим во вкладку "Дизайн" --> "Изменить HTML"
перед закрывающим тегом <\head> вставляем код
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css">
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css">

теперь подключаем нужные нам языки

<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js' type='text/javascript'/>

Язык Команды class="brush:XXX" Библиотека
ActionScript3 as3, actionscript3 shBrushAS3.js
C# c-sharp, csharp shBrushCSharp.js
C++ cpp, c shBrushCpp.js
CSS css shBrushCss.js
Delphi delphi, pas, pascal shBrushDelphi.js
JavaScript js, jscript, javascript shBrushJScript.js
PHP php shBrushPhp.js
SQL sql shBrushSql.js
XML css shBrushCss.js
Visual Basic vb, vbnet shBrushVb.js
CSS xml, xhtml, xslt, html, xhtml shBrushXml.js
полный список
Теперь на странице пишем
....КОД.....
P.S: блогер боится если встречаются в элементы link, script и др... открывающую скобку тега < нужно заменять на &lt;

Более дружелюбная кнопка (Image+ToolTip)

Более дружелюбная кнопка
Добавлены картинка и ToolTip(всплывающая подсказка)



Хорошая статья про ToolTip

если необходимо тултип сделать программно, то
HyperlinkButton hlblink = new HyperlinkButton();

Image img = new Image();
if (link.source == null)
    img.Source = flagImg.Source;
else
    img.Source = new BitmapImage(new Uri(suri + link.source, UriKind.RelativeOrAbsolute));
hlblink.Click += new RoutedEventHandler(hlblink_Click);
hlblink.Name = link.name;
hlblink.Content = img;
hlblink.NavigateUri = new Uri(link.url);
ToolTip tl = new ToolTip();
TextBlock txt = new TextBlock();
txt.Text = link.desc;
tl.Content = txt;
ToolTipService.SetToolTip(hlblink, tl);
cnv.Children.Add(hlblink);

понедельник, 19 июля 2010 г.

Графический редактор - часть 1

Динамически нарисовать линию
/// 
/// Creates a line at run-time
/// 

public void CreateALine()
{
    // Create a Line
    Line redLine = new Line();
    redLine.X1 = 50;
    redLine.Y1 = 50;
    redLine.X2 = 200;
    redLine.Y2 = 200;

    // Create a red Brush
    SolidColorBrush redBrush = new SolidColorBrush();
    redBrush.Color = Colors.Red;

    // Set Line's width and color
    redLine.StrokeThickness = 4;
    redLine.Stroke = redBrush;

    // Add line to the Grid.
    LayoutRoot.Children.Add(redLine);
}
 
Сворачивающаяся панель 
в XAML файле в нужном гриде(Grid) добавим 
<Grid.RenderTransform>
   <TranslateTransform X="0" />
</Grid.RenderTransform> 
далее в коде
(gridDrawPanel.RenderTransform as TranslateTransform).X = 120;
  
PolyLine
SolidColorBrush yellowBrush = new SolidColorBrush();
            yellowBrush.Color = Colors.Yellow;
            SolidColorBrush blackBrush = new SolidColorBrush();
            blackBrush.Color = Colors.Black;
            // Create a polyline
            Polyline yellowPolyline = new Polyline();
            yellowPolyline.Stroke = blackBrush;
            yellowPolyline.StrokeThickness = 4;
            // Create a collection of points for a polyline
            System.Windows.Point Point1 = new System.Windows.Point(10, 100);
            System.Windows.Point Point2 = new System.Windows.Point(100, 200);
            System.Windows.Point Point3 = new System.Windows.Point(200, 30);
            System.Windows.Point Point4 = new System.Windows.Point(250, 200);
            System.Windows.Point Point5 = new System.Windows.Point(200, 150);
            PointCollection polygonPoints = new PointCollection();

            polygonPoints.Add(Point1);
            polygonPoints.Add(Point2);
            polygonPoints.Add(Point3);
            polygonPoints.Add(Point4);
            polygonPoints.Add(Point5);

            // Set Polyline.Points properties
            yellowPolyline.Points = polygonPoints;

            // Add polyline to the page
            cnvDrawPoly.Children.Add(yellowPolyline);
Ссылка 

Path
/// 
/// Creates a blue path with black stroke
/// 
public void CreateAPath()
{
    // Create a blue and a black Brush
    SolidColorBrush blueBrush = new SolidColorBrush();
    blueBrush.Color = Colors.Blue;
    SolidColorBrush blackBrush = new SolidColorBrush();
    blackBrush.Color = Colors.Black;

    // Create a Path with black brush and blue fill
    Path bluePath = new Path();
    bluePath.Stroke = blackBrush;
    bluePath.StrokeThickness = 3;
    bluePath.Fill = blueBrush;

    // Create a line geometry
    LineGeometry blackLineGeometry = new LineGeometry();
    blackLineGeometry.StartPoint = new Point(20, 200);
    blackLineGeometry.EndPoint = new Point(300, 200);

    // Create an ellipse geometry
    EllipseGeometry blackEllipseGeometry = new EllipseGeometry();
    blackEllipseGeometry.Center = new Point(80, 150);
    blackEllipseGeometry.RadiusX = 50;
    blackEllipseGeometry.RadiusY = 50;

    // Create a rectangle geometry
    RectangleGeometry blackRectGeometry = new RectangleGeometry();
    Rect rct = new Rect();
    rct.X = 80;
    rct.Y = 167;
    rct.Width = 150;
    rct.Height = 30;
    blackRectGeometry.Rect = rct;

    // Add all the geometries to a GeometryGroup.
    GeometryGroup blueGeometryGroup = new GeometryGroup();
    blueGeometryGroup.Children.Add(blackLineGeometry);
    blueGeometryGroup.Children.Add(blackEllipseGeometry);
    blueGeometryGroup.Children.Add(blackRectGeometry);

    // Set Path.Data
    bluePath.Data = blueGeometryGroup;
    LayoutRoot.Children.Add(bluePath);

}
Ссылка

Path.QuadraticBezierSegment

PathGeometry pg = new PathGeometry();
                PathFigure pf = new PathFigure();
                pf.StartPoint = new Point(10, 100);
                pf.IsFilled = false;
                QuadraticBezierSegment qbs = new QuadraticBezierSegment();
                qbs.Point1 = new Point(120, 200);
                qbs.Point2 = new Point(300, 100);
                pf.Segments.Add(qbs);
               
                qbs = new QuadraticBezierSegment();
                qbs.Point1 = new Point(320, 200);
                qbs.Point2 = new Point(300, 100);
                pf.Segments.Add(qbs);

                pg.Figures.Add(pf);

                GeometryGroup gg = new GeometryGroup();
                gg.Children.Add(pg);
                System.Windows.Shapes.Path path = (System.Windows.Shapes.Path)cnvDrawPoly.Children[4];
                path.Data = gg;

понедельник, 12 июля 2010 г.

Массивы в php

Объявление массива без инициализации

Объявление массива без инициализации
1
$data = array();

Объявление массива с инициализацией

Пусть, например, мы хотим хранить в ассоциативном массиве $textOptions некие параметры шрифта, а в массиве $days с целочисленными ключами - названия дней недели. Их можно объявить с инициализацией ряда элементов, а потом при необходимости добавлять новые элементы.
Объявление массива с инициализацией
1
2
3
4
5
$textOptions = array( 'font-family'=>'Arial' ,  'color'=>'red'   , 'font-size'=>12 ); 

$days = array( 0=>'Monday' , 1=>'Tuesday');
<span class="note">или</span>
$days = array( 'Monday','Tuesday');

Добавление элементов в массив

В определенные выше массивы можно добавлять элементы:
Добавление элементов в массив
1
2
3
4
5
6
7
8
9
10
$textOptions['background-color'] = '#EEEEEE';
$textOptions['border'] = 'green dotted 3px';

$days[2] = 'Wednesday';
$days[3] = 'Thursday';</div>
В случае массива с целочисленными ключами ключи можно не указывать:
<div class="code">
$days[] = 'Friday';
$days[] = 'Suturday';
$days[] = 'Sunday'; 
При этом значения ключам присваиваются последовательно, начиная со значения, на единицу большего уже существующего максимального ключа.

Примеры и примечания

Для перебора всех элементов массива очень удобно использовать оператор foreach. Определим такие (кстати, многомерные) массивы:
Примеры и примечания 
1
2
3
4
$student['Mitina'] = array('name'=>"Maria",  'age'=>19);
$student['Borisova'] = array('name'=>"Alexandra", 'age'=>19);
$teacher['Zakharkina'] = array('name'=>"vvz", 'age'=>'NA');
$teacher['Pankratov'] = array('name'=>"pan", 'age'=>'NA'); 
и выведем значения с помощью операторов
Примеры и примечания 
1
2
3
4
5
foreach ( $student as $k=>$v )
 {
   echo "<b>$k</b><br>;";
   echo $v['name']." (".$v['age']." years)<p>";
 };

Взято от сюда

Структура формата SVG

Прямоугольник

<rect fill="blue" x="200" y="100" width="100" height="100"/>
тут все ясно x,y  ширина и высота,  fill - цвет заливки
 Элипс
<ellipse fill="#c8beb7" cx="300" cy="100" rx="3" ry="3"/>
cx,cy - координаты центра
rx,ry - радиусы элипса
fill - цвет заливки
Path - путь-кривая(не совсем точный перевод)
       m - начало пути
Path.Arc     <path sodipodi:type="arc" style="fill:#c8beb7" id="path2816" d="m 100,100 a 50,50 0 1 1 0,100 z"/>
   type="arc" - тип кривой
   style="fill:#c8beb7" - стиль- залитый цветом #c8beb7
   d - описание пути

        m 100,100 - координата начала пути(кривой)
       a - arc
       a 50,50 0 1 1 0,100  50,50 - радиусы по Х и У;остальные пока не понял

Path.Line
   <path stroke-dasharray="0" stroke-width="4" d="M297.5,165.5L419.5,89.5" stroke="#000000" fill="none" />
     M297.5,165.5 - начало
     L419.5,89.5 - конец
   
Источники:
Wiki хорошая статья
Онлайн редактор (по нему можно учить SVG)

генерация SVG на PHP

SVG очень хороший векторный формат, представленный схемой XML.
генератор XML в PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php header("Content-type: image/svg+xml");

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->xmlStandalone = false;

// указываем кодировку и версию xml файла
 
$root = $dom->createElement('svg');
// создаем корневой элемент
$root->setAttribute('xmlns:dc','http://purl.org/dc/elements/1.1/');
$root->setAttribute('xmlns:cc','http://creativecommons.org/ns#');
$root->setAttribute('xmlns:rdf','http://www.w3.org/1999/02/22-rdf-syntax-ns#');
$root->setAttribute('xmlns:svg','http://www.w3.org/2000/svg');
$root->setAttribute('xmlns','http://www.w3.org/2000/svg');
$root->setAttribute('xmlns:sodipodi','http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd');
$root->setAttribute('xmlns:inkscape','http://www.inkscape.org/namespaces/inkscape');
$root->setAttribute('width','1000');
$root->setAttribute('height','1000');
$root->setAttribute('id','svg2');
$root->setAttribute('sodipodi:docname','Пещера');
// добавляем в корневой элемен  атрибут с датой
 
$defs = $dom->createElement('defs');
$defs->setAttribute("id","defs4");
// создаем элемент defs
$inkscape_perspective = $dom->createElement('inkscape:perspective');
$inkscape_perspective->setAttribute('sodipodi:type','inkscape:persp3d');
$inkscape_perspective->setAttribute('inkscape:vp_x','0 : 526.18109 : 1');
$inkscape_perspective->setAttribute('inkscape:vp_y','0 : 1000 : 0');
$inkscape_perspective->setAttribute('inkscape:vp_z','744.09448 : 526.18109 : 1');
$inkscape_perspective->setAttribute('inkscape:persp3d-origin','372.04724 : 350.78739 : 1');
$inkscape_perspective->setAttribute('id','perspective10');
$defs->appendChild($inkscape_perspective);

$root->appendChild($defs);
// добавляем элемент defs в коневой элемент root


$sodipodi_namedview=$dom->createElement('sodipodi:namedview');
$sodipodi_namedview->setAttribute('id','base');
$sodipodi_namedview->setAttribute('pagecolor','#ffffff');
$sodipodi_namedview->setAttribute('bordercolor','#666666');
$sodipodi_namedview->setAttribute('borderopacity','1.0');
$sodipodi_namedview->setAttribute('inkscape:pageopacity','0.0');
$sodipodi_namedview->setAttribute('inkscape:pageshadow','2');
$sodipodi_namedview->setAttribute('inkscape:zoom','0.35');
$sodipodi_namedview->setAttribute('inkscape:cx','375');
$sodipodi_namedview->setAttribute('inkscape:cy','520');
$sodipodi_namedview->setAttribute('inkscape:document-units','px');
$sodipodi_namedview->setAttribute('inkscape:current-layer','layer1');
$sodipodi_namedview->setAttribute('showgrid','false');
$sodipodi_namedview->setAttribute('inkscape:window-width','1920');
$sodipodi_namedview->setAttribute('inkscape:window-height','1024');
$sodipodi_namedview->setAttribute('inkscape:window-x','-4');
$sodipodi_namedview->setAttribute('inkscape:window-y','-4');
$sodipodi_namedview->setAttribute('inkscape:window-maximized','1');
$root->appendChild($sodipodi_namedview);

$metadata=$dom->createElement('metadata');
$metadata->setAttribute('id','metadata7');
    $rdf_RDF=$dom->createElement('rdf:RDF');
        $cc_Work=$dom->createElement('cc:Work');
        $cc_Work->setAttribute('rdf:about','');
            $dc_format=$dom->createElement('dc:format');
            $text = $dom->createTextNode('image/svg+xml');
            $dc_format->appendChild($text);
            $cc_Work->appendChild($dc_format);
            
            $dc_type=$dom->createElement('dc:type');
            $dc_type->setAttribute('rdf:resource','http://purl.org/dc/dcmitype/StillImage');
            $cc_Work->appendChild($dc_type);
            
            $dc_title=$dom->createElement('dc:title');
            $cc_Work->appendChild($dc_title);
        $rdf_RDF->appendChild($cc_Work);
    $metadata->appendChild($rdf_RDF);
$root->appendChild($metadata);

$g=$dom->createElement('g');
$g->setAttribute('inkscape:label','Layer 1');
$g->setAttribute('inkscape:groupmode','layer');
$g->setAttribute('id','layer1');
    $path=$dom->createElement('path');
    $path->setAttribute('sodipodi:type','arc');
    $path->setAttribute('style','fill:#c8beb7');
    $path->setAttribute('id','path2816');
    $path->setAttribute('sodipodi:cx','178.57143');
    $path->setAttribute('sodipodi:cy','150.93361');
    $path->setAttribute('sodipodi:rx','20');
    $path->setAttribute('sodipodi:ry','50');
    $path->setAttribute('d','m 228.57143,150.93361 a 50,50 0 1 1 -100,0 50,50 0 1 1 100,0 z');
    $g->appendChild($path);
$root->appendChild($g);    
//=============================================
$dom->appendChild($root);
// публикуем корневой элемент
$sxml=$dom->saveXML();
$xhtmldtd='<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">'."\n";
$sxml=preg_replace('/\n/',$xhtmldtd,$sxml,1);
$tsxml=str_replace(">",">\n",$sxml);

echo ($tsxml);
// вывод дерева
?>



Важная мелочь! первая строчка должна быть<?php header("Content-type: image/svg+xml"); для этого нужно чтобы обязательно файл не содержал ни каких символов перед <?php если это формат unicode то он может добавить невидимый символ *BOM, для этого нужно сохранять без этого *BOM если появляется ошибка :
Cannot add header information - headers already sent
то нужно в другом редакторе пересохранить, например NotePad++ мне помог, пересохранил и снова в Adobe dreamwaver работаю

генератор XML в PHP

Генератор XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php

$dom = new DOMDocument('1.0', 'utf-8');
// указываем кодировку и версию xml файла

$root = $dom->createElement('root');
// создаем корневой элемент
$root->setAttribute('date','9-12-2009');
// добавляем в корневой элемен  атрибут с датой

$new = $dom->createElement('new');
// создаем элемент new
$root->appendChild($new);
// добавляем элемент new в коневой элемент root

$node = $dom->createElement('node');
// создаем элемент node
$text = $dom->createCDATASection('qwe & asdf');
// создаем наполнение для в конструкции <![CDATA[ ... ]]>
$node->appendChild($text);
// записываем текст в элемент node
$new->appendChild($node);
// добаляем элемент node в элемент new

$node = $dom->createElement('node');
// создаем элемент node
$text = $dom->createTextNode('Текст & текст');
// создаем наполнение для в конструкции <![CDATA[ Текст & текст ]]>
$node->appendChild($text);
// записываем текст в элемент node
$new->appendChild($node);
// добаляем элемент node в элемент new

$edit = $dom->createElement('edit');
// создаем элемент edit
$root->appendChild($edit);
// добавляем элемент edit в коневой элемент root

$dom->appendChild($root);
// публикуем корневой элемент
echo $dom->saveXML();
// вывод дерева
?>

В результате на выходе мы получим вот такое xml дерево:


<?xml version="1.0" encoding="utf-8"?>
<root date="9-12-2009">
  <new>
    <node><![CDATA[Текст & текст]]></node>
    <node>Текст &amp; текст</node>
  </new>
  <edit/>
</root> 
 
 
взято от сюда  

воскресенье, 11 июля 2010 г.

Kit3D

не работает  выдает ошибку, на то что не может подключиться
в MainPage.xaml создадим область
                <Grid x:Name="GridGFX" Background="White">
                    <Canvas x:Name ="cnv3DContainer" Margin="0,35,0,0">
                    </Canvas>
                </Grid>

//------------------MainPage.xaml.cs
using Kit3D.Windows.Controls;
using Kit3D.Windows.Media;
using Kit3D.Windows.Media.Media3D;

//Раздел переменных
        //3D
        Viewport3D viewport;
        RotateTransform3D Rotate; 
//в  добавляем  public MainPage() после  InitializeComponent();
            this.Loaded += new RoutedEventHandler(Our_Cube_Loaded);

// сам код
       #region Kti3D
        void Our_Cube_Loaded(object sender, RoutedEventArgs e)
        {
           
            ModelVisual3D Visual = new ModelVisual3D();
            GeometryModel3D MyCube = new GeometryModel3D();
            MyCube.Geometry =  CreateCubeMesh();
            MyCube.Material = new DiffuseMaterial(new Kit3DBrush(new SolidColorBrush(Colors.Gray)));

            Visual.Content = MyCube;

            Transform3DGroup Transform = new Transform3DGroup();
            Transform.Children.Add(new ScaleTransform3D(3, 3, 3));

            Rotate = new RotateTransform3D();
            Rotate.Rotation = new AxisAngleRotation3D();
            Transform.Children.Add(Rotate);
            MyCube.Transform = Transform;

            viewport = new Viewport3D();

            viewport.Camera = new PerspectiveCamera(
                new Point3D(-5, 15, 25),
                new Vector3D(5, -15, -25),
                new Vector3D(0, 1, 0),
                45);
            viewport.Children.Add(Visual);
            viewport.HorizontalAlignment = HorizontalAlignment.Stretch;
            viewport.VerticalAlignment = VerticalAlignment.Stretch;

            this.GridGFX.Children.Add(viewport);

        }

        private MeshGeometry3D CreateCubeMesh()
        {
            MeshGeometry3D mesh = new MeshGeometry3D();



            // Define the position of each 3D point
            mesh.Positions = new Point3DCollection
            {
                            new Point3D (-0.5,0.5,0.5),
                            new Point3D (0.5,0.5,0.5),
                            new Point3D (-0.5, -0.5,0.5),
                            new Point3D (0.5, -0.5,0.5),
                            new Point3D (0.5,0.5, -0.5),
                            new Point3D (-0.5, 0.5, -0.5),
                            new Point3D (0.5, -0.5, -0.5),
                            new Point3D (-0.5, -0.5, -0.5),

                            new Point3D (-0.5,0.5, -0.5),
                            new Point3D (-0.5,0.5,0.5),
                            new Point3D (-0.5, -0.5, -0.5),
                            new Point3D (-0.5, -0.5,0.5),
                            new Point3D (0.5,0.5,0.5),
                            new Point3D (0.5,0.5, -0.5),
                            new Point3D (0.5, -0.5,0.5),
                            new Point3D (0.5, -0.5, -0.5),

                            new Point3D (-0.5,0.5, -0.5),
                            new Point3D (0.5,0.5, -0.5),
                            new Point3D (-0.5,0.5,0.5),
                            new Point3D (0.5,0.5,0.5),
                            new Point3D (0.5, -0.5, -0.5),
                            new Point3D (-0.5, -0.5, -0.5),
                            new Point3D (0.5, -0.5,0.5),
                            new Point3D (-0.5, -0.5,0.5)
            };



            // Define the association of 3D points between them

            mesh.TriangleIndices = new Int32Collection { 0, 2, 1, 1, 2, 3, 4, 6, 5, 5, 6, 7, 8, 10, 9, 9, 10, 11, 12, 14, 13, 13, 14, 15, 16, 18, 17, 17, 18, 19, 20, 22, 21, 21, 22, 23 };

            return mesh;
        }
        #endregion Kti3D


Ошибка    1    непредвиденная ошибка при выполнении задачи "ValidateXaml".
System.IO.FileLoadException: Невозможно загрузить файл или сборку "file:///D:\berezhenko\project\Silverlight\WebPiket\WebPiket\Bin\Debug\Kit3D.dll" или один из зависимых от них компонентов. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)
Имя файла: "file:///D:\berezhenko\project\Silverlight\WebPiket\WebPiket\Bin\Debug\Kit3D.dll" ---> System.NotSupportedException: Предпринята попытка загрузить сборку из сетевого ресурса, что в предыдущих версиях .NET Framework могло привести к помещению сборки в "песочницу". Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому данная загрузка может быть опасной. Если эта нагрузка не предназначена для изоляции сборки, включите переключатель loadFromRemoteSources. Дополнительные сведения см. на странице http://go.microsoft.com/fwlink/?LinkId=155569.

   в System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   в System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
   в System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
   в System.Reflection.Assembly.LoadFrom(String assemblyFile)
   в Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task)
   в Microsoft.Silverlight.Build.Tasks.ValidateXaml.XamlValidator.Execute(ITask task)
   в Microsoft.Silverlight.Build.Tasks.ValidateXaml.Execute()
   в Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   в Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)

    WebPiket

Загрузить картинку

Image image = new Image();
                image.Source = new BitmapImage(new Uri("image.jpg", UriKind.Relative));
                image.Height = 100;
                image.Width = 200;
                parentCanvas.Children.Add(image);