青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

AVEVA PML.Net for DWG

Posted on 2015-08-01 09:39 eryar 閱讀(4412) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 4.AVEVA Solution

AVEVA PML.Net for DWG

eryar@163.com

Abstract. AVEVA PmlNet allows you to instantiate and invoke methods on .NET objects from PML proxy objects. The PML proxy objects behave just like any other PML object. By PML proxy object you can use many other C# resources easily. The paper show an example to use PML proxy object to read and write AutoCAD DXF/DWG files by the OpenDWG library in AVEVA PDMS. 

Key Words. AVEVA, PDMS, Marine, Plant, OpenDWG, AutoCAD, DWG, DXF

1. Introduction

使用AVEVA PML.Net可以編寫代理PML對(duì)象,這種代理對(duì)象可以在PML中被調(diào)用,其調(diào)用方式和其他PML對(duì)象完全一樣。且PML.Net編寫的dll部署簡(jiǎn)單,不像AddIn開發(fā)出的插件那樣需要比較復(fù)雜的配置。只需要將生成的dll放到PDMS安裝目錄,即可以在PML中調(diào)用了。

使用PML.Net編寫的PML代理類可以大大方便C#開發(fā)者的開發(fā),且可使用C#相關(guān)的大量資源,甚至是C++等資源。如本文所說的OpenDWG庫,可以實(shí)現(xiàn)在PDMS中直接對(duì)DWG/DXF文件進(jìn)行讀寫。

做CAD開發(fā)的應(yīng)該都聽說過AutoCAD,而讀寫DWG文件的庫,除了Autodesk公司的以外,還有一個(gè)組織開發(fā)出來的OpenDWG,這個(gè)組織的名字是Open Design Alliance(ODA)。因?yàn)镈WG文件廣泛使用且沒有公布文件格式,所以才有這個(gè)ODA的存在。在AVEVA 12.0版本中無意發(fā)現(xiàn)了DWGDirect相關(guān)的庫,如圖所示:

wps_clip_image-24956

Figure 1.1 DWGDirect_Net by Open Design Alliance

本文對(duì)如何使用PML.Net編寫代理PML類起到拋磚引玉的作用,讀者可以在此基礎(chǔ)上盡情自由發(fā)揮,編寫出更加實(shí)用的程序。

2.OpenDWG usage

既然在官方的版本中提供了DWGDirect_Net庫,那么就可以正大光明地用在自己的程序開發(fā)中來對(duì)DWG文件做些處理,如為Draft的出圖使用DWG模板、修改導(dǎo)出的DXF圖紙中的中文字體、將DXF文件直接轉(zhuǎn)換成DWG格式等等。

DWGdirect_Net的用法很簡(jiǎn)單,下面給出一個(gè)最簡(jiǎn)單的例子,更詳細(xì)的內(nèi)容可參考ODA提供的示例程序。

using System;
using System.Text;
using System.Collections.Generic;

using DWGdirect.Runtime;
using DWGdirect.Geometry;
using DWGdirect.DatabaseServices;

namespace OpenDwgTest
{
    
/// <summary>
    
/// a simple demo about how to use OpenDWG.
    
/// <author>Shing Liu(eryar@163.com)</author>
    
/// </summary>
    class Program
    {
        
static void Main(string[] args)
        {
            
// initialize DWGdirect.
            using (Services aService = new Services())
            {
                
try
                {
                    
using (Database aDatabase = new Database())
                    {
                        
using (BlockTable aBlockTable = (BlockTable)aDatabase.BlockTableId.GetObject(OpenMode.ForRead))
                        {
                            ObjectId aModelSpaceId 
= aBlockTable[BlockTableRecord.ModelSpace];
                            
using (BlockTableRecord aRecord = (BlockTableRecord)aModelSpaceId.GetObject(OpenMode.ForWrite))
                            {
                                
// make a cirlce.
                                Circle aCircle = new Circle();
                                aCircle.SetDatabaseDefaults(aDatabase);
                                aCircle.Radius 
= 50.0;

                                aRecord.AppendEntity(aCircle);

                                
// make a text.
                                DBText aText = new DBText();
                                aText.SetDatabaseDefaults(aDatabase);
                                aText.Position 
= new Point3d(-35.010.00.0);
                                aText.TextString 
= "Hello World! by OpenDWG";
                                aText.Height 
= 5.0;
                                aText.WidthFactor 
= 0.7;
                                aRecord.AppendEntity(aText);
                            }

                        }

                        aDatabase.SaveAs(
"d:/test.dwg", DwgVersion.vAC18);
                    }
                }
                
catch (System.Exception e)
                {
                    Console.WriteLine(
"\nError: {0}", e.Message);
                }
            }
        }
    }
}

