未找到

未发布 扫描识别工具Dynamic Web TWAIN使用教程:如何将本地图像加载到查看器中
by Harriet666 keys 分享 1513762100521
未发布 网络通讯控件PowerSNMP for .NET常见问题合集
by Harriet666 keys 分享 1502788489271
PowerSNMP for .NET是用于监视和控制网络设备创建自定义的SNMP管理器。简单网络管理协议(SNMP)采用线程通信机制,安全强、并且具有编码/解码功能,您可以快速开发定制SNMP应用程序。由于开发此工具需要的资源少,灵活性好,所以便于重新使用和维护。
 
PowerSNMP for .NET试用版下载>>>
 
问:PowerSNMP for .NET与其他SNMP产品有什么不同?
答:最新版本的PowerSNMP产品线增加了新的.NET 2.0重新设计,利用新的.NET环境的强大功能,提供了最先进的Internet Communications组件。包含以下功能:
  • SNMP版本1,2和3包含认证、加密/解密
  • RFC 1155,1157,1158,1213,2578,2579,3417和3418中定义的内置对象、标识符、表格、通知和组
  • MIB解析,自定义MIB文件可用于在源代码中生成C#或VB类
  • MIB编译,自定义MIB文件可用于在运行时生成动态类和对象
  • 可轻松实现多线程应用程序的启动方法
  • EncodedMessage属性,用于轻松调试发送和接收的字节以及会话记录
.NET环境已经发展,用户也是如此。客户正在开发更多的ASP.NET应用程序,更多的控制台应用程序和更多的服务应用程序。缺乏UI、伪阻塞和异步方法与这些环境无关。由于这些原因,PowerSNMP for .NET 4.x设计有以下重点:
  • 改进异步支持:传统的PowerSNMP异步支持提供了一种在工作线程上执行的方法,但这需要一个信号机制来指示何时完成操作。这导致了难以维护的事件驱动代码。通过新的设计,代码占用更少的资源并且更加灵活。
  • 改进.NET 2.0功能:PowerSNMP 4.x已经充分利用了.NET 2.0中引入功能。现在大多数用户已经从.NET 1.x迁移,可以升级PowerSNMP并兼顾兼容性。当然,.NET 1.x产品线仍可在.NET 1.x环境中使 用以支持旧版应用程序。
  • 支持.NET CF(Compact Framework):通过新的设计,全面支持Compact Framework。

问:试用版与许可版本有什么不同?
答:在开发期间,产品“试用”版本和许可版本之间没有区别。
在运行时,没有有效的开发者许可证创建的应用程序将定期显示一条试用消息。除了这个消息之外,功能没有区别。

问:示例是否随产品一起发送?
答:当然。我们发送将CSharp和Visual Basic .NET中的完整应用程序(不仅仅是简单的技术演示)作为Windows应用程序和Web应用程序。
 
问:PowerSNMP是否完全支持从表格中获取值?GetBulk怎么样?
答:以上都支持。PowerSNMP包括高级表格检索方法,完全支持版本2命令(如GetBulk)。
 
问:应用程序如何使用Manager控件?
答:一个典型的应用程序会将所有代理的IP地址存储在网络上,并且会按照时间表从代理收集统计信息。应用程序的地址也可能会被注册到代理以设置陷阱,因此管理员将以异步方式(动态地)通知重要的代理事件。信息将被记录到文件中,并通过用户界面动态显示。
 
问:应用程序如何使用代理控件?
答:假设PC主机正用于控制硬件设备。你可以创建一个代理,被查询时将通过硬件设备的统计信息进行响应。该概念可以扩展到提供由主机收集和提供的任何类型的信息(使用SNMP标准)。
 
问:我可以创建一个作为Microsoft操作系统代理的子代理吗?
答:通常不能。代理商通常使用“知名”端口161进行通信。由于Microsoft的代理将使用此端口,你的应用程序将必须使用非标准端口,并且你的管理器必须配置为检查你的非标准端口(可以在某些情况下进行,但不常见)。
 
问:当我建立VS.NET 2008 Website时,为什么会出现“尝试反序列化一个空的流”的异常?
答:网站为组件许可创建一个App_Licenses.dll,必须与应用程序一起分发。由于一个明显的VS.NET 2008错误,这个dll在64位操作系统编译时是错误的。为了解决这个问题,可以更换2008 Website中的App_Licenses dll。 
 
