當前位置:首頁 » 軟體設計 » 結構設計插件

結構設計插件

發布時間: 2021-03-01 08:54:20

A. tssd探索者結構設計用什麼插件顯示配筋

軟體名稱:配筋助手,即FoolEngineer
注意本軟體只能再CAD2008以下的版本中使用,原因很簡單,作者沒有繼續做後面版本的了。
網上有破解版。
希望回答對你有幫助!

B. 土木工程結構設計用哪種版本的CAD好

都挺好用啊 現在2008的多一點吧 08版比05版多了很多人性化的命令!

C. 如何設計插件式結構的程序,兼談Python語言

為了擴充軟體的功能,通常我們會把軟體設計成插件式結構。Python這樣的動態語言天生就支持插件式編程。與C++相比,Python已經定義好模塊的介面,想要載入一個插件,一個__import__()就能很輕松地搞定。不需要特定的底層知識。而且與C++等靜態語言相比,Python的插件式結構更顯靈活。因為插件載入後,可以利用Python語言的動態性,充分地修改核心的邏輯。
簡單地說一個__import__()可能不大清楚。現在就來看一個最簡單的插件式結構程序。它會掃描plugins文件夾下的所有.py文件。然後把它們載入。
#-*- encoding: utf-8 -*-#main1.pyimport osclass Platform:
def __init__(self):
self.loadPlugins()

def sayHello(self, from_):
print "hello from %s." % from_

def loadPlugins(self):
for filename in os.listdir("plugins"):
if not filename.endswith(".py") or filename.startswith("_"):
continue
self.runPlugin(filename)

def runPlugin(self, filename):
pluginName=os.path.splitext(filename)[0]
plugin=__import__("plugins."+pluginName, fromlist=[pluginName])
#Errors may be occured. Handle it yourself.
plugin.run(self)if __name__=="__main__":
platform=Platform()

然後在plugins子目錄裡面放入兩個文件:
#plugins1.pydef run(platform):
platform.sayHello("plugin1")#plugins2.pydef run(platform):
platform.sayHello("plugin2")

再創建一個空的__init__.py在plugins文件夾裡面。從package裡面導入模塊的時候,Python要求一個__init__.py。
運行main1.py,看一下運行的結果。首先是列印一下文件夾結構方便大家理解:
h:\projects\workon\testplugins>tree /f /a
卷 Data 的文件夾 PATH 列表
卷序列號為 ****-****
H:.
| main1.py
|
\---plugins
plugin1.py
plugin2.py
__init__.py

h:\projects\workon\testplugins>main1.py
hello from plugin1.
hello from plugin2.

一般地,載入插件前要首先掃描插件,然後依次載入並運行插件。我們上面的示常式序main1.py也是如此,分為兩個函數。第一個loadPlugins()掃描插件。它把plugins目錄下面所有.py的文件除了__init__.py都當成插件。runPlugin()載入並運行插件。其中兩個關鍵:使用__import__()函數把插件當成模塊導入,它要求所有的插件都定義一個run()函數。各種語言實現的插件式結構其實也基本上分為這兩個步驟。所不同的是,Python語言實現起來更加的簡潔。
或許聽起來還有點玄奧。詳細地說一下__import__()。它和常見的import語句很相似,只不過換成函數形式並且返回模塊以供調用。import mole相當於__import__("mole"),from mole import func相當於__import__("mole", fromlist=["func"]),不過與想像有點不同,import package.mole相當於__import__("package.mole", fromlist=["mole"])。
如何調用插件一般有個約定。像我們這里就約定每個插件都實現一個run()。有時候還可以約定實現一個類,並且要求這個類實現某個管理介面,以方便核心隨時啟動、停止插件。要求所有的插件都有這幾個介面方法:
#interfaces.pyclass Plugin:
def setPlatform(self, platform):
self.platform=platform

def start(self):
pass

def stop(self):
pass

想要運行這個插件,我們的runPlugin()要改一改,另外增加一個shutdown()來停止插件:
class Platform:
def __init__(self):
self.plugins=[]
self.loadPlugins()

def sayHello(self, from_):
print "hello from %s." % from_

def loadPlugins(self):
for filename in os.listdir("plugins"):
if not filename.endswith(".py") or filename.startswith("_"):
continue
self.runPlugin(filename)