程序主要生成一個(gè)圓和一個(gè)文本,并將結(jié)果保存到文件d:/test.dwg中,效果如下圖所示:

wps_clip_image-8632

Figure 2.1 DWG generated by OpenDWG

從上面的代碼及生成結(jié)果可以看出,OpenDWG的用法還是很簡(jiǎn)單的,封裝得簡(jiǎn)單易用。

3.PML Proxy Object

AVEVA PML.Net提供的代理PML對(duì)象,使得在PML中調(diào)用C#的組件更加靈活,而且PML.Net編寫的C#組件的布置更簡(jiǎn)單。如果你的程序算法復(fù)雜,且對(duì)性能有一定要求的話,可以考慮使用PML.Net來開發(fā)。下面結(jié)合上述生成DWG文件的代碼,編寫一個(gè)簡(jiǎn)單的處理DWG文件的PML .Net組件,來體驗(yàn)下用C#開發(fā)的效率。

用C#編寫PML代理對(duì)象也是很簡(jiǎn)單的,下面直接給出代碼,對(duì)于PML.Net的使用可參考以前發(fā)的blog:


using System;
using System.Text;
using System.Windows.Forms;
using System.Collections.Generic;

using Aveva.PDMS.PMLNet;

using DWGdirect.Runtime;
using DWGdirect.Geometry;
using DWGdirect.DatabaseServices;


namespace eryar.pmlnet.dwg
{
    
/// <summary>
    
/// a simple PML.Net object to test OpenDWG.
    
/// <author>Shing Liu(eryar@163.com)</author>
    
/// </summary>
    [PMLNetCallable()]
    
public class DwgTest
    {
        [PMLNetCallable()]
        
public DwgTest()
        {
        }

        [PMLNetCallable()]
        
public void Assign(DwgTest rhs)
        {
        }

        [PMLNetCallable()]
        
public void RunTest()
        {
            
// initialize DWGdirect.
            using (Services aService = new Services())
            {
                
try
                {
                    
using (Database aDatabase = new Database())
                    {
                        
using (BlockTable aBlockTable = (BlockTable)aDatabase.BlockTableId.GetObject(OpenMode.ForRead))
                        {
                            ObjectId aModelSpaceId 
= aBlockTable[BlockTableRecord.ModelSpace];
                            
using (BlockTableRecord aRecord = (BlockTableRecord)aModelSpaceId.GetObject(OpenMode.ForWrite))
                            {
                                
// make a cirlce.
                                Circle aCircle = new Circle();
                                aCircle.SetDatabaseDefaults(aDatabase);
                                aCircle.Radius 
= 50.0;

                                aRecord.AppendEntity(aCircle);

                                
// make a text.
                                DBText aText = new DBText();
                                aText.SetDatabaseDefaults(aDatabase);
                                aText.Position 
= new Point3d(-35.010.00.0);
                                aText.TextString 
= "Hello World! by PML.Net";
                                aText.Height 
= 5.0;
                                aText.WidthFactor 
= 0.7;
                                aRecord.AppendEntity(aText);
                            }

                        }

                        aDatabase.SaveAs(
"d:/test.dwg", DwgVersion.vAC18);

                        MessageBox.Show(
"Test DWG finished!");
                    }
                }
                
catch (System.Exception e)
                {
                    Console.WriteLine(
"\nError: {0}", e.Message);
                }
            }
        }
    }
}

將生成的dll文件放到PDMS的安裝目錄中就可以在PML中調(diào)用了。調(diào)用代碼如下所示:

-------------------------------------------------------------------------------
-- Copyright (C) 2015 Shing Liu All Rights Reserved.
--
-- File:            testdwg.pmlmac
--   Type:          Macro Definition
--   Group:         Application
--     Keyword:     Test PML.Net and DWG.
--   Module:        ANY
--
-- Author:          Shing Liu(eryar@163.com)
-- Created:         2015-08-01 08:32
--
-- Description:     Test the OpenDWG in PML.Net.
--
-------------------------------------------------------------------------------

import 'eryar.pmlnet.dwg'
using namespace 
'eryar.pmlnet.dwg'

!aTest = object DwgTest()
!aTest.runTest()

我一般是在monitor中調(diào)試PML.Net程序,因?yàn)閱?dòng)monitor速度快,如下圖所示:

wps_clip_image-9213

Figure 3.1 PML.Net object usage

生成結(jié)果如下圖所示:

wps_clip_image-19439

4.Conclusion

綜上所述,OpenDWG的C#封裝用起來還是很方便的,而使用PML.Net編寫的PML代理對(duì)象,使得在AVEVA產(chǎn)品中調(diào)用C#組件更加便利。本文結(jié)合OpenDWG和PML.Net給出具體實(shí)例,為PDMS程序的開發(fā)開闊下思路。

關(guān)于DWG文件的讀寫,也可以不借助于OpenDWG。如果公司采購了AutoCAD,也可以直接使用AutoCAD .Net來對(duì)DWG進(jìn)行操作,程序更加穩(wěn)定。

5. References

1. Shing Liu. OpenCASCADE DataExchange DWG. 

http://m.shnenglu.com/eryar/archive/2014/10/15/208581.html

2. Shing Liu. OpenCASCADE DataExchange DXF. 

http://m.shnenglu.com/eryar/archive/2013/12/22/204948.html

3. Shing Liu. AVEVA PML.Net Guide. 

http://m.shnenglu.com/eryar/archive/2014/12/25/209307.html