选项包括:
a)使用相同的控件/组件在相同(许可)机器上编译2005 Website
b)在32位计算机上编译2005或2008 WebSite,前提是该机器也获得许可(Dart Developer许可证允许安装在最多两台机器)
从以上的选项中选一个替换有缺陷的App_Licenses.dlll,并且网站应该在没有问题的情况下构建和部署。不要删除新的dll,否则VS.NET将再次创建错误的dll。
未发布 快速制作演示动画的工具TurboDemo常见问题合集(二)
by Harriet666 keys 分享 1505467594160
使用TurboDemo遇到了问题?我们的FAQ将帮助你找到答案。
TurboDemo

8、怎样添加超链接?

  1. 使用“绘制对象”添加您希望创建超链接的区域(如手绘图形、矩形或椭圆)
  2. 双击您定义的对象以将它指定给URL
  3. 您可以将互联网地址、电子邮件地址或任何您需要的超链接插入到“URL”字段中
如果用户点击已定义的区域,URL将被打开。您可以从演示示例中打开外部网页或直接开始运行另一个演示示例。
 

9、怎样调整工程大小?

在您完成您的工程后,如果需要您可以改变工程的大小。您可以缩小您工程的大小也可将它扩大。您可在“文件|调整工程大小”菜单中运行该功能

我们建议您在添加任何对象(如,备注、提示气球等)前调整工程大小,因为这将影响对象定位。
 

10、怎样将声音插入幻灯?

几种添加声音的方法:
  • 当您在进行大纲视图浏览时,您可以点击特定幻灯的喇叭图标
  • 在单个幻灯模式中,您能在工具条中找到喇叭图标
使用这两个图标,“音频向导”将提示您可以录制或导入声音。向导的“高级模式”允许您访问具备附加功能的“音频编辑器”,这些附加功能包
括复制、剪切、规整化等。
 

11、怎样隐藏或更改鼠标指针?

您可以使用位于工具条中或在“幻灯片|隐藏鼠标指针”菜单中的图标隐藏鼠标指针。可通过双击幻灯中或在“幻灯片|选择鼠标指针
”菜单中的指针图标改变鼠标指针外观。
 

12、在更改了鼠标指针的位置后,鼠标指针的表现奇怪。

在解释此问题前,我们需要解释TurboDemo工作原理:
  • “蓝圈”表示鼠标指针的起始点,“红圈”表示鼠标指针的结束点
  • TurboDemo将自动统计这些点之间的路径
  • 当您使用TurboDemo制作屏幕截图时,软件将记录当前鼠标指针的位置(起始点)
  • 在抓取下一张屏幕截图时,TurboDemo将记录鼠标指针现在的位置以及新坐标(结束点)
  • 鼠标指针在一张幻灯中的结束点通常是下一张幻灯的起始点。所以照例所说,当您在一张幻灯中移动了起始点(蓝圈),您会发现在上一张的结束
  • 点(红圈)位置也改变了
 

13、什么是“鼠标悬浮”?

“鼠标虚浮”就是当您在演示过程中将鼠标移动到特定位置时向您显示提示气球或图片的对象。这通常用在您不想通过会遗留在幻灯上的备注与提
示气球解释屏幕上不同内容的时候。
 

14、当播放演示示例时没有导航。

这通常发生在您用全屏制作演示示例的时候。问题就在于导航条都是放在演示文件的底部或右侧,所以就看不见导航了。您可以使用调整大小选项
(“文件|调整工程大小”菜单) 缩小工程的大小,这样就能看见导航条;或您可以在导出工程时选择一个隐藏的控制面板。
未发布 微软C# 8.0中的四个特性
by Harriet666 keys 分享 1504687137082

可空的引用类型(Nullable Reference Types)

可空的引用类型可概括地表述为,引用类型将不再默认可空。因此,开发人员必须使用定义可空值类型的同样语法“Type?”,显式地标记一个引用类型为可空。