def runPlugin(self, filename):
pluginName=os.path.splitext(filename)[0]
plugin=__import__("plugins."+pluginName, fromlist=[pluginName])
clazz=plugin.getPluginClass()
o=clazz()
o.setPlatform(self)
o.start()
self.plugins.append(o)

def shutdown(self):
for o in self.plugins:
o.stop()
o.setPlatform(None)
self.plugins=[]if __name__=="__main__":
platform=Platform()
platform.shutdown()

插件改成這樣:
#plugins1.pyclass Plugin1:
def setPlatform(self, platform):
self.platform=platform

def start(self):
self.platform.sayHello("plugin1")

def stop(self):
self.platform.sayGoodbye("plugin1")def getPluginClass():
return Plugin1#plugins2.pydef sayGoodbye(self, from_):
print "goodbye from %s." % from_class Plugin2:
def setPlatform(self, platform):
self.platform=platform
if platform is not None:
platform.__class__.sayGoodbye=sayGoodbye

def start(self):
self.platform.sayHello("plugin2")

def stop(self):
self.platform.sayGoodbye("plugin2")def getPluginClass():
return Plugin2

運行結果:
h:\projects\workon\testplugins>main.py
hello from plugin1.
hello from plugin2.
goodbye from plugin1.
goodbye from plugin2.

詳細觀察的朋友們可能會發現,上面的main.py,plugin1.py, plugin2.py幹了好幾件令人驚奇的事。
首先,plugin1.py和plugin2.py裡面的插件類並沒有繼承自interfaces.Plugin,而platform仍然可以直接調用它們的start()和stop()方法。這件事在Java、C++裡面可能是件麻煩的事情,但是在Python裡面卻是件稀疏平常的事,彷彿吃飯喝水一般正常。事實上,這正是Python鼓勵的約定編程。Python的文件介面協議就只規定了read(), write(), close()少數幾個方法。多數以文件作為參數的函數都可以傳入自定義的文件對象,只要實現其中一兩個方法就行了,而不必實現一個什麼FileInterface。如果那樣的話,需要實現的函數就多了,可能要有十幾個。
再仔細看下來,getPluginClass()可以把類型當成值返回。其實不止是類型,Python的函數、模塊都可以被當成普通的對象使用。從類型生成一個實例也很簡單,直接調用clazz()就創建一個對象。不僅如此,Python還能夠修改類型。上面的例子我們就演示了如何給Platform增加一個方法。在兩個插件的stop()裡面我們都調用了sayGoodbye(),但是仔細觀察Platform的定義,裡面並沒有定義。原理就在這里:
#plugins2.pydef sayGoodbye(self, from_):
print "goodbye from %s." % from_class Plugin2:
def setPlatform(self, platform):
self.platform=platform
if platform is not None:
platform.__class__.sayGoodbye=sayGoodbye

這里首先通過platform.__class__得到Platform類型,然後Platform.sayGoodbye=sayGoodbye新增了一個方法。使用這種方法,我們可以讓插件任意修改核心的邏輯。這正在文首所說的Python實現插件式結構的靈活性,是靜態語言如C++、Java等無法比擬的。當然,這只是演示,我不大建議使用這種方式,它改變了核心的API,可能會給其它程序員造成困惑。但是可以採用這種方式替換原來的方法,還可以利用「面向切面編程」,增強系統的功能。
接下來我們還要再改進一下載入插件的方法,或者說插件的布署方法。前面我們實現的插件體系主要的缺點是每個插件只能有一個源代碼。如果想附帶一些圖片、聲音數據,又怕它們會和其它的插件沖突。即使不沖突,下載時分成單獨的文件也不方便。最好是把一個插件壓縮成一個文件供下載安裝。
Firefox是一個支持插件的著名軟體。它的插件以.xpi作為擴展名,實際上是一個.zip文件,裡麵包含了javascript代碼、數據文件等很多內容。它會把插件包下載復制並解壓到%APPDATA%\Mozilla\Firefox\Profiles\XXXX.default\extensions裡面,然後調用其中的install.js安裝。與此類似,實用的Python程序也不大可能只有一個源代碼,也要像Firefox那樣支持.zip包格式。
實現一個類似於Firefox那樣的插件布署體系並不會很難,因為Python支持讀寫.zip文件,只要寫幾行代碼來做壓縮與解壓縮就行了。首先要看一下zipfile這個模塊。用它解壓縮的代碼如下:
import zipfile, osdef installPlugin(filename):
with zipfile.ZipFile(filename) as pluginzip:
subdir=os.path.splitext(filename)[0]
topath=os.path.join("plugins", subdir)
pluginzip.extractall(topath)

