首页/文章/ 详情

如果给你的代码加上许可证?

2天前浏览37

声明:这篇看个乐子就行了

代码可以通过多种方式进行使用方面的限制,本篇文章就大概演示一下:通过与Mac地址和时间进行限制

逻辑就是代码跟Mac地址绑定,如果Mac地址正确,代码启动,否则报错提示, 在Mac地址正确的前提下又进行终止时间的判断,到了终止时间,代码运行失败,提示许可证过期,如下图


可以和你代码绑定的内容很多,不止Mac地址,甚至可以是你的声卡设备

如果遇到某些判断复杂的场景,那就可以列一下思维导图,帮你理下逻辑

在演示代码前,给大家先来个操作就是打开Hypermesh时,运行相关tcl代码,有两种方法

方法一:通过bat文件进行hm界面的启动,顺便在启动时直接运行tcl文件,工作目录会自动设置为你放bat文件的路径下,不建议放在桌面,因为启动时候会产生一系列的文件,比较乱





set dir="G:\Program Files\Altair\2022.3\hwdesktop\hw\bin\win64\hw.exe"set file="C:\Users\Administrator\Desktop\encrypted.tcl"%dir% -clientconfig hwfepre.dat -tcl %file%pause

方法二:右击Hypermesh图标,点击属性,如下图设置

在目标那边加上-tcl "代码路径",默认是有写/clientconfig hwfepre.dat,这段话的意思就是加载hypermesh的启动配置,不写的话,打开hw.exe直接就是hyperview的界面,起始位置的话你就直接可以理解为工作目录,也就是Hypermesh下面输入pwd得到的那个路径

如果不想启动hm的GUI,也就是说在不打开hm界面的情况下运行tcl程序,那就在bat中写上如下内容,毕竟这两种方式会使运行效率差了十万八千里





set dir="G:\Program Files\Altair\2022.3\hwdesktop\hm\bin\win64\hmbatch.exe"set file="C:\Users\Administrator\Desktop\encrypted.tcl"%dir% -b -tcl %file%pause

相关代码呈上,请各位老爷品鉴






#获取当前电脑时间set time [clock format [clock seconds] -format "%Y%m%d %H%M%S"] #设置到期时间set bigTime [lindex $time 0]set smallTime [lindex $time 1]set expireBigTime 20241030set expireSmallTime 235959#获取当前电脑Mac地址set mac [lindex [exec wmic nic get MacAddress] 1]
#程序,在工作目录下创建一个log.txt文件,里面写上相关内容proc test {type txt} {  set filename log.txt  if {[file exists $filename]} {    set fd [open $filename a]    close $fd  }  set fd [open $filename w]  puts $fd "$type $txt"  close $fd}
#判断Mac地址是否正确,正确的话再判断是否在终止时间内,再运行test的程序,否则直接报错# 代码运行成功后,会在工作目录下产生一个log.txt文件,里面写上代码的运行结果,运行失败后,会在打开hypermesh的界面弹出窗口# Your Computer have invalid Permessionif {$mac == "DC:53:60:18:1E:65"} {  if {$bigTime == $expireBigTime} {   if {$smallTime <= $expireSmallTime} {    test \[info] " 代码启动成功 "     } else {    tk_messageBox -icon "error" -message "Your Computer have invalid Permession"    test \[error] " 小许可证已过期 "     }  } elseif {$bigTime < $expireBigTime} {      test \[info] " 代码启动成功 "    } else {      tk_messageBox -icon "error" -message "Your Computer have invalid Permession"      test \[error] "大许可证已过期"      }    } else {  tk_messageBox -icon "error" -message "Mac地址错误,请联系管理员"  test \[error]  "联系管理员提供正确的Mac地址"}

运行结果如下,分别对应四种情况:

四十行代码如果加密后,竟然成了一百八十多行,神奇,最近在沉迷二开的知识,Dyna还没空写~~~


来源:CAE中学生
HyperMeshHyperViewAltair
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-11-02
最近编辑:2天前
CAE无剑
硕士 | 仿真工程师 CAE中学生
获赞 679粉丝 1496文章 248课程 0
点赞
收藏
作者推荐

听说Hypermesh可以自动画球的六面体网格了?