如果将一个空值赋值给一个非可空的引用类型,那么将会给出一个编译器警告。与之相类似,从可空类型中读取也会给出编译器警告,除非显式地提前检查了被质疑的变量是否为空值。因此从理论上讲,开发人员需要做的唯一更改就是在代码的适当位置标上问号。

该特性新加了一个语法。该语法针对开发人员明知一个可空变量x并非实际为空值却无法证明给编译器的情况。在上述情况下,开发人员现在可以定义x!.Method(),消除编译器对于潜在空值引用异常的警告。
 

异步流(Async Streams),即foreach async

异步流是IEumerable的异步等价类。C#团队自2015以来就一直在努力实现异步流。在经历了很多争议后,其语法被定为:
foreach await (string s in asyncStream)
开发人员将使用如下的函数签名定义一个异步迭代器:
async IAsyncEnumerable MethodName()
就像使用一个正常的IEnumerable方法一样,开发人员可以使用“yield return”以懒方式(Lazy)构建对象流。

相比于源自响应式扩展(Reactive Extensions)的IObservable,使用这一方法的优点在于让消费者控制流速,这被称为“Pull模式”。与之相对,IObservable是一种“Push模式”,这意味着生产者可以使用高于消费者所能处理的流速让流涌向消费者。
 

缺省接口实现(Default Interface Implementations)

缺省接口实现在本质上是一种有限形式的多重继承。它允许抽象接口像抽象类一样,对方法进行完全的定义,只是抽象接口依然不能定义构造函数和字段。

需注意,开发人员可以通过使用ConditionalWeakTable在接口上模拟字段。

默认接口实现的主要好处是,开发人员可以在不破坏向后兼容的条件下,将一个新方法添加到一个已有的接口中。但是这并非是有保证的,因为默认接口只是在可以设计出适合的默认方法时才能工作。
 

扩展(Extension)

开发人员可以编写扩展方法,但是不能扩展属性,这是长期以来对C#一直存在的一个问题。事实上,如果使用当前的模式,甚至是不能定义一个扩展属性或事件的。此外,在很多开发人员看来,在静态类中放置扩展方法是“很诡异的”。

新的设计中新给出了一种称为“扩展”(Extension)的顶层语言构件。例如,如果开发人员想要为自定义的Customer类创建一个扩展方法和属性,可编写如下代码:
extension CustomerExt extends Customer {
    //定义方法和属性的代码。
}
就接口而言,是不能在扩展中定义实例字段的,但是可以使用ConditionalWeakTable实现模拟。定义静态字段也是允许的。

除了对属性、事件和操作符重载的扩展,C#团队甚至考虑允许扩展构造函数。扩展构造函数非常适用于工厂模式(Factory)和对象池场景。

扩展接口(Extension Interfaces)C#团队还考虑了扩展接口,即在已有类中添加新接口的能力。但是扩展接口将不会成为C# 8中的特性,因为它需要更改底层的运行时。
未发布 图形图表设计软件Edraw Max更新至v9.0,新增10000+符号和模板丨限时8.5折
by Harriet666 keys 分享 1510734839751
Edraw Max(亿图图示)是一款综合图形图表制作软件,它包含丰富的实例和模版,帮助您轻松创建流程图、网络拓扑图、组织结构图、商业图表、工程图,思维导图、软件设计图和平面布局图等。亿图采用更智能和人性化的绘制方式,包括丰富的图形模板库和特色实例库,最大程度帮助设计者降低工作量,更快捷阐述设计思想,提升创作灵感。
 
Edraw Max(亿图图示)中文版v9.0下载>>>
 
v9.0更新内容:
  • 新增超过10000个新的符号和模板。
  • 新增平面设计图纸类型。
  • 新增图形组织者的绘图类型。
  • 新增企业架构图的绘图类型。
  • 修复Mind Map中无效的Enter键。
  • 改进文字输入模式。

  • EdrawSoft85

未发布 【教程】Edraw Max(亿图图示):怎么用图片创建自己的符号库?
by Harriet666 keys 分享 1500972809000
Edraw Max(亿图图示)除了自带丰富的模板和例子,还有一个非常庞大的符号库,内置符号已经超过20000个。如果这些符号还是不能满足你的需求,那么你还可以通过软件“从图片创建库”的功能,创建一个属于你自己的符号库。本文就详细介绍一下具体是如何操作的!
 