4. Autodesk. AutoCAD .Net Developer’s Guide.

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人成人一区二区三区| 亚洲肉体裸体xxxx137| 黑人极品videos精品欧美裸| 国产精品99免视看9| 欧美视频在线不卡| 国产精品久久影院| 国产欧美日韩一区| 伊人久久婷婷| 亚洲精品五月天| 亚洲午夜一区二区三区| 欧美一区二区久久久| 久久九九免费| 亚洲高清视频在线| 日韩视频亚洲视频| 中文无字幕一区二区三区| 亚洲伊人第一页| 欧美影院视频| 欧美精品入口| 国产精品色在线| 1000部精品久久久久久久久| 99亚洲伊人久久精品影院红桃| 亚洲视频在线观看三级| 另类尿喷潮videofree| 亚洲激情在线激情| 欧美一级在线播放| 欧美日韩视频一区二区| 国产一区二区毛片| 亚洲看片网站| 久久夜精品va视频免费观看| 亚洲美女区一区| 欧美专区在线播放| 欧美日韩一级黄| 激情视频亚洲| 欧美一二三视频| 亚洲国产免费| 欧美在线观看一区| 国产精品国产a级| 亚洲理伦电影| 久久综合网hezyo| 亚洲欧美日韩国产综合| 欧美日韩精品二区第二页| 亚洲春色另类小说| 欧美在线高清视频| 日韩视频免费看| 欧美激情精品久久久久久变态 | 亚洲一卡久久| 在线亚洲精品| 亚洲欧美国产精品桃花| 欧美国产激情| 99热在线精品观看| 欧美国产大片| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久久久久欧美| 欧美四级在线观看| 一区二区三区精品| 亚洲国产精品成人一区二区| 久久精品国产久精国产爱| 国产精品久久久久久超碰| 亚洲性av在线| 一区二区三区精品在线| 一区二区国产日产| 欧美日韩国产精品专区| 亚洲人成在线观看一区二区 | 艳女tv在线观看国产一区| 欧美高清在线一区二区| 久久久久www| 亚洲福利小视频| 欧美电影免费观看大全| 欧美成人一区二区三区| 日韩一区二区精品视频| 一二三四社区欧美黄| 国产精品揄拍一区二区| 欧美中文在线免费| 久久成年人视频| 亚洲大胆视频| 亚洲全黄一级网站| 西西裸体人体做爰大胆久久久| 国产日韩欧美二区| 久久性色av| 欧美成年人网站| 亚洲作爱视频| 亚洲欧美精品中文字幕在线| 国产一区日韩二区欧美三区| 久久免费视频网站| 欧美成人资源网| 亚洲免费小视频| 久久成人亚洲| 99热在这里有精品免费| 一本久久a久久精品亚洲| 国产九九精品视频| 久久中文欧美| 欧美精品成人| 欧美一区成人| 另类春色校园亚洲| 亚洲一区二区三区在线| 久久精品99无色码中文字幕| 亚洲欧洲日本国产| aa日韩免费精品视频一| 国一区二区在线观看| 国产精品一级二级三级| 久久久久免费| 99riav久久精品riav| 91久久国产综合久久| 中国成人亚色综合网站| 国产一区二区日韩精品欧美精品| 亚洲国产日韩欧美在线图片| 国产精品爽黄69| 亚洲高清二区| 国产午夜精品久久久久久免费视 | 香蕉尹人综合在线观看| 欧美a级在线| 久久精品人人| 欧美视频在线观看| 亚洲大片av| 国产在线高清精品| 亚洲图片你懂的| av成人福利| 欧美大片在线影院| 六月婷婷一区| 国产欧美69| 亚洲视频999| 在线视频一区观看| 免费观看在线综合| 欧美va亚洲va国产综合| 国产欧美日韩视频| 亚洲欧美久久| 久久国产精品久久久久久| 国产精品mm| 亚洲人成精品久久久久| 亚洲日本久久| 欧美sm视频| 欧美成人午夜剧场免费观看| 国产热re99久久6国产精品| 亚洲欧美国产高清| 欧美在线不卡视频| 国产一区二区精品久久99| 欧美中文字幕在线视频| 久久精品在线免费观看| 国产亚洲一区二区精品| 久久精品国产清高在天天线| 久久久久国产一区二区三区| 国产视频精品免费播放| 欧美影视一区| 美女视频黄免费的久久| 韩国欧美国产1区| 久久夜色精品国产噜噜av| 欧美成人69av| 最近看过的日韩成人| 欧美黄色一区二区| 一区二区三区色| 久久九九精品| 在线免费观看日本欧美| 美女尤物久久精品| 亚洲人成在线播放网站岛国| 亚洲最黄网站| 国产精品一区二区久久久久| 久久激情综合网| 亚洲福利小视频| 一区二区激情视频| 国产伦精品一区二区三区高清| 欧美在线观看网站| 亚洲激情偷拍| 亚洲欧美日韩国产综合在线 | 久久精品综合| 欧美国产综合视频| 一本色道久久88综合日韩精品| 国产精品成人aaaaa网站| 欧美亚洲网站| 欧美激情精品久久久久久变态| 亚洲人成网站在线播| 欧美日韩免费视频| 欧美在线关看| 99re6这里只有精品| 久久资源在线| 亚洲免费视频在线观看| 在线观看视频日韩| 欧美特黄一级| 老司机午夜免费精品视频| 一本色道久久综合一区| 久久综合伊人77777蜜臀| 99re6热在线精品视频播放速度| 国产嫩草一区二区三区在线观看| 卡通动漫国产精品| 亚洲免费在线视频一区 二区| 欧美激情一区二区三区在线视频| 亚洲欧美日韩国产综合在线| 亚洲精品女av网站| 国产色产综合色产在线视频| 欧美日本成人| 老牛影视一区二区三区| 午夜日韩电影| 99re6热只有精品免费观看| 欧美jizz19性欧美| 久久精品主播| 欧美中文在线视频| 午夜激情综合网| 亚洲一区二区成人| 一本色道久久综合狠狠躁篇怎么玩| 亚洲福利视频一区| 在线播放中文一区|