ZipFile.extractall()是Python 2.6後新增的函數。它直接解壓所有壓縮包內的文件。不過這個函數只能用於受信任的壓縮包。如果壓縮包內包含了以/或者盤符開始的絕對路徑,很有可能會損壞系統。推薦看一下zipfile模塊的說明文檔,事先過濾非法的路徑名。
這里只有解壓縮的一小段代碼,安裝過程的界面交互相關的代碼很多,不可能在這里舉例說明。我覺得UI是非常考驗軟體設計師的部分。常見的軟體會要求用戶到網站上查找並下載插件。而Firefox和KDE提供了一個「組件(部件)管理界面」,用戶可以直接在界面內查找插件,查看它的描述,然後直接點擊安裝。安裝後,我們的程序遍歷插件目錄,載入所有的插件。一般地,軟體還需要向用戶提供插件的啟用、禁用、依賴等功能,甚至可以讓用戶直接在軟體界面上給插件評分,這里就不再詳述了。
有個小技巧,安裝到plugins/subdir下的插件可以通過__file__得到它自己的絕對路徑。如果這個插件帶有圖片、聲音等數據的時候,可以利用這個功能載入它們。比如上面的plugin1.py這個插件,如果它想在啟動的時候播放同目錄的message.wav,可以這樣子:
#plugins1.pyimport osdef alert():
soundFile=os.path.join(os.path.dirname(__file__), "message.wav")
try:
import winsound
winsound.PlaySound(soundFile, winsound.SND_FILENAME)
except (ImportError, RuntimeError):
passclass Plugin1:
def setPlatform(self, platform):
self.platform=platform

def start(self):
self.platform.sayHello("plugin1")
alert()

def stop(self):
self.platform.sayGoodbye("plugin1")def getPluginClass():
return Plugin1

接下來我們再介紹一種Python/Java語言常用的插件管理方式。它不需要事先有一個插件解壓過程,因為Python支持從.zp文件導入模塊,很類似於Java直接從.jar文件載入代碼。所謂安裝,只要簡單地把插件復制到特定的目錄即可,Python代碼自動掃描並從.zip文件內載入代碼。下面是一個最簡單的例子,它和上面的幾個例子一樣,包含一個main.py,這是主程序,一個plugins子目錄,用於存放插件。我們這里只有一個插件,名為plugin1.zip。plugin1.zip有以下兩個文件,其中description.txt保存了插件內的入口函數和插件的名字等信息,而plugin1.py是插件的主要代碼:
description.txt
plugin1.py

其中description.txt的內容是:
[general]name=plugin1description=Just a test code=plugin1.Plugin1

plugin1.py與前面的例子類似,為了省事,我們去掉了stop()方法,它的內容是:
class Plugin1:
def setPlatform(self, platform):
self.platform=platform

def start(self):
self.platform.sayHello("plugin1")

重寫的main.py的內容是:
# -*- coding: utf-8 -*-import os, zipfile, sys, ConfigParserclass Platform:
def __init__(self):
self.loadPlugins()

def sayHello(self, from_):
print "hello from %s." % from_

def loadPlugins(self):
for filename in os.listdir("plugins"):
if not filename.endswith(".zip"):
continue
self.runPlugin(filename)

def runPlugin(self, filename):
pluginPath=os.path.join("plugins", filename)
pluginInfo, plugin = self.getPlugin(pluginPath)
print "loading plugin: %s, description: %s" % \ (pluginInfo["name"], pluginInfo["description"])
plugin.setPlatform(self)
plugin.start()

def getPlugin(self, pluginPath):
pluginzip=zipfile.ZipFile(pluginPath, "r")
description_txt=pluginzip.open("description.txt")
parser=ConfigParser.ConfigParser()
parser.readfp(description_txt)
pluginInfo={}
pluginInfo["name"]=parser.get("general", "name")
pluginInfo["description"]=parser.get("general", "description")
pluginInfo["code"]=parser.get("general", "code")