目前Edraw Max(亿图图示)在线订购享75折优惠活动正在进行中,欢迎您下载、购买进行运用!
 
Edraw Max(亿图图示)v8.7最新版下载地址>>>
 
第一步:新建一个绘图页面,选择“符号”菜单下的“从图片创建库”。
 
第二步:在弹出的窗口中,选择你要作为库元素图片的文件夹,然后点击“选择文件夹”按钮即可。
 
第三步:左侧符号库就会显示出新添加的“图片”库。鼠标右键点击如下图所示位置,可对符号库重新命名。
 
第四步:选中具体的某一个图形、符号,然后右键选择“编辑符号”,即可对该符号进行再次编辑。

温馨提示:
1、建议“名称“和”提示”命名保持一致,否则符号显示的名称,和鼠标放在符号上显示的名称会不一样。
2、若“选择图元文件”的文件修改变动较大,“请选择形状图标”的文件也应做出相应的修改,否则,该符号在符号库中的显示,会和实际使用时的图会有出入。
 
第五步:导入新的图形到该符号库,从该符号库中导出图形,或者删除不需要用的图形符号,都可以通过点击鼠标右键进行设置。

未发布 MailBee.NET Objects退回邮件教程(二):POP3部分
by Harriet666 keys 分享 1503567760428
MailBee.NET Objects是一款为创建、发送、接收以及处理电子邮件而设计的健壮、功能丰富的.NET控件。几行代码便可为应用程序添加E-Mail支持,
简单高效。具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加到他们的应用程序中。

MailBee.NET Objects介绍和试用点击查看>>>
 
 
本文主要介绍了SMTP服务器退回邮件的代码示例。目前MailBee.NET Objects在线订购享75折优惠正在进行中,欢迎您下载试用版进行运用!
 
在上期的SMTP部分中,我们将退回的电子邮件发送到指定的单个电子邮件地址。
 
每封退回的电子邮件都包含失败的电子邮件地址(以及其他信息)。这个失败的地址是我们想知道的。这个任务看起来很简单 - 你需要做的是扫描退回的
邮件以确定地址的典型字段。但是有一个隐藏的危险:每个邮件服务器都有自己的邮件退回格式。虽然它们几乎具有相同的“From”和“主题”字段,但是退回地址可以在邮件的任何位置。MailEnable服务器的典型退回邮件如下所示:
From: POSTMASTER@domain.com
To: jdoe@domain.com
Subject: Message Delivery Failure

MailEnable: Message Delivery Failure.

The following recipient(s) could not be reached: 

Recipient: [SMTP: bill@domain.com] Reason: The message could not be delivered because the domain name (domain.com) does not appear 

to be registered.

函数GetInvalidEmailAddressME()检查邮件是否被退回,并从退回的邮件中提取失败的地址。由于退回邮件格式不同,此功能仅对MailEnable服务器有效。例如,如果你正在使用Communigate Pro服务器,则退回消息如下所示:
From: MAILER-DAEMON@domain.local
To: jdoe@localhost Subject:
Undeliverable mail:

Failed to deliver to ''
 
正如你所看到的,这个退回的邮件与前一个几乎相同。使用哪个服务器并不重要,退回信息总是有From,To和Subject字段,退回信息在其正文中有失败的地址。函数GetInvalidEmailAddressCP()与前一个函数几乎相同; 区别仅在于检查邮件字段并搜索失败的地址。支持尽可能多的退回电子邮件格式至关重要。这就是为什么你需要修改GetInvalidEmailAddress()函数,以适应服务器使用的退回电子邮件格式。
 
注意:在某些情况下,你可能需要扫描退回的电子邮件以获取其他信息。如果由于暂时的问题,退回的邮件到达,则不要删除电子邮件地址:邮箱超过配
额,邮件服务器关闭等。退回邮件可以分为两种类型:硬邮件和软邮件。如果是不存在的帐户或域,则会发生硬性退回。其他故障,如完整的邮箱或暂时
不可用的域,则是软性退回。你可以为数据库中的每个地址进行计算。也许下一次尝试发送邮件到具有一些软性退回的地址时将成功。
 