众所周知,当然你也可以不知,哈哈,目前我知道的球的六面体网格有三种画法,文章中所述的应该属于较难的那种,各种切分,合并,然后使得模型形成可映射的结构,所以球的六面体网格在hm中对于新手而言是一个很不错的练习项声明:1、如果你是用这个代码只为了来生成球的六面体网格做分析用,我个人建议去Lsdyna的前后处理软件LS-prepost里面直接一键生成个球网格,这个网格很漂亮,导出K文件即可2、如果没有安装Lsdyna没关系,用ANSYSWorkbench也可以设置多区网格划分方法生成质量不错的球3、如果没有安装ANSYS,那就用我写的代码生成吧,毕竟Hypermesh画个漂亮的球六面体网格挺费劲这个代码中有几个问题,我懒得改了,正在学习hm二开的读者可以一试1、这个运行时候只能新建一个hm文件,如果使用存在comp的文件会报错,这个是因为我写的时候没有判断是否存在comp,正式写程序的时候首要就是要判断2、如果在一个hm文件中生成2次不同半径的球网格也会报错,因为我在留下八分之一的球几何时候是通过Solid的ID来的,正常要通过坐标来定位到要留下的Solid3、我使用不同的Hypermesh版本试了一下这个代码的网格生成能力,发现14版本和2022版本生成的球网格很规整,雅可比高,网格质量不错,但是用2022.3版本发现网格生成的雅可比较低,可能是基础的网格算法会有些差异最后,代码共享出来也欢迎学Hypermesh二次开发的伙伴一起交流,共同进步,后面慢慢转到Dyna上在Hypermesh2022版本生成的效果如下:代码不长,你以为我只为了给你生成个球网格?#1、创建000点建立球#2、按照000点进行切分,留下1/8球体#3、给留下的球体的每个边创建一个中点#4、使用创建正方形命令,创建方块,然后进行布尔运算#5、根据正方形的定点找到线,然后判断线是否为共享边,把不是共享边的选中#6、根据选中的线,以及两个方向矢量去切分,共切三次#7、切分之后把切分成的体,根据node的位置找到,两两合并#8、六面体网格划分并镜像#9、删除2D网格,清除临时节点#**************************#hm_measureshortestdistance2-50-5nodes100#*createmarklines1&quot;bypoints&quot;#hm_measureshortestdistance2-50-5points100#hm_writeviewcommands0#hm_highlightmarklines1&quot;h&quot;#hm_entityinfomaxidsolids#hm_latestentityidcomps#**************************namespaceeval::Model::MeshCreate{}proc::Model::MeshCreate::Sphere3DMesh{radiusmeshsize}{setoriginPoint&quot;000&quot;settol0.1*fixedpointhandle1setSphereCompName&quot;Sphere_radius@$radius\mm&quot;foreach{xyz}$originPoint{}#*createnode$x$y$z#正方形的三个点setPoint1&quot;[expr($radius/2)]$y$z&quot;setPoint2&quot;$x$y[expr($radius/2)]&quot;setPoint3&quot;$x[expr($radius/2)]$z&quot;*createentitycompsname=$SphereCompName#setSphereCompName[hm_getvaluecompsid=[hm_latestentityidcomps]dataname=name]#setSphereCompName[*setvaluecompsname=$SphereCompNamename=Sphere_radius@$radius\mm]*solidspherefull$x$y$z$radiusputs&quot;==========================SphereCreateisDone!========================&quot;#沿着XYZ分别切分*createmarksolids1&quot;bycompsname&quot;$SphereCompName*createplane1010$x$y$z*body_splitmerge_with_planesolids11*createmarksolids1&quot;bycompsname&quot;$SphereCompName*createplane1100$x$y$z*body_splitmerge_with_planesolids11*createmarksolids1&quot;bycompsname&quot;$SphereCompName*createplane1001$x$y$z*body_splitmerge_with_planesolids11#留下1/8球体setretin[hm_entityinfomaxidsolids]*createmarksolids1&quot;bycompsname&quot;$SphereCompNamehm_markremovesolids1$retinsetremove[hm_getmarksolids1]*createmarksolids1{*}$remove*deletesolidswithelems101puts&quot;==========================1/8ModelisDone!========================&quot;#单独显示球的comp*createmarkcomponents2$SphereCompName*createstringarray2&quot;elements_on&quot;&quot;geometry_on&quot;*isolateentitybymark212#建立正方形#*createmarklines1&quot;displayed&quot;#*nodecreateonlineslines1100foreach{x1y1z1}$Point1{}foreach{x2y2z2}$Point2{}foreach{x3y3z3}$Point3{}*solidblock$x$y$z$x1$y1$z1$x2$y2$z2$x3$y3$z3puts&quot;==========================BlockCreateisDone!========================&quot;setBlockID[hm_latestentityidsolids]#布尔求差*createmarksolids1$retin*createmarksolids2$BlockID*boolean_merge_solids12141setBlockID[hm_latestentityidsolids]#切割setPoint4&quot;[expr($radius/2)][expr($radius/2)]$z&quot;setPoint5&quot;$x[expr($radius/2)][expr($radius/2)]&quot;setPoint6&quot;[expr($radius/2)]$y[expr($radius/2)]&quot;foreach{x4y4z4}$Point4{}foreach{x5y5z5}$Point5{}foreach{x6y6z6}$Point6{}*createmarkpoints1&quot;displayed&quot;setPoint4_id[lindex[hm_measureshortestdistance2$x4$y4$z4points100]4]setPoint5_id[lindex[hm_measureshortestdistance2$x5$y5$z5points100]4]setPoint6_id[lindex[hm_measureshortestdistance2$x6$y6$z6points100]4]setPointsid[list$Point4_id$Point5_id$Point6_id]setLineUseful[list]#筛选出3根用来切割的直线foreachPointid$Pointsid{*createmarklines1&quot;bypoints&quot;$PointidsetLinelist[hm_getmarklines1]foreachLine$Linelist{setline_type[hm_getlinetype$Line]if{$line_type==2}{lappendLineUseful$Line}}}#puts$LineUsefulsetCutLine1[lindex$LineUseful0]setCutLine2[lindex$LineUseful1]setCutLine3[lindex$LineUseful2]*createmarklines1$CutLine1$CutLine2$CutLine3*linefromsurfedgecomplines10setCutLine1[hm_latestentityidlines2]setCutLine2[hm_latestentityidlines1]setCutLine3[hm_latestentityidlines0]#找到三根最长的弧线*createmarklines1&quot;displayed&quot;setline_ids[hm_getmarklines1]setCurve[list]foreachline_id$line_ids{*createmarklines1$line_idsetconfig[catch{*createbestcirclecenternodelines1010}res]#config为0说明为弧线if{$config==0}{lappendCurve$line_id}}*createmarklines1{*}$Curve*nodecreateonlineslines1100#找到三根线上新建立的节点*createmarknodes1&quot;displayed&quot;setnode1_id[lindex[hm_measureshortestdistance2$x4$y4$z4nodes100]4]setnode2_id[lindex[hm_measureshortestdistance2$x5$y5$z5nodes100]4]setnode3_id[lindex[hm_measureshortestdistance2$x6$y6$z6nodes100]4]setnodeCoordValue[lindex[hm_nodevalue$node1_id]00]#隐藏正方形块*createmarksolids1$BlockID*maskentitymarksolids10#切分球体*createmarksolids1&quot;displayed&quot;*createmarklines1$CutLine2*createvector1$nodeCoordValue$nodeCoordValue0*body_split_with_swept_linessolids11103*createmarksolids1&quot;displayed&quot;*createmarklines1$CutLine1*createvector10$nodeCoordValue$nodeCoordValue*body_split_with_swept_linessolids11103*createmarksolids1&quot;displayed&quot;*createmarklines1$CutLine3*createvector1$nodeCoordValue0$nodeCoordValue*body_split_with_swept_linessolids11103#开始合并切分的solidsettest1Point&quot;$tol[expr$radius+$tol]0&quot;settest2Point&quot;0[expr$radius+$tol]$tol&quot;settest3Point&quot;0$tol[expr$radius+$tol]&quot;settest4Point&quot;$tol0[expr$radius+$tol]&quot;settest5Point&quot;[expr$radius+$tol]$tol0&quot;settest6Point&quot;[expr$radius+$tol]0$tol&quot;foreach{x7y7z7}$test1Point{}foreach{x8y8z8}$test2Point{}foreach{x9y9z9}$test3Point{}foreach{x10y10z10}$test4Point{}foreach{x11y11z11}$test5Point{}foreach{x12y12z12}$test6Point{}setTestPoints_A[list$test1Point$test3Point$test5Point]setTestPoints_B[list$test2Point$test4Point$test6Point]foreachA$TestPoints_AB$TestPoints_B{foreach{A_xA_yA_z}$A{}foreach{B_xB_yB_z}$B{}*createmarksolids1&quot;displayed&quot;setMergesolid1[lindex[hm_measureshortestdistance2$A_x$A_y$A_zsolids100]4]setMergesolid2[lindex[hm_measureshortestdistance2$B_x$B_y$B_zsolids100]4]*createmarksolids1$Mergesolid1*createmarksolids2$Mergesolid2*boolean_merge_solids12143*clearmarksolids1;*clearmarksolids2;}puts&quot;==========================SplitsisDone!========================&quot;#划分网格*createmarksurfaces1&quot;onplane&quot;$x4$y4$z40010.0110*appendmarksurfaces1&quot;onplane&quot;$x6$y6$z60100.0110*appendmarksurfaces1&quot;onplane&quot;$x5$y5$z51000.0110setsurf[hm_getmarksurfs1]#puts$surf*setedgedensitylinkwithaspectratio0*defaultmeshsurf1$meshsize2120101*createmarksolids1&quot;bycompsname&quot;$SphereCompName*solidmap_solids_begin1829568$meshsize*solidmap_solids_end#沿X轴镜像*createmarkelements1&quot;bycompsname&quot;$SphereCompName*duplicateentitieselements12*createplane1100$x$y$z*reflectmarkwithoptionelements210*clearmarkelems1;*clearmarkelems2;#沿y轴镜像*createmarkelements1&quot;bycompsname&quot;$SphereCompName*duplicateentitieselements12*createplane1010$x$y$z*reflectmarkwithoptionelements210*clearmarkelems1;*clearmarkelems2;#沿z轴镜像*createmarkelements1&quot;bycompsname&quot;$SphereCompName*duplicateentitieselements12*createplane1001$x$y$z*reflectmarkwithoptionelements210*clearmarkelems1;*clearmarkelems2;puts&quot;==========================MirrorisDone!========================&quot;#删除2D网格catch{*createmarkelems1&quot;byconfig&quot;quad4tria3*deletemarkelements1}puts&quot;==========================2DMeshDeleteisDone!========================&quot;#清除临时节点*nodecleartempmarkputs&quot;==========================TempNodesClearisDone!========================&quot;#网格共节点*createmarkcomponents1$SphereCompName*equivalencecomponents10.011000hm_markclearall1;hm_markclearall2puts&quot;==========================3DMeshisDone!========================&quot;*window00000}setradius10setmeshsize1proc::Model::MeshCreate::GUI{args}{catch{destroy.window};setTitleSphere_MeshsetNewframe[frame.window]hm_frameworkaddpanel$Newframe$Titlehm_frameworkdrawpanel$Newframesetlable1[labelframe$Newframe.lable1-text&quot;Sphere3DMesh&quot;-bd2-fonthwtkBoldFont-fgred]grid$lable1-row1-column0-stickynsewsetradius_lbl[hwtk::label$lable1.radius_lbl-text&quot;Sphereradius:&quot;]setmeshSize_lbl[hwtk::label$lable1.meshSize_lbl-text&quot;MeshSize:&quot;]setradius_ent[hwtk::entry$lable1.radius_ent-textvariableradius-width10]setmeshSize[hwtk::entry$lable1.meshSize-textvariablemeshsize-width10]grid$radius_lbl-row1-column1-padx5-pady5grid$meshSize_lbl-row2-column1-padx5-pady5-stickynsewgrid$radius_ent-row1-column2-padx5-pady5grid$meshSize-row2-column2-padx5-pady5grid[ttk::button$lable1.runbtn-text&quot;Run&quot;-command{::Model::MeshCreate::Sphere3DMesh$radius$meshsize}\-width10]-row1-column3-rowspan30-padx5-pady5-stickyns}::Model::MeshCreate::GUI来源:CAE中学生

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