sys.path.append(pluginPath)
moleName, pluginClassName=pluginInfo["code"].rsplit(".", 1)
mole=__import__(moleName, fromlist=[pluginClassName, ])
pluginClass=getattr(mole, pluginClassName)
plugin=pluginClass()
return pluginInfo, pluginif __name__=="__main__":
platform=Platform()

與前一個例子的主要不同之處是getPlugin()。它首先從.zip文件內讀取描述信息,然後把這個.zip文件添加到sys.path裡面。最後與前面類似地導入模塊並執行。
解壓還是不解壓,兩種方案各有優劣。一般地,把.zip文件解壓到獨立的文件夾內需要一個解壓縮過程,或者是人工解壓,或者是由軟體解壓。解壓後的運行效率會高一些。而直接使用.zip包的話,只需要讓用戶把插件復制到特定的位置即可,但是每次運行的時候都需要在內存裡面解壓縮,效率降低。另外,從.zip文件讀取數據總是比較麻煩。推薦不包含沒有數據文件的時候使用。
閱讀全文

D. 結構設計插件有那麼重要嗎

【結構抄設計師】
插件和許多的小軟體都襲是為了提高效率,帶來幫助,而不能從本質上改變什麼。
本質還是要自己過硬啊。
沒必要急著學習這些東西,等到用的時候慢慢自然而然就信守拿來了。
就像播種,你可以用手播種,也可以用播種機。但是你至少自己應該知道是春天播種還是冬天播種。
你既然已經來了設計院了,材料力學暫時可以放下。重點看鋼混。結構力學把握基本知識就夠了,超靜定計算不用管,那都是軟體替你做的工作。你以後的重點是看規范看圖集,上學時候的那些基本理論有很多都是PKPM內部解決的。建議你開始看:
1.11G101-1,11G1010-2,11G101-3
2.混凝土規范
3.抗震規范
這是重中之重,比你看材料力學,結構力學,鋼混重要地多。

E. 有哪些好用的結構設計小軟體或插件

理正,板王,配筋助手,morgain等等

F. 求AutoCAD鋼結構詳圖設計插件。CAD工具欄里顯示鋼結構詳圖設計,請問這個插件或者軟體叫什麼名稱多謝!

「探索者」有類似功能,看不清你的圖
視頻出自「pkpm」專輯,按理說應該是pkpm軟體了。不過我只是用pkpm設計,沒這樣畫過圖,好像pkpm確實有畫圖的功能。

G. 請大家介紹幾個比較好的CAD插件,做土木建築和鋼結構用的

天正來建自築8.0
http://www.tangent.com.cn/ydown/list.php

探索者 TSSD2006

http://58.251.57.206/down1?cid=&t=2&fmt=&usrinput=tssd2006&dt=2002000

H. 現在的結構設計軟體除了pkpm,探索者以外還有什麼軟體相對智能些,安裝方便些

這么說吧,結構計算主要是PKPM\YJK\SAP2000\MIDAS等,結構施工圖老的主要是探索者,後起之秀是GICD(好處是基於bim,並智能),當然還有一些小插件的軟體,如老虎板王(主要處理板)

I. 求SOLIDWORKS鋼結構設計插件

點擊菜單工具>插件如果你安裝geomagic,圖中就會顯示其名稱,選擇左右兩側的空格,確定即可。

熱點內容
美發店認證 發布:2021-03-16 21:43:38 瀏覽:443
物業糾紛原因 發布:2021-03-16 21:42:46 瀏覽:474
全國著名不孕不育醫院 發布:2021-03-16 21:42:24 瀏覽:679
知名明星確診 發布:2021-03-16 21:42:04 瀏覽:14
ipad大專有用嗎 發布:2021-03-16 21:40:58 瀏覽:670
公務員協議班值得嗎 發布:2021-03-16 21:40:00 瀏覽:21
知名書店品牌 發布:2021-03-16 21:39:09 瀏覽:949
q雷授權碼在哪裡買 發布:2021-03-16 21:38:44 瀏覽:852
圖書天貓轉讓 發布:2021-03-16 21:38:26 瀏覽:707
寶寶水杯品牌 發布:2021-03-16 21:35:56 瀏覽:837