代码示例:
在此示例中,我们从指定的帐户中检索退回的电子邮件,然后从每个退回的电子邮件中提取失败的电子邮件地址。失败的地址传递给RemoveEmailFromDatabase子程序,该子程序必须从数据库中删除失败的地址。应用程序还会从服务器中删除退回的电子邮件,以避免下次处理。
C#:
// Create POP3 object
Pop3 pop = new Pop3();

// Enable logging to file
pop.Log.Enabled = true;
pop.Log.Filename = @"C:\log.txt";
pop.Log.Clear();

// Connect to POP3 server
pop.Connect("mail.domain.com");
pop.Login("bounce", "secret");

// Download headers and bodies of all messages.
MailMessageCollection msgs = pop.DownloadMessageHeaders(1, -1, -1);
                        
// Loop through all messages in the mailbox
foreach (MailMessage msg in msgs)
{
        string strLine = msg.BodyPlainText;
        Console.WriteLine("From: " + msg.From.Email);
                                
        // Get failed email address
        string str_invalid_email =  GetInvalidEmailAddressME(msg);

        // If str_invalid_email is non-empty then failed email 
        // address was found
        if (str_invalid_email.Length > 0)
        {
                // Remove failed email from database
                RemoveEmailFromDatabase(str_invalid_email);

                // Display invalid adress
                Console.WriteLine("Invalid email: " + str_invalid_email);                

                // Delete bounced email from server to avoid
                // processing it next time
                pop.DeleteMessage(msg.IndexOnServer);
        }
}

// Disconnect from POP3 server
pop.Disconnect();

// The function checks whether the message is bounced and extracts 
// failed address 
// from bounced message. Valid only for MailEnable servers
static string  GetInvalidEmailAddressME(MailMessage msg)
{
        string str_invalid_email = msg.BodyPlainText;

        // Check if this is a bounced message report
        if (msg.Subject.IndexOf("Delivery Failure") == -1)
{ 
                return "";
        }
        if (msg.From.ToString().IndexOf("POSTMASTER") == -1)
        {
                return "";
        }

        // Now we're sure this is a bounced message report
        int i_start;
        i_start = str_invalid_email.IndexOf("SMTP:");

        // Check if bounced message report contains "Recipient:" field
        if (i_start == -1)
        {
                return "";
        }
                        
        // Get failed address
        i_start += 5;
        i_end = str_invalid_email.IndexOf("]",i_start);
        str_invalid_email.Substring(i_start, i_end);
                        
        return str_invalid_email;
}

// The function checks whether the message is bounced and extracts 
// failed address 
// from bounced message. Valid only for Communigate Pro servers
static string  GetInvalidEmailAddressCP(MailMessage msg)
{
string str_invalid_email = msg.BodyPlainText;

        // Check if this is a bounced message report
        if (msg.Subject.IndexOf("Undeliverable mail") == -1) 
        {
                return "";
        }
        if (msg.From.ToString().IndexOf("MAILER-DAEMON") == -1) 
        {
                return "";
        }

        // Now we're sure this is a bounced message report
        int i_start;
        i_start = str_invalid_email.IndexOf("to '<");

        // Check if bounced message report contains 
        // "Failed to deliver to " field
        if (i_start == -1)
        { 
                return "";
        }
                        
        // Get failed address
        i_start += 5;
        i_end = str_invalid_email.IndexOf("]",i_start);
        str_invalid_email.Substring(i_start, i_end);
                        
        return str_invalid_email;
}

// This function must remove (or disable) specified
// email address from mailing list
static void RemoveEmailFromDatabase(string str_invalid_email)
{
// TODO: Add your code here                        
}
 
VB.NET:
Dim pop As New Pop3

' Enable logging to file
pop.Log.Enabled = True
pop.Log.Filename = "C:\log.txt"
pop.Log.Clear()

' Connect to POP3 server
pop.Connect("mail.domain.com")
pop.Login("jdoe", "secret")

' Download headers and bodies for all messages.
Dim msgs As MailMessageCollection = pop.DownloadMessageHeaders(1, -1, -1)

' Loop through all messages in the mailbox
Dim msg As MailMessage
For Each msg In msgs
        Dim strLine As String = msg.BodyPlainText
        Console.WriteLine("From: " + msg.From.Email)

        ' Get failed email address
        Dim str_invalid_email As String = GetInvalidEmailAddressME(msg)

        ' If str_invalid_email is non-empty then failed email 
        ' address was found
        If str_invalid_email.Length > 0 Then
                'Remove failed email from database
                RemoveEmailFromDatabase(str_invalid_email)

                ' Display invalid address
                Console.WriteLine("Invalid email: " & str_invalid_email)

                ' Delete bounced email from server to avoid
                ' processing it next time
                pop.DeleteMessage(msg.IndexOnServer)
        End If
Next
Console.ReadLine()

' Disconnect from POP3 server
pop.Disconnect()

' The function checks whether the message is bounced and extracts 
' failed address 
' from bounced message. Valid only for MailEnable servers
Function GetInvalidEmailAddressME(ByVal msg As MailMessage) As String
        Dim str_invalid_email As String = msg.BodyPlainText

        ' Check if this is a bounced message report
        If msg.Subject.IndexOf("Delivery Failure") = -1 Then
                Return ""
        End If
        If msg.From.ToString().IndexOf("POSTMASTER") = -1 Then
                Return ""
        End If

        ' Now we're sure this is a bounced message report
        Dim i_start As Integer, i_end As Integer
        i_start = str_invalid_email.IndexOf("SMTP:")

        ' Check if bounced message report contains "Recipient:" field
        If i_start = -1 Then
                Return ""
        End If

        ' Get failed address
        i_start += 5
        i_end = str_invalid_email.IndexOf("]", i_start)
        str_invalid_email.Substring(i_start, i_end)

        Return str_invalid_email
End Function

' The function checks whether the message is bounced and extracts 
' failed address 
' from bounced message. Valid only for Communigate Pro servers
Function GetInvalidEmailAddressCP(ByVal msg As MailMessage) As String
        Dim str_invalid_email As String = msg.BodyPlainText

        ' Check if this is a bounced message report
        If msg.Subject.IndexOf("Undeliverable mail") = -1 Then
                Return ""
        End If
        If msg.From.ToString().IndexOf("MAILER-DAEMON") = -1 Then
                Return ""
        End If

        ' Now we're sure this is a bounced message report
        Dim i_start As Integer, i_end As Integer
        i_start = str_invalid_email.IndexOf("to '<")

        ' Check if bounced message report contains 
        ' "Failed to deliver to " field
        If i_start = -1 Then
                Return ""
        End If

        ' Get failed address
        i_start += 5
        i_end = str_invalid_email.IndexOf("]", i_start)
        str_invalid_email.Substring(i_start, i_end)

        Return str_invalid_email
End Function

' This function must remove (or disable) specified
' email address from mailing list
Sub RemoveEmailFromDatabase(ByVal str_invalid_email As String)
        ' TODO: Add your code here                        
End Sub
未发布 【示例教程】使用leadtools的WCF接口功能实现从web端上传Dicom影像文件
by Harriet666 keys 分享 1517903663716
Leadtools 19总套包下载>>>
 
leadtools为web端提供了wcf接口来供用户可以登录pacs系统,检索,查看以及上传影像。本篇博客讲解如何创建一个网页来实现上传功能,通过WCF进行dicom文件的上传时,是将dicom文件转换为base64数据流,分段进行传输。
 
本篇博客运行的前提是已经部署完成Leadtools HTML5 Web Viewer,可以正常浏览。参考https://www.evget.com/article/2018/2/6/27757.html
 
在部署完成后,将下面的代码复制到一个HTML文件中,即可运行进行测试。另外需要添加html文件所需的jquery.min.js到同文件夹路径下。
<head>
    <meta charset="UTF-8">
head>

<form onsubmit="return false;">
    <input type="hidden" name="file_base64" id="file_base64">
    <input type="file" id="fileup" multiple="multiple">
    <input type="submit" value="submit" onclick="$.post('./uploader.php', $(this).parent().serialize());">
    <div>
        <div id="msg">div>
    div>
form>
<script src="scripts/jquery.min.js">script>
<script>

    $(document).ready(function () {
        authcookie = login();
        document.cookie = "authcookie=" + authcookie;
        $("#fileup").change(function () {
            getauthcookie("authcookie");
            filelist = this.files;
            file = filelist[fileindex];
            upload(file);
        });
    });
    var authcookie;//保存authcookie
    var filelist;//上传文件列表
    var file;//当前上传文件
    var tempfile = "";//临时文件名称
    var position = 0;
    var size = 40000;//分段大小
    var done = false;
    var fileindex=0;//当前上传文件序列号

    function upload(tempfile) {
        if(position==0)
            done=false;
        var reader = new FileReader();
        if (file.size > position + 40000)
            reader.readAsArrayBuffer(file.slice(position, position + 40000));
        else 
            reader.readAsArrayBuffer(file.slice(position, file.size));
        reader.onload = function (e) {
            if (e.target.readyState === 2) {
                var base64string = base64ArrayBuffer(e.target.result);
                var data = {
                    authenticationCookie: authcookie,
                    dicomData: base64string,
                    fileName: tempfile,
                    status: position==0?"start":"append"
                };
                tempfile = senddata(JSON.stringify(data));
                if (!done) {
                    position += 40000;
                    upload(tempfile);
                    if (position+40000>file.size)
                        done = true;
                }
                else {
                    var data = {
                        authenticationCookie: authcookie,
                        dicomData: "",
                        fileName: tempfile,
                        status: "done"
                    };
                    tempfile = senddata(JSON.stringify(data));
                    position = 0;
                    $("#msg").html($("#msg").html()+"第"+(fileindex+1)+"个文件已经上传完成

"); fileindex += 1; if (fileindex < filelist.length) { file = filelist[fileindex]; upload(tempfile); } else { fileindex = 0; $("#msg").html($("#msg").html() + "文件全部已经上传完成

"); } } } }; } function senddata(data) { var result; $.ajax({ type:"post", url: "http://localhost/MedicalViewerService19/StoreService.svc/UploadDicomImage", data: data, contentType: "application/json", dataType: "json", success: function(data){result= data}, async: false }); return result; } function login() { var auth; var logininfo = { userName: "a", password: "a", userData: "" }; $.ajax({ type: "post", url: "http://localhost/MedicalViewerService19/AuthenticationService.svc/AuthenticateUser", data: JSON.stringify(logininfo), contentType: "application/json", dataType: "text", success: function (data) { auth= data }, async: false }); return auth; } function query() { } function getauthcookie() { document.cookie.split(";").forEach(function (val, index) { var index = val.indexOf("="); if ($.trim(val.substring(0, index)) == "authcookie") { authcookie = $.trim(val.substring(index + 1, val.length)); } }); return ""; } function base64ArrayBuffer(arrayBuffer) { var base64 = ''; var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var bytes = new Uint8Array(arrayBuffer); var byteLength = bytes.byteLength; var byteRemainder = byteLength % 3; var mainLength = byteLength - byteRemainder; var a, b, c, d; var chunk; // Main loop deals with bytes in chunks of 3 for (var i = 0; i < mainLength; i = i + 3) { // Combine the three bytes into a single integer chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; // Use bitmasks to extract 6-bit segments from the triplet a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18 b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12 c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6 d = chunk & 63; // 63 = 2^6 - 1 // Convert the raw binary segments to the appropriate ASCII encoding base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; } // Deal with the remaining bytes and padding if (byteRemainder == 1) { chunk = bytes[mainLength] a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2 // Set the 4 least significant bits to zero b = (chunk & 3) << 4; // 3 = 2^2 - 1 base64 += encodings[a] + encodings[b] + '=='; } else if (byteRemainder == 2) { chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10 b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4 // Set the 2 least significant bits to zero c = (chunk & 15) << 2 // 15 = 2^4 - 1 base64 += encodings[a] + encodings[b] + encodings[c] + '='; } return base64; } script>

6

未发布 一体化建模仿真平台20-sim v4.6.4发布,修复3D动画
by Harriet666 keys 分享 1503567227661
20-sim是一种机电一体化系统的建模和仿真程序。利用20-sim可以像绘制工程方案一样灵活地的键入模型。这些模型能用于仿真和分析多域动态系统的特性,也可以创建控制系统,甚至可以生成C代码并用于快速原型设计和HIL仿真。

【20-sim v4.6最新版点击下载】

一体化建模仿真平台20-sim v4.6.4发布。此版本是一个维护版本,主要修复了以下问题:
3D动画修复:
  • 点角度范围问题。
代码生成修复:
  • 如果子模型采用输入的积分,则直接映射到R(ate) - 变量。
  • FMU中的初始方程不能影响初始状态。
  • 在FMI 1.0主模拟器中运行FMU时发生崩溃。
文档修复:
  • 参考手册:关于'while do'和'reapeat until'的声明不清楚。
  • 参考手册:3D动画窗口中的欧拉角定向(ZXZ而不是XYZ)。
模拟器修复:
  • 在模拟期间关闭20-sim时不保存模型。
  • 编写多个运行结果的数据文件时出现问题(参数扫描)。
  • 未命名节点可以为连续时间块而不是相应的离散块生成指令的问题。
未发布 CAD绘图控件VectorDraw web library (javascript)更新至v7.7014.0.2,在线购买6.6折!
by Harriet666 keys 分享 1513156801275
VectorDraw web library (javascript)是一个矢量图形库,它不仅能打开CAD图纸,而且能显示任何支持HTML5标准平台上的通用矢量对象,如Windows,安卓,iOS和Linux。无需任何安装,VectorDraw web library (javascript)就可以运行在任何支持canvas标签和Javascript的主流浏览器(Chrome, Firefox, Safari, Opera, Dolphin, Boat等等)中。这意味着可以用DXF,DWG,DGN,VDML等多种格式在任何台式、平板电脑,智能手机和便携式笔记本上展现出你的业务。
 
慧都百厂约惠
VectorDraw web library (javascript)6.6折全年最低!
立即购买>>>
 
VectorDraw web library (javascript) v7.7014.0.2更新内容
WebJS
新增需求(7.7014.0.1)
  • 70001215 MergeDocument方法支持使用mergeFlags
漏洞(7.7014.0.1)
  • 70001204 线路对象捕捉无法运作
  • 70001206 导出到vds脚本时出现异常
  • 70001210 WebGl渲染中的实体影线问题
    
Converter
新增需求(7.7014.0.1)
  • 70001217 DGN中unsuported对象的类型
漏洞(7.7014.0.1)
  • 70001212 Textstyle未使用正确的TTF字体导入
    
Engine
新增需求(7.7014.0.1)
  • 60001730 不要从部分剪辑中隐藏手柄
  • 70000019 vdScreenBlock的HitTest返回用户点击的内部块对象
  • 70001186 开始用户动画的操作
  • 70001191 支持3D
  • 70001203 禁用某些触摸屏操作的功能
  • 70001211 支持分机线固定长度
  • 70001214 TextStyle高度覆盖任何尺寸或样式文字高度
  • 70001216 显示屏幕3d导航立方体
  • 70001218 带裁剪的vdInsert的边界框计算不正确
  • 70001228 具有TTF_TEXT标志的线类型,支持ShapeText字符串中的Unicode字符
漏洞(7.7014.0.1)
  • 70001207 GetModel2dProjection无法正常工作
  • 70001208 多行文字引发错误
  • 70001213 vdInsert返回错误的边界框
  • 70001219 透视模式下无法正常工作
  • 70001220 Mtext未显示正确的文本

 近期热门 - 点击最多
  1. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  2. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  3. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  4. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  5. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  6. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
  7. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法
  8. Springboot+Gradle+Mysql+Jpa最简单实例教程
  9. SpringBoot+Spring6入门指南: 使用命令行快速搭建restful web api模板
  10. 如何通过 winax 的 ActiveXObject 或 Excel.Application 往 excel 中插入一张图片

  全端社区 - 最新回复
  1. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  2. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  3. Node.js 打印vite react+go项目目录树
  4. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  5. Windows与Mac通过git ssh和rsync实现文件共享互传
  6. Windows与Mac通过git ssh和scp实现文件共享互传
  7. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  8. 使用PubSub-JS时ReactNative在后台运行一段时间唤醒后,组件无法scribe到publish的事件,typescript实现一个事件订阅发布组件
  9. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  10. ReactNative获取Android/iOS的MAC/IP地址: react-native-device-info模块的安装与使用

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA