Merge remote-tracking branch 'upstream/master' into PathArea
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -14,6 +14,9 @@ ENDIF(DOCDIR)
|
||||
|
||||
add_definitions(-DBOOST_${Boost_VERSION})
|
||||
|
||||
#if you want to use the old DAG structure uncomment this line
|
||||
add_definitions(-DUSE_OLD_DAG)
|
||||
|
||||
#write relevant cmake variables to a file for later access with python. Exportet are all variables
|
||||
#starting with BUILD. As the variable only exists if the user set it to ON a dict is useless, we
|
||||
#use a python list for export.
|
||||
|
||||
+169
-31
@@ -58,11 +58,17 @@ recompute path. Also enables more complicated dependencies beyond trees.
|
||||
# include <bitset>
|
||||
#endif
|
||||
|
||||
#include <boost/graph/adjacency_list.hpp>
|
||||
#include <boost/graph/subgraph.hpp>
|
||||
#include <boost/graph/graphviz.hpp>
|
||||
|
||||
#ifdef USE_OLD_DAG
|
||||
#include <boost/graph/topological_sort.hpp>
|
||||
#include <boost/graph/depth_first_search.hpp>
|
||||
#include <boost/graph/dijkstra_shortest_paths.hpp>
|
||||
#include <boost/graph/visitors.hpp>
|
||||
#include <boost/graph/graphviz.hpp>
|
||||
#endif //USE_OLD_DAG
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
#include <unordered_set>
|
||||
@@ -138,15 +144,17 @@ struct DocumentP
|
||||
DocumentObject* activeObject;
|
||||
Transaction *activeUndoTransaction;
|
||||
int iTransactionMode;
|
||||
std::map<Vertex,DocumentObject*> vertexMap;
|
||||
bool rollback;
|
||||
bool undoing; ///< document in the middle of undo or redo
|
||||
std::bitset<32> StatusBits;
|
||||
int iUndoMode;
|
||||
unsigned int UndoMemSize;
|
||||
unsigned int UndoMaxStackSize;
|
||||
#ifdef USE_OLD_DAG
|
||||
DependencyList DepList;
|
||||
std::map<DocumentObject*,Vertex> VertexObjectList;
|
||||
std::map<Vertex,DocumentObject*> vertexMap;
|
||||
#endif //USE_OLD_DAG
|
||||
|
||||
DocumentP() {
|
||||
activeObject = 0;
|
||||
@@ -211,7 +219,7 @@ void Document::exportGraphviz(std::ostream& out) const
|
||||
{
|
||||
/* Typedefs for a graph with graphviz attributes */
|
||||
typedef std::map<std::string, std::string> GraphvizAttributes;
|
||||
typedef subgraph< adjacency_list<vecS, vecS, directedS,
|
||||
typedef boost::subgraph< adjacency_list<vecS, vecS, directedS,
|
||||
property<vertex_attribute_t, GraphvizAttributes>,
|
||||
property<edge_index_t, int, property<edge_attribute_t, GraphvizAttributes> >,
|
||||
property<graph_name_t, std::string,
|
||||
@@ -1667,6 +1675,7 @@ std::vector<App::DocumentObject*> Document::getInList(const DocumentObject* me)
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef USE_OLD_DAG
|
||||
namespace boost {
|
||||
// recursive helper function to get all dependencies
|
||||
void out_edges_recursive(const Vertex& v, const DependencyList& g, std::set<Vertex>& out)
|
||||
@@ -1752,32 +1761,11 @@ Document::getDependencyList(const std::vector<App::DocumentObject*>& objs) const
|
||||
ary.push_back(VertexMap[*it]);
|
||||
return ary;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Signal that object identifiers, typically a property or document object has been renamed.
|
||||
*
|
||||
* This function iterates through all document object in the document, and calls its
|
||||
* renameObjectIdentifiers functions.
|
||||
*
|
||||
* @param paths Map with current and new names
|
||||
*/
|
||||
|
||||
void Document::renameObjectIdentifiers(const std::map<App::ObjectIdentifier, App::ObjectIdentifier> &paths)
|
||||
{
|
||||
std::map<App::ObjectIdentifier, App::ObjectIdentifier> extendedPaths;
|
||||
|
||||
std::map<App::ObjectIdentifier, App::ObjectIdentifier>::const_iterator it = paths.begin();
|
||||
while (it != paths.end()) {
|
||||
extendedPaths[it->first.canonicalPath()] = it->second.canonicalPath();
|
||||
++it;
|
||||
}
|
||||
|
||||
for (std::vector<DocumentObject*>::iterator it = d->objectArray.begin(); it != d->objectArray.end(); ++it)
|
||||
(*it)->renameObjectIdentifiers(extendedPaths);
|
||||
}
|
||||
#endif
|
||||
|
||||
void Document::_rebuildDependencyList(void)
|
||||
{
|
||||
#ifdef USE_OLD_DAG
|
||||
d->VertexObjectList.clear();
|
||||
d->DepList.clear();
|
||||
// Filling up the adjacency List
|
||||
@@ -1807,15 +1795,64 @@ void Document::_rebuildDependencyList(void)
|
||||
add_edge(d->VertexObjectList[It->second],d->VertexObjectList[*It2],d->DepList);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Document::recompute()
|
||||
#ifndef USE_OLD_DAG
|
||||
std::vector<App::DocumentObject*> Document::getDependencyList(const std::vector<App::DocumentObject*>& objs) const
|
||||
{
|
||||
std::vector<App::DocumentObject*> dep;
|
||||
for (auto obj : objs){
|
||||
if(!obj)
|
||||
continue;
|
||||
std::vector<App::DocumentObject*> objDep = obj->getOutListRecursive();
|
||||
dep.insert(dep.end(), objDep.begin(), objDep.end());
|
||||
dep.push_back(obj);
|
||||
}
|
||||
|
||||
// remove duplicate entries and resize the vector
|
||||
std::sort(dep.begin(), dep.end());
|
||||
auto newEnd = std::unique(dep.begin(), dep.end());
|
||||
dep.resize(std::distance(dep.begin(), newEnd));
|
||||
|
||||
return dep;
|
||||
}
|
||||
#endif // USE_OLD_DAG
|
||||
|
||||
|
||||
/**
|
||||
* @brief Signal that object identifiers, typically a property or document object has been renamed.
|
||||
*
|
||||
* This function iterates through all document object in the document, and calls its
|
||||
* renameObjectIdentifiers functions.
|
||||
*
|
||||
* @param paths Map with current and new names
|
||||
*/
|
||||
|
||||
void Document::renameObjectIdentifiers(const std::map<App::ObjectIdentifier, App::ObjectIdentifier> &paths)
|
||||
{
|
||||
std::map<App::ObjectIdentifier, App::ObjectIdentifier> extendedPaths;
|
||||
|
||||
std::map<App::ObjectIdentifier, App::ObjectIdentifier>::const_iterator it = paths.begin();
|
||||
while (it != paths.end()) {
|
||||
extendedPaths[it->first.canonicalPath()] = it->second.canonicalPath();
|
||||
++it;
|
||||
}
|
||||
|
||||
for (std::vector<DocumentObject*>::iterator it = d->objectArray.begin(); it != d->objectArray.end(); ++it)
|
||||
(*it)->renameObjectIdentifiers(extendedPaths);
|
||||
}
|
||||
|
||||
#ifdef USE_OLD_DAG
|
||||
int Document::recompute()
|
||||
{
|
||||
int objectCount = 0;
|
||||
|
||||
// The 'SkipRecompute' flag can be (tmp.) set to avoid to many
|
||||
// time expensive recomputes
|
||||
bool skip = testStatus(Document::SkipRecompute);
|
||||
if (skip)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
// delete recompute log
|
||||
for (std::vector<App::DocumentObjectExecReturn*>::iterator it=_RecomputeLog.begin();it!=_RecomputeLog.end();++it)
|
||||
@@ -1835,7 +1872,7 @@ void Document::recompute()
|
||||
}
|
||||
catch (const std::exception& e) {
|
||||
std::cerr << "Document::recompute: " << e.what() << std::endl;
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// caching vertex to DocObject
|
||||
@@ -1908,8 +1945,9 @@ void Document::recompute()
|
||||
if ( _recomputeFeature(Cur)) {
|
||||
// if somthing happen break execution of recompute
|
||||
d->vertexMap.clear();
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
++objectCount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1921,6 +1959,92 @@ void Document::recompute()
|
||||
d->vertexMap.clear();
|
||||
|
||||
signalRecomputed(*this);
|
||||
|
||||
return objectCount;
|
||||
}
|
||||
|
||||
#else //ifdef USE_OLD_DAG
|
||||
|
||||
int Document::recompute()
|
||||
{
|
||||
int objectCount = 0;
|
||||
// delete recompute log
|
||||
for (auto LogEntry: _RecomputeLog)
|
||||
delete LogEntry;
|
||||
_RecomputeLog.clear();
|
||||
|
||||
// get the sorted vector of all objects in the document and go though it from the end
|
||||
vector<DocumentObject*> topoSortedObjects = topologicalSort();
|
||||
|
||||
if (topoSortedObjects.size() != d->objectArray.size()){
|
||||
cerr << "App::Document::recompute(): topological sort fails, invalid DAG!" << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (auto objIt = topoSortedObjects.rbegin(); objIt != topoSortedObjects.rend(); ++objIt){
|
||||
// ask the object if it should be recomputed
|
||||
if ((*objIt)->mustExecute() == 1){
|
||||
objectCount++;
|
||||
if (_recomputeFeature(*objIt)) {
|
||||
// if something happen break execution of recompute
|
||||
return -1;
|
||||
}
|
||||
else{
|
||||
(*objIt)->purgeTouched();
|
||||
// set all dependent object touched to force recompute
|
||||
for (auto inObjIt : (*objIt)->getInList())
|
||||
inObjIt->touch();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#ifdef FC_DEBUG
|
||||
// check if all objects are recalculated which were thouched
|
||||
for (auto objectIt : d->objectArray) {
|
||||
if (objectIt->isTouched())
|
||||
cerr << "Document::recompute(): " << objectIt->getNameInDocument() << " still touched after recompute" << endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
return objectCount;
|
||||
}
|
||||
|
||||
#endif // USE_OLD_DAG
|
||||
|
||||
std::vector<App::DocumentObject*> Document::topologicalSort() const
|
||||
{
|
||||
// topological sort algorithm described here:
|
||||
// https://de.wikipedia.org/wiki/Topologische_Sortierung#Algorithmus_f.C3.BCr_das_Topologische_Sortieren
|
||||
vector < App::DocumentObject* > ret;
|
||||
ret.reserve(d->objectArray.size());
|
||||
map < App::DocumentObject*,int > countMap;
|
||||
|
||||
for (auto objectIt : d->objectArray)
|
||||
countMap[objectIt] = objectIt->getInList().size();
|
||||
|
||||
auto rootObjeIt = find_if(countMap.begin(), countMap.end(), [](pair < App::DocumentObject*, int > count)->bool {
|
||||
return count.second == 0;
|
||||
});
|
||||
|
||||
if (rootObjeIt == countMap.end()){
|
||||
cerr << "Document::topologicalSort: cyclic dependency detected (no root object)" << endl;
|
||||
return ret;
|
||||
}
|
||||
|
||||
while (rootObjeIt != countMap.end()){
|
||||
rootObjeIt->second = rootObjeIt->second - 1;
|
||||
for (auto outListIt : rootObjeIt->first->getOutList()){
|
||||
auto outListMapIt = countMap.find(outListIt);
|
||||
outListMapIt->second = outListMapIt->second - 1;
|
||||
}
|
||||
ret.push_back(rootObjeIt->first);
|
||||
|
||||
rootObjeIt = find_if(countMap.begin(), countMap.end(), [](pair < App::DocumentObject*, int > count)->bool {
|
||||
return count.second == 0;
|
||||
});
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char * Document::getErrorDescription(const App::DocumentObject*Obj) const
|
||||
@@ -2182,6 +2306,7 @@ void Document::remObject(const char* sName)
|
||||
signalTransactionRemove(*pos->second, 0);
|
||||
}
|
||||
|
||||
#ifdef USE_OLD_DAG
|
||||
if (!d->vertexMap.empty()) {
|
||||
// recompute of document is running
|
||||
for (std::map<Vertex,DocumentObject*>::iterator it = d->vertexMap.begin(); it != d->vertexMap.end(); ++it) {
|
||||
@@ -2191,7 +2316,8 @@ void Document::remObject(const char* sName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif //USE_OLD_DAG
|
||||
|
||||
// Before deleting we must nullify all dependant objects
|
||||
breakDependency(pos->second, true);
|
||||
|
||||
@@ -2565,3 +2691,15 @@ PyObject * Document::getPyObject(void)
|
||||
{
|
||||
return Py::new_reference_to(DocumentPythonObject);
|
||||
}
|
||||
|
||||
std::vector<App::DocumentObject*> Document::getRootObjects() const
|
||||
{
|
||||
std::vector < App::DocumentObject* > ret;
|
||||
|
||||
for (auto objectIt : d->objectArray) {
|
||||
if (objectIt->getInList().empty())
|
||||
ret.push_back(objectIt);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
+8
-4
@@ -37,8 +37,6 @@
|
||||
#include <stack>
|
||||
|
||||
#include <boost/signals.hpp>
|
||||
#include <boost/graph/adjacency_list.hpp>
|
||||
|
||||
|
||||
namespace Base {
|
||||
class Writer;
|
||||
@@ -246,8 +244,8 @@ public:
|
||||
void setClosable(bool);
|
||||
/// check whether the document can be closed
|
||||
bool isClosable() const;
|
||||
/// Recompute all touched features
|
||||
void recompute();
|
||||
/// Recompute all touched features and return the amount of recalculated features
|
||||
int recompute();
|
||||
/// Recompute only one feature
|
||||
void recomputeFeature(DocumentObject* Feat);
|
||||
/// get the error log from the recompute run
|
||||
@@ -311,10 +309,15 @@ public:
|
||||
std::vector<App::DocumentObject*> getInList(const DocumentObject* me) const;
|
||||
/// Get a complete list of all objects the given objects depend on. The list
|
||||
/// also contains the given objects!
|
||||
/// deprecated! Use In- and OutList mimic in the DocumentObject instead!
|
||||
std::vector<App::DocumentObject*> getDependencyList
|
||||
(const std::vector<App::DocumentObject*>&) const;
|
||||
// set Changed
|
||||
//void setChanged(DocumentObject* change);
|
||||
/// get a list of topological sorted objects (https://en.wikipedia.org/wiki/Topological_sorting)
|
||||
std::vector<App::DocumentObject*> topologicalSort() const;
|
||||
/// get all root objects (objects no other one reference too)
|
||||
std::vector<App::DocumentObject*> getRootObjects() const;
|
||||
//@}
|
||||
|
||||
/// Function called to signal that an object identifier has been renamed
|
||||
@@ -352,6 +355,7 @@ protected:
|
||||
/// helper which Recompute only this feature
|
||||
bool _recomputeFeature(DocumentObject* Feat);
|
||||
void _clearRedos();
|
||||
|
||||
/// refresh the internal dependency graph
|
||||
void _rebuildDependencyList(void);
|
||||
std::string getTransientDirectoryName(const std::string& uuid, const std::string& filename) const;
|
||||
|
||||
+173
-1
@@ -182,6 +182,7 @@ std::vector<DocumentObject*> DocumentObject::getOutList(void) const
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef USE_OLD_DAG
|
||||
std::vector<App::DocumentObject*> DocumentObject::getInList(void) const
|
||||
{
|
||||
if (_pDoc)
|
||||
@@ -190,6 +191,79 @@ std::vector<App::DocumentObject*> DocumentObject::getInList(void) const
|
||||
return std::vector<App::DocumentObject*>();
|
||||
}
|
||||
|
||||
#else // ifndef USE_OLD_DAG
|
||||
|
||||
std::vector<App::DocumentObject*> DocumentObject::getInList(void) const
|
||||
{
|
||||
return _inList;
|
||||
}
|
||||
|
||||
#endif // if USE_OLD_DAG
|
||||
|
||||
|
||||
void _getInListRecursive(std::vector<DocumentObject*>& objSet, const DocumentObject* obj, const DocumentObject* checkObj, int depth)
|
||||
{
|
||||
for (const auto objIt : obj->getInList()){
|
||||
// if the check object is in the recursive inList we have a cycle!
|
||||
if (objIt == checkObj || depth <= 0){
|
||||
std::cerr << "DocumentObject::getInListRecursive(): cyclic dependency detected!"<<std::endl;
|
||||
throw Base::Exception("DocumentObject::getInListRecursive(): cyclic dependency detected!");
|
||||
}
|
||||
|
||||
objSet.push_back(objIt);
|
||||
_getInListRecursive(objSet, objIt, checkObj,depth-1);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<App::DocumentObject*> DocumentObject::getInListRecursive(void) const
|
||||
{
|
||||
// number of objects in document is a good estimate in result size
|
||||
int maxDepth = getDocument()->countObjects() +2;
|
||||
std::vector<App::DocumentObject*> result;
|
||||
result.reserve(maxDepth);
|
||||
|
||||
// using a rcursie helper to collect all InLists
|
||||
_getInListRecursive(result, this, this, maxDepth);
|
||||
|
||||
// remove duplicate entries and resize the vector
|
||||
std::sort(result.begin(), result.end());
|
||||
auto newEnd = std::unique(result.begin(), result.end());
|
||||
result.resize(std::distance(result.begin(), newEnd));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void _getOutListRecursive(std::vector<DocumentObject*>& objSet, const DocumentObject* obj, const DocumentObject* checkObj, int depth)
|
||||
{
|
||||
for (const auto objIt : obj->getOutList()){
|
||||
// if the check object is in the recursive inList we have a cycle!
|
||||
if (objIt == checkObj || depth <= 0){
|
||||
std::cerr << "DocumentObject::getOutListRecursive(): cyclic dependency detected!" << std::endl;
|
||||
throw Base::Exception("DocumentObject::getOutListRecursive(): cyclic dependency detected!");
|
||||
}
|
||||
objSet.push_back(objIt);
|
||||
_getOutListRecursive(objSet, objIt, checkObj,depth-1);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<App::DocumentObject*> DocumentObject::getOutListRecursive(void) const
|
||||
{
|
||||
// number of objects in document is a good estimate in result size
|
||||
int maxDepth = getDocument()->countObjects() + 2;
|
||||
std::vector<App::DocumentObject*> result;
|
||||
result.reserve(maxDepth);
|
||||
|
||||
// using a recursive helper to collect all OutLists
|
||||
_getOutListRecursive(result, this, this, maxDepth);
|
||||
|
||||
// remove duplicate entries and resize the vector
|
||||
std::sort(result.begin(), result.end());
|
||||
auto newEnd = std::unique(result.begin(), result.end());
|
||||
result.resize(std::distance(result.begin(), newEnd));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
DocumentObjectGroup* DocumentObject::getGroup() const
|
||||
{
|
||||
return dynamic_cast<DocumentObjectGroup*>(GroupExtension::getGroupOfObject(this));
|
||||
@@ -229,6 +303,86 @@ bool DocumentObject::testIfLinkDAGCompatible(PropertyLinkSub &linkTo) const
|
||||
return this->testIfLinkDAGCompatible(linkTo_in_vector);
|
||||
}
|
||||
|
||||
bool DocumentObject::_isInInListRecursive(const DocumentObject* /*act*/,
|
||||
const DocumentObject* test,
|
||||
const DocumentObject* checkObj, int depth) const
|
||||
{
|
||||
#ifndef USE_OLD_DAG
|
||||
if (std::find(_inList.begin(), _inList.end(), test) != _inList.end())
|
||||
return true;
|
||||
|
||||
for (auto obj : _inList){
|
||||
// if the check object is in the recursive inList we have a cycle!
|
||||
if (obj == checkObj || depth <= 0){
|
||||
std::cerr << "DocumentObject::getOutListRecursive(): cyclic dependency detected!" << std::endl;
|
||||
throw Base::Exception("DocumentObject::getOutListRecursive(): cyclic dependency detected!");
|
||||
}
|
||||
|
||||
if (_isInInListRecursive(obj, test, checkObj, depth - 1))
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
(void)test;
|
||||
(void)checkObj;
|
||||
(void)depth;
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DocumentObject::isInInListRecursive(DocumentObject *linkTo) const
|
||||
{
|
||||
return _isInInListRecursive(this, linkTo, this, getDocument()->countObjects());
|
||||
}
|
||||
|
||||
bool DocumentObject::isInInList(DocumentObject *linkTo) const
|
||||
{
|
||||
#ifndef USE_OLD_DAG
|
||||
if (std::find(_inList.begin(), _inList.end(), linkTo) != _inList.end())
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
#else
|
||||
(void)linkTo;
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool DocumentObject::_isInOutListRecursive(const DocumentObject* act,
|
||||
const DocumentObject* test,
|
||||
const DocumentObject* checkObj, int depth) const
|
||||
{
|
||||
#ifndef USE_OLD_DAG
|
||||
std::vector <DocumentObject*> outList = act->getOutList();
|
||||
|
||||
if (std::find(outList.begin(), outList.end(), test) != outList.end())
|
||||
return true;
|
||||
|
||||
for (auto obj : outList){
|
||||
// if the check object is in the recursive inList we have a cycle!
|
||||
if (obj == checkObj || depth <= 0){
|
||||
std::cerr << "DocumentObject::isInOutListRecursive(): cyclic dependency detected!" << std::endl;
|
||||
throw Base::Exception("DocumentObject::isInOutListRecursive(): cyclic dependency detected!");
|
||||
}
|
||||
|
||||
if (_isInOutListRecursive(obj, test, checkObj, depth - 1))
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
(void)act;
|
||||
(void)test;
|
||||
(void)checkObj;
|
||||
(void)depth;
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DocumentObject::isInOutListRecursive(DocumentObject *linkTo) const
|
||||
{
|
||||
return _isInOutListRecursive(this, linkTo, this, getDocument()->countObjects());
|
||||
}
|
||||
|
||||
void DocumentObject::onLostLinkToObject(DocumentObject*)
|
||||
{
|
||||
|
||||
@@ -247,7 +401,6 @@ void DocumentObject::setDocument(App::Document* doc)
|
||||
|
||||
void DocumentObject::onBeforeChange(const Property* prop)
|
||||
{
|
||||
|
||||
// Store current name in oldLabel, to be able to easily retrieve old name of document object later
|
||||
// when renaming expressions.
|
||||
if (prop == &Label)
|
||||
@@ -405,3 +558,22 @@ void DocumentObject::unsetupObject()
|
||||
for(auto ext : vector)
|
||||
ext->onExtendedUnsetupObject();
|
||||
}
|
||||
|
||||
void App::DocumentObject::_removeBackLink(DocumentObject* rmvObj)
|
||||
{
|
||||
#ifndef USE_OLD_DAG
|
||||
_inList.erase(std::remove(_inList.begin(), _inList.end(), rmvObj), _inList.end());
|
||||
#else
|
||||
(void)rmvObj;
|
||||
#endif
|
||||
}
|
||||
|
||||
void App::DocumentObject::_addBackLink(DocumentObject* newObj)
|
||||
{
|
||||
#ifndef USE_OLD_DAG
|
||||
if ( std::find(_inList.begin(), _inList.end(), newObj) == _inList.end() )
|
||||
_inList.push_back(newObj);
|
||||
#else
|
||||
(void)newObj;
|
||||
#endif //USE_OLD_DAG
|
||||
}
|
||||
|
||||
@@ -127,13 +127,36 @@ public:
|
||||
void setStatus(ObjectStatus pos, bool on) {StatusBits.set((size_t)pos, on);}
|
||||
//@}
|
||||
|
||||
/** DAG handling
|
||||
This part of the interface deals with viewing the document as
|
||||
an DAG (directed acyclic graph).
|
||||
*/
|
||||
//@{
|
||||
/// returns a list of objects this object is pointing to by Links
|
||||
std::vector<App::DocumentObject*> getOutList(void) const;
|
||||
/// returns a list of objects this object is pointing to by Links and all further descended
|
||||
std::vector<App::DocumentObject*> getOutListRecursive(void) const;
|
||||
/// get all objects link to this object
|
||||
std::vector<App::DocumentObject*> getInList(void) const;
|
||||
/// get all objects link directly or indirectly to this object
|
||||
std::vector<App::DocumentObject*> getInListRecursive(void) const;
|
||||
/// get group if object is part of a group, otherwise 0 is returned
|
||||
DocumentObjectGroup* getGroup() const;
|
||||
|
||||
/// test if this object is in the InList and recursive further down
|
||||
bool isInInListRecursive(DocumentObject* objToTest) const;
|
||||
/// test if this object is directly (non recursive) in the InList
|
||||
bool isInInList(DocumentObject* objToTest) const;
|
||||
/// test if the given object is in the OutList and recursive further down
|
||||
bool isInOutListRecursive(DocumentObject* objToTest) const;
|
||||
/// test if this object is directly (non recursive) in the OutList
|
||||
bool isInOutList(DocumentObject* objToTest) const;
|
||||
/// internal, used by ProperyLink to maintain DAG back links
|
||||
void _removeBackLink(DocumentObject*);
|
||||
/// internal, used by ProperyLink to maintain DAG back links
|
||||
void _addBackLink(DocumentObject*);
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @brief testIfLinkIsDAG tests a link that is about to be created for
|
||||
* circular references.
|
||||
@@ -149,7 +172,6 @@ public:
|
||||
bool testIfLinkDAGCompatible(App::PropertyLinkSubList &linksTo) const;
|
||||
bool testIfLinkDAGCompatible(App::PropertyLinkSub &linkTo) const;
|
||||
|
||||
|
||||
public:
|
||||
/** mustExecute
|
||||
* We call this method to check if the object was modified to
|
||||
@@ -259,6 +281,15 @@ protected: // attributes
|
||||
|
||||
// pointer to the document name string (for performance)
|
||||
const std::string *pcNameInDocument;
|
||||
|
||||
private:
|
||||
// Back pointer to all the fathers in a DAG of the document
|
||||
// this is used by the document (via friend) to have a effective DAG handling
|
||||
std::vector<App::DocumentObject*> _inList;
|
||||
// helper for isInInListRecursive()
|
||||
bool _isInInListRecursive(const DocumentObject *act, const DocumentObject* test, const DocumentObject* checkObj, int depth) const;
|
||||
// helper for isInOutListRecursive()
|
||||
bool _isInOutListRecursive(const DocumentObject *act, const DocumentObject* test, const DocumentObject* checkObj, int depth) const;
|
||||
};
|
||||
|
||||
class AppExport ObjectStatusLocker
|
||||
|
||||
@@ -61,12 +61,24 @@
|
||||
</Documentation>
|
||||
<Parameter Name="OutList" Type="List"/>
|
||||
</Attribute>
|
||||
<Attribute Name="OutListRecursive" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>A list of all objects this object links to recursivly.</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="OutListRecursive" Type="List"/>
|
||||
</Attribute>
|
||||
<Attribute Name="InList" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>A list of all objects which link to this object.</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="InList" Type="List"/>
|
||||
</Attribute>
|
||||
<Attribute Name="InListRecursive" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>A list of all objects which link to this object recursivly.</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="InListRecursive" Type="List"/>
|
||||
</Attribute>
|
||||
<Attribute Name="Name" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>Return the internal name of this object</UserDocu>
|
||||
|
||||
@@ -207,6 +207,22 @@ Py::List DocumentObjectPy::getInList(void) const
|
||||
return ret;
|
||||
}
|
||||
|
||||
Py::List DocumentObjectPy::getInListRecursive(void) const
|
||||
{
|
||||
Py::List ret;
|
||||
try {
|
||||
std::vector<DocumentObject*> list = getDocumentObjectPtr()->getInListRecursive();
|
||||
|
||||
for (std::vector<DocumentObject*>::iterator It = list.begin(); It != list.end(); ++It)
|
||||
ret.append(Py::Object((*It)->getPyObject(), true));
|
||||
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
throw Py::IndexError(e.what());
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Py::List DocumentObjectPy::getOutList(void) const
|
||||
{
|
||||
Py::List ret;
|
||||
@@ -218,6 +234,23 @@ Py::List DocumentObjectPy::getOutList(void) const
|
||||
return ret;
|
||||
}
|
||||
|
||||
Py::List DocumentObjectPy::getOutListRecursive(void) const
|
||||
{
|
||||
Py::List ret;
|
||||
try {
|
||||
std::vector<DocumentObject*> list = getDocumentObjectPtr()->getOutListRecursive();
|
||||
|
||||
// creat the python list for the output
|
||||
for (std::vector<DocumentObject*>::iterator It = list.begin(); It != list.end(); ++It)
|
||||
ret.append(Py::Object((*It)->getPyObject(), true));
|
||||
}
|
||||
catch (const Base::Exception& e) {
|
||||
throw Py::IndexError(e.what());
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
PyObject* DocumentObjectPy::setExpression(PyObject * args)
|
||||
{
|
||||
char * path = NULL;
|
||||
|
||||
+13
-1
@@ -102,7 +102,7 @@
|
||||
</Methode>
|
||||
<Methode Name="recompute">
|
||||
<Documentation>
|
||||
<UserDocu>Recompute the document</UserDocu>
|
||||
<UserDocu>Recompute the document and returns the amount of recomputed features</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="getObject">
|
||||
@@ -151,6 +151,18 @@ Both parameters are optional.</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="Objects" Type="List" />
|
||||
</Attribute>
|
||||
<Attribute Name="ToplogicalSortedObjects" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>The list of object of this document in topological sorted order</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="ToplogicalSortedObjects" Type="List" />
|
||||
</Attribute>
|
||||
<Attribute Name="RootObjects" ReadOnly="true">
|
||||
<Documentation>
|
||||
<UserDocu>The list of root object of this document</UserDocu>
|
||||
</Documentation>
|
||||
<Parameter Name="RootObjects" Type="List" />
|
||||
</Attribute>
|
||||
<Attribute Name="UndoMode" ReadOnly="false">
|
||||
<Documentation>
|
||||
<UserDocu>The Undo mode of the Document (0 = no Undo, 1 = Undo/Redo)</UserDocu>
|
||||
|
||||
@@ -384,8 +384,8 @@ PyObject* DocumentPy::recompute(PyObject * args)
|
||||
{
|
||||
if (!PyArg_ParseTuple(args, "")) // convert args: Python->C
|
||||
return NULL; // NULL triggers exception
|
||||
getDocumentPtr()->recompute();
|
||||
Py_Return;
|
||||
int objectCount = getDocumentPtr()->recompute();
|
||||
return Py::new_reference_to(Py::Int(objectCount));
|
||||
}
|
||||
|
||||
PyObject* DocumentPy::getObject(PyObject *args)
|
||||
@@ -490,6 +490,30 @@ Py::List DocumentPy::getObjects(void) const
|
||||
return res;
|
||||
}
|
||||
|
||||
Py::List DocumentPy::getToplogicalSortedObjects(void) const
|
||||
{
|
||||
std::vector<DocumentObject*> objs = getDocumentPtr()->topologicalSort();
|
||||
Py::List res;
|
||||
|
||||
for (std::vector<DocumentObject*>::const_iterator It = objs.begin(); It != objs.end(); ++It)
|
||||
//Note: Here we must force the Py::Object to own this Python object as getPyObject() increments the counter
|
||||
res.append(Py::Object((*It)->getPyObject(), true));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
Py::List DocumentPy::getRootObjects(void) const
|
||||
{
|
||||
std::vector<DocumentObject*> objs = getDocumentPtr()->getRootObjects();
|
||||
Py::List res;
|
||||
|
||||
for (std::vector<DocumentObject*>::const_iterator It = objs.begin(); It != objs.end(); ++It)
|
||||
//Note: Here we must force the Py::Object to own this Python object as getPyObject() increments the counter
|
||||
res.append(Py::Object((*It)->getPyObject(), true));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
Py::Int DocumentPy::getUndoMode(void) const
|
||||
{
|
||||
return Py::Int(getDocumentPtr()->getUndoMode());
|
||||
|
||||
@@ -24,8 +24,40 @@
|
||||
#define APP_FEATUREPYTHONPYIMP_H
|
||||
|
||||
#include <Base/BaseClass.h>
|
||||
#include <Base/Interpreter.h>
|
||||
#include <App/PropertyContainerPy.h>
|
||||
|
||||
#define PYTHON_TYPE_DEF(_class_, _subclass_) \
|
||||
class _class_ : public _subclass_ \
|
||||
{ \
|
||||
public: \
|
||||
static PyTypeObject Type; \
|
||||
public: \
|
||||
_class_(Base::BaseClass *pcObject, PyTypeObject *T = &Type); \
|
||||
virtual ~_class_(); \
|
||||
};
|
||||
|
||||
#define PYTHON_TYPE_IMP(_class_, _subclass_) \
|
||||
PyTypeObject _class_::Type = { \
|
||||
PyObject_HEAD_INIT(&PyType_Type) \
|
||||
0, \
|
||||
""#_class_"", \
|
||||
sizeof(_class_), \
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
|
||||
Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_CLASS, \
|
||||
""#_class_"", \
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, \
|
||||
&_subclass_::Type, \
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
|
||||
}; \
|
||||
_class_::_class_(Base::BaseClass *pcObject, PyTypeObject *T) \
|
||||
: _subclass_(reinterpret_cast<_subclass_::PointerType>(pcObject), T) \
|
||||
{ \
|
||||
} \
|
||||
_class_::~_class_() \
|
||||
{ \
|
||||
}
|
||||
|
||||
namespace App
|
||||
{
|
||||
|
||||
|
||||
@@ -84,12 +84,14 @@ template<class FeaturePyT>
|
||||
FeaturePythonPyT<FeaturePyT>::FeaturePythonPyT(Base::BaseClass *pcObject, PyTypeObject *T)
|
||||
: FeaturePyT(reinterpret_cast<typename FeaturePyT::PointerType>(pcObject), T)
|
||||
{
|
||||
Base::PyGILStateLocker lock;
|
||||
dict_methods = PyDict_New();
|
||||
}
|
||||
|
||||
template<class FeaturePyT>
|
||||
FeaturePythonPyT<FeaturePyT>::~FeaturePythonPyT()
|
||||
{
|
||||
Base::PyGILStateLocker lock;
|
||||
Py_DECREF(dict_methods);
|
||||
}
|
||||
|
||||
|
||||
@@ -122,10 +122,49 @@ void PropertyExpressionEngine::Paste(const Property &from)
|
||||
const PropertyExpressionEngine * fromee = static_cast<const PropertyExpressionEngine*>(&from);
|
||||
|
||||
AtomicPropertyChange signaller(*this);
|
||||
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain backlinks
|
||||
ExpressionMap::const_iterator i = expressions.begin();
|
||||
while (i != expressions.end()) {
|
||||
std::set<ObjectIdentifier> deps;
|
||||
i->second.expression->getDeps(deps);
|
||||
|
||||
std::set<ObjectIdentifier>::const_iterator j = deps.begin();
|
||||
while (j != deps.end()) {
|
||||
const ObjectIdentifier & p = *j;
|
||||
DocumentObject* docObj = p.getDocumentObject();
|
||||
|
||||
if (docObj)
|
||||
docObj->_removeBackLink(static_cast<App::DocumentObject*>(getContainer()));
|
||||
|
||||
++j;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
#endif
|
||||
expressions.clear();
|
||||
|
||||
for (ExpressionMap::const_iterator it = fromee->expressions.begin(); it != fromee->expressions.end(); ++it) {
|
||||
expressions[it->first] = ExpressionInfo(boost::shared_ptr<Expression>(it->second.expression->copy()), it->second.comment.c_str());
|
||||
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain backlinks
|
||||
std::set<ObjectIdentifier> deps;
|
||||
it->second.expression->getDeps(deps);
|
||||
|
||||
std::set<ObjectIdentifier>::const_iterator j = deps.begin();
|
||||
while (j != deps.end()) {
|
||||
const ObjectIdentifier & p = *j;
|
||||
DocumentObject* docObj = p.getDocumentObject();
|
||||
|
||||
if (docObj)
|
||||
docObj->_addBackLink(static_cast<App::DocumentObject*>(getContainer()));
|
||||
|
||||
++j;
|
||||
}
|
||||
#endif
|
||||
|
||||
expressionChanged(it->first);
|
||||
}
|
||||
|
||||
@@ -364,11 +403,43 @@ void PropertyExpressionEngine::setValue(const ObjectIdentifier & path, boost::sh
|
||||
|
||||
AtomicPropertyChange signaller(*this);
|
||||
expressions[usePath] = ExpressionInfo(expr, comment);
|
||||
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain the backlinks in the documentobject graph datastructure
|
||||
std::set<ObjectIdentifier> deps;
|
||||
expr->getDeps(deps);
|
||||
std::set<ObjectIdentifier>::const_iterator j = deps.begin();
|
||||
while (j != deps.end()) {
|
||||
const ObjectIdentifier & p = *j;
|
||||
DocumentObject* docObj = p.getDocumentObject();
|
||||
if (docObj)
|
||||
docObj->_addBackLink(static_cast<App::DocumentObject*>(getContainer()));
|
||||
|
||||
++j;
|
||||
}
|
||||
#endif
|
||||
|
||||
expressionChanged(usePath);
|
||||
}
|
||||
else {
|
||||
AtomicPropertyChange signaller(*this);
|
||||
expressions.erase(usePath);
|
||||
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain the backlinks in the documentobject graph datastructure
|
||||
std::set<ObjectIdentifier> deps;
|
||||
expressions[usePath].expression->getDeps(deps);
|
||||
std::set<ObjectIdentifier>::const_iterator j = deps.begin();
|
||||
while (j != deps.end()) {
|
||||
const ObjectIdentifier & p = *j;
|
||||
DocumentObject* docObj = p.getDocumentObject();
|
||||
if (docObj)
|
||||
docObj->_removeBackLink(static_cast<App::DocumentObject*>(getContainer()));
|
||||
|
||||
++j;
|
||||
}
|
||||
#endif
|
||||
|
||||
expressionChanged(usePath);
|
||||
}
|
||||
}
|
||||
|
||||
+87
-18
@@ -44,9 +44,6 @@ using namespace App;
|
||||
using namespace Base;
|
||||
using namespace std;
|
||||
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
//**************************************************************************
|
||||
// PropertyLink
|
||||
@@ -76,6 +73,13 @@ PropertyLink::~PropertyLink()
|
||||
void PropertyLink::setValue(App::DocumentObject * lValue)
|
||||
{
|
||||
aboutToSetValue();
|
||||
#ifndef USE_OLD_DAG
|
||||
// maintain the back link in the DocumentObject class
|
||||
if(_pcLink)
|
||||
_pcLink->_removeBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
if(lValue)
|
||||
lValue->_addBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
#endif
|
||||
_pcLink=lValue;
|
||||
hasSetValue();
|
||||
}
|
||||
@@ -163,9 +167,10 @@ Property *PropertyLink::Copy(void) const
|
||||
|
||||
void PropertyLink::Paste(const Property &from)
|
||||
{
|
||||
aboutToSetValue();
|
||||
_pcLink = dynamic_cast<const PropertyLink&>(from)._pcLink;
|
||||
hasSetValue();
|
||||
if(!from.isDerivedFrom(PropertyLink::getClassTypeId()))
|
||||
throw Base::Exception("Incompatible proeprty to paste to");
|
||||
|
||||
setValue(static_cast<const PropertyLink&>(from)._pcLink);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
@@ -200,17 +205,37 @@ int PropertyLinkList::getSize(void) const
|
||||
|
||||
void PropertyLinkList::setValue(DocumentObject* lValue)
|
||||
{
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain the back link in the DocumentObject class
|
||||
for(auto *obj : _lValueList)
|
||||
obj->_removeBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
if(lValue)
|
||||
lValue->_addBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
#endif
|
||||
|
||||
if (lValue){
|
||||
aboutToSetValue();
|
||||
_lValueList.resize(1);
|
||||
_lValueList[0] = lValue;
|
||||
hasSetValue();
|
||||
}
|
||||
else {
|
||||
aboutToSetValue();
|
||||
_lValueList.clear();
|
||||
hasSetValue();
|
||||
}
|
||||
}
|
||||
|
||||
void PropertyLinkList::setValues(const std::vector<DocumentObject*>& lValue)
|
||||
{
|
||||
aboutToSetValue();
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain the back link in the DocumentObject class
|
||||
for(auto *obj : _lValueList)
|
||||
obj->_removeBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
for(auto *obj : lValue)
|
||||
obj->_addBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
#endif
|
||||
_lValueList = lValue;
|
||||
hasSetValue();
|
||||
}
|
||||
@@ -314,9 +339,7 @@ Property *PropertyLinkList::Copy(void) const
|
||||
|
||||
void PropertyLinkList::Paste(const Property &from)
|
||||
{
|
||||
aboutToSetValue();
|
||||
_lValueList = dynamic_cast<const PropertyLinkList&>(from)._lValueList;
|
||||
hasSetValue();
|
||||
setValues(dynamic_cast<const PropertyLinkList&>(from)._lValueList);
|
||||
}
|
||||
|
||||
unsigned int PropertyLinkList::getMemSize(void) const
|
||||
@@ -352,6 +375,12 @@ PropertyLinkSub::~PropertyLinkSub()
|
||||
void PropertyLinkSub::setValue(App::DocumentObject * lValue, const std::vector<std::string> &SubList)
|
||||
{
|
||||
aboutToSetValue();
|
||||
#ifndef USE_OLD_DAG
|
||||
if (_pcLinkSub)
|
||||
_pcLinkSub->_removeBackLink(static_cast<App::DocumentObject*>(getContainer()));
|
||||
if (lValue)
|
||||
lValue->_addBackLink(static_cast<App::DocumentObject*>(getContainer()));
|
||||
#endif
|
||||
_pcLinkSub=lValue;
|
||||
_cSubList = SubList;
|
||||
hasSetValue();
|
||||
@@ -505,10 +534,7 @@ Property *PropertyLinkSub::Copy(void) const
|
||||
|
||||
void PropertyLinkSub::Paste(const Property &from)
|
||||
{
|
||||
aboutToSetValue();
|
||||
_pcLinkSub = dynamic_cast<const PropertyLinkSub&>(from)._pcLinkSub;
|
||||
_cSubList = dynamic_cast<const PropertyLinkSub&>(from)._cSubList;
|
||||
hasSetValue();
|
||||
setValue(dynamic_cast<const PropertyLinkSub&>(from)._pcLinkSub, dynamic_cast<const PropertyLinkSub&>(from)._cSubList);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
@@ -544,6 +570,14 @@ int PropertyLinkSubList::getSize(void) const
|
||||
|
||||
void PropertyLinkSubList::setValue(DocumentObject* lValue,const char* SubName)
|
||||
{
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain backlinks
|
||||
for(auto *obj : _lValueList)
|
||||
obj->_removeBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
if (lValue)
|
||||
lValue->_addBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
#endif
|
||||
|
||||
if (lValue) {
|
||||
aboutToSetValue();
|
||||
_lValueList.resize(1);
|
||||
@@ -561,9 +595,22 @@ void PropertyLinkSubList::setValue(DocumentObject* lValue,const char* SubName)
|
||||
}
|
||||
|
||||
void PropertyLinkSubList::setValues(const std::vector<DocumentObject*>& lValue,const std::vector<const char*>& lSubNames)
|
||||
{
|
||||
{
|
||||
if (lValue.size() != lSubNames.size())
|
||||
throw Base::Exception("PropertyLinkSubList::setValues: size of subelements list != size of objects list");
|
||||
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain backlinks. _lValueList can contain items multiple times, but we trust the document
|
||||
//object to ensure that this works
|
||||
for(auto *obj : _lValueList)
|
||||
obj->_removeBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
|
||||
//maintain backlinks. lValue can contain items multiple times, but we trust the document
|
||||
//object to ensure that the backlink is only added once
|
||||
for(auto *obj : lValue)
|
||||
obj->_addBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
#endif
|
||||
|
||||
aboutToSetValue();
|
||||
_lValueList = lValue;
|
||||
_lSubList.resize(lSubNames.size());
|
||||
@@ -577,6 +624,19 @@ void PropertyLinkSubList::setValues(const std::vector<DocumentObject*>& lValue,c
|
||||
{
|
||||
if (lValue.size() != lSubNames.size())
|
||||
throw Base::Exception("PropertyLinkSubList::setValues: size of subelements list != size of objects list");
|
||||
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain backlinks. _lValueList can contain items multiple times, but we trust the document
|
||||
//object to ensure that this works
|
||||
for(auto *obj : _lValueList)
|
||||
obj->_removeBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
|
||||
//maintain backlinks. lValue can contain items multiple times, but we trust the document
|
||||
//object to ensure that the backlink is only added once
|
||||
for(auto *obj : lValue)
|
||||
obj->_addBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
#endif
|
||||
|
||||
aboutToSetValue();
|
||||
_lValueList = lValue;
|
||||
_lSubList = lSubNames;
|
||||
@@ -585,6 +645,18 @@ void PropertyLinkSubList::setValues(const std::vector<DocumentObject*>& lValue,c
|
||||
|
||||
void PropertyLinkSubList::setValue(DocumentObject* lValue, const std::vector<string> &SubList)
|
||||
{
|
||||
#ifndef USE_OLD_DAG
|
||||
//maintain backlinks. _lValueList can contain items multiple times, but we trust the document
|
||||
//object to ensure that this works
|
||||
for(auto *obj : _lValueList)
|
||||
obj->_removeBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
|
||||
//maintain backlinks. lValue can contain items multiple times, but we trust the document
|
||||
//object to ensure that the backlink is only added once
|
||||
if(lValue)
|
||||
lValue->_addBackLink(static_cast<DocumentObject*>(getContainer()));
|
||||
#endif
|
||||
|
||||
aboutToSetValue();
|
||||
std::size_t size = SubList.size();
|
||||
this->_lValueList.clear();
|
||||
@@ -850,10 +922,7 @@ Property *PropertyLinkSubList::Copy(void) const
|
||||
|
||||
void PropertyLinkSubList::Paste(const Property &from)
|
||||
{
|
||||
aboutToSetValue();
|
||||
_lValueList = dynamic_cast<const PropertyLinkSubList&>(from)._lValueList;
|
||||
_lSubList = dynamic_cast<const PropertyLinkSubList&>(from)._lSubList;
|
||||
hasSetValue();
|
||||
setValues(dynamic_cast<const PropertyLinkSubList&>(from)._lValueList, dynamic_cast<const PropertyLinkSubList&>(from)._lSubList);
|
||||
}
|
||||
|
||||
unsigned int PropertyLinkSubList::getMemSize (void) const
|
||||
|
||||
@@ -148,6 +148,22 @@ PyObject* PyObjectBase::__getattr(PyObject * obj, char *attr)
|
||||
if (!static_cast<PyObjectBase*>(value)->isConst())
|
||||
static_cast<PyObjectBase*>(value)->setAttributeOf(attr, pyObj);
|
||||
}
|
||||
else if (value && PyCFunction_Check(value)) {
|
||||
// ExtensionContainerPy::initialization() transfers the methods of an
|
||||
// extension object by creating PyCFunction objects.
|
||||
// At this point no 'self' object is passed but is handled and determined
|
||||
// in ExtensionContainerPy::getCustomAttributes().
|
||||
// So, if we come through this section then it's an indication that
|
||||
// something is wrong with the Python types. For example, a C++ class
|
||||
// that adds an extension uses the same Python type as a wrapper than
|
||||
// another C++ class without this extension.
|
||||
PyCFunctionObject* cfunc = reinterpret_cast<PyCFunctionObject*>(value);
|
||||
if (!cfunc->m_self) {
|
||||
Py_DECREF(cfunc);
|
||||
value = 0;
|
||||
PyErr_Format(PyExc_AttributeError, "<no object bound to built-in method %s>", attr);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return value;
|
||||
}
|
||||
|
||||
+26
-6
@@ -56,6 +56,8 @@ public:
|
||||
|
||||
// methods
|
||||
inline double Length (void) const;
|
||||
inline double Distance(const Vector2d&) const;
|
||||
inline bool IsEqual(const Vector2d&, double tolerance) const;
|
||||
|
||||
// operators
|
||||
inline Vector2d& operator= (const Vector2d &rclVct);
|
||||
@@ -86,6 +88,7 @@ public:
|
||||
inline BoundBox2d (const BoundBox2d &rclBB);
|
||||
inline BoundBox2d (double fX1, double fY1, double fX2, double fY2);
|
||||
inline bool IsValid (void);
|
||||
inline bool IsEqual(const BoundBox2d&, double tolerance) const;
|
||||
|
||||
// operators
|
||||
inline BoundBox2d& operator= (const BoundBox2d& rclBB);
|
||||
@@ -190,6 +193,18 @@ inline double Vector2d::Length (void) const
|
||||
return sqrt ((x * x) + (y * y));
|
||||
}
|
||||
|
||||
inline double Vector2d::Distance(const Vector2d& v) const
|
||||
{
|
||||
double dx = (x - v.x);
|
||||
double dy = (y - v.y);
|
||||
return sqrt(dx*dx + dy*dy);
|
||||
}
|
||||
|
||||
inline bool Vector2d::IsEqual(const Vector2d& v, double tolerance) const
|
||||
{
|
||||
return Distance (v) <= tolerance;
|
||||
}
|
||||
|
||||
inline Vector2d& Vector2d::operator= (const Vector2d &rclVct)
|
||||
{
|
||||
x = rclVct.x;
|
||||
@@ -199,8 +214,7 @@ inline Vector2d& Vector2d::operator= (const Vector2d &rclVct)
|
||||
|
||||
inline bool Vector2d::operator== (const Vector2d &rclVct) const
|
||||
{
|
||||
return (fabs (x - rclVct.x) <= DBL_EPSILON) &&
|
||||
(fabs (y - rclVct.y) <= DBL_EPSILON);
|
||||
return (x == rclVct.x) && (y == rclVct.y);
|
||||
}
|
||||
|
||||
inline Vector2d Vector2d::operator+ (const Vector2d &rclVct) const
|
||||
@@ -355,6 +369,12 @@ inline bool BoundBox2d::IsValid (void)
|
||||
return (MaxX >= MinX) && (MaxY >= MinY);
|
||||
}
|
||||
|
||||
inline bool BoundBox2d::IsEqual(const BoundBox2d& b, double tolerance) const
|
||||
{
|
||||
return Vector2d(MinX,MinY).IsEqual(Vector2d(b.MinX,b.MinY), tolerance) &&
|
||||
Vector2d(MaxX,MaxY).IsEqual(Vector2d(b.MaxX,b.MaxY), tolerance);
|
||||
}
|
||||
|
||||
inline BoundBox2d& BoundBox2d::operator= (const BoundBox2d& rclBB)
|
||||
{
|
||||
MinX = rclBB.MinX;
|
||||
@@ -366,10 +386,10 @@ inline BoundBox2d& BoundBox2d::operator= (const BoundBox2d& rclBB)
|
||||
|
||||
inline bool BoundBox2d::operator== (const BoundBox2d& rclBB) const
|
||||
{
|
||||
return (fabs (MinX - rclBB.MinX) <= DBL_EPSILON) &&
|
||||
(fabs (MinY - rclBB.MinY) <= DBL_EPSILON) &&
|
||||
(fabs (MaxX - rclBB.MaxX) <= DBL_EPSILON) &&
|
||||
(fabs (MaxY - rclBB.MaxY) <= DBL_EPSILON);
|
||||
return (MinX == rclBB.MinX) &&
|
||||
(MinY == rclBB.MinY) &&
|
||||
(MaxX == rclBB.MaxX) &&
|
||||
(MaxY == rclBB.MaxY);
|
||||
}
|
||||
|
||||
inline void BoundBox2d::Add(const Vector2d &rclVct)
|
||||
|
||||
+117
-118
@@ -37,90 +37,90 @@
|
||||
|
||||
// First check for *WIN64* since the *WIN32* are also set on 64-bit platforms
|
||||
#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
|
||||
# ifndef FC_OS_WIN32
|
||||
# define FC_OS_WIN32
|
||||
# endif
|
||||
# ifndef FC_OS_WIN64
|
||||
# define FC_OS_WIN64
|
||||
# endif
|
||||
# ifndef FC_OS_WIN32
|
||||
# define FC_OS_WIN32
|
||||
# endif
|
||||
# ifndef FC_OS_WIN64
|
||||
# define FC_OS_WIN64
|
||||
# endif
|
||||
#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
|
||||
# ifndef FC_OS_WIN32
|
||||
# define FC_OS_WIN32
|
||||
# endif
|
||||
# if defined(__MINGW32__)
|
||||
# if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# endif // HAVE_CONFIG_H
|
||||
//# define HAVE_INT8_T
|
||||
//# define HAVE_UINT8_T
|
||||
//# define HAVE_INT16_T
|
||||
//# define HAVE_UINT16_T
|
||||
//# define HAVE_INT32_T
|
||||
//# define HAVE_UINT32_T
|
||||
//# define HAVE_INT64_T
|
||||
//# define HAVE_UINT64_T
|
||||
//# define HAVE_INTPTR_T
|
||||
//# define HAVE_UINTPTR_T
|
||||
# endif
|
||||
# ifndef FC_OS_WIN32
|
||||
# define FC_OS_WIN32
|
||||
# endif
|
||||
# if defined(__MINGW32__)
|
||||
# if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
# endif // HAVE_CONFIG_H
|
||||
//# define HAVE_INT8_T
|
||||
//# define HAVE_UINT8_T
|
||||
//# define HAVE_INT16_T
|
||||
//# define HAVE_UINT16_T
|
||||
//# define HAVE_INT32_T
|
||||
//# define HAVE_UINT32_T
|
||||
//# define HAVE_INT64_T
|
||||
//# define HAVE_UINT64_T
|
||||
//# define HAVE_INTPTR_T
|
||||
//# define HAVE_UINTPTR_T
|
||||
# endif
|
||||
#elif defined(__MWERKS__) && defined(__INTEL__)
|
||||
# ifndef FC_OS_WIN32
|
||||
# define FC_OS_WIN32
|
||||
# endif
|
||||
# ifndef FC_OS_WIN32
|
||||
# define FC_OS_WIN32
|
||||
# endif
|
||||
#elif defined(__APPLE__)
|
||||
# ifndef FC_OS_MACOSX
|
||||
# define FC_OS_MACOSX
|
||||
# endif
|
||||
# ifndef FC_OS_MACOSX
|
||||
# define FC_OS_MACOSX
|
||||
# endif
|
||||
#elif defined(linux) || defined(__linux) || defined(__linux__) || defined(__GLIBC__)
|
||||
# ifndef FC_OS_LINUX
|
||||
# define FC_OS_LINUX
|
||||
# endif
|
||||
# ifndef FC_OS_LINUX
|
||||
# define FC_OS_LINUX
|
||||
# endif
|
||||
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
# ifndef FC_OS_BSD
|
||||
# define FC_OS_BSD
|
||||
# endif
|
||||
# ifndef FC_OS_BSD
|
||||
# define FC_OS_BSD
|
||||
# endif
|
||||
#elif defined(__CYGWIN__)
|
||||
# ifndef FC_OS_CYGWIN
|
||||
# define FC_OS_CYGWIN
|
||||
# ifndef FC_OS_CYGWIN
|
||||
# define FC_OS_CYGWIN
|
||||
// Avoid conflicts with Inventor
|
||||
# define HAVE_INT8_T
|
||||
# define HAVE_UINT8_T
|
||||
# define HAVE_INT16_T
|
||||
# define HAVE_UINT16_T
|
||||
# define HAVE_INT32_T
|
||||
# define HAVE_UINT32_T
|
||||
# define HAVE_INT64_T
|
||||
# define HAVE_UINT64_T
|
||||
# define HAVE_INTPTR_T
|
||||
# define HAVE_UINTPTR_T
|
||||
# define HAVE_INT8_T
|
||||
# define HAVE_UINT8_T
|
||||
# define HAVE_INT16_T
|
||||
# define HAVE_UINT16_T
|
||||
# define HAVE_INT32_T
|
||||
# define HAVE_UINT32_T
|
||||
# define HAVE_INT64_T
|
||||
# define HAVE_UINT64_T
|
||||
# define HAVE_INTPTR_T
|
||||
# define HAVE_UINTPTR_T
|
||||
#endif
|
||||
//#elif defined(sun) || defined(__sun) || defined(__sun__)
|
||||
//# if defined(__SVR4)
|
||||
//# define _FC_OS_SOLARIS
|
||||
//# else
|
||||
//# define _FC_OS_SUN_
|
||||
//# endif
|
||||
//# if defined(__SVR4)
|
||||
//# define _FC_OS_SOLARIS
|
||||
//# else
|
||||
//# define _FC_OS_SUN_
|
||||
//# endif
|
||||
//#elif defined(hpux) || defined(__hpux) || defined(__hpux__)
|
||||
//# define FC_OS_HPUX_
|
||||
//# define FC_OS_HPUX_
|
||||
//#elif defined(__FreeBSD__)
|
||||
//# define FC_OS_FREEBSD
|
||||
//# define FC_OS_FREEBSD
|
||||
//#elif defined(__NetBSD__)
|
||||
//# define FC_OS_NETBSD
|
||||
//# define FC_OS_NETBSD
|
||||
//#elif defined(__OpenBSD__)
|
||||
//# define FC_OS_OPENBSD
|
||||
//# define FC_OS_OPENBSD
|
||||
//#elif defined(sgi) || defined(__sgi)
|
||||
//# define FC_OS_IRIX
|
||||
//# define FC_OS_IRIX
|
||||
//#elif defined(_AIX)
|
||||
//# define FC_OS_AIX
|
||||
//# define FC_OS_AIX
|
||||
//#elif defined(__GNU__)
|
||||
//# define FC_OS_GNU
|
||||
//# define FC_OS_GNU
|
||||
#else
|
||||
# error "FreeCAD is not ported to this OS yet. For help see www.freecadweb.org"
|
||||
# error "FreeCAD is not ported to this OS yet. For help see www.freecadweb.org"
|
||||
#endif
|
||||
|
||||
#ifdef FC_OS_WIN32
|
||||
# define PATHSEP '\\'
|
||||
# define PATHSEP '\\'
|
||||
#else
|
||||
# define PATHSEP '/'
|
||||
# define PATHSEP '/'
|
||||
#endif
|
||||
|
||||
//**************************************************************************
|
||||
@@ -132,7 +132,7 @@
|
||||
|
||||
#ifndef HAVE_INT8_T
|
||||
#define HAVE_INT8_T
|
||||
typedef signed char int8_t;
|
||||
typedef signed char int8_t;
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_UINT8_T
|
||||
@@ -178,20 +178,20 @@ typedef unsigned __int64 uint64_t;
|
||||
// Open CasCade
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# ifndef WNT
|
||||
# define WNT
|
||||
# endif
|
||||
# ifndef WIN32
|
||||
# define WIN32
|
||||
# endif
|
||||
# ifndef _WINDOWS
|
||||
# define _WINDOWS
|
||||
# endif
|
||||
# ifndef WNT
|
||||
# define WNT
|
||||
# endif
|
||||
# ifndef WIN32
|
||||
# define WIN32
|
||||
# endif
|
||||
# ifndef _WINDOWS
|
||||
# define _WINDOWS
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef FC_OS_LINUX
|
||||
# define LIN
|
||||
# define LININTEL
|
||||
# define LIN
|
||||
# define LININTEL
|
||||
//# define NO_CXX_EXCEPTION
|
||||
#endif
|
||||
|
||||
@@ -199,19 +199,19 @@ typedef unsigned __int64 uint64_t;
|
||||
|
||||
/// enables the use of the OCC DocumentBrowser
|
||||
#ifndef FC_OS_LINUX
|
||||
# define FC_USE_OCAFBROWSER
|
||||
# define FC_USE_OCAFBROWSER
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef FC_OCC_DEBUG
|
||||
# ifdef FC_DEBUG
|
||||
# define DEBUG 1
|
||||
# else
|
||||
# undef DEBUG
|
||||
# ifndef NDEBUG
|
||||
# define NDEBUG
|
||||
# endif
|
||||
# endif
|
||||
# ifdef FC_DEBUG
|
||||
# define DEBUG 1
|
||||
# else
|
||||
# undef DEBUG
|
||||
# ifndef NDEBUG
|
||||
# define NDEBUG
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -281,49 +281,49 @@ typedef unsigned __int64 uint64_t;
|
||||
// Don't catch C++ exceptions in DEBUG!
|
||||
#ifdef FC_DEBUG
|
||||
# define DONT_CATCH_CXX_EXCEPTIONS 1
|
||||
# define DBG_TRY
|
||||
# define DBG_CATCH(X)
|
||||
# define DBG_TRY
|
||||
# define DBG_CATCH(X)
|
||||
#else
|
||||
/// used to switch a catch with the debug state
|
||||
# define DBG_TRY try {
|
||||
# define DBG_TRY try {
|
||||
/// see docu DBGTRY
|
||||
# define DBG_CATCH(X) }catch(...) { X }
|
||||
# define DBG_CATCH(X) } catch (...) { X }
|
||||
#endif
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// Windows import export DLL defines
|
||||
#if defined (FC_OS_WIN32) || defined(FC_OS_CYGWIN)
|
||||
# ifdef FCApp
|
||||
# define AppExport __declspec(dllexport)
|
||||
# define DataExport __declspec(dllexport)
|
||||
# else
|
||||
# define AppExport __declspec(dllimport)
|
||||
# define DataExport __declspec(dllimport)
|
||||
# endif
|
||||
# ifdef FCBase
|
||||
# define BaseExport __declspec(dllexport)
|
||||
# else
|
||||
# define BaseExport __declspec(dllimport)
|
||||
# endif
|
||||
# ifdef FCGui
|
||||
# define GuiExport __declspec(dllexport)
|
||||
# else
|
||||
# define GuiExport __declspec(dllimport)
|
||||
# endif
|
||||
# ifdef FCApp
|
||||
# define AppExport __declspec(dllexport)
|
||||
# define DataExport __declspec(dllexport)
|
||||
# else
|
||||
# define AppExport __declspec(dllimport)
|
||||
# define DataExport __declspec(dllimport)
|
||||
# endif
|
||||
# ifdef FCBase
|
||||
# define BaseExport __declspec(dllexport)
|
||||
# else
|
||||
# define BaseExport __declspec(dllimport)
|
||||
# endif
|
||||
# ifdef FCGui
|
||||
# define GuiExport __declspec(dllexport)
|
||||
# else
|
||||
# define GuiExport __declspec(dllimport)
|
||||
# endif
|
||||
#else
|
||||
# ifndef BaseExport
|
||||
# define BaseExport
|
||||
# endif
|
||||
# ifndef GuiExport
|
||||
# define GuiExport
|
||||
# endif
|
||||
# ifndef AppExport
|
||||
# define AppExport
|
||||
# endif
|
||||
# ifndef DataExport
|
||||
# define DataExport
|
||||
# endif
|
||||
# ifndef BaseExport
|
||||
# define BaseExport
|
||||
# endif
|
||||
# ifndef GuiExport
|
||||
# define GuiExport
|
||||
# endif
|
||||
# ifndef AppExport
|
||||
# define AppExport
|
||||
# endif
|
||||
# ifndef DataExport
|
||||
# define DataExport
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -342,5 +342,4 @@ typedef unsigned __int64 uint64_t;
|
||||
//# define _PreComp_ // use precompiled header
|
||||
#endif
|
||||
|
||||
|
||||
#endif //FC_CONFIG_H
|
||||
|
||||
@@ -230,10 +230,10 @@ struct PyMethodDef FreeCADGui_methods[] = {
|
||||
|
||||
Gui::MDIView* Application::activeView(void) const
|
||||
{
|
||||
if (activeDocument())
|
||||
return activeDocument()->getActiveView();
|
||||
else
|
||||
return NULL;
|
||||
if (activeDocument())
|
||||
return activeDocument()->getActiveView();
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
} // namespace Gui
|
||||
|
||||
@@ -1070,6 +1070,7 @@ SET(FreeCADGui_CPP_SRCS
|
||||
Document.cpp
|
||||
DocumentModel.cpp
|
||||
DocumentPyImp.cpp
|
||||
DocumentObserver.cpp
|
||||
ExpressionBinding.cpp
|
||||
GraphicsViewZoom.cpp
|
||||
ExpressionCompleter.cpp
|
||||
@@ -1094,6 +1095,7 @@ SET(FreeCADGui_SRCS
|
||||
BitmapFactory.h
|
||||
Document.h
|
||||
DocumentModel.h
|
||||
DocumentObserver.h
|
||||
ExpressionBinding.cpp
|
||||
ExpressionCompleter.h
|
||||
FreeCADGuiInit.py
|
||||
|
||||
@@ -93,6 +93,7 @@ void DlgPropertyLink::findObjects(bool on)
|
||||
QString docName = link[0];
|
||||
QString objName = link[1];
|
||||
QString parName = link[3];
|
||||
QString searchText = ui->searchBox->text();
|
||||
|
||||
App::Document* doc = App::GetApplication().getDocument((const char*)docName.toLatin1());
|
||||
if (doc) {
|
||||
@@ -128,7 +129,13 @@ void DlgPropertyLink::findObjects(bool on)
|
||||
std::vector<App::DocumentObject*> obj = doc->getObjectsOfType(baseType);
|
||||
for (std::vector<App::DocumentObject*>::iterator it = obj.begin(); it != obj.end(); ++it) {
|
||||
Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(*it);
|
||||
if (vp) {
|
||||
bool nameOk = true;
|
||||
if (!searchText.isEmpty()) {
|
||||
QString label = QString::fromUtf8((*it)->Label.getValue());
|
||||
if (!label.contains(searchText,Qt::CaseInsensitive))
|
||||
nameOk = false;
|
||||
}
|
||||
if (vp && nameOk) {
|
||||
// filter out the objects
|
||||
if (std::find(outList.begin(), outList.end(), *it) == outList.end()) {
|
||||
QListWidgetItem* item = new QListWidgetItem(ui->listWidget);
|
||||
@@ -148,4 +155,11 @@ void DlgPropertyLink::on_checkObjectType_toggled(bool on)
|
||||
findObjects(on);
|
||||
}
|
||||
|
||||
void DlgPropertyLink::on_searchBox_textChanged(const QString& /*search*/)
|
||||
{
|
||||
ui->listWidget->clear();
|
||||
bool on = ui->checkObjectType->isChecked();
|
||||
findObjects(on);
|
||||
}
|
||||
|
||||
#include "moc_DlgPropertyLink.cpp"
|
||||
|
||||
@@ -42,6 +42,7 @@ public:
|
||||
|
||||
private Q_SLOTS:
|
||||
void on_checkObjectType_toggled(bool);
|
||||
void on_searchBox_textChanged(const QString&);
|
||||
|
||||
private:
|
||||
void findObjects(bool on);
|
||||
|
||||
@@ -14,17 +14,35 @@
|
||||
<string>Link</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="listWidget"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Search</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="searchBox">
|
||||
<property name="toolTip">
|
||||
<string>A search pattern to filter the results above</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="checkObjectType">
|
||||
<property name="text">
|
||||
<string>Show all object types</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="listWidget"/>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2008 Werner Mayer <wmayer[at]users.sourceforge.net> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Library General Public *
|
||||
* License as published by the Free Software Foundation; either *
|
||||
* version 2 of the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This library is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Library General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Library General Public *
|
||||
* License along with this library; see the file COPYING.LIB. If not, *
|
||||
* write to the Free Software Foundation, Inc., 59 Temple Place, *
|
||||
* Suite 330, Boston, MA 02111-1307, USA *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "PreCompiled.h"
|
||||
|
||||
#ifndef _PreComp_
|
||||
# include <sstream>
|
||||
#endif
|
||||
|
||||
#include <boost/signals.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
#include "Application.h"
|
||||
#include "Document.h"
|
||||
#include "ViewProviderDocumentObject.h"
|
||||
#include "DocumentObserver.h"
|
||||
|
||||
using namespace Gui;
|
||||
|
||||
|
||||
DocumentObserver::DocumentObserver()
|
||||
{
|
||||
}
|
||||
|
||||
DocumentObserver::~DocumentObserver()
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::attachDocument(Document* doc)
|
||||
{
|
||||
detachDocument();
|
||||
|
||||
if (doc == nullptr)
|
||||
return;
|
||||
|
||||
this->connectDocumentCreatedObject = doc->signalNewObject.connect(boost::bind
|
||||
(&DocumentObserver::slotCreatedObject, this, _1));
|
||||
this->connectDocumentDeletedObject = doc->signalDeletedObject.connect(boost::bind
|
||||
(&DocumentObserver::slotDeletedObject, this, _1));
|
||||
this->connectDocumentChangedObject = doc->signalChangedObject.connect(boost::bind
|
||||
(&DocumentObserver::slotChangedObject, this, _1, _2));
|
||||
this->connectDocumentRelabelObject = doc->signalRelabelObject.connect(boost::bind
|
||||
(&DocumentObserver::slotRelabelObject, this, _1));
|
||||
this->connectDocumentActivateObject = doc->signalActivatedObject.connect(boost::bind
|
||||
(&DocumentObserver::slotActivatedObject, this, _1));
|
||||
this->connectDocumentEditObject = doc->signalInEdit.connect(boost::bind
|
||||
(&DocumentObserver::slotEnterEditObject, this, _1));
|
||||
this->connectDocumentResetObject = doc->signalResetEdit.connect(boost::bind
|
||||
(&DocumentObserver::slotResetEditObject, this, _1));
|
||||
this->connectDocumentUndo = doc->signalUndoDocument.connect(boost::bind
|
||||
(&DocumentObserver::slotUndoDocument, this, _1));
|
||||
this->connectDocumentRedo = doc->signalRedoDocument.connect(boost::bind
|
||||
(&DocumentObserver::slotRedoDocument, this, _1));
|
||||
}
|
||||
|
||||
void DocumentObserver::detachDocument()
|
||||
{
|
||||
this->connectDocumentCreatedObject.disconnect();
|
||||
this->connectDocumentDeletedObject.disconnect();
|
||||
this->connectDocumentChangedObject.disconnect();
|
||||
this->connectDocumentRelabelObject.disconnect();
|
||||
this->connectDocumentActivateObject.disconnect();
|
||||
this->connectDocumentEditObject.disconnect();
|
||||
this->connectDocumentResetObject.disconnect();
|
||||
this->connectDocumentUndo.disconnect();
|
||||
this->connectDocumentRedo.disconnect();
|
||||
}
|
||||
|
||||
void DocumentObserver::enableNotifications(DocumentObserver::Notifications value)
|
||||
{
|
||||
this->connectDocumentCreatedObject.block(!(value & Create));
|
||||
this->connectDocumentDeletedObject.block(!(value & Delete));
|
||||
this->connectDocumentChangedObject.block(!(value & Change));
|
||||
this->connectDocumentRelabelObject.block(!(value & Relabel));
|
||||
this->connectDocumentActivateObject.block(!(value & Activate));
|
||||
this->connectDocumentEditObject.block(!(value & Edit));
|
||||
this->connectDocumentResetObject.block(!(value & Reset));
|
||||
this->connectDocumentUndo.block(!(value & Undo));
|
||||
this->connectDocumentRedo.block(!(value & Redo));
|
||||
}
|
||||
|
||||
void DocumentObserver::slotUndoDocument(const Document& /*Doc*/)
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::slotRedoDocument(const Document& /*Doc*/)
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::slotCreatedObject(const ViewProviderDocumentObject& /*Obj*/)
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::slotDeletedObject(const ViewProviderDocumentObject& /*Obj*/)
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::slotChangedObject(const ViewProviderDocumentObject& /*Obj*/,
|
||||
const App::Property& /*Prop*/)
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::slotRelabelObject(const ViewProviderDocumentObject& /*Obj*/)
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::slotActivatedObject(const ViewProviderDocumentObject& /*Obj*/)
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::slotEnterEditObject(const ViewProviderDocumentObject& /*Obj*/)
|
||||
{
|
||||
}
|
||||
|
||||
void DocumentObserver::slotResetEditObject(const ViewProviderDocumentObject& /*Obj*/)
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2008 Werner Mayer <wmayer[at]users.sourceforge.net> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU Library General Public *
|
||||
* License as published by the Free Software Foundation; either *
|
||||
* version 2 of the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This library is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU Library General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Library General Public *
|
||||
* License along with this library; see the file COPYING.LIB. If not, *
|
||||
* write to the Free Software Foundation, Inc., 59 Temple Place, *
|
||||
* Suite 330, Boston, MA 02111-1307, USA *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef GUI_DOCUMENTOBSERVER_H
|
||||
#define GUI_DOCUMENTOBSERVER_H
|
||||
|
||||
#include <Base/BaseClass.h>
|
||||
#include <boost/signals.hpp>
|
||||
#include <QFlags>
|
||||
|
||||
namespace App { class Property; }
|
||||
namespace Gui
|
||||
{
|
||||
class Document;
|
||||
class ViewProviderDocumentObject;
|
||||
|
||||
/**
|
||||
* The DocumentObserver class simplifies the step to write classes that listen
|
||||
* to what happens inside a document.
|
||||
* This is very useful for classes that needs to be notified when an observed
|
||||
* object has changed.
|
||||
*
|
||||
* @author Werner Mayer
|
||||
*/
|
||||
class GuiExport DocumentObserver
|
||||
{
|
||||
public:
|
||||
enum Notification {
|
||||
None = 0x0000,
|
||||
Create = 0x0001,
|
||||
Delete = 0x0002,
|
||||
Change = 0x0004,
|
||||
Relabel = 0x0008,
|
||||
Activate = 0x0010,
|
||||
Edit = 0x0020,
|
||||
Reset = 0x0040,
|
||||
Undo = 0x0080,
|
||||
Redo = 0x0100,
|
||||
All = 0x01ff
|
||||
};
|
||||
Q_DECLARE_FLAGS(Notifications, Notification)
|
||||
|
||||
/// Constructor
|
||||
DocumentObserver();
|
||||
virtual ~DocumentObserver();
|
||||
|
||||
/** Attaches to another document, the old document
|
||||
* is not longer observed then.
|
||||
*/
|
||||
void attachDocument(Document*);
|
||||
/** Detaches from the current document, the document
|
||||
* is not longer observed then.
|
||||
*/
|
||||
void detachDocument();
|
||||
/** Activates the connection depending on the given value.
|
||||
*/
|
||||
void enableNotifications(Notifications value);
|
||||
|
||||
private:
|
||||
/** Notifies when an object has been created. */
|
||||
virtual void slotCreatedObject(const ViewProviderDocumentObject& Obj);
|
||||
/** Notifies when the object is about to be removed. */
|
||||
virtual void slotDeletedObject(const ViewProviderDocumentObject& Obj);
|
||||
/** The property of an observed object has changed */
|
||||
virtual void slotChangedObject(const ViewProviderDocumentObject& Obj,
|
||||
const App::Property& Prop);
|
||||
/** Notifies when the object has been relabeled. */
|
||||
virtual void slotRelabelObject(const ViewProviderDocumentObject& Obj);
|
||||
/** Notifies when the object has been activated. */
|
||||
virtual void slotActivatedObject(const ViewProviderDocumentObject& Obj);
|
||||
/** Notifies when the object entered edit mode. */
|
||||
virtual void slotEnterEditObject(const ViewProviderDocumentObject& Obj);
|
||||
/** Notifies when the object resets edit mode. */
|
||||
virtual void slotResetEditObject(const ViewProviderDocumentObject& Obj);
|
||||
/** Notifies on undo */
|
||||
virtual void slotUndoDocument(const Document& Doc);
|
||||
/** Notifies on redo */
|
||||
virtual void slotRedoDocument(const Document& Doc);
|
||||
|
||||
private:
|
||||
typedef boost::BOOST_SIGNALS_NAMESPACE::scoped_connection Connection;
|
||||
Connection connectDocumentCreatedObject;
|
||||
Connection connectDocumentDeletedObject;
|
||||
Connection connectDocumentChangedObject;
|
||||
Connection connectDocumentRelabelObject;
|
||||
Connection connectDocumentActivateObject;
|
||||
Connection connectDocumentEditObject;
|
||||
Connection connectDocumentResetObject;
|
||||
Connection connectDocumentUndo;
|
||||
Connection connectDocumentRedo;
|
||||
};
|
||||
|
||||
} //namespace Gui
|
||||
|
||||
#endif // GUI_DOCUMENTOBSERVER_H
|
||||
@@ -183,11 +183,11 @@ void ViewProviderGroupExtension::extensionHide(void) {
|
||||
bool ViewProviderGroupExtension::extensionOnDelete(const std::vector< std::string >& ) {
|
||||
|
||||
auto* group = getExtendedViewProvider()->getObject()->getExtensionByType<App::GroupExtension>();
|
||||
// If the group is nonempty ask the user if he wants to delete it's content
|
||||
// If the group is nonempty ask the user if he wants to delete its content
|
||||
if ( group->Group.getSize () ) {
|
||||
QMessageBox::StandardButton choice =
|
||||
QMessageBox::question ( 0, QObject::tr ( "Delete group content?" ),
|
||||
QObject::tr ( "The %1 is not empty, delete it's content as well?")
|
||||
QObject::tr ( "The %1 is not empty, delete its content as well?")
|
||||
.arg ( QString::fromUtf8 ( getExtendedViewProvider()->getObject()->Label.getValue () ) ),
|
||||
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes );
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
# include <QPixmap>
|
||||
# include <QTextStream>
|
||||
# include <QTimer>
|
||||
# include <QApplication>
|
||||
# include <QPalette>
|
||||
#endif
|
||||
|
||||
#include <Base/Tools.h>
|
||||
@@ -3369,20 +3371,22 @@ LinkLabel::~LinkLabel()
|
||||
void LinkLabel::setPropertyLink(const QStringList& o)
|
||||
{
|
||||
link = o;
|
||||
|
||||
QString linkcolor = QApplication::palette().color(QPalette::Link).name();
|
||||
QString text = QString::fromLatin1(
|
||||
"<html><head><style type=\"text/css\">"
|
||||
"p, li { white-space: pre-wrap; }"
|
||||
"</style></head><body>"
|
||||
"<p>"
|
||||
"<a href=\"%1.%2\"><span style=\" text-decoration: underline; color:#0000ff;\">%3</span></a>"
|
||||
"<a href=\"%1.%2\"><span style=\" text-decoration: underline; color:%3;\">%4</span></a>"
|
||||
"<span> </span>"
|
||||
"<a href=\"@__edit_link_prop__@\"><span style=\" text-decoration: underline; color:#0000ff;\">%4</span></a>"
|
||||
"<a href=\"@__edit_link_prop__@\"><span style=\" text-decoration: underline; color:%5;\">%6</span></a>"
|
||||
"</p></body></html>"
|
||||
)
|
||||
.arg(link[0])
|
||||
.arg(link[1])
|
||||
.arg(linkcolor)
|
||||
.arg(link[2])
|
||||
.arg(linkcolor)
|
||||
.arg(tr("Edit..."));
|
||||
setText(text);
|
||||
}
|
||||
|
||||
@@ -244,7 +244,9 @@ Building creation aborted.\n" )
|
||||
ss += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Building"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeBuilding("+ss+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeBuilding("+ss+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
@@ -356,7 +356,7 @@ def closeHole(shape):
|
||||
for face in shape.Faces:
|
||||
for edge in face.Edges:
|
||||
hc = edge.hashCode()
|
||||
if lut.has_key(hc):
|
||||
if hc in lut:
|
||||
lut[hc] = lut[hc] + 1
|
||||
else:
|
||||
lut[hc] = 1
|
||||
@@ -1290,9 +1290,11 @@ class _CommandComponent:
|
||||
if sel:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Component"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.Control.closeDialog()
|
||||
for o in sel:
|
||||
FreeCADGui.doCommand("Arch.makeComponent(FreeCAD.ActiveDocument."+o.Name+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeComponent(FreeCAD.ActiveDocument."+o.Name+")")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
@@ -1313,9 +1315,11 @@ class _CommandCloneComponent:
|
||||
if sel:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Component"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.Control.closeDialog()
|
||||
for o in sel:
|
||||
FreeCADGui.doCommand("Arch.cloneComponent(FreeCAD.ActiveDocument."+o.Name+")")
|
||||
FreeCADGui.doCommand("obj = Arch.cloneComponent(FreeCAD.ActiveDocument."+o.Name+")")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
@@ -192,7 +192,9 @@ class _CommandEquipment:
|
||||
base = s[0].Name
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Equipment")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeEquipment(FreeCAD.ActiveDocument." + base + ")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeEquipment(FreeCAD.ActiveDocument." + base + ")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
# get diffuse color info from base object
|
||||
|
||||
@@ -103,7 +103,9 @@ Floor creation aborted.\n" )
|
||||
ss += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Floor"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeFloor("+ss+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeFloor("+ss+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
@@ -84,7 +84,9 @@ class _CommandFrame:
|
||||
if len(s) == 2:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Frame"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeFrame(FreeCAD.ActiveDocument."+s[0].Name+",FreeCAD.ActiveDocument."+s[1].Name+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeFrame(FreeCAD.ActiveDocument."+s[0].Name+",FreeCAD.ActiveDocument."+s[1].Name+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
@@ -151,8 +151,10 @@ class CommandPanel:
|
||||
return
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Panel")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.addModule("Draft")
|
||||
for obj in sel:
|
||||
FreeCADGui.doCommand("Arch.makePanel(FreeCAD.ActiveDocument." + obj.Name + ",thickness=" + str(self.Thickness) + ")")
|
||||
FreeCADGui.doCommand("obj = Arch.makePanel(FreeCAD.ActiveDocument." + obj.Name + ",thickness=" + str(self.Thickness) + ")")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
|
||||
@@ -117,12 +117,16 @@ class _CommandPipe:
|
||||
if len(obj.Shape.Wires) == 1:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Pipe"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makePipe(FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makePipe(FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
else:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Pipe"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makePipe()")
|
||||
FreeCADGui.doCommand("obj = Arch.makePipe()")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
@@ -159,7 +163,9 @@ class _CommandPipeConnector:
|
||||
o += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Connector"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makePipeConnector("+o+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makePipeConnector("+o+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
@@ -139,7 +139,9 @@ class _CommandRoof:
|
||||
idx = int(sel.SubElementNames[0][4:])
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Roof"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+","+str(idx)+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+","+str(idx)+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
@@ -147,7 +149,9 @@ class _CommandRoof:
|
||||
if obj.Shape.Wires:
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Roof"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeRoof(FreeCAD.ActiveDocument."+obj.Name+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
|
||||
@@ -137,7 +137,7 @@ def getSVG(section,allOn=False,renderMode="Wireframe",showHidden=False,showFill=
|
||||
If showFill is True, the cut areas get filled with a pattern"""
|
||||
|
||||
if not section.Objects:
|
||||
return
|
||||
return ""
|
||||
import Part,DraftGeomUtils
|
||||
p = FreeCAD.Placement(section.Placement)
|
||||
direction = p.Rotation.multVec(FreeCAD.Vector(0,0,1))
|
||||
|
||||
@@ -290,7 +290,9 @@ Site creation aborted." )
|
||||
ss += "]"
|
||||
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Site"))
|
||||
FreeCADGui.addModule("Arch")
|
||||
FreeCADGui.doCommand("Arch.makeSite("+ss+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeSite("+ss+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
@@ -229,9 +229,11 @@ class _CommandSpace:
|
||||
if sel:
|
||||
FreeCADGui.Control.closeDialog()
|
||||
if len(sel) == 1:
|
||||
FreeCADGui.doCommand("Arch.makeSpace(FreeCADGui.Selection.getSelection())")
|
||||
FreeCADGui.doCommand("obj = Arch.makeSpace(FreeCADGui.Selection.getSelection())")
|
||||
else:
|
||||
FreeCADGui.doCommand("Arch.makeSpace(FreeCADGui.Selection.getSelectionEx())")
|
||||
FreeCADGui.doCommand("obj = Arch.makeSpace(FreeCADGui.Selection.getSelectionEx())")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
else:
|
||||
|
||||
@@ -91,9 +91,11 @@ class _CommandStairs:
|
||||
FreeCADGui.addModule("Arch")
|
||||
if len(FreeCADGui.Selection.getSelection()) == 1:
|
||||
n = FreeCADGui.Selection.getSelection()[0].Name
|
||||
FreeCADGui.doCommand("Arch.makeStairs(baseobj=FreeCAD.ActiveDocument."+n+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeStairs(baseobj=FreeCAD.ActiveDocument."+n+")")
|
||||
else:
|
||||
FreeCADGui.doCommand("Arch.makeStairs(steps="+str(p.GetInt("StairsSteps",17))+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeStairs(steps="+str(p.GetInt("StairsSteps",17))+")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
@@ -155,9 +155,11 @@ class _CommandStructure:
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Structural System")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
if st:
|
||||
FreeCADGui.doCommand("Arch.makeStructuralSystem(" + ArchCommands.getStringList(st) + "," + ArchCommands.getStringList(ax) + ")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeStructuralSystem(" + ArchCommands.getStringList(st) + "," + ArchCommands.getStringList(ax) + ")")
|
||||
else:
|
||||
FreeCADGui.doCommand("Arch.makeStructuralSystem(axes=" + ArchCommands.getStringList(ax) + ")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeStructuralSystem(axes=" + ArchCommands.getStringList(ax) + ")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
@@ -165,7 +167,9 @@ class _CommandStructure:
|
||||
FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Create Structure")))
|
||||
FreeCADGui.addModule("Arch")
|
||||
for obj in sel:
|
||||
FreeCADGui.doCommand("Arch.makeStructure(FreeCAD.ActiveDocument." + obj.Name + ")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeStructure(FreeCAD.ActiveDocument." + obj.Name + ")")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
@@ -226,6 +230,8 @@ class _CommandStructure:
|
||||
FreeCADGui.doCommand('s = Arch.makeStructure(length='+str(self.Length)+',width='+str(self.Width)+',height='+str(self.Height)+')')
|
||||
FreeCADGui.doCommand('s.Placement.Base = '+DraftVecUtils.toString(point))
|
||||
FreeCADGui.doCommand('s.Placement.Rotation=s.Placement.Rotation.multiply(FreeCAD.DraftWorkingPlane.getRotation().Rotation)')
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(s)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
if self.continueCmd:
|
||||
|
||||
@@ -198,12 +198,14 @@ class _CommandWall:
|
||||
if selobj.HasSubObjects:
|
||||
if "Face" in selobj.SubElementNames[0]:
|
||||
idx = int(selobj.SubElementNames[0][4:])
|
||||
FreeCADGui.doCommand("Arch.makeWall(FreeCAD.ActiveDocument."+selobj.Object.Name+",face="+str(idx)+")")
|
||||
FreeCADGui.doCommand("obj = Arch.makeWall(FreeCAD.ActiveDocument."+selobj.Object.Name+",face="+str(idx)+")")
|
||||
spacedone = True
|
||||
if not spacedone:
|
||||
FreeCADGui.doCommand('Arch.makeWall(FreeCAD.ActiveDocument.'+selobj.Object.Name+')')
|
||||
FreeCADGui.doCommand('obj = Arch.makeWall(FreeCAD.ActiveDocument.'+selobj.Object.Name+')')
|
||||
else:
|
||||
FreeCADGui.doCommand('Arch.makeWall(FreeCAD.ActiveDocument.'+selobj.Object.Name+')')
|
||||
FreeCADGui.doCommand('obj = Arch.makeWall(FreeCAD.ActiveDocument.'+selobj.Object.Name+')')
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(obj)")
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
done = True
|
||||
@@ -273,6 +275,8 @@ class _CommandWall:
|
||||
FreeCADGui.doCommand('base.addGeometry(trace)')
|
||||
FreeCADGui.doCommand('wall = Arch.makeWall(base,width='+str(self.Width)+',height='+str(self.Height)+',align="'+str(self.Align)+'")')
|
||||
FreeCADGui.doCommand('wall.Normal = FreeCAD.DraftWorkingPlane.axis')
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("Draft.autogroup(wall)")
|
||||
|
||||
def update(self,point,info):
|
||||
"this function is called by the Snapper when the mouse is moved"
|
||||
|
||||
@@ -57,7 +57,7 @@ class ArchWorkbench(Workbench):
|
||||
"Draft_Clone"]
|
||||
self.draftextratools = ["Draft_WireToBSpline","Draft_AddPoint","Draft_DelPoint","Draft_ShapeString",
|
||||
"Draft_PathArray","Draft_Mirror","Draft_Stretch"]
|
||||
self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
|
||||
self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup","Draft_AutoGroup",
|
||||
"Draft_SelectGroup","Draft_SelectPlane",
|
||||
"Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine",
|
||||
"Draft_FinishLine","Draft_CloseLine"]
|
||||
|
||||
+173
-60
@@ -233,7 +233,7 @@ def getGroupNames():
|
||||
glist = []
|
||||
doc = FreeCAD.ActiveDocument
|
||||
for obj in doc.Objects:
|
||||
if obj.TypeId == "App::DocumentObjectGroup":
|
||||
if obj.isDerivedFrom("App::DocumentObjectGroup") or (getType(obj) in ["Floor","Building","Site"]):
|
||||
glist.append(obj.Name)
|
||||
return glist
|
||||
|
||||
@@ -243,6 +243,23 @@ def ungroup(obj):
|
||||
grp = FreeCAD.ActiveDocument.getObject(g)
|
||||
if grp.hasObject(obj):
|
||||
grp.removeObject(obj)
|
||||
|
||||
def autogroup(obj):
|
||||
"adds a given object to the autogroup, if applicable"
|
||||
if FreeCAD.GuiUp:
|
||||
if hasattr(FreeCADGui,"draftToolBar"):
|
||||
if hasattr(FreeCADGui.draftToolBar,"autogroup") and (not FreeCADGui.draftToolBar.isConstructionMode()):
|
||||
if FreeCADGui.draftToolBar.autogroup != None:
|
||||
g = FreeCAD.ActiveDocument.getObject(FreeCADGui.draftToolBar.autogroup)
|
||||
if g:
|
||||
found = False
|
||||
for o in g.Group:
|
||||
if o.Name == obj.Name:
|
||||
found = True
|
||||
if not found:
|
||||
gr = g.Group
|
||||
gr.append(obj)
|
||||
g.Group = gr
|
||||
|
||||
def dimSymbol(symbol=None,invert=False):
|
||||
"returns the current dim symbol from the preferences as a pivy SoMarkerSet"
|
||||
@@ -433,7 +450,7 @@ def formatObject(target,origin=None):
|
||||
fcol = (float(fcol[0]),float(fcol[1]),float(fcol[2]),0.0)
|
||||
lw = ui.linewidth
|
||||
fs = ui.fontsize
|
||||
if not origin:
|
||||
if not origin or not hasattr(origin,'ViewObject'):
|
||||
if "FontSize" in obrep.PropertiesList: obrep.FontSize = fs
|
||||
if "TextColor" in obrep.PropertiesList: obrep.TextColor = col
|
||||
if "LineWidth" in obrep.PropertiesList: obrep.LineWidth = lw
|
||||
@@ -1168,6 +1185,7 @@ def extrude(obj,vector,solid=False):
|
||||
if gui:
|
||||
obj.ViewObject.Visibility = False
|
||||
formatObject(newobj,obj)
|
||||
select(newobj)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return newobj
|
||||
|
||||
@@ -1203,6 +1221,7 @@ def fuse(object1,object2):
|
||||
object1.ViewObject.Visibility = False
|
||||
object2.ViewObject.Visibility = False
|
||||
formatObject(obj,object1)
|
||||
select(obj)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return obj
|
||||
|
||||
@@ -1215,6 +1234,7 @@ def cut(object1,object2):
|
||||
object1.ViewObject.Visibility = False
|
||||
object2.ViewObject.Visibility = False
|
||||
formatObject(obj,object1)
|
||||
select(obj)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return obj
|
||||
|
||||
@@ -1282,7 +1302,7 @@ def move(objectslist,vector,copy=False):
|
||||
if copy and getParam("selectBaseObjects",False):
|
||||
select(objectslist)
|
||||
else:
|
||||
select(newobjlist)
|
||||
select(newobjlist)
|
||||
if len(newobjlist) == 1: return newobjlist[0]
|
||||
return newobjlist
|
||||
|
||||
@@ -1438,7 +1458,8 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy
|
||||
elif (obj.TypeId == "App::Annotation"):
|
||||
factor = delta.x * delta.y * delta.z * obj.ViewObject.FontSize.Value
|
||||
obj.ViewObject.Fontsize = factor
|
||||
if copy: formatObject(newobj,obj)
|
||||
if copy:
|
||||
formatObject(newobj,obj)
|
||||
newobjlist.append(newobj)
|
||||
if copy and getParam("selectBaseObjects",False):
|
||||
select(objectslist)
|
||||
@@ -1830,6 +1851,8 @@ def getSVG(obj,scale=1,linewidth=0.35,fontsize=12,fillstyle="shape color",direct
|
||||
|
||||
def getDiscretized(edge):
|
||||
ml = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft").GetFloat("svgDiscretization",10.0)
|
||||
if ml == 0:
|
||||
ml = 10
|
||||
d = int(edge.Length/ml)
|
||||
if d == 0:
|
||||
d = 1
|
||||
@@ -2484,12 +2507,32 @@ def makeShape2DView(baseobj,projectionVector=None,facenumbers=[]):
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return obj
|
||||
|
||||
def makeSketch(objectslist,autoconstraints=False,addTo=None,delete=False,name="Sketch"):
|
||||
'''makeSketch(objectslist,[autoconstraints],[addTo],[delete],[name]): makes a Sketch
|
||||
objectslist with the given Draft objects. If autoconstraints is True,
|
||||
constraints will be automatically added to wire nodes, rectangles
|
||||
and circles. If addTo is an existing sketch, geometry will be added to it instead of
|
||||
creating a new one. If delete is True, the original object will be deleted'''
|
||||
def makeSketch(objectslist,autoconstraints=False,addTo=None,
|
||||
delete=False,name="Sketch",radiusPrecision=-1):
|
||||
'''makeSketch(objectslist,[autoconstraints],[addTo],[delete],[name],[radiusPrecision]):
|
||||
|
||||
Makes a Sketch objectslist with the given Draft objects.
|
||||
|
||||
* objectlist: can be single or list of objects of Draft type objects,
|
||||
Part::Feature, Part.Shape, or mix of them.
|
||||
|
||||
* autoconstraints(False): if True, constraints will be automatically added to
|
||||
wire nodes, rectangles and circles.
|
||||
|
||||
* addTo(None) : if set to an existing sketch, geometry will be added to it
|
||||
instead of creating a new one.
|
||||
|
||||
* delete(False): if True, the original object will be deleted.
|
||||
If set to a string 'all' the object and all its linked object will be
|
||||
deleted
|
||||
|
||||
* name('Sketch'): the name for the new sketch object
|
||||
|
||||
* radiusPrecision(-1): If <0, disable radius constraint. If =0, add indiviaul
|
||||
radius constraint. If >0, the radius will be rounded according to this
|
||||
precision, and 'Equal' constraint will be added to curve with equal
|
||||
radius within precision.'''
|
||||
|
||||
import Part, DraftGeomUtils
|
||||
from Sketcher import Constraint
|
||||
import Sketcher
|
||||
@@ -2501,20 +2544,46 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,delete=False,name="S
|
||||
MiddlePoint = 3
|
||||
deletable = None
|
||||
|
||||
if not isinstance(objectslist,list):
|
||||
if not isinstance(objectslist,(list,tuple)):
|
||||
objectslist = [objectslist]
|
||||
for obj in objectslist:
|
||||
if not DraftGeomUtils.isPlanar(obj.Shape):
|
||||
if isinstance(obj,Part.Shape):
|
||||
shape = obj
|
||||
elif not obj.isDerivedFrom("Part::Feature"):
|
||||
FreeCAD.Console.PrintError(translate("draft","not shape found"))
|
||||
return None
|
||||
else:
|
||||
shape = obj.Shape
|
||||
if not DraftGeomUtils.isPlanar(shape):
|
||||
FreeCAD.Console.PrintError(translate("draft","All Shapes must be co-planar"))
|
||||
return None
|
||||
if addTo:
|
||||
nobj = addTo
|
||||
else:
|
||||
nobj = FreeCAD.ActiveDocument.addObject("Sketcher::SketchObject", "Sketch")
|
||||
nobj = FreeCAD.ActiveDocument.addObject("Sketcher::SketchObject", name)
|
||||
deletable = nobj
|
||||
nobj.ViewObject.Autoconstraints = False
|
||||
startc = 0
|
||||
endc = 0
|
||||
|
||||
# Collect constraints and add in one go to improve performance
|
||||
constraints = []
|
||||
radiuses = {}
|
||||
|
||||
def addRadiusConstraint(edge):
|
||||
try:
|
||||
if radiusPrecision<0:
|
||||
return
|
||||
if radiusPrecision==0:
|
||||
constraints.append(Constraint('Radius',
|
||||
nobj.GeometryCount-1, edge.Curve.Radius))
|
||||
return
|
||||
r = round(edge.Curve.Radius,radiusPrecision)
|
||||
constraints.append(Constraint('Equal',
|
||||
radiuses[r],nobj.GeometryCount-1))
|
||||
except KeyError:
|
||||
radiuses[r] = nobj.GeometryCount-1
|
||||
constraints.append(Constraint('Radius',nobj.GeometryCount-1, r))
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
rotation = None
|
||||
for obj in objectslist:
|
||||
@@ -2541,8 +2610,7 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,delete=False,name="S
|
||||
last = math.radians(obj.LastAngle)
|
||||
arc = Part.ArcOfCircle(circle, first, last)
|
||||
nobj.addGeometry(arc)
|
||||
|
||||
# TODO add Radius constraits
|
||||
addRadiusConstraint(edge)
|
||||
ok = True
|
||||
elif tp == "Rectangle":
|
||||
if rotation is None:
|
||||
@@ -2554,14 +2622,14 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,delete=False,name="S
|
||||
last = nobj.GeometryCount - 1
|
||||
segs = [last-3,last-2,last-1,last]
|
||||
if obj.Placement.Rotation.Q == (0,0,0,1):
|
||||
nobj.addConstraint(Constraint("Coincident",last-3,EndPoint,last-2,StartPoint))
|
||||
nobj.addConstraint(Constraint("Coincident",last-2,EndPoint,last-1,StartPoint))
|
||||
nobj.addConstraint(Constraint("Coincident",last-1,EndPoint,last,StartPoint))
|
||||
nobj.addConstraint(Constraint("Coincident",last,EndPoint,last-3,StartPoint))
|
||||
nobj.addConstraint(Constraint("Horizontal",last-3))
|
||||
nobj.addConstraint(Constraint("Vertical",last-2))
|
||||
nobj.addConstraint(Constraint("Horizontal",last-1))
|
||||
nobj.addConstraint(Constraint("Vertical",last))
|
||||
constraints.append(Constraint("Coincident",last-3,EndPoint,last-2,StartPoint))
|
||||
constraints.append(Constraint("Coincident",last-2,EndPoint,last-1,StartPoint))
|
||||
constraints.append(Constraint("Coincident",last-1,EndPoint,last,StartPoint))
|
||||
constraints.append(Constraint("Coincident",last,EndPoint,last-3,StartPoint))
|
||||
constraints.append(Constraint("Horizontal",last-3))
|
||||
constraints.append(Constraint("Vertical",last-2))
|
||||
constraints.append(Constraint("Horizontal",last-1))
|
||||
constraints.append(Constraint("Vertical",last))
|
||||
ok = True
|
||||
elif tp in ["Wire","Polygon"]:
|
||||
if obj.FilletRadius.Value == 0:
|
||||
@@ -2592,67 +2660,112 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,delete=False,name="S
|
||||
last = nobj.GeometryCount
|
||||
segs = list(range(last-len(obj.Shape.Edges),last-1))
|
||||
for seg in segs:
|
||||
nobj.addConstraint(Constraint("Coincident",seg,EndPoint,seg+1,StartPoint))
|
||||
constraints.append(Constraint("Coincident",seg,EndPoint,seg+1,StartPoint))
|
||||
if DraftGeomUtils.isAligned(nobj.Geometry[seg],"x"):
|
||||
nobj.addConstraint(Constraint("Vertical",seg))
|
||||
constraints.append(Constraint("Vertical",seg))
|
||||
elif DraftGeomUtils.isAligned(nobj.Geometry[seg],"y"):
|
||||
nobj.addConstraint(Constraint("Horizontal",seg))
|
||||
constraints.append(Constraint("Horizontal",seg))
|
||||
if closed:
|
||||
nobj.addConstraint(Constraint("Coincident",last-1,EndPoint,segs[0],StartPoint))
|
||||
constraints.append(Constraint("Coincident",last-1,EndPoint,segs[0],StartPoint))
|
||||
ok = True
|
||||
elif obj.isDerivedFrom("Part::Feature"):
|
||||
if not DraftGeomUtils.isPlanar(obj.Shape):
|
||||
elif tp == 'Shape' or obj.isDerivedFrom("Part::Feature"):
|
||||
shape = obj if tp == 'Shape' else obj.Shape
|
||||
|
||||
if not DraftGeomUtils.isPlanar(shape):
|
||||
FreeCAD.Console.PrintError(translate("draft","The given object is not planar and cannot be converted into a sketch."))
|
||||
return None
|
||||
if rotation is None:
|
||||
#rotation = obj.Placement.Rotation
|
||||
norm = DraftGeomUtils.getNormal(obj.Shape)
|
||||
norm = DraftGeomUtils.getNormal(shape)
|
||||
if norm:
|
||||
rotation = FreeCAD.Rotation(FreeCAD.Vector(0,0,1),norm)
|
||||
else:
|
||||
FreeCAD.Console.PrintWarning(translate("draft","Unable to guess the normal direction of this object"))
|
||||
rotation = FreeCAD.Rotation()
|
||||
norm = obj.Placement.Rotation.Axis
|
||||
for e in obj.Shape.Edges:
|
||||
for e in shape.Edges:
|
||||
if DraftGeomUtils.geomType(e) in ["BSplineCurve","BezierCurve"]:
|
||||
FreeCAD.Console.PrintError(translate("draft","BSplines and Bezier curves are not supported by this tool"))
|
||||
return None
|
||||
# if not addTo:
|
||||
# nobj.Placement.Rotation = DraftGeomUtils.calculatePlacement(obj.Shape).Rotation
|
||||
# nobj.Placement.Rotation = DraftGeomUtils.calculatePlacement(shape).Rotation
|
||||
|
||||
if autoconstraints:
|
||||
for wire in obj.Shape.Wires:
|
||||
for edge in wire.OrderedEdges:
|
||||
nobj.addGeometry(DraftGeomUtils.orientEdge(edge))
|
||||
endc += 1
|
||||
segs = list(range(startc,endc))
|
||||
for seg in segs:
|
||||
for wire in shape.Wires:
|
||||
last_count = nobj.GeometryCount
|
||||
edges = wire.OrderedEdges
|
||||
for edge in edges:
|
||||
nobj.addGeometry(DraftGeomUtils.orientEdge(
|
||||
edge,norm,make_arc=True))
|
||||
addRadiusConstraint(edge)
|
||||
for i,g in enumerate(nobj.Geometry[last_count:]):
|
||||
if edges[i].Closed:
|
||||
continue
|
||||
seg = last_count+i
|
||||
|
||||
if DraftGeomUtils.isAligned(g,"x"):
|
||||
constraints.append(Constraint("Vertical",seg))
|
||||
elif DraftGeomUtils.isAligned(g,"y"):
|
||||
constraints.append(Constraint("Horizontal",seg))
|
||||
|
||||
if seg == nobj.GeometryCount-1:
|
||||
if wire.isClosed:
|
||||
if nobj.Geometry[seg].EndPoint == nobj.Geometry[startc].StartPoint:
|
||||
nobj.addConstraint(Constraint("Coincident",seg,EndPoint,startc,StartPoint))
|
||||
elif nobj.Geometry[seg].StartPoint == nobj.Geometry[startc].EndPoint:
|
||||
nobj.addConstraint(Constraint("Coincident",seg,StartPoint,startc,EndPoint))
|
||||
if not wire.isClosed():
|
||||
break
|
||||
g2 = nobj.Geometry[last_count]
|
||||
seg2 = last_count
|
||||
else:
|
||||
if nobj.Geometry[seg].EndPoint == nobj.Geometry[seg+1].StartPoint:
|
||||
nobj.addConstraint(Constraint("Coincident",seg,EndPoint,seg+1,StartPoint))
|
||||
elif nobj.Geometry[seg].StartPoint == nobj.Geometry[seg+1].EndPoint:
|
||||
nobj.addConstraint(Constraint("Coincident",seg,StartPoint,seg+1,EndPoint))
|
||||
if DraftGeomUtils.isAligned(nobj.Geometry[seg],"x"):
|
||||
nobj.addConstraint(Constraint("Vertical",seg))
|
||||
elif DraftGeomUtils.isAligned(nobj.Geometry[seg],"y"):
|
||||
nobj.addConstraint(Constraint("Horizontal",seg))
|
||||
startc = endc
|
||||
seg2 = seg+1
|
||||
g2 = nobj.Geometry[seg2]
|
||||
|
||||
end1 = g.value(g.LastParameter)
|
||||
start2 = g2.value(g2.FirstParameter)
|
||||
if DraftVecUtils.equals(end1,start2) :
|
||||
constraints.append(Constraint(
|
||||
"Coincident",seg,EndPoint,seg2,StartPoint))
|
||||
continue
|
||||
end2 = g2.value(g2.LastParameter)
|
||||
start1 = g.value(g.FirstParameter)
|
||||
if DraftVecUtils.equals(end2,start1):
|
||||
constraints.append(Constraint(
|
||||
"Coincident",seg,StartPoint,seg2,EndPoint))
|
||||
elif DraftVecUtils.equals(start1,start2):
|
||||
constraints.append(Constraint(
|
||||
"Coincident",seg,StartPoint,seg2,StartPoint))
|
||||
elif DraftVecUtils.equals(end1,end2):
|
||||
constraints.append(Constraint(
|
||||
"Coincident",seg,EndPoint,seg2,EndPoint))
|
||||
else:
|
||||
for edge in obj.Shape.Edges:
|
||||
nobj.addGeometry(DraftGeomUtils.orientEdge(edge,norm))
|
||||
for wire in shape.Wires:
|
||||
for edge in wire.OrderedEdges:
|
||||
nobj.addGeometry(DraftGeomUtils.orientEdge(
|
||||
edge,norm,make_arc=True))
|
||||
ok = True
|
||||
formatObject(nobj,obj)
|
||||
if ok and delete:
|
||||
FreeCAD.ActiveDocument.removeObject(obj.Name)
|
||||
if ok and delete and obj.isDerivedFrom("Part::Feature"):
|
||||
doc = obj.Document
|
||||
def delObj(obj):
|
||||
if obj.InList:
|
||||
FreeCAD.Console.PrintWarning(translate("draft",
|
||||
"Cannot delete object {} with dependency\n".format(obj.Label)))
|
||||
else:
|
||||
doc.removeObject(obj.Name)
|
||||
try:
|
||||
if delete == 'all':
|
||||
objs = [obj]
|
||||
while objs:
|
||||
obj = objs[0]
|
||||
objs = objs[1:] + obj.OutList
|
||||
delObj(obj)
|
||||
else:
|
||||
delObj(obj)
|
||||
except Exception as ex:
|
||||
FreeCAD.Console.PrintWarning(translate("draft",
|
||||
"Failed to delete object {}: {}\n".format(obj.Label,ex)))
|
||||
if rotation:
|
||||
nobj.Placement.Rotation = rotation
|
||||
else:
|
||||
print("-----error!!! rotation is still None...")
|
||||
nobj.addConstraint(constraints)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return nobj
|
||||
|
||||
@@ -2685,6 +2798,7 @@ def makePoint(X=0, Y=0, Z=0,color=None,name = "Point", point_size= 5):
|
||||
obj.ViewObject.PointColor = (float(color[0]), float(color[1]), float(color[2]))
|
||||
obj.ViewObject.PointSize = point_size
|
||||
obj.ViewObject.Visibility = True
|
||||
select(obj)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return obj
|
||||
|
||||
@@ -2878,6 +2992,7 @@ def makeFacebinder(selectionset,name="Facebinder"):
|
||||
_ViewProviderFacebinder(fb.ViewObject)
|
||||
faces = []
|
||||
fb.Proxy.addSubobjects(fb,selectionset)
|
||||
select(fb)
|
||||
return fb
|
||||
|
||||
|
||||
@@ -3240,7 +3355,6 @@ def upgrade(objects,delete=False,force=None):
|
||||
deleteList = []
|
||||
for n in names:
|
||||
FreeCAD.ActiveDocument.removeObject(n)
|
||||
|
||||
return [addList,deleteList]
|
||||
|
||||
def downgrade(objects,delete=False,force=None):
|
||||
@@ -3441,7 +3555,6 @@ def downgrade(objects,delete=False,force=None):
|
||||
deleteList = []
|
||||
for n in names:
|
||||
FreeCAD.ActiveDocument.removeObject(n)
|
||||
|
||||
return [addList,deleteList]
|
||||
|
||||
|
||||
|
||||
@@ -535,7 +535,7 @@ def pocket2d(shape,offset):
|
||||
offsetWires = [o for o in offsetWires if o != None]
|
||||
return offsetWires
|
||||
|
||||
def orientEdge(edge, normal=None):
|
||||
def orientEdge(edge, normal=None, make_arc=False):
|
||||
"""Re-orients 'edge' such that it is in the x-y plane. If 'normal' is passed, this
|
||||
is used as the basis for the rotation, otherwise the Placement property of 'edge'
|
||||
is used"""
|
||||
@@ -555,6 +555,9 @@ def orientEdge(edge, normal=None):
|
||||
edge.rotate(base, axis, angle)
|
||||
if isinstance(edge.Curve,Part.Line):
|
||||
return Part.LineSegment(edge.Curve,edge.FirstParameter,edge.LastParameter)
|
||||
elif make_arc and isinstance(edge.Curve,Part.Circle) and not edge.Closed:
|
||||
return Part.ArcOfCircle(edge.Curve, edge.FirstParameter,
|
||||
edge.LastParameter,edge.Curve.Axis.z>0)
|
||||
return edge.Curve
|
||||
|
||||
def mirror (point, edge):
|
||||
|
||||
@@ -256,6 +256,7 @@ class DraftToolBar:
|
||||
self.y = 0
|
||||
self.z = 0
|
||||
self.uiloader = FreeCADGui.UiLoader()
|
||||
self.autogroup = None
|
||||
|
||||
if self.taskmode:
|
||||
# add only a dummy widget, since widgets are created on demand
|
||||
@@ -334,13 +335,14 @@ class DraftToolBar:
|
||||
return lineedit
|
||||
|
||||
def _inputfield (self,name, layout, hide=True, width=None):
|
||||
p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/General")
|
||||
bsize = p.GetInt("ToolbarIconSize",24)-2
|
||||
inputfield = self.uiloader.createWidget("Gui::InputField")
|
||||
inputfield.setObjectName(name)
|
||||
if hide: inputfield.hide()
|
||||
if not width: width = 800
|
||||
inputfield.setMaximumSize(QtCore.QSize(width,bsize))
|
||||
if not width:
|
||||
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
|
||||
inputfield.setSizePolicy(sizePolicy)
|
||||
else:
|
||||
inputfield.setMaximumWidth(width)
|
||||
layout.addWidget(inputfield)
|
||||
return inputfield
|
||||
|
||||
@@ -603,6 +605,8 @@ class DraftToolBar:
|
||||
self.widthButton.setSuffix("px")
|
||||
self.fontsizeButton = self._spinbox("fontsizeButton",self.bottomtray, val=self.fontsize,vmax=999, hide=False,double=True,size=(bsize * 3,bsize))
|
||||
self.applyButton = self._pushbutton("applyButton", self.toptray, hide=False, icon='Draft_Apply',width=22)
|
||||
self.autoGroupButton = self._pushbutton("autoGroup",self.bottomtray,icon="Draft_AutoGroup_off",hide=False,width=120)
|
||||
self.autoGroupButton.setText("None")
|
||||
|
||||
QtCore.QObject.connect(self.wplabel,QtCore.SIGNAL("pressed()"),self.selectplane)
|
||||
QtCore.QObject.connect(self.colorButton,QtCore.SIGNAL("pressed()"),self.getcol)
|
||||
@@ -611,6 +615,7 @@ class DraftToolBar:
|
||||
QtCore.QObject.connect(self.fontsizeButton,QtCore.SIGNAL("valueChanged(double)"),self.setfontsize)
|
||||
QtCore.QObject.connect(self.applyButton,QtCore.SIGNAL("pressed()"),self.apply)
|
||||
QtCore.QObject.connect(self.constrButton,QtCore.SIGNAL("toggled(bool)"),self.toggleConstrMode)
|
||||
QtCore.QObject.connect(self.autoGroupButton,QtCore.SIGNAL("pressed()"),self.runAutoGroup)
|
||||
|
||||
def setupStyle(self):
|
||||
style = "#constrButton:Checked {background-color: "
|
||||
@@ -724,6 +729,7 @@ class DraftToolBar:
|
||||
self.fontsizeButton.setToolTip(translate("draft", "Font Size"))
|
||||
self.applyButton.setToolTip(translate("draft", "Apply to selected objects"))
|
||||
self.constrButton.setToolTip(translate("draft", "Toggles Construction Mode"))
|
||||
self.autoGroupButton.setToolTip(translate("draft", "Sets/unsets auto-grouping"))
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Interface modes
|
||||
@@ -1727,6 +1733,27 @@ class DraftToolBar:
|
||||
self.radiusValue.setText(t)
|
||||
self.radiusValue.setFocus()
|
||||
|
||||
def runAutoGroup(self):
|
||||
FreeCADGui.runCommand("Draft_AutoGroup")
|
||||
|
||||
def setAutoGroup(self,value=None):
|
||||
if value == None:
|
||||
self.autogroup = None
|
||||
self.autoGroupButton.setText("None")
|
||||
self.autoGroupButton.setIcon(QtGui.QIcon(':/icons/Draft_AutoGroup_off.svg'))
|
||||
self.autoGroupButton.setDown(False)
|
||||
else:
|
||||
obj = FreeCAD.ActiveDocument.getObject(value)
|
||||
if obj:
|
||||
self.autogroup = value
|
||||
self.autoGroupButton.setText(obj.Label)
|
||||
self.autoGroupButton.setIcon(QtGui.QIcon(':/icons/Draft_AutoGroup_on.svg'))
|
||||
self.autoGroupButton.setDown(False)
|
||||
else:
|
||||
self.autogroup = None
|
||||
self.autoGroupButton.setText("None")
|
||||
self.autoGroupButton.setIcon(QtGui.QIcon(':/icons/Draft_AutoGroup_off.svg'))
|
||||
self.autoGroupButton.setDown(False)
|
||||
|
||||
def show(self):
|
||||
if not self.taskmode:
|
||||
|
||||
+118
-44
@@ -475,14 +475,16 @@ class Line(Creator):
|
||||
'line.Z1 = '+str(p1.z),
|
||||
'line.X2 = '+str(p2.x),
|
||||
'line.Y2 = '+str(p2.y),
|
||||
'line.Z2 = '+str(p2.z)])
|
||||
'line.Z2 = '+str(p2.z),
|
||||
'Draft.autogroup(line)'])
|
||||
else:
|
||||
# building command string
|
||||
rot,sup,pts,fil = self.getStrings()
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.commit(translate("draft","Create DWire"),
|
||||
['points='+pts,
|
||||
'Draft.makeWire(points,closed='+str(closed)+',face='+fil+',support='+sup+')'])
|
||||
'line = Draft.makeWire(points,closed='+str(closed)+',face='+fil+',support='+sup+')',
|
||||
'Draft.autogroup(line)'])
|
||||
Creator.finish(self)
|
||||
if self.ui:
|
||||
if self.ui.continueMode:
|
||||
@@ -609,7 +611,7 @@ class Wire(Line):
|
||||
rems = ["FreeCAD.ActiveDocument.removeObject(\""+o.Name+"\")" for o in FreeCADGui.Selection.getSelection()]
|
||||
FreeCADGui.addModule("Draft")
|
||||
todo.delayCommit([(translate("draft","Convert to Wire"),
|
||||
['Draft.makeWire(['+pts+'])']+rems)])
|
||||
['wire = Draft.makeWire(['+pts+'])']+rems+['Draft.autogroup(wire)'])])
|
||||
return
|
||||
|
||||
Line.Activated(self,name=translate("draft","DWire"))
|
||||
@@ -703,8 +705,9 @@ class BSpline(Line):
|
||||
rot,sup,pts,fil = self.getStrings()
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.commit(translate("draft","Create BSpline"),
|
||||
['points='+pts,
|
||||
'Draft.makeBSpline(points,closed='+str(closed)+',face='+fil+',support='+sup+')'])
|
||||
['points = '+pts,
|
||||
'spline = Draft.makeBSpline(points,closed='+str(closed)+',face='+fil+',support='+sup+')',
|
||||
'Draft.autogroup(spline)'])
|
||||
except:
|
||||
print("Draft: error delaying commit")
|
||||
Creator.finish(self)
|
||||
@@ -806,8 +809,9 @@ class BezCurve(Line):
|
||||
rot,sup,pts,fil = self.getStrings()
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.commit(translate("draft","Create BezCurve"),
|
||||
['points='+pts,
|
||||
'Draft.makeBezCurve(points,closed='+str(closed)+',support='+sup+')'])
|
||||
['points = '+pts,
|
||||
'bez = Draft.makeBezCurve(points,closed='+str(closed)+',support='+sup+')',
|
||||
'Draft.autogroup(bez)'])
|
||||
except:
|
||||
print("Draft: error delaying commit")
|
||||
Creator.finish(self)
|
||||
@@ -919,15 +923,15 @@ class Rectangle(Creator):
|
||||
try:
|
||||
# building command string
|
||||
rot,sup,pts,fil = self.getStrings()
|
||||
base = p1
|
||||
if length < 0:
|
||||
length = -length
|
||||
base = base.add((p1.sub(p4)).negative())
|
||||
if height < 0:
|
||||
height = -height
|
||||
base = base.add((p1.sub(p2)).negative())
|
||||
if Draft.getParam("UsePartPrimitives",False):
|
||||
# Use Part Primitive
|
||||
base = p1
|
||||
if length < 0:
|
||||
length = -length
|
||||
base = base.add((p1.sub(p4)).negative())
|
||||
if height < 0:
|
||||
height = -height
|
||||
base = base.add((p1.sub(p2)).negative())
|
||||
self.commit(translate("draft","Create Plane"),
|
||||
['plane = FreeCAD.ActiveDocument.addObject("Part::Plane","Plane")',
|
||||
'plane.Length = '+str(length),
|
||||
@@ -935,14 +939,16 @@ class Rectangle(Creator):
|
||||
'pl = FreeCAD.Placement()',
|
||||
'pl.Rotation.Q='+rot,
|
||||
'pl.Base = '+DraftVecUtils.toString(base),
|
||||
'plane.Placement = pl'])
|
||||
'plane.Placement = pl',
|
||||
'Draft.autogroup(plane)'])
|
||||
else:
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.commit(translate("draft","Create Rectangle"),
|
||||
['pl = FreeCAD.Placement()',
|
||||
'pl.Rotation.Q = '+rot,
|
||||
'pl.Base = '+DraftVecUtils.toString(p1),
|
||||
'Draft.makeRectangle(length='+str(length)+',height='+str(height)+',placement=pl,face='+fil+',support='+sup+')'])
|
||||
'pl.Base = '+DraftVecUtils.toString(base),
|
||||
'rec = Draft.makeRectangle(length='+str(length)+',height='+str(height)+',placement=pl,face='+fil+',support='+sup+')',
|
||||
'Draft.autogroup(rec)'])
|
||||
except:
|
||||
print("Draft: error delaying commit")
|
||||
self.finish(cont=True)
|
||||
@@ -1193,7 +1199,8 @@ class Arc(Creator):
|
||||
'pl = FreeCAD.Placement()',
|
||||
'pl.Rotation.Q = '+rot,
|
||||
'pl.Base = '+DraftVecUtils.toString(self.center),
|
||||
'circle.Placement = pl'])
|
||||
'circle.Placement = pl',
|
||||
'Draft.autogroup(circle)'])
|
||||
else:
|
||||
# building command string
|
||||
FreeCADGui.addModule("Draft")
|
||||
@@ -1201,7 +1208,8 @@ class Arc(Creator):
|
||||
['pl=FreeCAD.Placement()',
|
||||
'pl.Rotation.Q='+rot,
|
||||
'pl.Base='+DraftVecUtils.toString(self.center),
|
||||
'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',support='+sup+')'])
|
||||
'circle = Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',support='+sup+')',
|
||||
'Draft.autogroup(circle)'])
|
||||
except:
|
||||
print("Draft: error delaying commit")
|
||||
else:
|
||||
@@ -1226,7 +1234,8 @@ class Arc(Creator):
|
||||
'pl = FreeCAD.Placement()',
|
||||
'pl.Rotation.Q = '+rot,
|
||||
'pl.Base = '+DraftVecUtils.toString(self.center),
|
||||
'circle.Placement = pl'])
|
||||
'circle.Placement = pl',
|
||||
'Draft.autogroup(circle)'])
|
||||
else:
|
||||
# building command string
|
||||
FreeCADGui.addModule("Draft")
|
||||
@@ -1234,7 +1243,8 @@ class Arc(Creator):
|
||||
['pl=FreeCAD.Placement()',
|
||||
'pl.Rotation.Q='+rot,
|
||||
'pl.Base='+DraftVecUtils.toString(self.center),
|
||||
'Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',startangle='+str(sta)+',endangle='+str(end)+',support='+sup+')'])
|
||||
'circle = Draft.makeCircle(radius='+str(self.rad)+',placement=pl,face='+fil+',startangle='+str(sta)+',endangle='+str(end)+',support='+sup+')',
|
||||
'Draft.autogroup(circle)'])
|
||||
except:
|
||||
print("Draft: error delaying commit")
|
||||
self.finish(cont=True)
|
||||
@@ -1449,15 +1459,17 @@ class Polygon(Creator):
|
||||
'pol.Polygon = ' + str(self.ui.numFaces.value()),
|
||||
'pol.Circumradius = ' + str(self.rad),
|
||||
'pol.Placement = pl',
|
||||
'Draft.autogroup(pol)'
|
||||
'FreeCAD.ActiveDocument.recompute()'])
|
||||
else:
|
||||
# building command string
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.commit(translate("draft","Create Polygon"),
|
||||
['pl=FreeCAD.Placement()',
|
||||
'pl.Rotation.Q=' + rot,
|
||||
'pl.Base=' + DraftVecUtils.toString(self.center),
|
||||
'Draft.makePolygon(' + str(self.ui.numFaces.value()) + ',radius=' + str(self.rad) + ',inscribed=True,placement=pl,face=' + fil + ',support=' + sup + ')'])
|
||||
'pl.Rotation.Q = ' + rot,
|
||||
'pl.Base = ' + DraftVecUtils.toString(self.center),
|
||||
'pol = Draft.makePolygon(' + str(self.ui.numFaces.value()) + ',radius=' + str(self.rad) + ',inscribed=True,placement=pl,face=' + fil + ',support=' + sup + ')',
|
||||
'Draft.autogroup(pol)'])
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
self.finish(cont=True)
|
||||
|
||||
@@ -1553,14 +1565,16 @@ class Ellipse(Creator):
|
||||
'pl = FreeCAD.Placement()',
|
||||
'pl.Rotation.Q='+rot,
|
||||
'pl.Base = '+DraftVecUtils.toString(center),
|
||||
'ellipse.Placement = pl'])
|
||||
'ellipse.Placement = pl',
|
||||
'Draft.autogroup(ellipse)'])
|
||||
else:
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.commit(translate("draft","Create Ellipse"),
|
||||
['pl = FreeCAD.Placement()',
|
||||
'pl.Rotation.Q='+rot,
|
||||
'pl.Rotation.Q = '+rot,
|
||||
'pl.Base = '+DraftVecUtils.toString(center),
|
||||
'Draft.makeEllipse('+str(r1)+','+str(r2)+',placement=pl,face='+fil+',support='+sup+')'])
|
||||
'ellipse = Draft.makeEllipse('+str(r1)+','+str(r2)+',placement=pl,face='+fil+',support='+sup+')',
|
||||
'Draft.autogroup(ellipse)'])
|
||||
except:
|
||||
print("Draft: Error: Unable to create object.")
|
||||
self.finish(cont=True)
|
||||
@@ -1646,7 +1660,8 @@ class Text(Creator):
|
||||
tx += ']'
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.commit(translate("draft","Create Text"),
|
||||
['Draft.makeText('+tx+',point='+DraftVecUtils.toString(self.node[0])+')'])
|
||||
['text = Draft.makeText('+tx+',point='+DraftVecUtils.toString(self.node[0])+')',
|
||||
'Draft.autogroup(text)'])
|
||||
|
||||
self.finish(cont=True)
|
||||
|
||||
@@ -1779,8 +1794,9 @@ class Dimension(Creator):
|
||||
p3 = Vector(pt.point.getValues()[2].getValue())
|
||||
FreeCADGui.addModule("Draft")
|
||||
self.commit(translate("draft","Create Dimension"),
|
||||
['Draft.makeDimension('+DraftVecUtils.toString(p1)+','+DraftVecUtils.toString(p2)+','+DraftVecUtils.toString(p3)+')',
|
||||
'FreeCAD.ActiveDocument.removeObject("'+o.Name+'")'])
|
||||
['dim = Draft.makeDimension('+DraftVecUtils.toString(p1)+','+DraftVecUtils.toString(p2)+','+DraftVecUtils.toString(p3)+')',
|
||||
'FreeCAD.ActiveDocument.removeObject("'+o.Name+'")',
|
||||
'Draft.autogroup(dim)'])
|
||||
|
||||
def createObject(self):
|
||||
"creates an object in the current doc"
|
||||
@@ -1793,24 +1809,30 @@ class Dimension(Creator):
|
||||
v2 = DraftGeomUtils.vec(self.edges[1])
|
||||
normal = DraftVecUtils.toString((v1.cross(v2)).normalize())
|
||||
self.commit(translate("draft","Create Dimension"),
|
||||
['Draft.makeAngularDimension(center='+DraftVecUtils.toString(self.center)+',angles=['+str(self.angledata[0])+','+str(self.angledata[1])+'],p3='+DraftVecUtils.toString(self.node[-1])+',normal='+normal+')'])
|
||||
['dim = Draft.makeAngularDimension(center='+DraftVecUtils.toString(self.center)+',angles=['+str(self.angledata[0])+','+str(self.angledata[1])+'],p3='+DraftVecUtils.toString(self.node[-1])+',normal='+normal+')',
|
||||
'Draft.autogroup(dim)'])
|
||||
elif self.link and (not self.arcmode):
|
||||
ops = []
|
||||
if self.force == 1:
|
||||
self.commit(translate("draft","Create Dimension"),
|
||||
['dim = Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+','+str(self.link[2])+','+DraftVecUtils.toString(self.node[2])+')','dim.Direction=FreeCAD.Vector(0,1,0)'])
|
||||
['dim = Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+','+str(self.link[2])+','+DraftVecUtils.toString(self.node[2])+')','dim.Direction=FreeCAD.Vector(0,1,0)',
|
||||
'Draft.autogroup(dim)'])
|
||||
elif self.force == 2:
|
||||
self.commit(translate("draft","Create Dimension"),
|
||||
['dim = Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+','+str(self.link[2])+','+DraftVecUtils.toString(self.node[2])+')','dim.Direction=FreeCAD.Vector(1,0,0)'])
|
||||
['dim = Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+','+str(self.link[2])+','+DraftVecUtils.toString(self.node[2])+')','dim.Direction=FreeCAD.Vector(1,0,0)',
|
||||
'Draft.autogroup(dim)'])
|
||||
else:
|
||||
self.commit(translate("draft","Create Dimension"),
|
||||
['Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+','+str(self.link[2])+','+DraftVecUtils.toString(self.node[2])+')'])
|
||||
['dim = Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+','+str(self.link[2])+','+DraftVecUtils.toString(self.node[2])+')',
|
||||
'Draft.autogroup(dim)'])
|
||||
elif self.arcmode:
|
||||
self.commit(translate("draft","Create Dimension"),
|
||||
['Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+',"'+str(self.arcmode)+'",'+DraftVecUtils.toString(self.node[2])+')'])
|
||||
['dim = Draft.makeDimension(FreeCAD.ActiveDocument.'+self.link[0].Name+','+str(self.link[1])+',"'+str(self.arcmode)+'",'+DraftVecUtils.toString(self.node[2])+')',
|
||||
'Draft.autogroup(dim)'])
|
||||
else:
|
||||
self.commit(translate("draft","Create Dimension"),
|
||||
['Draft.makeDimension('+DraftVecUtils.toString(self.node[0])+','+DraftVecUtils.toString(self.node[1])+','+DraftVecUtils.toString(self.node[2])+')'])
|
||||
['dim = Draft.makeDimension('+DraftVecUtils.toString(self.node[0])+','+DraftVecUtils.toString(self.node[1])+','+DraftVecUtils.toString(self.node[2])+')',
|
||||
'Draft.autogroup(dim)'])
|
||||
if self.ui.continueMode:
|
||||
self.cont = self.node[2]
|
||||
if not self.dir:
|
||||
@@ -2064,7 +2086,8 @@ class ShapeString(Creator):
|
||||
'plm.Base='+DraftVecUtils.toString(self.ssBase),
|
||||
'plm.Rotation.Q='+qr,
|
||||
'ss.Placement=plm',
|
||||
'ss.Support='+sup])
|
||||
'ss.Support='+sup,
|
||||
'Draft.autogroup(ss)'])
|
||||
except Exception as e:
|
||||
msg("Draft_ShapeString: error delaying commit", "error")
|
||||
self.finish()
|
||||
@@ -4609,16 +4632,18 @@ class Point(Creator):
|
||||
commitlist = []
|
||||
if Draft.getParam("UsePartPrimitives",False):
|
||||
# using
|
||||
commitlist.append((translate("draft","Create Point"),
|
||||
commitlist.append(translate("draft","Create Point"),
|
||||
['point = FreeCAD.ActiveDocument.addObject("Part::Vertex","Point")',
|
||||
'point.X = '+str(self.stack[0][0]),
|
||||
'point.Y = '+str(self.stack[0][1]),
|
||||
'point.Z = '+str(self.stack[0][2])]))
|
||||
'point.Z = '+str(self.stack[0][2]),
|
||||
'Draft.autogroup(point)'])
|
||||
else:
|
||||
# building command string
|
||||
FreeCADGui.addModule("Draft")
|
||||
commitlist.append((translate("draft","Create Point"),
|
||||
['Draft.makePoint('+str(self.stack[0][0])+','+str(self.stack[0][1])+','+str(self.stack[0][2])+')']))
|
||||
commitlist.append(translate("draft","Create Point"),
|
||||
['point = Draft.makePoint('+str(self.stack[0][0])+','+str(self.stack[0][1])+','+str(self.stack[0][2])+')',
|
||||
'Draft.autogroup(point)'])
|
||||
todo.delayCommit(commitlist)
|
||||
FreeCADGui.Snapper.off()
|
||||
self.finish()
|
||||
@@ -4740,7 +4765,8 @@ class Draft_Facebinder(Creator):
|
||||
FreeCAD.ActiveDocument.openTransaction("Facebinder")
|
||||
FreeCADGui.addModule("Draft")
|
||||
FreeCADGui.doCommand("s = FreeCADGui.Selection.getSelectionEx()")
|
||||
FreeCADGui.doCommand("Draft.makeFacebinder(s)")
|
||||
FreeCADGui.doCommand("f = Draft.makeFacebinder(s)")
|
||||
FreeCADGui.doCommand('Draft.autogroup(f)')
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
self.finish()
|
||||
@@ -4772,11 +4798,13 @@ class VisGroup():
|
||||
FreeCADGui.addModule("Draft")
|
||||
if len(s) == 1:
|
||||
if s[0].isDerivedFrom("App::DocumentObjectGroup"):
|
||||
FreeCADGui.doCommand("Draft.makeVisGroup(FreeCAD.ActiveDocument."+s[0].Name+")")
|
||||
FreeCADGui.doCommand("v = Draft.makeVisGroup(FreeCAD.ActiveDocument."+s[0].Name+")")
|
||||
FreeCADGui.doCommand('Draft.autogroup(v)')
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
return
|
||||
FreeCADGui.doCommand("Draft.makeVisGroup()")
|
||||
FreeCADGui.doCommand("v = Draft.makeVisGroup()")
|
||||
FreeCADGui.doCommand('Draft.autogroup(v)')
|
||||
FreeCAD.ActiveDocument.commitTransaction()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
@@ -4957,6 +4985,51 @@ class Draft_Slope():
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
|
||||
class SetAutoGroup():
|
||||
"The SetAutoGroup FreeCAD command definition"
|
||||
|
||||
def GetResources(self):
|
||||
return {'Pixmap' : 'Draft_AutoGroup',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_AutoGroup", "AutoGroup"),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_AutoGroup", "Select a group to automatically add all Draft & Arch objects to")}
|
||||
|
||||
def IsActive(self):
|
||||
if FreeCADGui.ActiveDocument:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def Activated(self):
|
||||
if hasattr(FreeCADGui,"draftToolBar"):
|
||||
self.ui = FreeCADGui.draftToolBar
|
||||
s = FreeCADGui.Selection.getSelection()
|
||||
if len(s) == 1:
|
||||
if s[0].isDerivedFrom("App::DocumentObjectGroup") or (Draft.getType(s[0]) in ["Site","Building","Floor"]):
|
||||
self.ui.setAutoGroup(s[0].Name)
|
||||
return
|
||||
self.groups = ["None"]
|
||||
gn = Draft.getGroupNames()
|
||||
if gn:
|
||||
self.groups.extend(gn)
|
||||
self.labels = ["None"]
|
||||
for g in gn:
|
||||
o = FreeCAD.ActiveDocument.getObject(g)
|
||||
if o:
|
||||
self.labels.append(o.Label)
|
||||
self.ui.sourceCmd = self
|
||||
self.ui.popupMenu(self.labels)
|
||||
|
||||
def proceed(self,labelname):
|
||||
self.ui.sourceCmd = None
|
||||
if labelname == "None":
|
||||
self.ui.setAutoGroup(None)
|
||||
else:
|
||||
if labelname in self.labels:
|
||||
i = self.labels.index(labelname)
|
||||
self.ui.setAutoGroup(self.groups[i])
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Snap tools
|
||||
#---------------------------------------------------------------------------
|
||||
@@ -5198,6 +5271,7 @@ FreeCADGui.addCommand('Draft_Shape2DView',Shape2DView())
|
||||
FreeCADGui.addCommand('Draft_ShowSnapBar',ShowSnapBar())
|
||||
FreeCADGui.addCommand('Draft_ToggleGrid',ToggleGrid())
|
||||
FreeCADGui.addCommand('Draft_FlipDimension',Draft_FlipDimension())
|
||||
FreeCADGui.addCommand('Draft_AutoGroup',SetAutoGroup())
|
||||
|
||||
# snap commands
|
||||
FreeCADGui.addCommand('Draft_Snap_Lock',Draft_Snap_Lock())
|
||||
|
||||
@@ -79,7 +79,7 @@ class DraftWorkbench (Workbench):
|
||||
"Draft_PathArray","Draft_Clone","Draft_Drawing","Draft_Mirror","Draft_Stretch"]
|
||||
self.treecmdList = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup",
|
||||
"Draft_SelectGroup","Draft_SelectPlane",
|
||||
"Draft_ShowSnapBar","Draft_ToggleGrid"]
|
||||
"Draft_ShowSnapBar","Draft_ToggleGrid","Draft_AutoGroup"]
|
||||
self.lineList = ["Draft_UndoLine","Draft_FinishLine","Draft_CloseLine"]
|
||||
self.utils = ["Draft_VisGroup","Draft_Heal","Draft_FlipDimension",
|
||||
"Draft_ToggleConstructionMode","Draft_ToggleContinueMode","Draft_Edit",
|
||||
|
||||
@@ -72,6 +72,9 @@
|
||||
<file>icons/Draft_Slope.svg</file>
|
||||
<file>icons/DraftWorkbench.svg</file>
|
||||
<file>icons/Draft_Stretch.svg</file>
|
||||
<file>icons/Draft_AutoGroup.svg</file>
|
||||
<file>icons/Draft_AutoGroup_on.svg</file>
|
||||
<file>icons/Draft_AutoGroup_off.svg</file>
|
||||
<file>patterns/concrete.svg</file>
|
||||
<file>patterns/cross.svg</file>
|
||||
<file>patterns/line.svg</file>
|
||||
|
||||
@@ -0,0 +1,453 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64px"
|
||||
height="64px"
|
||||
id="svg3612"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.0 r15299"
|
||||
sodipodi:docname="Draft_AutoGroup.svg">
|
||||
<defs
|
||||
id="defs3614">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective3620" />
|
||||
<inkscape:perspective
|
||||
id="perspective3588"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3692"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient3144-6">
|
||||
<stop
|
||||
id="stop3146-9"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3148-2"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3701">
|
||||
<stop
|
||||
id="stop3703"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3705"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-6"
|
||||
id="radialGradient3688"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<linearGradient
|
||||
id="linearGradient3708">
|
||||
<stop
|
||||
id="stop3710"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3712"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3805"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-0-0"
|
||||
id="linearGradient3934"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.2210246,-0.5789261,-0.71699693,-0.35346705,519.98085,464.19243)"
|
||||
x1="696.67322"
|
||||
y1="77.046234"
|
||||
x2="654.80023"
|
||||
y2="115.01974" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-0-0">
|
||||
<stop
|
||||
id="stop3866-5-7"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3868-7-6"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient3942"
|
||||
x1="597.77283"
|
||||
y1="44.024342"
|
||||
x2="619.30328"
|
||||
y2="30.27434"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3377">
|
||||
<stop
|
||||
id="stop3379"
|
||||
offset="0"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381"
|
||||
offset="1"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-0"
|
||||
id="linearGradient3657"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.2210246,-0.5789261,-0.71699693,-0.35346705,536.41251,472.3612)"
|
||||
x1="696.67322"
|
||||
y1="77.046234"
|
||||
x2="650.70459"
|
||||
y2="139.40982" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-0">
|
||||
<stop
|
||||
id="stop3866-5"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3868-7"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3902"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3841-0-3">
|
||||
<stop
|
||||
id="stop3843-1-3"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3845-0-8"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="114.5684"
|
||||
fx="20.892099"
|
||||
r="5.256"
|
||||
cy="114.5684"
|
||||
cx="20.892099"
|
||||
id="aigrd2">
|
||||
<stop
|
||||
id="stop15566"
|
||||
style="stop-color:#F0F0F0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop15568"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
offset="1.0000000" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="64.567902"
|
||||
fx="20.892099"
|
||||
r="5.257"
|
||||
cy="64.567902"
|
||||
cx="20.892099"
|
||||
id="aigrd3">
|
||||
<stop
|
||||
id="stop15573"
|
||||
style="stop-color:#F0F0F0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop15575"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
offset="1.0000000" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient15662">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop15664" />
|
||||
<stop
|
||||
style="stop-color:#f8f8f8;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop15666" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="86.70845"
|
||||
fy="35.736916"
|
||||
fx="33.966679"
|
||||
cy="35.736916"
|
||||
cx="33.966679"
|
||||
gradientTransform="matrix(0.96049297,0,0,1.041132,-52.144249,-702.33158)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4452"
|
||||
xlink:href="#linearGradient259"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient259">
|
||||
<stop
|
||||
style="stop-color:#fafafa;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop260" />
|
||||
<stop
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop261" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="37.751713"
|
||||
fy="3.7561285"
|
||||
fx="8.824419"
|
||||
cy="3.7561285"
|
||||
cx="8.824419"
|
||||
gradientTransform="matrix(0.96827297,0,0,1.032767,-48.790699,-701.68513)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4454"
|
||||
xlink:href="#linearGradient269"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient269">
|
||||
<stop
|
||||
style="stop-color:#a3a3a3;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop270" />
|
||||
<stop
|
||||
style="stop-color:#4c4c4c;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop271" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="86.70845"
|
||||
fy="43.717598"
|
||||
fx="3.7745965"
|
||||
cy="43.717598"
|
||||
cx="3.7745965"
|
||||
gradientTransform="matrix(4.7474974e-4,1.1562124,-1.3743496,4.6927601e-4,63.8109,7.049203)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3972"
|
||||
xlink:href="#linearGradient259"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="37.751713"
|
||||
fy="43.445751"
|
||||
fx="0.28083447"
|
||||
cy="43.445751"
|
||||
cx="0.28083447"
|
||||
gradientTransform="matrix(4.7859521e-4,1.1655777,-1.3633075,4.6550565e-4,62.959207,11.086395)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3974"
|
||||
xlink:href="#linearGradient269"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3895"
|
||||
id="linearGradient3909"
|
||||
x1="43"
|
||||
y1="22"
|
||||
x2="48"
|
||||
y2="44"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3895">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3897" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3899" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(-17,5)"
|
||||
y2="44"
|
||||
x2="48"
|
||||
y1="22"
|
||||
x1="43"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3023"
|
||||
xlink:href="#linearGradient3895"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient259"
|
||||
id="radialGradient4608"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(4.7474974e-4,1.1562124,-1.3743496,4.6927601e-4,63.8109,7.049203)"
|
||||
cx="3.7745965"
|
||||
cy="43.717598"
|
||||
fx="3.7745965"
|
||||
fy="43.717598"
|
||||
r="86.70845" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.2695983"
|
||||
inkscape:cx="44.716174"
|
||||
inkscape:cy="23.11306"
|
||||
inkscape:current-layer="g4636"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1051"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-bbox="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3071"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#radialGradient4608);fill-opacity:1;fill-rule:nonzero;stroke:#707070;stroke-width:1.85646296;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="M 19.578125,8 5.4042969,8.0058594 C 5.1706901,8.005955 4.9823344,8.2113736 4.9824219,8.4667969 l 0.00391,7.9042971 c -2.596e-4,0.01067 -0.00391,0.02052 -0.00391,0.03125 L 5,55.617188 C 5.0003146,56.383475 5.677268,57.000287 6.5175781,57 L 57.5,56.982422 c 0.84031,-2.87e-4 1.517893,-0.618479 1.517578,-1.384766 L 59,16.382812 C 58.999685,15.616525 58.322732,14.999713 57.482422,15 H 25 L 20,8.4609375 C 19.999913,8.2055142 19.811732,7.9999044 19.578125,8 Z"
|
||||
id="rect15391"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
<path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.85646296;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="M 18.578125,10 H 7.421875 C 7.1882682,10.000096 6.9999125,10.205514 7,10.460938 L 7.00391,15.96875 7,16 v 38 c 0,1 0,1 1,1 h 48 c 1,0 1,0 1,-1 V 18 c 0,-1 0,-1 -1,-1 H 24 L 19,10.460938 C 18.999913,10.205514 18.811732,9.9999044 18.578125,10 Z"
|
||||
id="rect15391-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
<g
|
||||
id="g4636"
|
||||
transform="rotate(90,38,36)">
|
||||
<path
|
||||
inkscape:export-ydpi="4.1683898"
|
||||
inkscape:export-xdpi="4.1683898"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path3343"
|
||||
d="M 30,20 V 30 L 7,30 V 44 H 30 V 54 L 48,37 Z"
|
||||
style="fill:url(#linearGradient3023);fill-opacity:1;fill-rule:evenodd;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:export-ydpi="4.1683898"
|
||||
inkscape:export-xdpi="4.1683898"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path3343-2"
|
||||
d="M 32.006611,24.642998 32,32 H 9 V 42 H 32 L 31.9934,49.357002 45,37 Z"
|
||||
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<metadata
|
||||
id="metadata4251">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<cc:license
|
||||
rdf:resource="" />
|
||||
<dc:date>Mon Oct 10 13:44:52 2011 +0000</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[wmayer]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/Mod/Draft/Resources/icons/Draft_Drawing.svg</dc:identifier>
|
||||
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>[agryson] Alexander Gryson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>arrow</rdf:li>
|
||||
<rdf:li>page</rdf:li>
|
||||
<rdf:li>shapes</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:description>An arrow pointing from left to right onto a page with shapes drawn on it</dc:description>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,464 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64px"
|
||||
height="64px"
|
||||
id="svg3612"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.0 r15299"
|
||||
sodipodi:docname="Draft_AutoGroup_off.svg">
|
||||
<defs
|
||||
id="defs3614">
|
||||
<linearGradient
|
||||
id="linearGradient4680">
|
||||
<stop
|
||||
id="stop4676"
|
||||
offset="0"
|
||||
style="stop-color:#d95f57;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4678"
|
||||
offset="1"
|
||||
style="stop-color:#390c0c;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective3620" />
|
||||
<inkscape:perspective
|
||||
id="perspective3588"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3692"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient3144-6">
|
||||
<stop
|
||||
id="stop3146-9"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3148-2"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3701">
|
||||
<stop
|
||||
id="stop3703"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3705"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-6"
|
||||
id="radialGradient3688"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<linearGradient
|
||||
id="linearGradient3708">
|
||||
<stop
|
||||
id="stop3710"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3712"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3805"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-0-0"
|
||||
id="linearGradient3934"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.2210246,-0.5789261,-0.71699693,-0.35346705,519.98085,464.19243)"
|
||||
x1="696.67322"
|
||||
y1="77.046234"
|
||||
x2="654.80023"
|
||||
y2="115.01974" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-0-0">
|
||||
<stop
|
||||
id="stop3866-5-7"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3868-7-6"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient3942"
|
||||
x1="597.77283"
|
||||
y1="44.024342"
|
||||
x2="619.30328"
|
||||
y2="30.27434"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3377">
|
||||
<stop
|
||||
id="stop3379"
|
||||
offset="0"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381"
|
||||
offset="1"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-0"
|
||||
id="linearGradient3657"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.2210246,-0.5789261,-0.71699693,-0.35346705,536.41251,472.3612)"
|
||||
x1="696.67322"
|
||||
y1="77.046234"
|
||||
x2="650.70459"
|
||||
y2="139.40982" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-0">
|
||||
<stop
|
||||
id="stop3866-5"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3868-7"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3902"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3841-0-3">
|
||||
<stop
|
||||
id="stop3843-1-3"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3845-0-8"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="114.5684"
|
||||
fx="20.892099"
|
||||
r="5.256"
|
||||
cy="114.5684"
|
||||
cx="20.892099"
|
||||
id="aigrd2">
|
||||
<stop
|
||||
id="stop15566"
|
||||
style="stop-color:#F0F0F0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop15568"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
offset="1.0000000" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="64.567902"
|
||||
fx="20.892099"
|
||||
r="5.257"
|
||||
cy="64.567902"
|
||||
cx="20.892099"
|
||||
id="aigrd3">
|
||||
<stop
|
||||
id="stop15573"
|
||||
style="stop-color:#F0F0F0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop15575"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
offset="1.0000000" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient15662">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop15664" />
|
||||
<stop
|
||||
style="stop-color:#f8f8f8;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop15666" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="86.70845"
|
||||
fy="35.736916"
|
||||
fx="33.966679"
|
||||
cy="35.736916"
|
||||
cx="33.966679"
|
||||
gradientTransform="matrix(0.96049297,0,0,1.041132,-52.144249,-702.33158)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4452"
|
||||
xlink:href="#linearGradient259"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient259">
|
||||
<stop
|
||||
style="stop-color:#fafafa;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop260" />
|
||||
<stop
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop261" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="37.751713"
|
||||
fy="3.7561285"
|
||||
fx="8.824419"
|
||||
cy="3.7561285"
|
||||
cx="8.824419"
|
||||
gradientTransform="matrix(0.96827297,0,0,1.032767,-48.790699,-701.68513)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4454"
|
||||
xlink:href="#linearGradient269"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient269">
|
||||
<stop
|
||||
style="stop-color:#a3a3a3;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop270" />
|
||||
<stop
|
||||
style="stop-color:#4c4c4c;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop271" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="86.70845"
|
||||
fy="43.717598"
|
||||
fx="3.7745965"
|
||||
cy="43.717598"
|
||||
cx="3.7745965"
|
||||
gradientTransform="matrix(4.7474974e-4,1.1562124,-1.3743496,4.6927601e-4,63.8109,7.049203)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3972"
|
||||
xlink:href="#linearGradient259"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="37.751713"
|
||||
fy="43.445751"
|
||||
fx="0.28083447"
|
||||
cy="43.445751"
|
||||
cx="0.28083447"
|
||||
gradientTransform="matrix(4.7859521e-4,1.1655777,-1.3633075,4.6550565e-4,62.959207,11.086395)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3974"
|
||||
xlink:href="#linearGradient269"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3895"
|
||||
id="linearGradient3909"
|
||||
x1="43"
|
||||
y1="22"
|
||||
x2="48"
|
||||
y2="44"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3895">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3897" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3899" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(-17,5)"
|
||||
y2="44"
|
||||
x2="48"
|
||||
y1="22"
|
||||
x1="43"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3023"
|
||||
xlink:href="#linearGradient3895"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4680"
|
||||
id="radialGradient4608"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(4.7474974e-4,1.1562124,-1.3743496,4.6927601e-4,63.8109,7.049203)"
|
||||
cx="3.7745965"
|
||||
cy="43.717598"
|
||||
fx="3.7745965"
|
||||
fy="43.717598"
|
||||
r="86.70845" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4.6239102"
|
||||
inkscape:cx="40.128646"
|
||||
inkscape:cy="34.861394"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1051"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-bbox="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3071"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#radialGradient4608);fill-opacity:1;fill-rule:nonzero;stroke:#482626;stroke-width:1.85646296;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="M 19.578125,8 5.4042969,8.0058594 C 5.1706901,8.005955 4.9823344,8.2113736 4.9824219,8.4667969 l 0.00391,7.9042971 c -2.596e-4,0.01067 -0.00391,0.02052 -0.00391,0.03125 L 5,55.617188 C 5.0003146,56.383475 5.677268,57.000287 6.5175781,57 L 57.5,56.982422 c 0.84031,-2.87e-4 1.517893,-0.618479 1.517578,-1.384766 L 59,16.382812 C 58.999685,15.616525 58.322732,14.999713 57.482422,15 H 25 L 20,8.4609375 C 19.999913,8.2055142 19.811732,7.9999044 19.578125,8 Z"
|
||||
id="rect15391"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
<path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#fd8b88;stroke-width:1.85646296;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="M 18.578125,10 H 7.421875 C 7.1882682,10.000096 6.9999125,10.205514 7,10.460938 L 7.00391,15.96875 7,16 v 38 c 0,1 0,1 1,1 h 48 c 1,0 1,0 1,-1 V 18 c 0,-1 0,-1 -1,-1 H 24 L 19,10.460938 C 18.999913,10.205514 18.811732,9.9999044 18.578125,10 Z"
|
||||
id="rect15391-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
<g
|
||||
id="g4636"
|
||||
transform="rotate(90,38,36)">
|
||||
<path
|
||||
inkscape:export-ydpi="4.1683898"
|
||||
inkscape:export-xdpi="4.1683898"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path3343"
|
||||
d="M 30,20 V 30 L 7,30 V 44 H 30 V 54 L 48,37 Z"
|
||||
style="fill:url(#linearGradient3023);fill-opacity:1;fill-rule:evenodd;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:export-ydpi="4.1683898"
|
||||
inkscape:export-xdpi="4.1683898"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path3343-2"
|
||||
d="M 32.006611,24.642998 32,32 H 9 V 42 H 32 L 31.9934,49.357002 45,37 Z"
|
||||
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<metadata
|
||||
id="metadata4251">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<cc:license
|
||||
rdf:resource="" />
|
||||
<dc:date>Mon Oct 10 13:44:52 2011 +0000</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[wmayer]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/Mod/Draft/Resources/icons/Draft_Drawing.svg</dc:identifier>
|
||||
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>[agryson] Alexander Gryson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>arrow</rdf:li>
|
||||
<rdf:li>page</rdf:li>
|
||||
<rdf:li>shapes</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:description>An arrow pointing from left to right onto a page with shapes drawn on it</dc:description>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,464 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64px"
|
||||
height="64px"
|
||||
id="svg3612"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.0 r15299"
|
||||
sodipodi:docname="Draft_AutoGroup_on.svg">
|
||||
<defs
|
||||
id="defs3614">
|
||||
<linearGradient
|
||||
id="linearGradient4680">
|
||||
<stop
|
||||
id="stop4676"
|
||||
offset="0"
|
||||
style="stop-color:#78d957;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop4678"
|
||||
offset="1"
|
||||
style="stop-color:#0f390c;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective3620" />
|
||||
<inkscape:perspective
|
||||
id="perspective3588"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3692"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient3144-6">
|
||||
<stop
|
||||
id="stop3146-9"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3148-2"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3701">
|
||||
<stop
|
||||
id="stop3703"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3705"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3144-6"
|
||||
id="radialGradient3688"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
|
||||
cx="225.26402"
|
||||
cy="672.79736"
|
||||
fx="225.26402"
|
||||
fy="672.79736"
|
||||
r="34.345188" />
|
||||
<linearGradient
|
||||
id="linearGradient3708">
|
||||
<stop
|
||||
id="stop3710"
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3712"
|
||||
style="stop-color:#ffffff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3805"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-0-0"
|
||||
id="linearGradient3934"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.2210246,-0.5789261,-0.71699693,-0.35346705,519.98085,464.19243)"
|
||||
x1="696.67322"
|
||||
y1="77.046234"
|
||||
x2="654.80023"
|
||||
y2="115.01974" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-0-0">
|
||||
<stop
|
||||
id="stop3866-5-7"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3868-7-6"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="linearGradient3942"
|
||||
x1="597.77283"
|
||||
y1="44.024342"
|
||||
x2="619.30328"
|
||||
y2="30.27434"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3377">
|
||||
<stop
|
||||
id="stop3379"
|
||||
offset="0"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381"
|
||||
offset="1"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-0"
|
||||
id="linearGradient3657"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.2210246,-0.5789261,-0.71699693,-0.35346705,536.41251,472.3612)"
|
||||
x1="696.67322"
|
||||
y1="77.046234"
|
||||
x2="650.70459"
|
||||
y2="139.40982" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-0">
|
||||
<stop
|
||||
id="stop3866-5"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3868-7"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
id="perspective3902"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3841-0-3">
|
||||
<stop
|
||||
id="stop3843-1-3"
|
||||
offset="0"
|
||||
style="stop-color:#0619c0;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3845-0-8"
|
||||
offset="1"
|
||||
style="stop-color:#379cfb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="114.5684"
|
||||
fx="20.892099"
|
||||
r="5.256"
|
||||
cy="114.5684"
|
||||
cx="20.892099"
|
||||
id="aigrd2">
|
||||
<stop
|
||||
id="stop15566"
|
||||
style="stop-color:#F0F0F0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop15568"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
offset="1.0000000" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
fy="64.567902"
|
||||
fx="20.892099"
|
||||
r="5.257"
|
||||
cy="64.567902"
|
||||
cx="20.892099"
|
||||
id="aigrd3">
|
||||
<stop
|
||||
id="stop15573"
|
||||
style="stop-color:#F0F0F0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop15575"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
offset="1.0000000" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient15662">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop15664" />
|
||||
<stop
|
||||
style="stop-color:#f8f8f8;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop15666" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="86.70845"
|
||||
fy="35.736916"
|
||||
fx="33.966679"
|
||||
cy="35.736916"
|
||||
cx="33.966679"
|
||||
gradientTransform="matrix(0.96049297,0,0,1.041132,-52.144249,-702.33158)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4452"
|
||||
xlink:href="#linearGradient259"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient259">
|
||||
<stop
|
||||
style="stop-color:#fafafa;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop260" />
|
||||
<stop
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop261" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="37.751713"
|
||||
fy="3.7561285"
|
||||
fx="8.824419"
|
||||
cy="3.7561285"
|
||||
cx="8.824419"
|
||||
gradientTransform="matrix(0.96827297,0,0,1.032767,-48.790699,-701.68513)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4454"
|
||||
xlink:href="#linearGradient269"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient269">
|
||||
<stop
|
||||
style="stop-color:#a3a3a3;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop270" />
|
||||
<stop
|
||||
style="stop-color:#4c4c4c;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop271" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="86.70845"
|
||||
fy="43.717598"
|
||||
fx="3.7745965"
|
||||
cy="43.717598"
|
||||
cx="3.7745965"
|
||||
gradientTransform="matrix(4.7474974e-4,1.1562124,-1.3743496,4.6927601e-4,63.8109,7.049203)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3972"
|
||||
xlink:href="#linearGradient259"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="37.751713"
|
||||
fy="43.445751"
|
||||
fx="0.28083447"
|
||||
cy="43.445751"
|
||||
cx="0.28083447"
|
||||
gradientTransform="matrix(4.7859521e-4,1.1655777,-1.3633075,4.6550565e-4,62.959207,11.086395)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient3974"
|
||||
xlink:href="#linearGradient269"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3895"
|
||||
id="linearGradient3909"
|
||||
x1="43"
|
||||
y1="22"
|
||||
x2="48"
|
||||
y2="44"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3895">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3897" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3899" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(-17,5)"
|
||||
y2="44"
|
||||
x2="48"
|
||||
y1="22"
|
||||
x1="43"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3023"
|
||||
xlink:href="#linearGradient3895"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4680"
|
||||
id="radialGradient4608"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(4.7474974e-4,1.1562124,-1.3743496,4.6927601e-4,63.8109,7.049203)"
|
||||
cx="3.7745965"
|
||||
cy="43.717598"
|
||||
fx="3.7745965"
|
||||
fy="43.717598"
|
||||
r="86.70845" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4.6239102"
|
||||
inkscape:cx="40.128646"
|
||||
inkscape:cy="34.861394"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1051"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-bbox="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3071"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:url(#radialGradient4608);fill-opacity:1;fill-rule:nonzero;stroke:#284826;stroke-width:1.85646296;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="M 19.578125,8 5.4042969,8.0058594 C 5.1706901,8.005955 4.9823344,8.2113736 4.9824219,8.4667969 l 0.00391,7.9042971 c -2.596e-4,0.01067 -0.00391,0.02052 -0.00391,0.03125 L 5,55.617188 C 5.0003146,56.383475 5.677268,57.000287 6.5175781,57 L 57.5,56.982422 c 0.84031,-2.87e-4 1.517893,-0.618479 1.517578,-1.384766 L 59,16.382812 C 58.999685,15.616525 58.322732,14.999713 57.482422,15 H 25 L 20,8.4609375 C 19.999913,8.2055142 19.811732,7.9999044 19.578125,8 Z"
|
||||
id="rect15391"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
<path
|
||||
style="color:#000000;display:block;overflow:visible;visibility:visible;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#a1fd88;stroke-width:1.85646296;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
|
||||
d="M 18.578125,10 H 7.421875 C 7.1882682,10.000096 6.9999125,10.205514 7,10.460938 L 7.00391,15.96875 7,16 v 38 c 0,1 0,1 1,1 h 48 c 1,0 1,0 1,-1 V 18 c 0,-1 0,-1 -1,-1 H 24 L 19,10.460938 C 18.999913,10.205514 18.811732,9.9999044 18.578125,10 Z"
|
||||
id="rect15391-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccc" />
|
||||
<g
|
||||
id="g4636"
|
||||
transform="rotate(90,38,36)">
|
||||
<path
|
||||
inkscape:export-ydpi="4.1683898"
|
||||
inkscape:export-xdpi="4.1683898"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path3343"
|
||||
d="M 30,20 V 30 L 7,30 V 44 H 30 V 54 L 48,37 Z"
|
||||
style="fill:url(#linearGradient3023);fill-opacity:1;fill-rule:evenodd;stroke:#0b1521;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:export-ydpi="4.1683898"
|
||||
inkscape:export-xdpi="4.1683898"
|
||||
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/changeprop.png"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path3343-2"
|
||||
d="M 32.006611,24.642998 32,32 H 9 V 42 H 32 L 31.9934,49.357002 45,37 Z"
|
||||
style="fill:none;stroke:#729fcf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<metadata
|
||||
id="metadata4251">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<cc:license
|
||||
rdf:resource="" />
|
||||
<dc:date>Mon Oct 10 13:44:52 2011 +0000</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>[wmayer]</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD LGPL2+</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:publisher>
|
||||
<cc:Agent>
|
||||
<dc:title>FreeCAD</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:identifier>FreeCAD/src/Mod/Draft/Resources/icons/Draft_Drawing.svg</dc:identifier>
|
||||
<dc:relation>http://www.freecadweb.org/wiki/index.php?title=Artwork</dc:relation>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>[agryson] Alexander Gryson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>arrow</rdf:li>
|
||||
<rdf:li>page</rdf:li>
|
||||
<rdf:li>shapes</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:description>An arrow pointing from left to right onto a page with shapes drawn on it</dc:description>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -124,7 +124,7 @@ class DraftTest(unittest.TestCase):
|
||||
FreeCAD.Console.PrintLog ('Checking Draft Rotate...\n')
|
||||
l = Draft.makeLine(FreeCAD.Vector(2,0,0),FreeCAD.Vector(4,0,0))
|
||||
Draft.rotate(l,90)
|
||||
self.failUnless(l.Start == FreeCAD.Vector(0,2,0),"Draft Rotate failed")
|
||||
self.assertTrue(l.Start.isEqual(FreeCAD.Vector(0,2,0), 1e-12),"Draft Rotate failed")
|
||||
|
||||
def testOffset(self):
|
||||
FreeCAD.Console.PrintLog ('Checking Draft Offset...\n')
|
||||
|
||||
@@ -100,6 +100,10 @@ def convertToDxf(dwgfilename):
|
||||
basename = os.path.basename(dwgfilename)
|
||||
cmdline = '"%s" "%s" "%s" "ACAD2000" "DXF" "0" "1" "%s"' % (teigha, indir, outdir, basename)
|
||||
print("Converting: " + cmdline)
|
||||
if isinstance(cmdline,unicode):
|
||||
import sys
|
||||
encoding = sys.getfilesystemencoding()
|
||||
cmdline = cmdline.encode(encoding)
|
||||
subprocess.call(cmdline, shell=True) #os.system(cmdline)
|
||||
result = outdir + os.sep + os.path.splitext(basename)[0] + ".dxf"
|
||||
if os.path.exists(result):
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <Base/TimeInfo.h>
|
||||
#include <Base/Console.h>
|
||||
#include <Base/Type.h>
|
||||
#include <Base/Parameter.h>
|
||||
|
||||
#include <App/Application.h>
|
||||
#include <App/Document.h>
|
||||
@@ -109,7 +110,13 @@ template<class TWriter> void writeVTKFile(const char* filename, vtkSmartPointer<
|
||||
writer->Write();
|
||||
}
|
||||
|
||||
void FemVTKTools::importVTKMesh(vtkSmartPointer<vtkDataSet> dataset, FemMesh* mesh)
|
||||
/*
|
||||
double scale = 1000;
|
||||
p[0] = p[0]* scale; // scale back to mm
|
||||
p[1] = p[1]* scale;
|
||||
p[1] = p[1]* scale;
|
||||
*/
|
||||
void FemVTKTools::importVTKMesh(vtkSmartPointer<vtkDataSet> dataset, FemMesh* mesh, float scale)
|
||||
{
|
||||
const vtkIdType nPoints = dataset->GetNumberOfPoints();
|
||||
const vtkIdType nCells = dataset->GetNumberOfCells();
|
||||
@@ -126,7 +133,7 @@ void FemVTKTools::importVTKMesh(vtkSmartPointer<vtkDataSet> dataset, FemMesh* me
|
||||
for(vtkIdType i=0; i<nPoints; i++)
|
||||
{
|
||||
double* p = dataset->GetPoint(i);
|
||||
meshds->AddNodeWithID(p[0], p[1], p[2], i+1);
|
||||
meshds->AddNodeWithID(p[0]*scale, p[1]*scale, p[2]*scale, i+1);
|
||||
}
|
||||
|
||||
for(vtkIdType iCell=0; iCell<nCells; iCell++)
|
||||
@@ -487,7 +494,14 @@ App::DocumentObject* FemVTKTools::readFluidicResult(const char* filename, App::D
|
||||
Base::TimeInfo Start;
|
||||
Base::Console().Log("Start: read FemResult with FemMesh from VTK file ======================\n");
|
||||
Base::FileInfo f(filename);
|
||||
|
||||
|
||||
auto hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Units");
|
||||
int unitSchema = hGrp->GetInt("UserSchema",0);
|
||||
float scale = 1.0;
|
||||
if(unitSchema == 0) // standard mm
|
||||
{
|
||||
scale = 1000.0; // convert from meter in length of CFD result file
|
||||
}
|
||||
vtkSmartPointer<vtkDataSet> ds;
|
||||
if(f.hasExtension("vtu"))
|
||||
{
|
||||
@@ -528,7 +542,7 @@ App::DocumentObject* FemVTKTools::readFluidicResult(const char* filename, App::D
|
||||
|
||||
App::DocumentObject* mesh = pcDoc->addObject("Fem::FemMeshObject", "ResultMesh");
|
||||
FemMesh* fmesh = new FemMesh(); // PropertyFemMesh instance is responsible to relase FemMesh ??
|
||||
importVTKMesh(dataset, fmesh);
|
||||
importVTKMesh(dataset, fmesh, scale);
|
||||
static_cast<PropertyFemMesh*>(mesh->getPropertyByName("FemMesh"))->setValue(*fmesh);
|
||||
static_cast<App::PropertyLink*>(result->getPropertyByName("Mesh"))->setValue(mesh);
|
||||
// PropertyLink is the property type to store DocumentObject pointer
|
||||
@@ -636,20 +650,37 @@ void FemVTKTools::importFluidicResult(vtkSmartPointer<vtkDataSet> dataset, App::
|
||||
vtkSmartPointer<vtkDataArray> vel = pd->GetArray(vars["Velocity"]);
|
||||
if(nPoints && vel && vel->GetNumberOfComponents() == 3) {
|
||||
std::vector<Base::Vector3d> vec(nPoints);
|
||||
double vmin=1.0e100, vmean=0.0, vmax=0.0; // only velocity magnitude is calc in c++
|
||||
double vmin=1.0e100, vmean=0.0, vmax=0.0;
|
||||
//stat of Vx, Vy, Vz is not necessary
|
||||
double vmins[3] = {0.0, 0.0, 0.0};
|
||||
double vmeans[3] = {0.0, 0.0, 0.0};
|
||||
double vmaxs[3] = {0.0, 0.0, 0.0};
|
||||
for(vtkIdType i=0; i<nPoints; ++i) {
|
||||
double *p = vel->GetTuple(i); // both vtkFloatArray and vtkDoubleArray return double* for GetTuple(i)
|
||||
double vmag = std::sqrt(p[0]*p[0] + p[1]*p[1] + p[2]*p[2]);
|
||||
for(int ii=0; ii<3; ii++) {
|
||||
vmeans[ii] += p[ii];
|
||||
if(p[ii] > vmaxs[ii]) vmaxs[ii] = p[ii];
|
||||
if(p[ii] < vmins[ii]) vmins[ii] = p[ii];
|
||||
}
|
||||
vmean += vmag;
|
||||
if(vmag > vmax) vmax = vmag;
|
||||
if(vmag < vmin) vmin = vmag;
|
||||
|
||||
vec[i] = (Base::Vector3d(p[0], p[1], p[2]));
|
||||
nodeIds[i] = i;
|
||||
}
|
||||
|
||||
for(int ii=0; ii<3; ii++) {
|
||||
stats[ii*3] = vmins[ii];
|
||||
stats[ii*3 + 2] = vmaxs[ii];
|
||||
stats[ii*3 + 1] = vmeans[ii]/nPoints;
|
||||
}
|
||||
int index = varids["Umag"];
|
||||
stats[index*3] = vmin;
|
||||
stats[index*3 + 2] = vmax;
|
||||
stats[index*3 + 1] = vmean/nPoints;
|
||||
|
||||
App::PropertyVectorList* velocity = static_cast<App::PropertyVectorList*>(res->getPropertyByName("Velocity"));
|
||||
if(velocity) {
|
||||
//PropertyVectorList will not show up in PropertyEditor
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Fem
|
||||
/*!
|
||||
FemMesh import from vtkUnstructuredGrid instance
|
||||
*/
|
||||
static void importVTKMesh(vtkSmartPointer<vtkDataSet> grid, FemMesh* mesh);
|
||||
static void importVTKMesh(vtkSmartPointer<vtkDataSet> grid, FemMesh* mesh, float scale = 1.0);
|
||||
/*!
|
||||
FemMesh read from vtkUnstructuredGrid data file
|
||||
*/
|
||||
|
||||
@@ -213,7 +213,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
inpfileMain.write('** written by write_node_sets_constraints_fixed\n')
|
||||
inpfileMain.write('** written by write_node_sets_constraints_displacement\n')
|
||||
inpfileMain.write('** written by write_node_sets_constraints_planerotation\n')
|
||||
if self.fixed_objects:
|
||||
if self.fixed_objects or self.displacement_objects or self.planerotation_objects:
|
||||
inpfileMain.write('*INCLUDE,INPUT=' + include_name + "_Node_sets.inp \n")
|
||||
|
||||
inpfileMain.write('\n***********************************************************\n')
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
<file>icons/fem-frequency-analysis.svg</file>
|
||||
<file>icons/fem-inp-editor.svg</file>
|
||||
<file>icons/fem-material.svg</file>
|
||||
<file>icons/fem-material-fluid.svg</file>
|
||||
<file>icons/fem-material-nonlinear.svg</file>
|
||||
<file>icons/fem-plane.svg</file>
|
||||
<file>icons/fem-purge-results.svg</file>
|
||||
|
||||
@@ -0,0 +1,532 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64px"
|
||||
height="64px"
|
||||
id="svg2816"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="fem-material-fluid.svg">
|
||||
<defs
|
||||
id="defs2818">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4044">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4046" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop4048" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3681">
|
||||
<stop
|
||||
id="stop3697"
|
||||
offset="0"
|
||||
style="stop-color:#fff110;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#cf7008;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3685" />
|
||||
</linearGradient>
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2824" />
|
||||
<inkscape:perspective
|
||||
id="perspective3622"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3622-9"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3653"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3675"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3697"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3720"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3742"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3764"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3785"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3806"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3806-3"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3835"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3614"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3614-8"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3643"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3643-3"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3672"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3672-5"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3701"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3701-8"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective3746"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<pattern
|
||||
patternTransform="matrix(0.67643728,-0.81829155,2.4578314,1.8844554,-26.450606,18.294947)"
|
||||
id="pattern5231"
|
||||
xlink:href="#Strips1_1-4"
|
||||
inkscape:collect="always" />
|
||||
<inkscape:perspective
|
||||
id="perspective5224"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<pattern
|
||||
inkscape:stockid="Stripes 1:1"
|
||||
id="Strips1_1-4"
|
||||
patternTransform="matrix(0.66772843,-1.0037085,2.4261878,2.3114548,3.4760987,3.534923)"
|
||||
height="1"
|
||||
width="2"
|
||||
patternUnits="userSpaceOnUse"
|
||||
inkscape:collect="always">
|
||||
<rect
|
||||
id="rect4483-4"
|
||||
height="2"
|
||||
width="1"
|
||||
y="-0.5"
|
||||
x="0"
|
||||
style="fill:black;stroke:none" />
|
||||
</pattern>
|
||||
<inkscape:perspective
|
||||
id="perspective5224-9"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<pattern
|
||||
patternTransform="matrix(0.66772843,-1.0037085,2.4261878,2.3114548,39.618381,8.9692804)"
|
||||
id="pattern5231-4"
|
||||
xlink:href="#Strips1_1-6"
|
||||
inkscape:collect="always" />
|
||||
<inkscape:perspective
|
||||
id="perspective5224-3"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<pattern
|
||||
inkscape:stockid="Stripes 1:1"
|
||||
id="Strips1_1-6"
|
||||
patternTransform="matrix(0.66772843,-1.0037085,2.4261878,2.3114548,3.4760987,3.534923)"
|
||||
height="1"
|
||||
width="2"
|
||||
patternUnits="userSpaceOnUse"
|
||||
inkscape:collect="always">
|
||||
<rect
|
||||
id="rect4483-0"
|
||||
height="2"
|
||||
width="1"
|
||||
y="-0.5"
|
||||
x="0"
|
||||
style="fill:black;stroke:none" />
|
||||
</pattern>
|
||||
<pattern
|
||||
patternTransform="matrix(0.66513382,-1.0631299,2.4167603,2.4482973,-49.762569,2.9546807)"
|
||||
id="pattern5296"
|
||||
xlink:href="#pattern5231-3"
|
||||
inkscape:collect="always" />
|
||||
<inkscape:perspective
|
||||
id="perspective5288"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<pattern
|
||||
patternTransform="matrix(0.66772843,-1.0037085,2.4261878,2.3114548,-26.336284,10.887197)"
|
||||
id="pattern5231-3"
|
||||
xlink:href="#Strips1_1-4-3"
|
||||
inkscape:collect="always" />
|
||||
<pattern
|
||||
inkscape:stockid="Stripes 1:1"
|
||||
id="Strips1_1-4-3"
|
||||
patternTransform="matrix(0.66772843,-1.0037085,2.4261878,2.3114548,3.4760987,3.534923)"
|
||||
height="1"
|
||||
width="2"
|
||||
patternUnits="userSpaceOnUse"
|
||||
inkscape:collect="always">
|
||||
<rect
|
||||
id="rect4483-4-6"
|
||||
height="2"
|
||||
width="1"
|
||||
y="-0.5"
|
||||
x="0"
|
||||
style="fill:black;stroke:none" />
|
||||
</pattern>
|
||||
<pattern
|
||||
patternTransform="matrix(0.42844886,-0.62155849,1.5567667,1.431396,27.948414,13.306456)"
|
||||
id="pattern5330"
|
||||
xlink:href="#Strips1_1-9"
|
||||
inkscape:collect="always" />
|
||||
<inkscape:perspective
|
||||
id="perspective5323"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<pattern
|
||||
inkscape:stockid="Stripes 1:1"
|
||||
id="Strips1_1-9"
|
||||
patternTransform="matrix(0.66772843,-1.0037085,2.4261878,2.3114548,3.4760987,3.534923)"
|
||||
height="1"
|
||||
width="2"
|
||||
patternUnits="userSpaceOnUse"
|
||||
inkscape:collect="always">
|
||||
<rect
|
||||
id="rect4483-3"
|
||||
height="2"
|
||||
width="1"
|
||||
y="-0.5"
|
||||
x="0"
|
||||
style="fill:black;stroke:none" />
|
||||
</pattern>
|
||||
<inkscape:perspective
|
||||
id="perspective5361"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5383"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<inkscape:perspective
|
||||
id="perspective5411"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3681"
|
||||
id="linearGradient3687"
|
||||
x1="37.89756"
|
||||
y1="41.087898"
|
||||
x2="4.0605712"
|
||||
y2="40.168594"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3681"
|
||||
id="linearGradient3695"
|
||||
x1="31.777767"
|
||||
y1="40.24213"
|
||||
x2="68.442062"
|
||||
y2="54.041203"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.25023482,-0.66040068,0.68751357,0.24036653,-8.7488565,43.149938)" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient12512"
|
||||
id="radialGradient278"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="55"
|
||||
cy="125"
|
||||
fx="55"
|
||||
fy="125"
|
||||
r="14.375" />
|
||||
<linearGradient
|
||||
id="linearGradient12512">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop12513" />
|
||||
<stop
|
||||
style="stop-color:#fff520;stop-opacity:0.89108908;"
|
||||
offset="0.50000000"
|
||||
id="stop12517" />
|
||||
<stop
|
||||
style="stop-color:#fff300;stop-opacity:0.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop12514" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="14.375"
|
||||
fy="125"
|
||||
fx="55"
|
||||
cy="125"
|
||||
cx="55"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient4017"
|
||||
xlink:href="#linearGradient12512"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4044"
|
||||
id="linearGradient4060"
|
||||
x1="15.78776"
|
||||
y1="50.394047"
|
||||
x2="27.641447"
|
||||
y2="39.95837"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3006889,0,0,0.42340995,-4.2689268,33.381825)" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient12512-2"
|
||||
id="radialGradient278-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="55"
|
||||
cy="125"
|
||||
fx="55"
|
||||
fy="125"
|
||||
r="14.375" />
|
||||
<linearGradient
|
||||
id="linearGradient12512-2">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop12513-3" />
|
||||
<stop
|
||||
style="stop-color:#fff520;stop-opacity:0.89108908;"
|
||||
offset="0.50000000"
|
||||
id="stop12517-1" />
|
||||
<stop
|
||||
style="stop-color:#fff300;stop-opacity:0.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop12514-6" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Blur"
|
||||
id="filter3399">
|
||||
<feGaussianBlur
|
||||
stdDeviation="2 2"
|
||||
result="blur"
|
||||
id="feGaussianBlur3401" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:label="Blur Double"
|
||||
inkscape:menu="Blurs"
|
||||
inkscape:menu-tooltip="Overlays two copies with different blur amounts and modifiable blend and composite"
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
id="filter3435">
|
||||
<feGaussianBlur
|
||||
stdDeviation="5"
|
||||
result="fbSourceGraphic"
|
||||
id="feGaussianBlur3437" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="0.01"
|
||||
in="SourceGraphic"
|
||||
result="result1"
|
||||
id="feGaussianBlur3439" />
|
||||
<feComposite
|
||||
in2="result1"
|
||||
operator="arithmetic"
|
||||
in="fbSourceGraphic"
|
||||
k2="0.5"
|
||||
k3="0.5"
|
||||
result="result2"
|
||||
id="feComposite3441" />
|
||||
<feBlend
|
||||
in2="fbSourceGraphic"
|
||||
mode="normal"
|
||||
result="result3"
|
||||
id="feBlend3443" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.8890872"
|
||||
inkscape:cx="-18.452064"
|
||||
inkscape:cy="14.197821"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="758"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata2821">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<ellipse
|
||||
style="fill:#000080;fill-opacity:1;stroke:url(#linearGradient4060);stroke-width:1.48421645;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter3435)"
|
||||
id="path4042"
|
||||
cx="31.683996"
|
||||
cy="50.300598"
|
||||
rx="27.257332"
|
||||
ry="8.8730106"
|
||||
transform="matrix(0.99177198,0,0,1.1723755,0.26069664,-7.1278108)" />
|
||||
<ellipse
|
||||
style="color:#000000;display:block;visibility:visible;fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000024;marker:none;filter:url(#filter3399)"
|
||||
id="path12511"
|
||||
inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/stock_new-16.png"
|
||||
inkscape:export-xdpi="33.852203"
|
||||
inkscape:export-ydpi="33.852203"
|
||||
cx="32.326824"
|
||||
cy="18.083538"
|
||||
rx="11.117324"
|
||||
ry="14.425747" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -137,24 +137,14 @@
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<item row="3" column="0">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Density</string>
|
||||
<string>Density </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QPushButton" name="pushButton_saveas">
|
||||
<property name="text">
|
||||
<string>save as name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="edit_name"/>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="4" column="1">
|
||||
<widget class="Gui::InputField" name="input_fd_density">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
@@ -576,6 +566,13 @@
|
||||
<string>External material resources</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_saveas">
|
||||
<property name="text">
|
||||
<string>save customed material</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_MatWeb">
|
||||
<property name="text">
|
||||
|
||||
+68
-109
@@ -37,24 +37,26 @@ import unittest
|
||||
mesh_name = 'Mesh'
|
||||
|
||||
home_path = FreeCAD.getHomePath()
|
||||
temp_dir = tempfile.gettempdir()
|
||||
temp_dir = tempfile.gettempdir() + '/FEM_unittests'
|
||||
test_file_dir = home_path + 'Mod/Fem/test_files/ccx'
|
||||
|
||||
static_base_name = 'cube_static'
|
||||
frequency_base_name = 'cube_frequency'
|
||||
thermomech_base_name = 'spine_thermomech'
|
||||
static_analysis_dir = temp_dir + '/FEM_static'
|
||||
frequency_analysis_dir = temp_dir + '/FEM_frequency'
|
||||
thermomech_analysis_dir = temp_dir + '/FEM_thermomech'
|
||||
static_save_fc_file = static_analysis_dir + '/' + static_base_name + '.fcstd'
|
||||
static_analysis_inp_file = test_file_dir + '/' + static_base_name + '.inp'
|
||||
static_expected_values = test_file_dir + "/cube_static_expected_values"
|
||||
|
||||
frequency_base_name = 'cube_frequency'
|
||||
frequency_analysis_dir = temp_dir + '/FEM_frequency'
|
||||
frequency_save_fc_file = frequency_analysis_dir + '/' + frequency_base_name + '.fcstd'
|
||||
frequency_analysis_inp_file = test_file_dir + '/' + frequency_base_name + '.inp'
|
||||
frequency_expected_values = test_file_dir + "/cube_frequency_expected_values"
|
||||
|
||||
thermomech_base_name = 'spine_thermomech'
|
||||
thermomech_analysis_dir = temp_dir + '/FEM_thermomech'
|
||||
thermomech_save_fc_file = thermomech_analysis_dir + '/' + thermomech_base_name + '.fcstd'
|
||||
thermomech_analysis_inp_file = test_file_dir + '/' + thermomech_base_name + '.inp'
|
||||
thermomech_expected_values = test_file_dir + "/spine_thermomech_expected_values"
|
||||
static_save_fc_file = static_analysis_dir + '/' + static_base_name + '.fcstd'
|
||||
frequency_save_fc_file = frequency_analysis_dir + '/' + frequency_base_name + '.fcstd'
|
||||
thermomech_save_fc_file = thermomech_analysis_dir + '/' + thermomech_base_name + '.fcstd'
|
||||
|
||||
mesh_points_file = test_file_dir + '/mesh_points.csv'
|
||||
mesh_volumes_file = test_file_dir + '/mesh_volumes.csv'
|
||||
@@ -141,52 +143,6 @@ class FemTest(unittest.TestCase):
|
||||
def save_file(self, fc_file_name):
|
||||
self.active_doc.saveAs(fc_file_name)
|
||||
|
||||
def force_unix_line_ends(self, line_list):
|
||||
new_line_list = []
|
||||
for l in line_list:
|
||||
if l.endswith("\r\n"):
|
||||
l = l[:-2] + '\n'
|
||||
new_line_list.append(l)
|
||||
return new_line_list
|
||||
|
||||
def compare_inp_files(self, file_name1, file_name2):
|
||||
file1 = open(file_name1, 'r')
|
||||
f1 = file1.readlines()
|
||||
file1.close()
|
||||
lf1 = [l for l in f1 if not (l.startswith('** written ') or l.startswith('** file '))]
|
||||
lf1 = self.force_unix_line_ends(lf1)
|
||||
file2 = open(file_name2, 'r')
|
||||
f2 = file2.readlines()
|
||||
file2.close()
|
||||
lf2 = [l for l in f2 if not (l.startswith('** written ') or l.startswith('** file '))]
|
||||
lf2 = self.force_unix_line_ends(lf2)
|
||||
import difflib
|
||||
diff = difflib.unified_diff(lf1, lf2, n=0)
|
||||
result = ''
|
||||
for l in diff:
|
||||
result += l
|
||||
if result:
|
||||
result = "Comparing {} to {} failed!\n".format(file_name1, file_name2) + result
|
||||
return result
|
||||
|
||||
def compare_stats(self, fea, stat_file=None):
|
||||
if stat_file:
|
||||
sf = open(stat_file, 'r')
|
||||
sf_content = sf.readlines()
|
||||
sf.close()
|
||||
sf_content = self.force_unix_line_ends(sf_content)
|
||||
stat_types = ["U1", "U2", "U3", "Uabs", "Sabs"]
|
||||
stats = []
|
||||
for s in stat_types:
|
||||
stats.append("{}: {}\n".format(s, fea.get_stats(s)))
|
||||
if sf_content != stats:
|
||||
fcc_print("Expected stats from {}".format(stat_file))
|
||||
fcc_print(sf_content)
|
||||
fcc_print("Stats read from {}.frd file".format(fea.base_name))
|
||||
fcc_print(stats)
|
||||
return True
|
||||
return False
|
||||
|
||||
def test_new_analysis(self):
|
||||
# static
|
||||
fcc_print('--------------- Start of FEM tests ---------------')
|
||||
@@ -245,7 +201,7 @@ class FemTest(unittest.TestCase):
|
||||
self.assertFalse(error, "Writing failed")
|
||||
|
||||
fcc_print('Comparing {} to {}/{}.inp'.format(static_analysis_inp_file, static_analysis_dir, mesh_name))
|
||||
ret = self.compare_inp_files(static_analysis_inp_file, static_analysis_dir + "/" + mesh_name + '.inp')
|
||||
ret = compare_inp_files(static_analysis_inp_file, static_analysis_dir + "/" + mesh_name + '.inp')
|
||||
self.assertFalse(ret, "FemToolsCcx write_inp_file test failed.\n{}".format(ret))
|
||||
|
||||
fcc_print('Setting up working directory to {} in order to read simulated calculations'.format(test_file_dir))
|
||||
@@ -268,7 +224,7 @@ class FemTest(unittest.TestCase):
|
||||
self.assertTrue(fea.results_present, "Cannot read results from {}.frd frd file".format(fea.base_name))
|
||||
|
||||
fcc_print('Reading stats from result object for static analysis...')
|
||||
ret = self.compare_stats(fea, static_expected_values)
|
||||
ret = compare_stats(fea, static_expected_values)
|
||||
self.assertFalse(ret, "Invalid results read from .frd file")
|
||||
|
||||
fcc_print('Save FreeCAD file for static analysis to {}...'.format(static_save_fc_file))
|
||||
@@ -294,7 +250,7 @@ class FemTest(unittest.TestCase):
|
||||
self.assertFalse(error, "Writing failed")
|
||||
|
||||
fcc_print('Comparing {} to {}/{}.inp'.format(frequency_analysis_inp_file, frequency_analysis_dir, mesh_name))
|
||||
ret = self.compare_inp_files(frequency_analysis_inp_file, frequency_analysis_dir + "/" + mesh_name + '.inp')
|
||||
ret = compare_inp_files(frequency_analysis_inp_file, frequency_analysis_dir + "/" + mesh_name + '.inp')
|
||||
self.assertFalse(ret, "FemToolsCcx write_inp_file test failed.\n{}".format(ret))
|
||||
|
||||
fcc_print('Setting up working directory to {} in order to read simulated calculations'.format(test_file_dir))
|
||||
@@ -317,7 +273,7 @@ class FemTest(unittest.TestCase):
|
||||
self.assertTrue(fea.results_present, "Cannot read results from {}.frd frd file".format(fea.base_name))
|
||||
|
||||
fcc_print('Reading stats from result object for frequency analysis...')
|
||||
ret = self.compare_stats(fea, frequency_expected_values)
|
||||
ret = compare_stats(fea, frequency_expected_values)
|
||||
self.assertFalse(ret, "Invalid results read from .frd file")
|
||||
|
||||
fcc_print('Save FreeCAD file for frequency analysis to {}...'.format(frequency_save_fc_file))
|
||||
@@ -413,52 +369,6 @@ class TherMechFemTest(unittest.TestCase):
|
||||
def save_file(self, fc_file_name):
|
||||
self.active_doc.saveAs(fc_file_name)
|
||||
|
||||
def force_unix_line_ends(self, line_list):
|
||||
new_line_list = []
|
||||
for l in line_list:
|
||||
if l.endswith("\r\n"):
|
||||
l = l[:-2] + '\n'
|
||||
new_line_list.append(l)
|
||||
return new_line_list
|
||||
|
||||
def compare_inp_files(self, file_name1, file_name2):
|
||||
file1 = open(file_name1, 'r')
|
||||
f1 = file1.readlines()
|
||||
file1.close()
|
||||
lf1 = [l for l in f1 if not l.startswith('** written ') if not l.startswith('** file ')]
|
||||
lf1 = self.force_unix_line_ends(lf1)
|
||||
file2 = open(file_name2, 'r')
|
||||
f2 = file2.readlines()
|
||||
file2.close()
|
||||
lf2 = [l for l in f2 if not l.startswith('** written ') if not l.startswith('** file ')]
|
||||
lf2 = self.force_unix_line_ends(lf2)
|
||||
import difflib
|
||||
diff = difflib.unified_diff(lf1, lf2, n=0)
|
||||
result = ''
|
||||
for l in diff:
|
||||
result += l
|
||||
if result:
|
||||
result = "Comparing {} to {} failed!\n".format(file_name1, file_name2) + result
|
||||
return result
|
||||
|
||||
def compare_stats(self, fea, stat_file=None):
|
||||
if stat_file:
|
||||
sf = open(stat_file, 'r')
|
||||
sf_content = sf.readlines()
|
||||
sf.close()
|
||||
sf_content = self.force_unix_line_ends(sf_content)
|
||||
stat_types = ["U1", "U2", "U3", "Uabs", "Sabs"]
|
||||
stats = []
|
||||
for s in stat_types:
|
||||
stats.append("{}: {}\n".format(s, fea.get_stats(s)))
|
||||
if sf_content != stats:
|
||||
fcc_print("Expected stats from {}".format(stat_file))
|
||||
fcc_print(sf_content)
|
||||
fcc_print("Stats read from {}.frd file".format(fea.base_name))
|
||||
fcc_print(stats)
|
||||
return True
|
||||
return False
|
||||
|
||||
def test_new_analysis(self):
|
||||
fcc_print('--------------- Start of FEM tests ---------------')
|
||||
fcc_print('Checking FEM new analysis...')
|
||||
@@ -521,7 +431,7 @@ class TherMechFemTest(unittest.TestCase):
|
||||
self.assertFalse(error, "Writing failed")
|
||||
|
||||
fcc_print('Comparing {} to {}/{}.inp'.format(thermomech_analysis_inp_file, thermomech_analysis_dir, mesh_name))
|
||||
ret = self.compare_inp_files(thermomech_analysis_inp_file, thermomech_analysis_dir + "/" + mesh_name + '.inp')
|
||||
ret = compare_inp_files(thermomech_analysis_inp_file, thermomech_analysis_dir + "/" + mesh_name + '.inp')
|
||||
self.assertFalse(ret, "FemToolsCcx write_inp_file test failed.\n{}".format(ret))
|
||||
|
||||
fcc_print('Setting up working directory to {} in order to read simulated calculations'.format(test_file_dir))
|
||||
@@ -544,7 +454,7 @@ class TherMechFemTest(unittest.TestCase):
|
||||
self.assertTrue(fea.results_present, "Cannot read results from {}.frd frd file".format(fea.base_name))
|
||||
|
||||
fcc_print('Reading stats from result object for thermomech analysis...')
|
||||
ret = self.compare_stats(fea, thermomech_expected_values)
|
||||
ret = compare_stats(fea, thermomech_expected_values)
|
||||
self.assertFalse(ret, "Invalid results read from .frd file")
|
||||
|
||||
fcc_print('Save FreeCAD file for thermomech analysis to {}...'.format(thermomech_save_fc_file))
|
||||
@@ -559,6 +469,55 @@ class TherMechFemTest(unittest.TestCase):
|
||||
|
||||
|
||||
# helpers
|
||||
def compare_inp_files(file_name1, file_name2):
|
||||
file1 = open(file_name1, 'r')
|
||||
f1 = file1.readlines()
|
||||
file1.close()
|
||||
lf1 = [l for l in f1 if not (l.startswith('** written ') or l.startswith('** file '))]
|
||||
lf1 = force_unix_line_ends(lf1)
|
||||
file2 = open(file_name2, 'r')
|
||||
f2 = file2.readlines()
|
||||
file2.close()
|
||||
lf2 = [l for l in f2 if not (l.startswith('** written ') or l.startswith('** file '))]
|
||||
lf2 = force_unix_line_ends(lf2)
|
||||
import difflib
|
||||
diff = difflib.unified_diff(lf1, lf2, n=0)
|
||||
result = ''
|
||||
for l in diff:
|
||||
result += l
|
||||
if result:
|
||||
result = "Comparing {} to {} failed!\n".format(file_name1, file_name2) + result
|
||||
return result
|
||||
|
||||
|
||||
def compare_stats(fea, stat_file=None):
|
||||
if stat_file:
|
||||
sf = open(stat_file, 'r')
|
||||
sf_content = sf.readlines()
|
||||
sf.close()
|
||||
sf_content = force_unix_line_ends(sf_content)
|
||||
stat_types = ["U1", "U2", "U3", "Uabs", "Sabs"]
|
||||
stats = []
|
||||
for s in stat_types:
|
||||
stats.append("{}: {}\n".format(s, fea.get_stats(s)))
|
||||
if sf_content != stats:
|
||||
fcc_print("Expected stats from {}".format(stat_file))
|
||||
fcc_print(sf_content)
|
||||
fcc_print("Stats read from {}.frd file".format(fea.base_name))
|
||||
fcc_print(stats)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def force_unix_line_ends(line_list):
|
||||
new_line_list = []
|
||||
for l in line_list:
|
||||
if l.endswith("\r\n"):
|
||||
l = l[:-2] + '\n'
|
||||
new_line_list.append(l)
|
||||
return new_line_list
|
||||
|
||||
|
||||
def run_fem_unittests():
|
||||
import unittest
|
||||
suite = unittest.TestSuite()
|
||||
@@ -638,7 +597,7 @@ def create_test_results():
|
||||
stats_thermomech = [] # we only have one result object so we are fine
|
||||
for s in stat_types:
|
||||
stats_thermomech.append("{}: {}\n".format(s, fea.get_stats(s)))
|
||||
thermomech_expected_values_file = thermomech_analysis_dir + '/expected_values_thermomech'
|
||||
thermomech_expected_values_file = thermomech_analysis_dir + '/spine_thermomech_expected_values'
|
||||
f = open(thermomech_expected_values_file, 'w')
|
||||
for s in stats_thermomech:
|
||||
f.write(s)
|
||||
@@ -657,12 +616,12 @@ def create_test_results():
|
||||
|
||||
|
||||
'''
|
||||
update the results in FEM untit tests:
|
||||
update the results of FEM unit tests:
|
||||
|
||||
import TestFem
|
||||
TestFem.create_test_results()
|
||||
|
||||
copy result files from FEM test directories into the src dirctory
|
||||
copy result files from your_temp_directory/FEM_unittests/ test directories into the src dirctory
|
||||
compare the results with git difftool
|
||||
run make
|
||||
start FreeCAD and run FEM unit test
|
||||
|
||||
@@ -38,7 +38,7 @@ class _CommandMaterialFluid(FemCommands):
|
||||
"the Fem_MaterialFluid command definition"
|
||||
def __init__(self):
|
||||
super(_CommandMaterialFluid, self).__init__()
|
||||
self.resources = {'Pixmap': 'fem-material',
|
||||
self.resources = {'Pixmap': 'fem-material-fluid',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Fem_MaterialFluid", "FEM material for Fluid"),
|
||||
'Accel': "M, M",
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_MaterialFluid", "Creates a FEM material for Fluid")}
|
||||
|
||||
@@ -30,6 +30,8 @@ __url__ = "http://www.freecadweb.org"
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
from PySide import QtGui
|
||||
from PySide.QtGui import QFileDialog
|
||||
# from PySide.QtGui import QMessageBox
|
||||
from PySide import QtCore
|
||||
import Units
|
||||
|
||||
@@ -51,8 +53,8 @@ class _TaskPanelFemMaterial:
|
||||
self.references_shape_type = None
|
||||
|
||||
self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/TaskPanelFemMaterial.ui")
|
||||
QtCore.QObject.connect(self.form.pushButton_MatWeb, QtCore.SIGNAL("clicked()"), self.goMatWeb)
|
||||
QtCore.QObject.connect(self.form.pushButton_saveas, QtCore.SIGNAL("clicked()"), self.saveas_material)
|
||||
QtCore.QObject.connect(self.form.pushButton_MatWeb, QtCore.SIGNAL("clicked()"), self.goto_MatWeb)
|
||||
QtCore.QObject.connect(self.form.pushButton_saveas, QtCore.SIGNAL("clicked()"), self.export_material)
|
||||
QtCore.QObject.connect(self.form.cb_materials, QtCore.SIGNAL("activated(int)"), self.choose_material)
|
||||
QtCore.QObject.connect(self.form.pushButton_Reference, QtCore.SIGNAL("clicked()"), self.add_references)
|
||||
QtCore.QObject.connect(self.form.rb_standard, QtCore.SIGNAL("toggled(bool)"), self.choose_selection_mode_standard)
|
||||
@@ -154,7 +156,7 @@ class _TaskPanelFemMaterial:
|
||||
return False
|
||||
return True
|
||||
|
||||
def goMatWeb(self):
|
||||
def goto_MatWeb(self):
|
||||
import webbrowser
|
||||
webbrowser.open("http://matweb.com")
|
||||
|
||||
@@ -353,6 +355,7 @@ class _TaskPanelFemMaterial:
|
||||
self.form.cb_materials.addItem(QtGui.QIcon(":/icons/help-browser.svg"), material_name, material_name)
|
||||
self.materials[material_name] = material
|
||||
|
||||
######################## material import and export ###################
|
||||
def import_materials(self):
|
||||
self.materials = {}
|
||||
self.pathList = []
|
||||
@@ -388,7 +391,7 @@ class _TaskPanelFemMaterial:
|
||||
|
||||
use_mat_from_config_dir = self.fem_prefs.GetBool("UseMaterialsFromConfigDir", True)
|
||||
if use_mat_from_config_dir:
|
||||
user_mat_dirname = FreeCAD.getUserAppDataDir() + "Materials"
|
||||
user_mat_dirname = FreeCAD.getUserAppDataDir() + "FluidMaterial"
|
||||
self.add_mat_dir(user_mat_dirname, ":/icons/preferences-general.svg")
|
||||
|
||||
use_mat_from_custom_dir = self.fem_prefs.GetBool("UseMaterialsFromCustomDir", True)
|
||||
@@ -413,10 +416,71 @@ class _TaskPanelFemMaterial:
|
||||
for mat in material_name_list:
|
||||
self.form.cb_materials.addItem(QtGui.QIcon(icon), mat[0], mat[1])
|
||||
|
||||
def saveas_material(self):
|
||||
import Material
|
||||
mat_file_extension = ".FCMat"
|
||||
# overwritinig warning, save to customed dir, material name check
|
||||
def export_FCMat(self, fileName, matDict):
|
||||
"""
|
||||
Write a material dictionary to a FCMat file, a version without group support, with Python3
|
||||
<https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Material/Material.py>
|
||||
"""
|
||||
try:
|
||||
import ConfigParser as configparser
|
||||
except:
|
||||
import configparser # Python 3
|
||||
# himport string
|
||||
Config = configparser.ConfigParser()
|
||||
Config.optionxform = str # disable conversion all uppercase leter in key into lower case
|
||||
|
||||
# ignore creating group, just fill all into group 'FCMat'
|
||||
grp = 'FCMat'
|
||||
if not Config.has_section(grp):
|
||||
Config.add_section(grp)
|
||||
for x in matDict.keys():
|
||||
Config.set(grp, x, matDict[x])
|
||||
|
||||
Preamble = "# This is a FreeCAD material-card file\n\n"
|
||||
# Writing our configuration file to 'example.cfg'
|
||||
with open(fileName, 'wb') as configfile:
|
||||
configfile.write(Preamble)
|
||||
Config.write(configfile)
|
||||
|
||||
def export_material(self):
|
||||
import os
|
||||
if self.obj.Category == 'Fluid':
|
||||
MaterialDir = 'FluidMaterial'
|
||||
else:
|
||||
MaterialDir = 'Material'
|
||||
_UseMaterialsFromCustomDir = self.fem_prefs.GetBool("UseMaterialsFromCustomDir", True)
|
||||
_dir = self.fem_prefs.GetString("CustomMaterialsDir", "")
|
||||
if _UseMaterialsFromCustomDir and _dir != "" and os.path.isdir(_dir):
|
||||
TargetDir = self.fem_prefs.GetString("CustomMaterialsDir", "")
|
||||
elif self.fem_prefs.GetBool("UseMaterialsFromConfigDir", True):
|
||||
TargetDir = FreeCAD.getUserAppDataDir() + os.path.sep + MaterialDir # $HOME/.FreeCAD
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("Customed material saving directory is not setup in Fem preference")
|
||||
if not os.path.exists(TargetDir):
|
||||
os.mkdir(TargetDir)
|
||||
|
||||
saveName, Filter = QFileDialog.getSaveFileName(None, "Save a Material property file", TargetDir, "*.FCMat")
|
||||
if not saveName == "":
|
||||
print(saveName)
|
||||
knownMaterials = [self.form.cb_materials.itemText(i) for i in range(self.form.cb_materials.count())]
|
||||
material_name = os.path.basename(saveName[:-len('.FCMat')])
|
||||
if material_name not in knownMaterials:
|
||||
self.export_FCMat(saveName, self.obj.Material)
|
||||
FreeCAD.Console.PrintMessage("Sucessfully save the Material property file: " + saveName + "\n")
|
||||
else:
|
||||
self.export_FCMat(saveName, self.obj.Material)
|
||||
FreeCAD.Console.PrintMessage("Sucessfully overwritren the Material property file: " + saveName + "\n")
|
||||
"""
|
||||
msgBox = QMessageBox()
|
||||
msgBox.setText("FcMat file name {} has existed in {} or system folder, overwriting?\n".format(saveName, TargetDir))
|
||||
msgBox.addButton(QMessageBox.Yes)
|
||||
msgBox.addButton(QMessageBox.No)
|
||||
msgBox.setDefaultButton(QMessageBox.No)
|
||||
ret = msgBox.exec_()
|
||||
if ret == QMessageBox.Yes:
|
||||
self.export_FCMat(saveName, self.obj.Material)
|
||||
FreeCAD.Console.PrintMessage("Sucessfully overwritren the Material property file: "+ saveName + "\n")
|
||||
"""
|
||||
|
||||
###################geometry reference selection #################
|
||||
def references_list_right_clicked(self, QPos):
|
||||
|
||||
@@ -166,7 +166,7 @@ class _TaskPanelFemMeshGmsh:
|
||||
if self.analysis:
|
||||
for m in FemGui.getActiveAnalysis().Member:
|
||||
if m.Name == self.mesh_obj.Name:
|
||||
print(self.analysis.Name)
|
||||
print('Active analysis found: ' + self.analysis.Name)
|
||||
return
|
||||
else:
|
||||
# print('Mesh is not member of active analysis, means no group meshing')
|
||||
|
||||
@@ -69,38 +69,55 @@ class _ViewProviderFemMeshGmsh:
|
||||
if not gui_doc.getInEdit():
|
||||
# may be go the other way around and just activate the analysis the user has doubleClicked on ?!
|
||||
# not a fast one, we need to iterate over all member of all analysis to know to which analyis the object belongs too!!!
|
||||
if FemGui.getActiveAnalysis() is not None:
|
||||
if FemGui.getActiveAnalysis().Document is FreeCAD.ActiveDocument:
|
||||
if self.Object in FemGui.getActiveAnalysis().Member:
|
||||
if not gui_doc.getInEdit():
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
FreeCAD.Console.PrintError('Activate the analysis this mesh belongs to!\n')
|
||||
else:
|
||||
print('Mesh does not belong to the active analysis.')
|
||||
for o in gui_doc.Document.Objects:
|
||||
if o.isDerivedFrom('Fem::FemAnalysisPython'):
|
||||
for m in o.Member:
|
||||
if m == self.Object:
|
||||
FemGui.setActiveAnalysis(o)
|
||||
print('Analysis the Mesh belongs too was activated.')
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
break
|
||||
else:
|
||||
FreeCAD.Console.PrintError('Active Analysis is not in active Document!\n')
|
||||
else:
|
||||
# no active analysis, we gone have a look if the obj belongs to a non active analysis,
|
||||
for o in gui_doc.Document.Objects:
|
||||
if o.isDerivedFrom('Fem::FemAnalysisPython'):
|
||||
for m in o.Member:
|
||||
if m == self.Object:
|
||||
FemGui.setActiveAnalysis(o)
|
||||
print('Analysis the Mesh belongs too was activated.')
|
||||
# first check if there is an analysis in the active document
|
||||
found_an_analysis = False
|
||||
for o in gui_doc.Document.Objects:
|
||||
if o.isDerivedFrom('Fem::FemAnalysisPython'):
|
||||
found_an_analysis = True
|
||||
break
|
||||
if found_an_analysis:
|
||||
if FemGui.getActiveAnalysis() is not None:
|
||||
if FemGui.getActiveAnalysis().Document is FreeCAD.ActiveDocument:
|
||||
if self.Object in FemGui.getActiveAnalysis().Member:
|
||||
if not gui_doc.getInEdit():
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
break
|
||||
else:
|
||||
FreeCAD.Console.PrintError('Activate the analysis this GMSH FEM mesh object belongs too!\n')
|
||||
else:
|
||||
print('GMSH FEM mesh object does not belong to the active analysis.')
|
||||
found_mesh_analysis = False
|
||||
for o in gui_doc.Document.Objects:
|
||||
if o.isDerivedFrom('Fem::FemAnalysisPython'):
|
||||
for m in o.Member:
|
||||
if m == self.Object:
|
||||
found_mesh_analysis = True
|
||||
FemGui.setActiveAnalysis(o)
|
||||
print('The analysis the GMSH FEM mesh object belongs too was found and activated: ' + o.Name)
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
break
|
||||
if not found_mesh_analysis:
|
||||
print('GMSH FEM mesh object does not belong to an analysis. Analysis group meshing will be deactivated.')
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
FreeCAD.Console.PrintError('Active analysis is not in active document.')
|
||||
else:
|
||||
print('Mesh GMSH object does not belong to an analysis. Group meshing will is deactivated.')
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
print('No active analysis in active document, we gone have a look if the GMSH FEM mesh object belongs to a non active analysis.')
|
||||
found_mesh_analysis = False
|
||||
for o in gui_doc.Document.Objects:
|
||||
if o.isDerivedFrom('Fem::FemAnalysisPython'):
|
||||
for m in o.Member:
|
||||
if m == self.Object:
|
||||
found_mesh_analysis = True
|
||||
FemGui.setActiveAnalysis(o)
|
||||
print('The analysis the GMSH FEM mesh object belongs too was found and activated: ' + o.Name)
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
break
|
||||
if not found_mesh_analysis:
|
||||
print('GMSH FEM mesh object does not belong to an analysis. Analysis group meshing will be deactivated.')
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
print('No analysis in the active document.')
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
FreeCAD.Console.PrintError('Active Task Dialog found! Please close this one first!\n')
|
||||
return True
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,11 @@
|
||||
1C
|
||||
1UUSER
|
||||
1UDATE 14.march.2016
|
||||
1UTIME 18:14:12
|
||||
1UDATE 22.january.2017
|
||||
1UTIME 14:44:34
|
||||
1UHOST
|
||||
1UPGM CalculiX
|
||||
1UVERSION Version 2.10
|
||||
1UCOMPILETIME Sa 5. Mär 12:23:33 CET 2016
|
||||
1UDIR
|
||||
1UDBN
|
||||
1UMAT 1MECHANICALMATERIAL
|
||||
@@ -290,263 +292,263 @@
|
||||
-1 280 1.25000E+00 7.50000E+00 3.75000E+00
|
||||
-3
|
||||
3C 129 1
|
||||
-1 633 6 0 1
|
||||
-1 1 6 0 1
|
||||
-2 95 98 47 196 103 197 198 200 199 201
|
||||
-1 634 6 0 1
|
||||
-1 2 6 0 1
|
||||
-2 147 121 145 196 203 202 161 205 204 206
|
||||
-1 635 6 0 1
|
||||
-1 3 6 0 1
|
||||
-2 73 70 27 121 84 80 83 208 207 136
|
||||
-1 636 6 0 1
|
||||
-1 4 6 0 1
|
||||
-2 72 170 30 171 209 187 75 210 181 194
|
||||
-1 637 6 0 1
|
||||
-1 5 6 0 1
|
||||
-2 9 98 47 95 101 197 54 102 103 198
|
||||
-1 638 6 0 1
|
||||
-1 6 6 0 1
|
||||
-2 172 70 30 71 211 78 186 212 93 91
|
||||
-1 639 6 0 1
|
||||
-1 7 6 0 1
|
||||
-2 170 99 36 174 213 119 184 191 214 190
|
||||
-1 640 6 0 1
|
||||
-1 8 6 0 1
|
||||
-2 12 47 149 145 57 215 150 152 216 155
|
||||
-1 641 6 0 1
|
||||
-1 9 6 0 1
|
||||
-2 70 27 123 72 80 143 217 79 77 218
|
||||
-1 642 6 0 1
|
||||
-1 10 6 0 1
|
||||
-2 39 147 121 145 160 203 132 159 161 202
|
||||
-1 643 6 0 1
|
||||
-1 11 6 0 1
|
||||
-2 70 120 121 196 219 134 207 221 220 204
|
||||
-1 644 6 0 1
|
||||
-1 12 6 0 1
|
||||
-2 70 172 170 196 211 183 222 221 223 224
|
||||
-1 645 6 0 1
|
||||
-1 13 6 0 1
|
||||
-2 95 99 170 195 104 213 225 227 226 228
|
||||
-1 646 6 0 1
|
||||
-1 14 6 0 1
|
||||
-2 145 45 47 196 229 56 216 206 230 201
|
||||
-1 647 6 0 1
|
||||
-1 15 6 0 1
|
||||
-2 70 123 120 195 217 126 219 232 231 233
|
||||
-1 648 6 0 1
|
||||
-1 16 6 0 1
|
||||
-2 47 45 95 196 56 234 198 201 230 200
|
||||
-1 649 6 0 1
|
||||
-1 17 6 0 1
|
||||
-2 121 120 145 196 134 235 202 204 220 206
|
||||
-1 650 6 0 1
|
||||
-1 18 6 0 1
|
||||
-2 145 39 120 121 159 133 235 202 132 134
|
||||
-1 651 6 0 1
|
||||
-1 19 6 0 1
|
||||
-2 70 120 27 121 219 137 80 207 134 136
|
||||
-1 652 6 0 1
|
||||
-1 20 6 0 1
|
||||
-2 9 47 45 95 54 56 52 102 198 234
|
||||
-1 653 6 0 1
|
||||
-1 21 6 0 1
|
||||
-2 70 27 120 123 80 137 219 217 143 126
|
||||
-1 654 6 0 1
|
||||
-1 22 6 0 1
|
||||
-2 45 47 12 145 56 57 58 229 216 152
|
||||
-1 655 6 0 1
|
||||
-1 23 6 0 1
|
||||
-2 170 95 36 99 225 109 184 213 104 119
|
||||
-1 656 6 0 1
|
||||
-1 24 6 0 1
|
||||
-2 195 45 145 196 237 229 236 238 230 206
|
||||
-1 657 6 0 1
|
||||
-1 25 6 0 1
|
||||
-2 95 45 195 196 234 237 227 200 230 238
|
||||
-1 658 6 0 1
|
||||
-1 26 6 0 1
|
||||
-2 170 95 195 196 225 227 228 224 200 238
|
||||
-1 659 6 0 1
|
||||
-1 27 6 0 1
|
||||
-2 70 170 195 196 222 228 232 221 224 238
|
||||
-1 660 6 0 1
|
||||
-1 28 6 0 1
|
||||
-2 195 120 70 196 233 219 232 238 220 221
|
||||
-1 661 6 0 1
|
||||
-1 29 6 0 1
|
||||
-2 145 120 195 196 235 233 236 206 220 238
|
||||
-1 662 6 0 1
|
||||
-1 30 6 0 1
|
||||
-2 74 24 148 196 86 165 239 241 240 242
|
||||
-1 663 6 0 1
|
||||
-1 31 6 0 1
|
||||
-2 21 74 97 196 88 243 114 244 241 245
|
||||
-1 664 6 0 1
|
||||
-1 32 6 0 1
|
||||
-2 148 33 97 196 167 116 246 242 247 245
|
||||
-1 665 6 0 1
|
||||
-1 33 6 0 1
|
||||
-2 173 124 42 195 248 129 175 250 249 251
|
||||
-1 666 6 0 1
|
||||
-1 34 6 0 1
|
||||
-2 48 15 124 195 64 144 252 254 253 249
|
||||
-1 667 6 0 1
|
||||
-1 35 6 0 1
|
||||
-2 18 48 173 195 68 255 188 256 254 250
|
||||
-1 668 6 0 1
|
||||
-1 36 6 0 1
|
||||
-2 74 70 24 196 89 85 86 241 221 240
|
||||
-1 669 6 0 1
|
||||
-1 37 6 0 1
|
||||
-2 170 18 173 195 189 188 177 228 256 250
|
||||
-1 670 6 0 1
|
||||
-1 38 6 0 1
|
||||
-2 70 74 21 196 89 88 90 221 241 244
|
||||
-1 671 6 0 1
|
||||
-1 39 6 0 1
|
||||
-2 120 123 42 195 126 125 127 233 231 251
|
||||
-1 672 6 0 1
|
||||
-1 40 6 0 1
|
||||
-2 170 173 42 195 177 175 178 228 250 251
|
||||
-1 673 6 0 1
|
||||
-1 41 6 0 1
|
||||
-2 42 124 120 195 129 130 127 251 249 233
|
||||
-1 674 6 0 1
|
||||
-1 42 6 0 1
|
||||
-2 15 122 120 195 138 140 139 253 257 233
|
||||
-1 675 6 0 1
|
||||
-1 43 6 0 1
|
||||
-2 124 15 120 195 144 139 130 249 253 233
|
||||
-1 676 6 0 1
|
||||
-1 44 6 0 1
|
||||
-2 15 48 45 195 64 66 67 253 254 237
|
||||
-1 677 6 0 1
|
||||
-1 45 6 0 1
|
||||
-2 24 147 145 196 163 161 164 240 205 206
|
||||
-1 678 6 0 1
|
||||
-1 46 6 0 1
|
||||
-2 95 97 33 196 113 116 115 200 245 247
|
||||
-1 679 6 0 1
|
||||
-1 47 6 0 1
|
||||
-2 33 98 95 196 118 103 115 247 199 200
|
||||
-1 680 6 0 1
|
||||
-1 48 6 0 1
|
||||
-2 95 96 21 196 107 111 110 200 258 244
|
||||
-1 681 6 0 1
|
||||
-1 49 6 0 1
|
||||
-2 97 95 21 196 113 110 114 245 200 244
|
||||
-1 682 6 0 1
|
||||
-1 50 6 0 1
|
||||
-2 145 33 148 196 168 167 166 206 247 242
|
||||
-1 683 6 0 1
|
||||
-1 51 6 0 1
|
||||
-2 24 145 148 196 164 166 165 240 206 242
|
||||
-1 684 6 0 1
|
||||
-1 52 6 0 1
|
||||
-2 18 45 48 195 63 66 68 256 237 254
|
||||
-1 685 6 0 1
|
||||
-1 53 6 0 1
|
||||
-2 45 18 46 195 63 62 53 237 256 259
|
||||
-1 686 6 0 1
|
||||
-1 54 6 0 1
|
||||
-2 48 124 173 195 252 248 255 254 249 250
|
||||
-1 687 6 0 1
|
||||
-1 55 6 0 1
|
||||
-2 148 97 74 196 246 243 239 242 245 241
|
||||
-1 688 6 0 1
|
||||
-1 56 6 0 1
|
||||
-2 74 24 5 148 86 25 87 239 165 169
|
||||
-1 689 6 0 1
|
||||
-1 57 6 0 1
|
||||
-2 3 49 122 15 60 260 141 16 69 138
|
||||
-1 690 6 0 1
|
||||
-1 58 6 0 1
|
||||
-2 146 12 49 3 153 59 261 156 14 60
|
||||
-1 691 6 0 1
|
||||
-1 59 6 0 1
|
||||
-2 15 124 4 48 144 131 17 64 252 65
|
||||
-1 692 6 0 1
|
||||
-1 60 6 0 1
|
||||
-2 149 1 47 12 151 55 215 150 13 57
|
||||
-1 693 6 0 1
|
||||
-1 61 6 0 1
|
||||
-2 147 7 73 24 162 82 262 163 26 81
|
||||
-1 694 6 0 1
|
||||
-1 62 6 0 1
|
||||
-2 36 172 6 96 182 185 38 108 263 112
|
||||
-1 695 6 0 1
|
||||
-1 63 6 0 1
|
||||
-2 98 47 1 9 197 55 100 101 54 10
|
||||
-1 696 6 0 1
|
||||
-1 64 6 0 1
|
||||
-2 2 174 46 18 192 264 50 19 193 62
|
||||
-1 697 6 0 1
|
||||
-1 65 6 0 1
|
||||
-2 1 149 98 33 151 265 100 34 157 118
|
||||
-1 698 6 0 1
|
||||
-1 66 6 0 1
|
||||
-2 48 173 4 18 255 176 65 68 188 20
|
||||
-1 699 6 0 1
|
||||
-1 67 6 0 1
|
||||
-2 30 72 171 8 75 210 194 32 76 180
|
||||
-1 700 6 0 1
|
||||
-1 68 6 0 1
|
||||
-2 97 21 5 74 114 22 117 243 88 87
|
||||
-1 701 6 0 1
|
||||
-1 69 6 0 1
|
||||
-2 9 46 2 99 51 50 11 105 266 106
|
||||
-1 702 6 0 1
|
||||
-1 70 6 0 1
|
||||
-2 8 123 171 42 128 267 180 44 125 179
|
||||
-1 703 6 0 1
|
||||
-1 71 6 0 1
|
||||
-2 97 5 33 148 117 35 116 246 169 167
|
||||
-1 704 6 0 1
|
||||
-1 72 6 0 1
|
||||
-2 99 174 2 36 214 192 106 119 190 37
|
||||
-1 705 6 0 1
|
||||
-1 73 6 0 1
|
||||
-2 173 124 4 42 248 131 176 175 129 43
|
||||
-1 706 6 0 1
|
||||
-1 74 6 0 1
|
||||
-2 3 122 146 39 141 268 156 40 142 158
|
||||
-1 707 6 0 1
|
||||
-1 75 6 0 1
|
||||
-2 8 72 123 27 76 218 128 29 77 143
|
||||
-1 708 6 0 1
|
||||
-1 76 6 0 1
|
||||
-2 71 172 6 30 212 185 92 91 186 31
|
||||
-1 709 6 0 1
|
||||
-1 77 6 0 1
|
||||
-2 147 121 7 39 203 135 162 160 132 41
|
||||
-1 710 6 0 1
|
||||
-1 78 6 0 1
|
||||
-2 73 121 27 7 208 136 83 82 135 28
|
||||
-1 711 6 0 1
|
||||
-1 79 6 0 1
|
||||
-2 71 6 96 21 92 112 269 94 23 111
|
||||
-1 712 6 0 1
|
||||
-1 80 6 0 1
|
||||
-2 146 49 122 3 261 260 268 156 60 141
|
||||
-1 713 6 0 1
|
||||
-1 81 6 0 1
|
||||
-2 2 46 174 99 50 264 192 106 266 214
|
||||
-1 714 6 0 1
|
||||
-1 82 6 0 1
|
||||
-2 123 171 72 8 267 210 218 128 180 76
|
||||
-1 715 6 0 1
|
||||
-1 83 6 0 1
|
||||
-2 7 73 121 147 82 208 135 162 262 203
|
||||
-1 716 6 0 1
|
||||
-1 84 6 0 1
|
||||
-2 173 4 124 48 176 131 248 255 65 252
|
||||
-1 717 6 0 1
|
||||
-1 85 6 0 1
|
||||
-2 96 172 6 71 263 185 112 269 212 92
|
||||
-1 718 6 0 1
|
||||
-1 86 6 0 1
|
||||
-2 74 5 97 148 87 117 243 239 169 246
|
||||
-1 719 6 0 1
|
||||
-1 87 6 0 1
|
||||
-2 1 98 149 47 100 265 151 55 197 215
|
||||
-1 720 6 0 1
|
||||
-1 88 6 0 1
|
||||
-2 147 121 70 73 203 207 270 262 208 84
|
||||
-1 721 6 0 1
|
||||
-1 89 6 0 1
|
||||
-2 121 147 70 196 203 270 207 204 205 221
|
||||
-1 722 6 0 1
|
||||
-1 90 6 0 1
|
||||
-2 147 70 24 73 270 85 163 262 84 81
|
||||
-1 723 6 0 1
|
||||
-1 91 6 0 1
|
||||
-2 70 147 24 196 270 163 85 221 205 240
|
||||
-1 724 6 0 1
|
||||
-1 92 6 0 1
|
||||
-2 146 195 45 145 272 237 271 154 236 229
|
||||
-1 725 6 0 1
|
||||
-1 93 6 0 1
|
||||
-2 12 45 146 49 58 271 153 59 61 261
|
||||
-1 726 6 0 1
|
||||
-1 94 6 0 1
|
||||
-2 146 45 12 145 271 58 153 154 229 152
|
||||
-1 727 6 0 1
|
||||
-1 95 6 0 1
|
||||
-2 98 47 145 149 197 216 273 265 215 155
|
||||
-1 728 6 0 1
|
||||
-1 96 6 0 1
|
||||
-2 145 47 98 196 216 197 273 206 201 199
|
||||
-1 729 6 0 1
|
||||
-1 97 6 0 1
|
||||
-2 33 98 145 149 118 273 168 157 265 155
|
||||
-1 730 6 0 1
|
||||
-1 98 6 0 1
|
||||
-2 145 98 33 196 273 118 168 206 199 247
|
||||
-1 731 6 0 1
|
||||
-1 99 6 0 1
|
||||
-2 95 196 172 96 200 223 274 107 258 263
|
||||
-1 732 6 0 1
|
||||
-1 100 6 0 1
|
||||
-2 172 196 95 170 223 200 274 183 224 225
|
||||
-1 733 6 0 1
|
||||
-1 101 6 0 1
|
||||
-2 36 95 172 96 109 274 182 108 107 263
|
||||
-1 734 6 0 1
|
||||
-1 102 6 0 1
|
||||
-2 172 95 36 170 274 109 182 183 225 184
|
||||
-1 735 6 0 1
|
||||
-1 103 6 0 1
|
||||
-2 96 70 172 71 275 211 263 269 93 212
|
||||
-1 736 6 0 1
|
||||
-1 104 6 0 1
|
||||
-2 172 70 96 196 211 275 263 223 221 258
|
||||
-1 737 6 0 1
|
||||
-1 105 6 0 1
|
||||
-2 96 21 70 71 111 90 275 269 94 93
|
||||
-1 738 6 0 1
|
||||
-1 106 6 0 1
|
||||
-2 70 21 96 196 90 111 275 221 244 258
|
||||
-1 739 6 0 1
|
||||
-1 107 6 0 1
|
||||
-2 45 195 99 95 237 226 276 234 227 104
|
||||
-1 740 6 0 1
|
||||
-1 108 6 0 1
|
||||
-2 99 195 45 46 226 237 276 266 259 53
|
||||
-1 741 6 0 1
|
||||
-1 109 6 0 1
|
||||
-2 9 45 99 95 52 276 105 102 234 104
|
||||
-1 742 6 0 1
|
||||
-1 110 6 0 1
|
||||
-2 99 45 9 46 276 52 105 266 53 51
|
||||
-1 743 6 0 1
|
||||
-1 111 6 0 1
|
||||
-2 123 170 72 171 277 209 218 267 181 210
|
||||
-1 744 6 0 1
|
||||
-1 112 6 0 1
|
||||
-2 42 170 123 171 178 277 125 179 181 267
|
||||
-1 745 6 0 1
|
||||
-1 113 6 0 1
|
||||
-2 170 42 123 195 178 125 277 228 251 231
|
||||
-1 746 6 0 1
|
||||
-1 114 6 0 1
|
||||
-2 170 70 123 72 222 217 277 209 79 218
|
||||
-1 747 6 0 1
|
||||
-1 115 6 0 1
|
||||
-2 123 70 170 195 217 222 277 231 232 228
|
||||
-1 748 6 0 1
|
||||
-1 116 6 0 1
|
||||
-2 120 146 195 122 278 272 233 140 268 257
|
||||
-1 749 6 0 1
|
||||
-1 117 6 0 1
|
||||
-2 146 120 195 145 278 233 272 154 235 236
|
||||
-1 750 6 0 1
|
||||
-1 118 6 0 1
|
||||
-2 39 146 120 122 158 278 133 142 268 140
|
||||
-1 751 6 0 1
|
||||
-1 119 6 0 1
|
||||
-2 146 39 120 145 158 133 278 154 159 235
|
||||
-1 752 6 0 1
|
||||
-1 120 6 0 1
|
||||
-2 46 99 170 174 266 213 279 264 214 191
|
||||
-1 753 6 0 1
|
||||
-1 121 6 0 1
|
||||
-2 170 99 46 195 213 266 279 228 226 259
|
||||
-1 754 6 0 1
|
||||
-1 122 6 0 1
|
||||
-2 18 46 170 174 62 279 189 193 264 191
|
||||
-1 755 6 0 1
|
||||
-1 123 6 0 1
|
||||
-2 170 46 18 195 279 62 189 228 259 256
|
||||
-1 756 6 0 1
|
||||
-1 124 6 0 1
|
||||
-2 70 30 170 172 78 187 222 211 186 183
|
||||
-1 757 6 0 1
|
||||
-1 125 6 0 1
|
||||
-2 170 30 70 72 187 78 222 209 75 79
|
||||
-1 758 6 0 1
|
||||
-1 126 6 0 1
|
||||
-2 122 45 146 195 280 271 268 257 237 272
|
||||
-1 759 6 0 1
|
||||
-1 127 6 0 1
|
||||
-2 146 45 122 49 271 280 268 261 61 260
|
||||
-1 760 6 0 1
|
||||
-1 128 6 0 1
|
||||
-2 122 15 45 195 138 67 280 257 253 237
|
||||
-1 761 6 0 1
|
||||
-1 129 6 0 1
|
||||
-2 45 15 122 49 67 138 280 61 69 260
|
||||
-3
|
||||
1PSTEP 1 1 1
|
||||
|
||||
@@ -280,135 +280,135 @@
|
||||
279, 2.5, 3.75, 8.75
|
||||
280, 1.25, 7.5, 3.75
|
||||
*Element, TYPE=C3D10, ELSET=Eall
|
||||
633, 95, 98, 47, 196, 103, 197, 198, 200, 199, 201
|
||||
634, 147, 121, 145, 196, 203, 202, 161, 205, 204, 206
|
||||
635, 73, 70, 27, 121, 84, 80, 83, 208, 207, 136
|
||||
636, 72, 170, 30, 171, 209, 187, 75, 210, 181, 194
|
||||
637, 9, 98, 47, 95, 101, 197, 54, 102, 103, 198
|
||||
638, 172, 70, 30, 71, 211, 78, 186, 212, 93, 91
|
||||
639, 170, 99, 36, 174, 213, 119, 184, 191, 214, 190
|
||||
640, 12, 47, 149, 145, 57, 215, 150, 152, 216, 155
|
||||
641, 70, 27, 123, 72, 80, 143, 217, 79, 77, 218
|
||||
642, 39, 147, 121, 145, 160, 203, 132, 159, 161, 202
|
||||
643, 70, 120, 121, 196, 219, 134, 207, 221, 220, 204
|
||||
644, 70, 172, 170, 196, 211, 183, 222, 221, 223, 224
|
||||
645, 95, 99, 170, 195, 104, 213, 225, 227, 226, 228
|
||||
646, 145, 45, 47, 196, 229, 56, 216, 206, 230, 201
|
||||
647, 70, 123, 120, 195, 217, 126, 219, 232, 231, 233
|
||||
648, 47, 45, 95, 196, 56, 234, 198, 201, 230, 200
|
||||
649, 121, 120, 145, 196, 134, 235, 202, 204, 220, 206
|
||||
650, 145, 39, 120, 121, 159, 133, 235, 202, 132, 134
|
||||
651, 70, 120, 27, 121, 219, 137, 80, 207, 134, 136
|
||||
652, 9, 47, 45, 95, 54, 56, 52, 102, 198, 234
|
||||
653, 70, 27, 120, 123, 80, 137, 219, 217, 143, 126
|
||||
654, 45, 47, 12, 145, 56, 57, 58, 229, 216, 152
|
||||
655, 170, 95, 36, 99, 225, 109, 184, 213, 104, 119
|
||||
656, 195, 45, 145, 196, 237, 229, 236, 238, 230, 206
|
||||
657, 95, 45, 195, 196, 234, 237, 227, 200, 230, 238
|
||||
658, 170, 95, 195, 196, 225, 227, 228, 224, 200, 238
|
||||
659, 70, 170, 195, 196, 222, 228, 232, 221, 224, 238
|
||||
660, 195, 120, 70, 196, 233, 219, 232, 238, 220, 221
|
||||
661, 145, 120, 195, 196, 235, 233, 236, 206, 220, 238
|
||||
662, 74, 24, 148, 196, 86, 165, 239, 241, 240, 242
|
||||
663, 21, 74, 97, 196, 88, 243, 114, 244, 241, 245
|
||||
664, 148, 33, 97, 196, 167, 116, 246, 242, 247, 245
|
||||
665, 173, 124, 42, 195, 248, 129, 175, 250, 249, 251
|
||||
666, 48, 15, 124, 195, 64, 144, 252, 254, 253, 249
|
||||
667, 18, 48, 173, 195, 68, 255, 188, 256, 254, 250
|
||||
668, 74, 70, 24, 196, 89, 85, 86, 241, 221, 240
|
||||
669, 170, 18, 173, 195, 189, 188, 177, 228, 256, 250
|
||||
670, 70, 74, 21, 196, 89, 88, 90, 221, 241, 244
|
||||
671, 120, 123, 42, 195, 126, 125, 127, 233, 231, 251
|
||||
672, 170, 173, 42, 195, 177, 175, 178, 228, 250, 251
|
||||
673, 42, 124, 120, 195, 129, 130, 127, 251, 249, 233
|
||||
674, 15, 122, 120, 195, 138, 140, 139, 253, 257, 233
|
||||
675, 124, 15, 120, 195, 144, 139, 130, 249, 253, 233
|
||||
676, 15, 48, 45, 195, 64, 66, 67, 253, 254, 237
|
||||
677, 24, 147, 145, 196, 163, 161, 164, 240, 205, 206
|
||||
678, 95, 97, 33, 196, 113, 116, 115, 200, 245, 247
|
||||
679, 33, 98, 95, 196, 118, 103, 115, 247, 199, 200
|
||||
680, 95, 96, 21, 196, 107, 111, 110, 200, 258, 244
|
||||
681, 97, 95, 21, 196, 113, 110, 114, 245, 200, 244
|
||||
682, 145, 33, 148, 196, 168, 167, 166, 206, 247, 242
|
||||
683, 24, 145, 148, 196, 164, 166, 165, 240, 206, 242
|
||||
684, 18, 45, 48, 195, 63, 66, 68, 256, 237, 254
|
||||
685, 45, 18, 46, 195, 63, 62, 53, 237, 256, 259
|
||||
686, 48, 124, 173, 195, 252, 248, 255, 254, 249, 250
|
||||
687, 148, 97, 74, 196, 246, 243, 239, 242, 245, 241
|
||||
688, 74, 24, 5, 148, 86, 25, 87, 239, 165, 169
|
||||
689, 3, 49, 122, 15, 60, 260, 141, 16, 69, 138
|
||||
690, 146, 12, 49, 3, 153, 59, 261, 156, 14, 60
|
||||
691, 15, 124, 4, 48, 144, 131, 17, 64, 252, 65
|
||||
692, 149, 1, 47, 12, 151, 55, 215, 150, 13, 57
|
||||
693, 147, 7, 73, 24, 162, 82, 262, 163, 26, 81
|
||||
694, 36, 172, 6, 96, 182, 185, 38, 108, 263, 112
|
||||
695, 98, 47, 1, 9, 197, 55, 100, 101, 54, 10
|
||||
696, 2, 174, 46, 18, 192, 264, 50, 19, 193, 62
|
||||
697, 1, 149, 98, 33, 151, 265, 100, 34, 157, 118
|
||||
698, 48, 173, 4, 18, 255, 176, 65, 68, 188, 20
|
||||
699, 30, 72, 171, 8, 75, 210, 194, 32, 76, 180
|
||||
700, 97, 21, 5, 74, 114, 22, 117, 243, 88, 87
|
||||
701, 9, 46, 2, 99, 51, 50, 11, 105, 266, 106
|
||||
702, 8, 123, 171, 42, 128, 267, 180, 44, 125, 179
|
||||
703, 97, 5, 33, 148, 117, 35, 116, 246, 169, 167
|
||||
704, 99, 174, 2, 36, 214, 192, 106, 119, 190, 37
|
||||
705, 173, 124, 4, 42, 248, 131, 176, 175, 129, 43
|
||||
706, 3, 122, 146, 39, 141, 268, 156, 40, 142, 158
|
||||
707, 8, 72, 123, 27, 76, 218, 128, 29, 77, 143
|
||||
708, 71, 172, 6, 30, 212, 185, 92, 91, 186, 31
|
||||
709, 147, 121, 7, 39, 203, 135, 162, 160, 132, 41
|
||||
710, 73, 121, 27, 7, 208, 136, 83, 82, 135, 28
|
||||
711, 71, 6, 96, 21, 92, 112, 269, 94, 23, 111
|
||||
712, 146, 49, 122, 3, 261, 260, 268, 156, 60, 141
|
||||
713, 2, 46, 174, 99, 50, 264, 192, 106, 266, 214
|
||||
714, 123, 171, 72, 8, 267, 210, 218, 128, 180, 76
|
||||
715, 7, 73, 121, 147, 82, 208, 135, 162, 262, 203
|
||||
716, 173, 4, 124, 48, 176, 131, 248, 255, 65, 252
|
||||
717, 96, 172, 6, 71, 263, 185, 112, 269, 212, 92
|
||||
718, 74, 5, 97, 148, 87, 117, 243, 239, 169, 246
|
||||
719, 1, 98, 149, 47, 100, 265, 151, 55, 197, 215
|
||||
720, 147, 121, 70, 73, 203, 207, 270, 262, 208, 84
|
||||
721, 121, 147, 70, 196, 203, 270, 207, 204, 205, 221
|
||||
722, 147, 70, 24, 73, 270, 85, 163, 262, 84, 81
|
||||
723, 70, 147, 24, 196, 270, 163, 85, 221, 205, 240
|
||||
724, 146, 195, 45, 145, 272, 237, 271, 154, 236, 229
|
||||
725, 12, 45, 146, 49, 58, 271, 153, 59, 61, 261
|
||||
726, 146, 45, 12, 145, 271, 58, 153, 154, 229, 152
|
||||
727, 98, 47, 145, 149, 197, 216, 273, 265, 215, 155
|
||||
728, 145, 47, 98, 196, 216, 197, 273, 206, 201, 199
|
||||
729, 33, 98, 145, 149, 118, 273, 168, 157, 265, 155
|
||||
730, 145, 98, 33, 196, 273, 118, 168, 206, 199, 247
|
||||
731, 95, 196, 172, 96, 200, 223, 274, 107, 258, 263
|
||||
732, 172, 196, 95, 170, 223, 200, 274, 183, 224, 225
|
||||
733, 36, 95, 172, 96, 109, 274, 182, 108, 107, 263
|
||||
734, 172, 95, 36, 170, 274, 109, 182, 183, 225, 184
|
||||
735, 96, 70, 172, 71, 275, 211, 263, 269, 93, 212
|
||||
736, 172, 70, 96, 196, 211, 275, 263, 223, 221, 258
|
||||
737, 96, 21, 70, 71, 111, 90, 275, 269, 94, 93
|
||||
738, 70, 21, 96, 196, 90, 111, 275, 221, 244, 258
|
||||
739, 45, 195, 99, 95, 237, 226, 276, 234, 227, 104
|
||||
740, 99, 195, 45, 46, 226, 237, 276, 266, 259, 53
|
||||
741, 9, 45, 99, 95, 52, 276, 105, 102, 234, 104
|
||||
742, 99, 45, 9, 46, 276, 52, 105, 266, 53, 51
|
||||
743, 123, 170, 72, 171, 277, 209, 218, 267, 181, 210
|
||||
744, 42, 170, 123, 171, 178, 277, 125, 179, 181, 267
|
||||
745, 170, 42, 123, 195, 178, 125, 277, 228, 251, 231
|
||||
746, 170, 70, 123, 72, 222, 217, 277, 209, 79, 218
|
||||
747, 123, 70, 170, 195, 217, 222, 277, 231, 232, 228
|
||||
748, 120, 146, 195, 122, 278, 272, 233, 140, 268, 257
|
||||
749, 146, 120, 195, 145, 278, 233, 272, 154, 235, 236
|
||||
750, 39, 146, 120, 122, 158, 278, 133, 142, 268, 140
|
||||
751, 146, 39, 120, 145, 158, 133, 278, 154, 159, 235
|
||||
752, 46, 99, 170, 174, 266, 213, 279, 264, 214, 191
|
||||
753, 170, 99, 46, 195, 213, 266, 279, 228, 226, 259
|
||||
754, 18, 46, 170, 174, 62, 279, 189, 193, 264, 191
|
||||
755, 170, 46, 18, 195, 279, 62, 189, 228, 259, 256
|
||||
756, 70, 30, 170, 172, 78, 187, 222, 211, 186, 183
|
||||
757, 170, 30, 70, 72, 187, 78, 222, 209, 75, 79
|
||||
758, 122, 45, 146, 195, 280, 271, 268, 257, 237, 272
|
||||
759, 146, 45, 122, 49, 271, 280, 268, 261, 61, 260
|
||||
760, 122, 15, 45, 195, 138, 67, 280, 257, 253, 237
|
||||
761, 45, 15, 122, 49, 67, 138, 280, 61, 69, 260
|
||||
1, 95, 98, 47, 196, 103, 197, 198, 200, 199, 201
|
||||
2, 147, 121, 145, 196, 203, 202, 161, 205, 204, 206
|
||||
3, 73, 70, 27, 121, 84, 80, 83, 208, 207, 136
|
||||
4, 72, 170, 30, 171, 209, 187, 75, 210, 181, 194
|
||||
5, 9, 98, 47, 95, 101, 197, 54, 102, 103, 198
|
||||
6, 172, 70, 30, 71, 211, 78, 186, 212, 93, 91
|
||||
7, 170, 99, 36, 174, 213, 119, 184, 191, 214, 190
|
||||
8, 12, 47, 149, 145, 57, 215, 150, 152, 216, 155
|
||||
9, 70, 27, 123, 72, 80, 143, 217, 79, 77, 218
|
||||
10, 39, 147, 121, 145, 160, 203, 132, 159, 161, 202
|
||||
11, 70, 120, 121, 196, 219, 134, 207, 221, 220, 204
|
||||
12, 70, 172, 170, 196, 211, 183, 222, 221, 223, 224
|
||||
13, 95, 99, 170, 195, 104, 213, 225, 227, 226, 228
|
||||
14, 145, 45, 47, 196, 229, 56, 216, 206, 230, 201
|
||||
15, 70, 123, 120, 195, 217, 126, 219, 232, 231, 233
|
||||
16, 47, 45, 95, 196, 56, 234, 198, 201, 230, 200
|
||||
17, 121, 120, 145, 196, 134, 235, 202, 204, 220, 206
|
||||
18, 145, 39, 120, 121, 159, 133, 235, 202, 132, 134
|
||||
19, 70, 120, 27, 121, 219, 137, 80, 207, 134, 136
|
||||
20, 9, 47, 45, 95, 54, 56, 52, 102, 198, 234
|
||||
21, 70, 27, 120, 123, 80, 137, 219, 217, 143, 126
|
||||
22, 45, 47, 12, 145, 56, 57, 58, 229, 216, 152
|
||||
23, 170, 95, 36, 99, 225, 109, 184, 213, 104, 119
|
||||
24, 195, 45, 145, 196, 237, 229, 236, 238, 230, 206
|
||||
25, 95, 45, 195, 196, 234, 237, 227, 200, 230, 238
|
||||
26, 170, 95, 195, 196, 225, 227, 228, 224, 200, 238
|
||||
27, 70, 170, 195, 196, 222, 228, 232, 221, 224, 238
|
||||
28, 195, 120, 70, 196, 233, 219, 232, 238, 220, 221
|
||||
29, 145, 120, 195, 196, 235, 233, 236, 206, 220, 238
|
||||
30, 74, 24, 148, 196, 86, 165, 239, 241, 240, 242
|
||||
31, 21, 74, 97, 196, 88, 243, 114, 244, 241, 245
|
||||
32, 148, 33, 97, 196, 167, 116, 246, 242, 247, 245
|
||||
33, 173, 124, 42, 195, 248, 129, 175, 250, 249, 251
|
||||
34, 48, 15, 124, 195, 64, 144, 252, 254, 253, 249
|
||||
35, 18, 48, 173, 195, 68, 255, 188, 256, 254, 250
|
||||
36, 74, 70, 24, 196, 89, 85, 86, 241, 221, 240
|
||||
37, 170, 18, 173, 195, 189, 188, 177, 228, 256, 250
|
||||
38, 70, 74, 21, 196, 89, 88, 90, 221, 241, 244
|
||||
39, 120, 123, 42, 195, 126, 125, 127, 233, 231, 251
|
||||
40, 170, 173, 42, 195, 177, 175, 178, 228, 250, 251
|
||||
41, 42, 124, 120, 195, 129, 130, 127, 251, 249, 233
|
||||
42, 15, 122, 120, 195, 138, 140, 139, 253, 257, 233
|
||||
43, 124, 15, 120, 195, 144, 139, 130, 249, 253, 233
|
||||
44, 15, 48, 45, 195, 64, 66, 67, 253, 254, 237
|
||||
45, 24, 147, 145, 196, 163, 161, 164, 240, 205, 206
|
||||
46, 95, 97, 33, 196, 113, 116, 115, 200, 245, 247
|
||||
47, 33, 98, 95, 196, 118, 103, 115, 247, 199, 200
|
||||
48, 95, 96, 21, 196, 107, 111, 110, 200, 258, 244
|
||||
49, 97, 95, 21, 196, 113, 110, 114, 245, 200, 244
|
||||
50, 145, 33, 148, 196, 168, 167, 166, 206, 247, 242
|
||||
51, 24, 145, 148, 196, 164, 166, 165, 240, 206, 242
|
||||
52, 18, 45, 48, 195, 63, 66, 68, 256, 237, 254
|
||||
53, 45, 18, 46, 195, 63, 62, 53, 237, 256, 259
|
||||
54, 48, 124, 173, 195, 252, 248, 255, 254, 249, 250
|
||||
55, 148, 97, 74, 196, 246, 243, 239, 242, 245, 241
|
||||
56, 74, 24, 5, 148, 86, 25, 87, 239, 165, 169
|
||||
57, 3, 49, 122, 15, 60, 260, 141, 16, 69, 138
|
||||
58, 146, 12, 49, 3, 153, 59, 261, 156, 14, 60
|
||||
59, 15, 124, 4, 48, 144, 131, 17, 64, 252, 65
|
||||
60, 149, 1, 47, 12, 151, 55, 215, 150, 13, 57
|
||||
61, 147, 7, 73, 24, 162, 82, 262, 163, 26, 81
|
||||
62, 36, 172, 6, 96, 182, 185, 38, 108, 263, 112
|
||||
63, 98, 47, 1, 9, 197, 55, 100, 101, 54, 10
|
||||
64, 2, 174, 46, 18, 192, 264, 50, 19, 193, 62
|
||||
65, 1, 149, 98, 33, 151, 265, 100, 34, 157, 118
|
||||
66, 48, 173, 4, 18, 255, 176, 65, 68, 188, 20
|
||||
67, 30, 72, 171, 8, 75, 210, 194, 32, 76, 180
|
||||
68, 97, 21, 5, 74, 114, 22, 117, 243, 88, 87
|
||||
69, 9, 46, 2, 99, 51, 50, 11, 105, 266, 106
|
||||
70, 8, 123, 171, 42, 128, 267, 180, 44, 125, 179
|
||||
71, 97, 5, 33, 148, 117, 35, 116, 246, 169, 167
|
||||
72, 99, 174, 2, 36, 214, 192, 106, 119, 190, 37
|
||||
73, 173, 124, 4, 42, 248, 131, 176, 175, 129, 43
|
||||
74, 3, 122, 146, 39, 141, 268, 156, 40, 142, 158
|
||||
75, 8, 72, 123, 27, 76, 218, 128, 29, 77, 143
|
||||
76, 71, 172, 6, 30, 212, 185, 92, 91, 186, 31
|
||||
77, 147, 121, 7, 39, 203, 135, 162, 160, 132, 41
|
||||
78, 73, 121, 27, 7, 208, 136, 83, 82, 135, 28
|
||||
79, 71, 6, 96, 21, 92, 112, 269, 94, 23, 111
|
||||
80, 146, 49, 122, 3, 261, 260, 268, 156, 60, 141
|
||||
81, 2, 46, 174, 99, 50, 264, 192, 106, 266, 214
|
||||
82, 123, 171, 72, 8, 267, 210, 218, 128, 180, 76
|
||||
83, 7, 73, 121, 147, 82, 208, 135, 162, 262, 203
|
||||
84, 173, 4, 124, 48, 176, 131, 248, 255, 65, 252
|
||||
85, 96, 172, 6, 71, 263, 185, 112, 269, 212, 92
|
||||
86, 74, 5, 97, 148, 87, 117, 243, 239, 169, 246
|
||||
87, 1, 98, 149, 47, 100, 265, 151, 55, 197, 215
|
||||
88, 147, 121, 70, 73, 203, 207, 270, 262, 208, 84
|
||||
89, 121, 147, 70, 196, 203, 270, 207, 204, 205, 221
|
||||
90, 147, 70, 24, 73, 270, 85, 163, 262, 84, 81
|
||||
91, 70, 147, 24, 196, 270, 163, 85, 221, 205, 240
|
||||
92, 146, 195, 45, 145, 272, 237, 271, 154, 236, 229
|
||||
93, 12, 45, 146, 49, 58, 271, 153, 59, 61, 261
|
||||
94, 146, 45, 12, 145, 271, 58, 153, 154, 229, 152
|
||||
95, 98, 47, 145, 149, 197, 216, 273, 265, 215, 155
|
||||
96, 145, 47, 98, 196, 216, 197, 273, 206, 201, 199
|
||||
97, 33, 98, 145, 149, 118, 273, 168, 157, 265, 155
|
||||
98, 145, 98, 33, 196, 273, 118, 168, 206, 199, 247
|
||||
99, 95, 196, 172, 96, 200, 223, 274, 107, 258, 263
|
||||
100, 172, 196, 95, 170, 223, 200, 274, 183, 224, 225
|
||||
101, 36, 95, 172, 96, 109, 274, 182, 108, 107, 263
|
||||
102, 172, 95, 36, 170, 274, 109, 182, 183, 225, 184
|
||||
103, 96, 70, 172, 71, 275, 211, 263, 269, 93, 212
|
||||
104, 172, 70, 96, 196, 211, 275, 263, 223, 221, 258
|
||||
105, 96, 21, 70, 71, 111, 90, 275, 269, 94, 93
|
||||
106, 70, 21, 96, 196, 90, 111, 275, 221, 244, 258
|
||||
107, 45, 195, 99, 95, 237, 226, 276, 234, 227, 104
|
||||
108, 99, 195, 45, 46, 226, 237, 276, 266, 259, 53
|
||||
109, 9, 45, 99, 95, 52, 276, 105, 102, 234, 104
|
||||
110, 99, 45, 9, 46, 276, 52, 105, 266, 53, 51
|
||||
111, 123, 170, 72, 171, 277, 209, 218, 267, 181, 210
|
||||
112, 42, 170, 123, 171, 178, 277, 125, 179, 181, 267
|
||||
113, 170, 42, 123, 195, 178, 125, 277, 228, 251, 231
|
||||
114, 170, 70, 123, 72, 222, 217, 277, 209, 79, 218
|
||||
115, 123, 70, 170, 195, 217, 222, 277, 231, 232, 228
|
||||
116, 120, 146, 195, 122, 278, 272, 233, 140, 268, 257
|
||||
117, 146, 120, 195, 145, 278, 233, 272, 154, 235, 236
|
||||
118, 39, 146, 120, 122, 158, 278, 133, 142, 268, 140
|
||||
119, 146, 39, 120, 145, 158, 133, 278, 154, 159, 235
|
||||
120, 46, 99, 170, 174, 266, 213, 279, 264, 214, 191
|
||||
121, 170, 99, 46, 195, 213, 266, 279, 228, 226, 259
|
||||
122, 18, 46, 170, 174, 62, 279, 189, 193, 264, 191
|
||||
123, 170, 46, 18, 195, 279, 62, 189, 228, 259, 256
|
||||
124, 70, 30, 170, 172, 78, 187, 222, 211, 186, 183
|
||||
125, 170, 30, 70, 72, 187, 78, 222, 209, 75, 79
|
||||
126, 122, 45, 146, 195, 280, 271, 268, 257, 237, 272
|
||||
127, 146, 45, 122, 49, 271, 280, 268, 261, 61, 260
|
||||
128, 122, 15, 45, 195, 138, 67, 280, 257, 253, 237
|
||||
129, 45, 15, 122, 49, 67, 138, 280, 61, 69, 260
|
||||
|
||||
|
||||
|
||||
@@ -522,9 +522,9 @@ S
|
||||
***********************************************************
|
||||
** CalculiX Input file
|
||||
** written by write_footer function
|
||||
** written by --> FreeCAD 0.16.5838 +1 (Git)
|
||||
** written on --> Mon Oct 26 18:34:01 2015
|
||||
** file name -->
|
||||
** written by --> FreeCAD 0.17.9749 (Git)
|
||||
** written on --> Sun Jan 22 14:32:18 2017
|
||||
** file name --> cube_static.fcstd
|
||||
** analysis name --> Analysis
|
||||
**
|
||||
**
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,11 @@
|
||||
1C
|
||||
1UUSER
|
||||
1UDATE 14.march.2016
|
||||
1UTIME 18:14:12
|
||||
1UDATE 22.january.2017
|
||||
1UTIME 14:44:34
|
||||
1UHOST
|
||||
1UPGM CalculiX
|
||||
1UVERSION Version 2.10
|
||||
1UCOMPILETIME Sa 5. Mär 12:23:33 CET 2016
|
||||
1UDIR
|
||||
1UDBN
|
||||
1UMAT 1MECHANICALMATERIAL
|
||||
@@ -290,263 +292,263 @@
|
||||
-1 280 1.25000E+00 7.50000E+00 3.75000E+00
|
||||
-3
|
||||
3C 129 1
|
||||
-1 633 6 0 1
|
||||
-1 1 6 0 1
|
||||
-2 95 98 47 196 103 197 198 200 199 201
|
||||
-1 634 6 0 1
|
||||
-1 2 6 0 1
|
||||
-2 147 121 145 196 203 202 161 205 204 206
|
||||
-1 635 6 0 1
|
||||
-1 3 6 0 1
|
||||
-2 73 70 27 121 84 80 83 208 207 136
|
||||
-1 636 6 0 1
|
||||
-1 4 6 0 1
|
||||
-2 72 170 30 171 209 187 75 210 181 194
|
||||
-1 637 6 0 1
|
||||
-1 5 6 0 1
|
||||
-2 9 98 47 95 101 197 54 102 103 198
|
||||
-1 638 6 0 1
|
||||
-1 6 6 0 1
|
||||
-2 172 70 30 71 211 78 186 212 93 91
|
||||
-1 639 6 0 1
|
||||
-1 7 6 0 1
|
||||
-2 170 99 36 174 213 119 184 191 214 190
|
||||
-1 640 6 0 1
|
||||
-1 8 6 0 1
|
||||
-2 12 47 149 145 57 215 150 152 216 155
|
||||
-1 641 6 0 1
|
||||
-1 9 6 0 1
|
||||
-2 70 27 123 72 80 143 217 79 77 218
|
||||
-1 642 6 0 1
|
||||
-1 10 6 0 1
|
||||
-2 39 147 121 145 160 203 132 159 161 202
|
||||
-1 643 6 0 1
|
||||
-1 11 6 0 1
|
||||
-2 70 120 121 196 219 134 207 221 220 204
|
||||
-1 644 6 0 1
|
||||
-1 12 6 0 1
|
||||
-2 70 172 170 196 211 183 222 221 223 224
|
||||
-1 645 6 0 1
|
||||
-1 13 6 0 1
|
||||
-2 95 99 170 195 104 213 225 227 226 228
|
||||
-1 646 6 0 1
|
||||
-1 14 6 0 1
|
||||
-2 145 45 47 196 229 56 216 206 230 201
|
||||
-1 647 6 0 1
|
||||
-1 15 6 0 1
|
||||
-2 70 123 120 195 217 126 219 232 231 233
|
||||
-1 648 6 0 1
|
||||
-1 16 6 0 1
|
||||
-2 47 45 95 196 56 234 198 201 230 200
|
||||
-1 649 6 0 1
|
||||
-1 17 6 0 1
|
||||
-2 121 120 145 196 134 235 202 204 220 206
|
||||
-1 650 6 0 1
|
||||
-1 18 6 0 1
|
||||
-2 145 39 120 121 159 133 235 202 132 134
|
||||
-1 651 6 0 1
|
||||
-1 19 6 0 1
|
||||
-2 70 120 27 121 219 137 80 207 134 136
|
||||
-1 652 6 0 1
|
||||
-1 20 6 0 1
|
||||
-2 9 47 45 95 54 56 52 102 198 234
|
||||
-1 653 6 0 1
|
||||
-1 21 6 0 1
|
||||
-2 70 27 120 123 80 137 219 217 143 126
|
||||
-1 654 6 0 1
|
||||
-1 22 6 0 1
|
||||
-2 45 47 12 145 56 57 58 229 216 152
|
||||
-1 655 6 0 1
|
||||
-1 23 6 0 1
|
||||
-2 170 95 36 99 225 109 184 213 104 119
|
||||
-1 656 6 0 1
|
||||
-1 24 6 0 1
|
||||
-2 195 45 145 196 237 229 236 238 230 206
|
||||
-1 657 6 0 1
|
||||
-1 25 6 0 1
|
||||
-2 95 45 195 196 234 237 227 200 230 238
|
||||
-1 658 6 0 1
|
||||
-1 26 6 0 1
|
||||
-2 170 95 195 196 225 227 228 224 200 238
|
||||
-1 659 6 0 1
|
||||
-1 27 6 0 1
|
||||
-2 70 170 195 196 222 228 232 221 224 238
|
||||
-1 660 6 0 1
|
||||
-1 28 6 0 1
|
||||
-2 195 120 70 196 233 219 232 238 220 221
|
||||
-1 661 6 0 1
|
||||
-1 29 6 0 1
|
||||
-2 145 120 195 196 235 233 236 206 220 238
|
||||
-1 662 6 0 1
|
||||
-1 30 6 0 1
|
||||
-2 74 24 148 196 86 165 239 241 240 242
|
||||
-1 663 6 0 1
|
||||
-1 31 6 0 1
|
||||
-2 21 74 97 196 88 243 114 244 241 245
|
||||
-1 664 6 0 1
|
||||
-1 32 6 0 1
|
||||
-2 148 33 97 196 167 116 246 242 247 245
|
||||
-1 665 6 0 1
|
||||
-1 33 6 0 1
|
||||
-2 173 124 42 195 248 129 175 250 249 251
|
||||
-1 666 6 0 1
|
||||
-1 34 6 0 1
|
||||
-2 48 15 124 195 64 144 252 254 253 249
|
||||
-1 667 6 0 1
|
||||
-1 35 6 0 1
|
||||
-2 18 48 173 195 68 255 188 256 254 250
|
||||
-1 668 6 0 1
|
||||
-1 36 6 0 1
|
||||
-2 74 70 24 196 89 85 86 241 221 240
|
||||
-1 669 6 0 1
|
||||
-1 37 6 0 1
|
||||
-2 170 18 173 195 189 188 177 228 256 250
|
||||
-1 670 6 0 1
|
||||
-1 38 6 0 1
|
||||
-2 70 74 21 196 89 88 90 221 241 244
|
||||
-1 671 6 0 1
|
||||
-1 39 6 0 1
|
||||
-2 120 123 42 195 126 125 127 233 231 251
|
||||
-1 672 6 0 1
|
||||
-1 40 6 0 1
|
||||
-2 170 173 42 195 177 175 178 228 250 251
|
||||
-1 673 6 0 1
|
||||
-1 41 6 0 1
|
||||
-2 42 124 120 195 129 130 127 251 249 233
|
||||
-1 674 6 0 1
|
||||
-1 42 6 0 1
|
||||
-2 15 122 120 195 138 140 139 253 257 233
|
||||
-1 675 6 0 1
|
||||
-1 43 6 0 1
|
||||
-2 124 15 120 195 144 139 130 249 253 233
|
||||
-1 676 6 0 1
|
||||
-1 44 6 0 1
|
||||
-2 15 48 45 195 64 66 67 253 254 237
|
||||
-1 677 6 0 1
|
||||
-1 45 6 0 1
|
||||
-2 24 147 145 196 163 161 164 240 205 206
|
||||
-1 678 6 0 1
|
||||
-1 46 6 0 1
|
||||
-2 95 97 33 196 113 116 115 200 245 247
|
||||
-1 679 6 0 1
|
||||
-1 47 6 0 1
|
||||
-2 33 98 95 196 118 103 115 247 199 200
|
||||
-1 680 6 0 1
|
||||
-1 48 6 0 1
|
||||
-2 95 96 21 196 107 111 110 200 258 244
|
||||
-1 681 6 0 1
|
||||
-1 49 6 0 1
|
||||
-2 97 95 21 196 113 110 114 245 200 244
|
||||
-1 682 6 0 1
|
||||
-1 50 6 0 1
|
||||
-2 145 33 148 196 168 167 166 206 247 242
|
||||
-1 683 6 0 1
|
||||
-1 51 6 0 1
|
||||
-2 24 145 148 196 164 166 165 240 206 242
|
||||
-1 684 6 0 1
|
||||
-1 52 6 0 1
|
||||
-2 18 45 48 195 63 66 68 256 237 254
|
||||
-1 685 6 0 1
|
||||
-1 53 6 0 1
|
||||
-2 45 18 46 195 63 62 53 237 256 259
|
||||
-1 686 6 0 1
|
||||
-1 54 6 0 1
|
||||
-2 48 124 173 195 252 248 255 254 249 250
|
||||
-1 687 6 0 1
|
||||
-1 55 6 0 1
|
||||
-2 148 97 74 196 246 243 239 242 245 241
|
||||
-1 688 6 0 1
|
||||
-1 56 6 0 1
|
||||
-2 74 24 5 148 86 25 87 239 165 169
|
||||
-1 689 6 0 1
|
||||
-1 57 6 0 1
|
||||
-2 3 49 122 15 60 260 141 16 69 138
|
||||
-1 690 6 0 1
|
||||
-1 58 6 0 1
|
||||
-2 146 12 49 3 153 59 261 156 14 60
|
||||
-1 691 6 0 1
|
||||
-1 59 6 0 1
|
||||
-2 15 124 4 48 144 131 17 64 252 65
|
||||
-1 692 6 0 1
|
||||
-1 60 6 0 1
|
||||
-2 149 1 47 12 151 55 215 150 13 57
|
||||
-1 693 6 0 1
|
||||
-1 61 6 0 1
|
||||
-2 147 7 73 24 162 82 262 163 26 81
|
||||
-1 694 6 0 1
|
||||
-1 62 6 0 1
|
||||
-2 36 172 6 96 182 185 38 108 263 112
|
||||
-1 695 6 0 1
|
||||
-1 63 6 0 1
|
||||
-2 98 47 1 9 197 55 100 101 54 10
|
||||
-1 696 6 0 1
|
||||
-1 64 6 0 1
|
||||
-2 2 174 46 18 192 264 50 19 193 62
|
||||
-1 697 6 0 1
|
||||
-1 65 6 0 1
|
||||
-2 1 149 98 33 151 265 100 34 157 118
|
||||
-1 698 6 0 1
|
||||
-1 66 6 0 1
|
||||
-2 48 173 4 18 255 176 65 68 188 20
|
||||
-1 699 6 0 1
|
||||
-1 67 6 0 1
|
||||
-2 30 72 171 8 75 210 194 32 76 180
|
||||
-1 700 6 0 1
|
||||
-1 68 6 0 1
|
||||
-2 97 21 5 74 114 22 117 243 88 87
|
||||
-1 701 6 0 1
|
||||
-1 69 6 0 1
|
||||
-2 9 46 2 99 51 50 11 105 266 106
|
||||
-1 702 6 0 1
|
||||
-1 70 6 0 1
|
||||
-2 8 123 171 42 128 267 180 44 125 179
|
||||
-1 703 6 0 1
|
||||
-1 71 6 0 1
|
||||
-2 97 5 33 148 117 35 116 246 169 167
|
||||
-1 704 6 0 1
|
||||
-1 72 6 0 1
|
||||
-2 99 174 2 36 214 192 106 119 190 37
|
||||
-1 705 6 0 1
|
||||
-1 73 6 0 1
|
||||
-2 173 124 4 42 248 131 176 175 129 43
|
||||
-1 706 6 0 1
|
||||
-1 74 6 0 1
|
||||
-2 3 122 146 39 141 268 156 40 142 158
|
||||
-1 707 6 0 1
|
||||
-1 75 6 0 1
|
||||
-2 8 72 123 27 76 218 128 29 77 143
|
||||
-1 708 6 0 1
|
||||
-1 76 6 0 1
|
||||
-2 71 172 6 30 212 185 92 91 186 31
|
||||
-1 709 6 0 1
|
||||
-1 77 6 0 1
|
||||
-2 147 121 7 39 203 135 162 160 132 41
|
||||
-1 710 6 0 1
|
||||
-1 78 6 0 1
|
||||
-2 73 121 27 7 208 136 83 82 135 28
|
||||
-1 711 6 0 1
|
||||
-1 79 6 0 1
|
||||
-2 71 6 96 21 92 112 269 94 23 111
|
||||
-1 712 6 0 1
|
||||
-1 80 6 0 1
|
||||
-2 146 49 122 3 261 260 268 156 60 141
|
||||
-1 713 6 0 1
|
||||
-1 81 6 0 1
|
||||
-2 2 46 174 99 50 264 192 106 266 214
|
||||
-1 714 6 0 1
|
||||
-1 82 6 0 1
|
||||
-2 123 171 72 8 267 210 218 128 180 76
|
||||
-1 715 6 0 1
|
||||
-1 83 6 0 1
|
||||
-2 7 73 121 147 82 208 135 162 262 203
|
||||
-1 716 6 0 1
|
||||
-1 84 6 0 1
|
||||
-2 173 4 124 48 176 131 248 255 65 252
|
||||
-1 717 6 0 1
|
||||
-1 85 6 0 1
|
||||
-2 96 172 6 71 263 185 112 269 212 92
|
||||
-1 718 6 0 1
|
||||
-1 86 6 0 1
|
||||
-2 74 5 97 148 87 117 243 239 169 246
|
||||
-1 719 6 0 1
|
||||
-1 87 6 0 1
|
||||
-2 1 98 149 47 100 265 151 55 197 215
|
||||
-1 720 6 0 1
|
||||
-1 88 6 0 1
|
||||
-2 147 121 70 73 203 207 270 262 208 84
|
||||
-1 721 6 0 1
|
||||
-1 89 6 0 1
|
||||
-2 121 147 70 196 203 270 207 204 205 221
|
||||
-1 722 6 0 1
|
||||
-1 90 6 0 1
|
||||
-2 147 70 24 73 270 85 163 262 84 81
|
||||
-1 723 6 0 1
|
||||
-1 91 6 0 1
|
||||
-2 70 147 24 196 270 163 85 221 205 240
|
||||
-1 724 6 0 1
|
||||
-1 92 6 0 1
|
||||
-2 146 195 45 145 272 237 271 154 236 229
|
||||
-1 725 6 0 1
|
||||
-1 93 6 0 1
|
||||
-2 12 45 146 49 58 271 153 59 61 261
|
||||
-1 726 6 0 1
|
||||
-1 94 6 0 1
|
||||
-2 146 45 12 145 271 58 153 154 229 152
|
||||
-1 727 6 0 1
|
||||
-1 95 6 0 1
|
||||
-2 98 47 145 149 197 216 273 265 215 155
|
||||
-1 728 6 0 1
|
||||
-1 96 6 0 1
|
||||
-2 145 47 98 196 216 197 273 206 201 199
|
||||
-1 729 6 0 1
|
||||
-1 97 6 0 1
|
||||
-2 33 98 145 149 118 273 168 157 265 155
|
||||
-1 730 6 0 1
|
||||
-1 98 6 0 1
|
||||
-2 145 98 33 196 273 118 168 206 199 247
|
||||
-1 731 6 0 1
|
||||
-1 99 6 0 1
|
||||
-2 95 196 172 96 200 223 274 107 258 263
|
||||
-1 732 6 0 1
|
||||
-1 100 6 0 1
|
||||
-2 172 196 95 170 223 200 274 183 224 225
|
||||
-1 733 6 0 1
|
||||
-1 101 6 0 1
|
||||
-2 36 95 172 96 109 274 182 108 107 263
|
||||
-1 734 6 0 1
|
||||
-1 102 6 0 1
|
||||
-2 172 95 36 170 274 109 182 183 225 184
|
||||
-1 735 6 0 1
|
||||
-1 103 6 0 1
|
||||
-2 96 70 172 71 275 211 263 269 93 212
|
||||
-1 736 6 0 1
|
||||
-1 104 6 0 1
|
||||
-2 172 70 96 196 211 275 263 223 221 258
|
||||
-1 737 6 0 1
|
||||
-1 105 6 0 1
|
||||
-2 96 21 70 71 111 90 275 269 94 93
|
||||
-1 738 6 0 1
|
||||
-1 106 6 0 1
|
||||
-2 70 21 96 196 90 111 275 221 244 258
|
||||
-1 739 6 0 1
|
||||
-1 107 6 0 1
|
||||
-2 45 195 99 95 237 226 276 234 227 104
|
||||
-1 740 6 0 1
|
||||
-1 108 6 0 1
|
||||
-2 99 195 45 46 226 237 276 266 259 53
|
||||
-1 741 6 0 1
|
||||
-1 109 6 0 1
|
||||
-2 9 45 99 95 52 276 105 102 234 104
|
||||
-1 742 6 0 1
|
||||
-1 110 6 0 1
|
||||
-2 99 45 9 46 276 52 105 266 53 51
|
||||
-1 743 6 0 1
|
||||
-1 111 6 0 1
|
||||
-2 123 170 72 171 277 209 218 267 181 210
|
||||
-1 744 6 0 1
|
||||
-1 112 6 0 1
|
||||
-2 42 170 123 171 178 277 125 179 181 267
|
||||
-1 745 6 0 1
|
||||
-1 113 6 0 1
|
||||
-2 170 42 123 195 178 125 277 228 251 231
|
||||
-1 746 6 0 1
|
||||
-1 114 6 0 1
|
||||
-2 170 70 123 72 222 217 277 209 79 218
|
||||
-1 747 6 0 1
|
||||
-1 115 6 0 1
|
||||
-2 123 70 170 195 217 222 277 231 232 228
|
||||
-1 748 6 0 1
|
||||
-1 116 6 0 1
|
||||
-2 120 146 195 122 278 272 233 140 268 257
|
||||
-1 749 6 0 1
|
||||
-1 117 6 0 1
|
||||
-2 146 120 195 145 278 233 272 154 235 236
|
||||
-1 750 6 0 1
|
||||
-1 118 6 0 1
|
||||
-2 39 146 120 122 158 278 133 142 268 140
|
||||
-1 751 6 0 1
|
||||
-1 119 6 0 1
|
||||
-2 146 39 120 145 158 133 278 154 159 235
|
||||
-1 752 6 0 1
|
||||
-1 120 6 0 1
|
||||
-2 46 99 170 174 266 213 279 264 214 191
|
||||
-1 753 6 0 1
|
||||
-1 121 6 0 1
|
||||
-2 170 99 46 195 213 266 279 228 226 259
|
||||
-1 754 6 0 1
|
||||
-1 122 6 0 1
|
||||
-2 18 46 170 174 62 279 189 193 264 191
|
||||
-1 755 6 0 1
|
||||
-1 123 6 0 1
|
||||
-2 170 46 18 195 279 62 189 228 259 256
|
||||
-1 756 6 0 1
|
||||
-1 124 6 0 1
|
||||
-2 70 30 170 172 78 187 222 211 186 183
|
||||
-1 757 6 0 1
|
||||
-1 125 6 0 1
|
||||
-2 170 30 70 72 187 78 222 209 75 79
|
||||
-1 758 6 0 1
|
||||
-1 126 6 0 1
|
||||
-2 122 45 146 195 280 271 268 257 237 272
|
||||
-1 759 6 0 1
|
||||
-1 127 6 0 1
|
||||
-2 146 45 122 49 271 280 268 261 61 260
|
||||
-1 760 6 0 1
|
||||
-1 128 6 0 1
|
||||
-2 122 15 45 195 138 67 280 257 253 237
|
||||
-1 761 6 0 1
|
||||
-1 129 6 0 1
|
||||
-2 45 15 122 49 67 138 280 61 69 260
|
||||
-3
|
||||
1PSTEP 1 1 1
|
||||
|
||||
@@ -280,135 +280,135 @@
|
||||
279, 2.5, 3.75, 8.75
|
||||
280, 1.25, 7.5, 3.75
|
||||
*Element, TYPE=C3D10, ELSET=Eall
|
||||
633, 95, 98, 47, 196, 103, 197, 198, 200, 199, 201
|
||||
634, 147, 121, 145, 196, 203, 202, 161, 205, 204, 206
|
||||
635, 73, 70, 27, 121, 84, 80, 83, 208, 207, 136
|
||||
636, 72, 170, 30, 171, 209, 187, 75, 210, 181, 194
|
||||
637, 9, 98, 47, 95, 101, 197, 54, 102, 103, 198
|
||||
638, 172, 70, 30, 71, 211, 78, 186, 212, 93, 91
|
||||
639, 170, 99, 36, 174, 213, 119, 184, 191, 214, 190
|
||||
640, 12, 47, 149, 145, 57, 215, 150, 152, 216, 155
|
||||
641, 70, 27, 123, 72, 80, 143, 217, 79, 77, 218
|
||||
642, 39, 147, 121, 145, 160, 203, 132, 159, 161, 202
|
||||
643, 70, 120, 121, 196, 219, 134, 207, 221, 220, 204
|
||||
644, 70, 172, 170, 196, 211, 183, 222, 221, 223, 224
|
||||
645, 95, 99, 170, 195, 104, 213, 225, 227, 226, 228
|
||||
646, 145, 45, 47, 196, 229, 56, 216, 206, 230, 201
|
||||
647, 70, 123, 120, 195, 217, 126, 219, 232, 231, 233
|
||||
648, 47, 45, 95, 196, 56, 234, 198, 201, 230, 200
|
||||
649, 121, 120, 145, 196, 134, 235, 202, 204, 220, 206
|
||||
650, 145, 39, 120, 121, 159, 133, 235, 202, 132, 134
|
||||
651, 70, 120, 27, 121, 219, 137, 80, 207, 134, 136
|
||||
652, 9, 47, 45, 95, 54, 56, 52, 102, 198, 234
|
||||
653, 70, 27, 120, 123, 80, 137, 219, 217, 143, 126
|
||||
654, 45, 47, 12, 145, 56, 57, 58, 229, 216, 152
|
||||
655, 170, 95, 36, 99, 225, 109, 184, 213, 104, 119
|
||||
656, 195, 45, 145, 196, 237, 229, 236, 238, 230, 206
|
||||
657, 95, 45, 195, 196, 234, 237, 227, 200, 230, 238
|
||||
658, 170, 95, 195, 196, 225, 227, 228, 224, 200, 238
|
||||
659, 70, 170, 195, 196, 222, 228, 232, 221, 224, 238
|
||||
660, 195, 120, 70, 196, 233, 219, 232, 238, 220, 221
|
||||
661, 145, 120, 195, 196, 235, 233, 236, 206, 220, 238
|
||||
662, 74, 24, 148, 196, 86, 165, 239, 241, 240, 242
|
||||
663, 21, 74, 97, 196, 88, 243, 114, 244, 241, 245
|
||||
664, 148, 33, 97, 196, 167, 116, 246, 242, 247, 245
|
||||
665, 173, 124, 42, 195, 248, 129, 175, 250, 249, 251
|
||||
666, 48, 15, 124, 195, 64, 144, 252, 254, 253, 249
|
||||
667, 18, 48, 173, 195, 68, 255, 188, 256, 254, 250
|
||||
668, 74, 70, 24, 196, 89, 85, 86, 241, 221, 240
|
||||
669, 170, 18, 173, 195, 189, 188, 177, 228, 256, 250
|
||||
670, 70, 74, 21, 196, 89, 88, 90, 221, 241, 244
|
||||
671, 120, 123, 42, 195, 126, 125, 127, 233, 231, 251
|
||||
672, 170, 173, 42, 195, 177, 175, 178, 228, 250, 251
|
||||
673, 42, 124, 120, 195, 129, 130, 127, 251, 249, 233
|
||||
674, 15, 122, 120, 195, 138, 140, 139, 253, 257, 233
|
||||
675, 124, 15, 120, 195, 144, 139, 130, 249, 253, 233
|
||||
676, 15, 48, 45, 195, 64, 66, 67, 253, 254, 237
|
||||
677, 24, 147, 145, 196, 163, 161, 164, 240, 205, 206
|
||||
678, 95, 97, 33, 196, 113, 116, 115, 200, 245, 247
|
||||
679, 33, 98, 95, 196, 118, 103, 115, 247, 199, 200
|
||||
680, 95, 96, 21, 196, 107, 111, 110, 200, 258, 244
|
||||
681, 97, 95, 21, 196, 113, 110, 114, 245, 200, 244
|
||||
682, 145, 33, 148, 196, 168, 167, 166, 206, 247, 242
|
||||
683, 24, 145, 148, 196, 164, 166, 165, 240, 206, 242
|
||||
684, 18, 45, 48, 195, 63, 66, 68, 256, 237, 254
|
||||
685, 45, 18, 46, 195, 63, 62, 53, 237, 256, 259
|
||||
686, 48, 124, 173, 195, 252, 248, 255, 254, 249, 250
|
||||
687, 148, 97, 74, 196, 246, 243, 239, 242, 245, 241
|
||||
688, 74, 24, 5, 148, 86, 25, 87, 239, 165, 169
|
||||
689, 3, 49, 122, 15, 60, 260, 141, 16, 69, 138
|
||||
690, 146, 12, 49, 3, 153, 59, 261, 156, 14, 60
|
||||
691, 15, 124, 4, 48, 144, 131, 17, 64, 252, 65
|
||||
692, 149, 1, 47, 12, 151, 55, 215, 150, 13, 57
|
||||
693, 147, 7, 73, 24, 162, 82, 262, 163, 26, 81
|
||||
694, 36, 172, 6, 96, 182, 185, 38, 108, 263, 112
|
||||
695, 98, 47, 1, 9, 197, 55, 100, 101, 54, 10
|
||||
696, 2, 174, 46, 18, 192, 264, 50, 19, 193, 62
|
||||
697, 1, 149, 98, 33, 151, 265, 100, 34, 157, 118
|
||||
698, 48, 173, 4, 18, 255, 176, 65, 68, 188, 20
|
||||
699, 30, 72, 171, 8, 75, 210, 194, 32, 76, 180
|
||||
700, 97, 21, 5, 74, 114, 22, 117, 243, 88, 87
|
||||
701, 9, 46, 2, 99, 51, 50, 11, 105, 266, 106
|
||||
702, 8, 123, 171, 42, 128, 267, 180, 44, 125, 179
|
||||
703, 97, 5, 33, 148, 117, 35, 116, 246, 169, 167
|
||||
704, 99, 174, 2, 36, 214, 192, 106, 119, 190, 37
|
||||
705, 173, 124, 4, 42, 248, 131, 176, 175, 129, 43
|
||||
706, 3, 122, 146, 39, 141, 268, 156, 40, 142, 158
|
||||
707, 8, 72, 123, 27, 76, 218, 128, 29, 77, 143
|
||||
708, 71, 172, 6, 30, 212, 185, 92, 91, 186, 31
|
||||
709, 147, 121, 7, 39, 203, 135, 162, 160, 132, 41
|
||||
710, 73, 121, 27, 7, 208, 136, 83, 82, 135, 28
|
||||
711, 71, 6, 96, 21, 92, 112, 269, 94, 23, 111
|
||||
712, 146, 49, 122, 3, 261, 260, 268, 156, 60, 141
|
||||
713, 2, 46, 174, 99, 50, 264, 192, 106, 266, 214
|
||||
714, 123, 171, 72, 8, 267, 210, 218, 128, 180, 76
|
||||
715, 7, 73, 121, 147, 82, 208, 135, 162, 262, 203
|
||||
716, 173, 4, 124, 48, 176, 131, 248, 255, 65, 252
|
||||
717, 96, 172, 6, 71, 263, 185, 112, 269, 212, 92
|
||||
718, 74, 5, 97, 148, 87, 117, 243, 239, 169, 246
|
||||
719, 1, 98, 149, 47, 100, 265, 151, 55, 197, 215
|
||||
720, 147, 121, 70, 73, 203, 207, 270, 262, 208, 84
|
||||
721, 121, 147, 70, 196, 203, 270, 207, 204, 205, 221
|
||||
722, 147, 70, 24, 73, 270, 85, 163, 262, 84, 81
|
||||
723, 70, 147, 24, 196, 270, 163, 85, 221, 205, 240
|
||||
724, 146, 195, 45, 145, 272, 237, 271, 154, 236, 229
|
||||
725, 12, 45, 146, 49, 58, 271, 153, 59, 61, 261
|
||||
726, 146, 45, 12, 145, 271, 58, 153, 154, 229, 152
|
||||
727, 98, 47, 145, 149, 197, 216, 273, 265, 215, 155
|
||||
728, 145, 47, 98, 196, 216, 197, 273, 206, 201, 199
|
||||
729, 33, 98, 145, 149, 118, 273, 168, 157, 265, 155
|
||||
730, 145, 98, 33, 196, 273, 118, 168, 206, 199, 247
|
||||
731, 95, 196, 172, 96, 200, 223, 274, 107, 258, 263
|
||||
732, 172, 196, 95, 170, 223, 200, 274, 183, 224, 225
|
||||
733, 36, 95, 172, 96, 109, 274, 182, 108, 107, 263
|
||||
734, 172, 95, 36, 170, 274, 109, 182, 183, 225, 184
|
||||
735, 96, 70, 172, 71, 275, 211, 263, 269, 93, 212
|
||||
736, 172, 70, 96, 196, 211, 275, 263, 223, 221, 258
|
||||
737, 96, 21, 70, 71, 111, 90, 275, 269, 94, 93
|
||||
738, 70, 21, 96, 196, 90, 111, 275, 221, 244, 258
|
||||
739, 45, 195, 99, 95, 237, 226, 276, 234, 227, 104
|
||||
740, 99, 195, 45, 46, 226, 237, 276, 266, 259, 53
|
||||
741, 9, 45, 99, 95, 52, 276, 105, 102, 234, 104
|
||||
742, 99, 45, 9, 46, 276, 52, 105, 266, 53, 51
|
||||
743, 123, 170, 72, 171, 277, 209, 218, 267, 181, 210
|
||||
744, 42, 170, 123, 171, 178, 277, 125, 179, 181, 267
|
||||
745, 170, 42, 123, 195, 178, 125, 277, 228, 251, 231
|
||||
746, 170, 70, 123, 72, 222, 217, 277, 209, 79, 218
|
||||
747, 123, 70, 170, 195, 217, 222, 277, 231, 232, 228
|
||||
748, 120, 146, 195, 122, 278, 272, 233, 140, 268, 257
|
||||
749, 146, 120, 195, 145, 278, 233, 272, 154, 235, 236
|
||||
750, 39, 146, 120, 122, 158, 278, 133, 142, 268, 140
|
||||
751, 146, 39, 120, 145, 158, 133, 278, 154, 159, 235
|
||||
752, 46, 99, 170, 174, 266, 213, 279, 264, 214, 191
|
||||
753, 170, 99, 46, 195, 213, 266, 279, 228, 226, 259
|
||||
754, 18, 46, 170, 174, 62, 279, 189, 193, 264, 191
|
||||
755, 170, 46, 18, 195, 279, 62, 189, 228, 259, 256
|
||||
756, 70, 30, 170, 172, 78, 187, 222, 211, 186, 183
|
||||
757, 170, 30, 70, 72, 187, 78, 222, 209, 75, 79
|
||||
758, 122, 45, 146, 195, 280, 271, 268, 257, 237, 272
|
||||
759, 146, 45, 122, 49, 271, 280, 268, 261, 61, 260
|
||||
760, 122, 15, 45, 195, 138, 67, 280, 257, 253, 237
|
||||
761, 45, 15, 122, 49, 67, 138, 280, 61, 69, 260
|
||||
1, 95, 98, 47, 196, 103, 197, 198, 200, 199, 201
|
||||
2, 147, 121, 145, 196, 203, 202, 161, 205, 204, 206
|
||||
3, 73, 70, 27, 121, 84, 80, 83, 208, 207, 136
|
||||
4, 72, 170, 30, 171, 209, 187, 75, 210, 181, 194
|
||||
5, 9, 98, 47, 95, 101, 197, 54, 102, 103, 198
|
||||
6, 172, 70, 30, 71, 211, 78, 186, 212, 93, 91
|
||||
7, 170, 99, 36, 174, 213, 119, 184, 191, 214, 190
|
||||
8, 12, 47, 149, 145, 57, 215, 150, 152, 216, 155
|
||||
9, 70, 27, 123, 72, 80, 143, 217, 79, 77, 218
|
||||
10, 39, 147, 121, 145, 160, 203, 132, 159, 161, 202
|
||||
11, 70, 120, 121, 196, 219, 134, 207, 221, 220, 204
|
||||
12, 70, 172, 170, 196, 211, 183, 222, 221, 223, 224
|
||||
13, 95, 99, 170, 195, 104, 213, 225, 227, 226, 228
|
||||
14, 145, 45, 47, 196, 229, 56, 216, 206, 230, 201
|
||||
15, 70, 123, 120, 195, 217, 126, 219, 232, 231, 233
|
||||
16, 47, 45, 95, 196, 56, 234, 198, 201, 230, 200
|
||||
17, 121, 120, 145, 196, 134, 235, 202, 204, 220, 206
|
||||
18, 145, 39, 120, 121, 159, 133, 235, 202, 132, 134
|
||||
19, 70, 120, 27, 121, 219, 137, 80, 207, 134, 136
|
||||
20, 9, 47, 45, 95, 54, 56, 52, 102, 198, 234
|
||||
21, 70, 27, 120, 123, 80, 137, 219, 217, 143, 126
|
||||
22, 45, 47, 12, 145, 56, 57, 58, 229, 216, 152
|
||||
23, 170, 95, 36, 99, 225, 109, 184, 213, 104, 119
|
||||
24, 195, 45, 145, 196, 237, 229, 236, 238, 230, 206
|
||||
25, 95, 45, 195, 196, 234, 237, 227, 200, 230, 238
|
||||
26, 170, 95, 195, 196, 225, 227, 228, 224, 200, 238
|
||||
27, 70, 170, 195, 196, 222, 228, 232, 221, 224, 238
|
||||
28, 195, 120, 70, 196, 233, 219, 232, 238, 220, 221
|
||||
29, 145, 120, 195, 196, 235, 233, 236, 206, 220, 238
|
||||
30, 74, 24, 148, 196, 86, 165, 239, 241, 240, 242
|
||||
31, 21, 74, 97, 196, 88, 243, 114, 244, 241, 245
|
||||
32, 148, 33, 97, 196, 167, 116, 246, 242, 247, 245
|
||||
33, 173, 124, 42, 195, 248, 129, 175, 250, 249, 251
|
||||
34, 48, 15, 124, 195, 64, 144, 252, 254, 253, 249
|
||||
35, 18, 48, 173, 195, 68, 255, 188, 256, 254, 250
|
||||
36, 74, 70, 24, 196, 89, 85, 86, 241, 221, 240
|
||||
37, 170, 18, 173, 195, 189, 188, 177, 228, 256, 250
|
||||
38, 70, 74, 21, 196, 89, 88, 90, 221, 241, 244
|
||||
39, 120, 123, 42, 195, 126, 125, 127, 233, 231, 251
|
||||
40, 170, 173, 42, 195, 177, 175, 178, 228, 250, 251
|
||||
41, 42, 124, 120, 195, 129, 130, 127, 251, 249, 233
|
||||
42, 15, 122, 120, 195, 138, 140, 139, 253, 257, 233
|
||||
43, 124, 15, 120, 195, 144, 139, 130, 249, 253, 233
|
||||
44, 15, 48, 45, 195, 64, 66, 67, 253, 254, 237
|
||||
45, 24, 147, 145, 196, 163, 161, 164, 240, 205, 206
|
||||
46, 95, 97, 33, 196, 113, 116, 115, 200, 245, 247
|
||||
47, 33, 98, 95, 196, 118, 103, 115, 247, 199, 200
|
||||
48, 95, 96, 21, 196, 107, 111, 110, 200, 258, 244
|
||||
49, 97, 95, 21, 196, 113, 110, 114, 245, 200, 244
|
||||
50, 145, 33, 148, 196, 168, 167, 166, 206, 247, 242
|
||||
51, 24, 145, 148, 196, 164, 166, 165, 240, 206, 242
|
||||
52, 18, 45, 48, 195, 63, 66, 68, 256, 237, 254
|
||||
53, 45, 18, 46, 195, 63, 62, 53, 237, 256, 259
|
||||
54, 48, 124, 173, 195, 252, 248, 255, 254, 249, 250
|
||||
55, 148, 97, 74, 196, 246, 243, 239, 242, 245, 241
|
||||
56, 74, 24, 5, 148, 86, 25, 87, 239, 165, 169
|
||||
57, 3, 49, 122, 15, 60, 260, 141, 16, 69, 138
|
||||
58, 146, 12, 49, 3, 153, 59, 261, 156, 14, 60
|
||||
59, 15, 124, 4, 48, 144, 131, 17, 64, 252, 65
|
||||
60, 149, 1, 47, 12, 151, 55, 215, 150, 13, 57
|
||||
61, 147, 7, 73, 24, 162, 82, 262, 163, 26, 81
|
||||
62, 36, 172, 6, 96, 182, 185, 38, 108, 263, 112
|
||||
63, 98, 47, 1, 9, 197, 55, 100, 101, 54, 10
|
||||
64, 2, 174, 46, 18, 192, 264, 50, 19, 193, 62
|
||||
65, 1, 149, 98, 33, 151, 265, 100, 34, 157, 118
|
||||
66, 48, 173, 4, 18, 255, 176, 65, 68, 188, 20
|
||||
67, 30, 72, 171, 8, 75, 210, 194, 32, 76, 180
|
||||
68, 97, 21, 5, 74, 114, 22, 117, 243, 88, 87
|
||||
69, 9, 46, 2, 99, 51, 50, 11, 105, 266, 106
|
||||
70, 8, 123, 171, 42, 128, 267, 180, 44, 125, 179
|
||||
71, 97, 5, 33, 148, 117, 35, 116, 246, 169, 167
|
||||
72, 99, 174, 2, 36, 214, 192, 106, 119, 190, 37
|
||||
73, 173, 124, 4, 42, 248, 131, 176, 175, 129, 43
|
||||
74, 3, 122, 146, 39, 141, 268, 156, 40, 142, 158
|
||||
75, 8, 72, 123, 27, 76, 218, 128, 29, 77, 143
|
||||
76, 71, 172, 6, 30, 212, 185, 92, 91, 186, 31
|
||||
77, 147, 121, 7, 39, 203, 135, 162, 160, 132, 41
|
||||
78, 73, 121, 27, 7, 208, 136, 83, 82, 135, 28
|
||||
79, 71, 6, 96, 21, 92, 112, 269, 94, 23, 111
|
||||
80, 146, 49, 122, 3, 261, 260, 268, 156, 60, 141
|
||||
81, 2, 46, 174, 99, 50, 264, 192, 106, 266, 214
|
||||
82, 123, 171, 72, 8, 267, 210, 218, 128, 180, 76
|
||||
83, 7, 73, 121, 147, 82, 208, 135, 162, 262, 203
|
||||
84, 173, 4, 124, 48, 176, 131, 248, 255, 65, 252
|
||||
85, 96, 172, 6, 71, 263, 185, 112, 269, 212, 92
|
||||
86, 74, 5, 97, 148, 87, 117, 243, 239, 169, 246
|
||||
87, 1, 98, 149, 47, 100, 265, 151, 55, 197, 215
|
||||
88, 147, 121, 70, 73, 203, 207, 270, 262, 208, 84
|
||||
89, 121, 147, 70, 196, 203, 270, 207, 204, 205, 221
|
||||
90, 147, 70, 24, 73, 270, 85, 163, 262, 84, 81
|
||||
91, 70, 147, 24, 196, 270, 163, 85, 221, 205, 240
|
||||
92, 146, 195, 45, 145, 272, 237, 271, 154, 236, 229
|
||||
93, 12, 45, 146, 49, 58, 271, 153, 59, 61, 261
|
||||
94, 146, 45, 12, 145, 271, 58, 153, 154, 229, 152
|
||||
95, 98, 47, 145, 149, 197, 216, 273, 265, 215, 155
|
||||
96, 145, 47, 98, 196, 216, 197, 273, 206, 201, 199
|
||||
97, 33, 98, 145, 149, 118, 273, 168, 157, 265, 155
|
||||
98, 145, 98, 33, 196, 273, 118, 168, 206, 199, 247
|
||||
99, 95, 196, 172, 96, 200, 223, 274, 107, 258, 263
|
||||
100, 172, 196, 95, 170, 223, 200, 274, 183, 224, 225
|
||||
101, 36, 95, 172, 96, 109, 274, 182, 108, 107, 263
|
||||
102, 172, 95, 36, 170, 274, 109, 182, 183, 225, 184
|
||||
103, 96, 70, 172, 71, 275, 211, 263, 269, 93, 212
|
||||
104, 172, 70, 96, 196, 211, 275, 263, 223, 221, 258
|
||||
105, 96, 21, 70, 71, 111, 90, 275, 269, 94, 93
|
||||
106, 70, 21, 96, 196, 90, 111, 275, 221, 244, 258
|
||||
107, 45, 195, 99, 95, 237, 226, 276, 234, 227, 104
|
||||
108, 99, 195, 45, 46, 226, 237, 276, 266, 259, 53
|
||||
109, 9, 45, 99, 95, 52, 276, 105, 102, 234, 104
|
||||
110, 99, 45, 9, 46, 276, 52, 105, 266, 53, 51
|
||||
111, 123, 170, 72, 171, 277, 209, 218, 267, 181, 210
|
||||
112, 42, 170, 123, 171, 178, 277, 125, 179, 181, 267
|
||||
113, 170, 42, 123, 195, 178, 125, 277, 228, 251, 231
|
||||
114, 170, 70, 123, 72, 222, 217, 277, 209, 79, 218
|
||||
115, 123, 70, 170, 195, 217, 222, 277, 231, 232, 228
|
||||
116, 120, 146, 195, 122, 278, 272, 233, 140, 268, 257
|
||||
117, 146, 120, 195, 145, 278, 233, 272, 154, 235, 236
|
||||
118, 39, 146, 120, 122, 158, 278, 133, 142, 268, 140
|
||||
119, 146, 39, 120, 145, 158, 133, 278, 154, 159, 235
|
||||
120, 46, 99, 170, 174, 266, 213, 279, 264, 214, 191
|
||||
121, 170, 99, 46, 195, 213, 266, 279, 228, 226, 259
|
||||
122, 18, 46, 170, 174, 62, 279, 189, 193, 264, 191
|
||||
123, 170, 46, 18, 195, 279, 62, 189, 228, 259, 256
|
||||
124, 70, 30, 170, 172, 78, 187, 222, 211, 186, 183
|
||||
125, 170, 30, 70, 72, 187, 78, 222, 209, 75, 79
|
||||
126, 122, 45, 146, 195, 280, 271, 268, 257, 237, 272
|
||||
127, 146, 45, 122, 49, 271, 280, 268, 261, 61, 260
|
||||
128, 122, 15, 45, 195, 138, 67, 280, 257, 253, 237
|
||||
129, 45, 15, 122, 49, 67, 138, 280, 61, 69, 260
|
||||
|
||||
|
||||
|
||||
@@ -548,22 +548,22 @@ FemConstraintFixed,3
|
||||
** written by write_constraints_pressure function
|
||||
*DLOAD
|
||||
** FemConstraintPressure: face load
|
||||
635,P1,1000.0
|
||||
638,P3,1000.0
|
||||
641,P2,1000.0
|
||||
668,P1,1000.0
|
||||
670,P1,1000.0
|
||||
688,P1,1000.0
|
||||
693,P3,1000.0
|
||||
699,P2,1000.0
|
||||
700,P3,1000.0
|
||||
707,P2,1000.0
|
||||
708,P4,1000.0
|
||||
710,P4,1000.0
|
||||
711,P2,1000.0
|
||||
722,P3,1000.0
|
||||
737,P3,1000.0
|
||||
757,P3,1000.0
|
||||
3,P1,1000.0
|
||||
6,P3,1000.0
|
||||
9,P2,1000.0
|
||||
36,P1,1000.0
|
||||
38,P1,1000.0
|
||||
56,P1,1000.0
|
||||
61,P3,1000.0
|
||||
67,P2,1000.0
|
||||
68,P3,1000.0
|
||||
75,P2,1000.0
|
||||
76,P4,1000.0
|
||||
78,P4,1000.0
|
||||
79,P2,1000.0
|
||||
90,P3,1000.0
|
||||
105,P3,1000.0
|
||||
125,P3,1000.0
|
||||
|
||||
***********************************************************
|
||||
** Outputs --> frd file
|
||||
@@ -585,8 +585,8 @@ S
|
||||
***********************************************************
|
||||
** CalculiX Input file
|
||||
** written by write_footer function
|
||||
** written by --> FreeCAD 0.16.5838 +1 (Git)
|
||||
** written on --> Mon Oct 26 18:28:42 2015
|
||||
** written by --> FreeCAD 0.17.9749 (Git)
|
||||
** written on --> Sun Jan 22 14:28:56 2017
|
||||
** file name -->
|
||||
** analysis name --> Analysis
|
||||
**
|
||||
|
||||
@@ -1,129 +1,129 @@
|
||||
633, 95, 98, 47, 196, 103, 197, 198, 200, 199, 201,
|
||||
634, 147, 121, 145, 196, 203, 202, 161, 205, 204, 206,
|
||||
635, 73, 70, 27, 121, 84, 80, 83, 208, 207, 136,
|
||||
636, 72, 170, 30, 171, 209, 187, 75, 210, 181, 194,
|
||||
637, 9, 98, 47, 95, 101, 197, 54, 102, 103, 198,
|
||||
638, 172, 70, 30, 71, 211, 78, 186, 212, 93, 91,
|
||||
639, 170, 99, 36, 174, 213, 119, 184, 191, 214, 190,
|
||||
640, 12, 47, 149, 145, 57, 215, 150, 152, 216, 155,
|
||||
641, 70, 27, 123, 72, 80, 143, 217, 79, 77, 218,
|
||||
642, 39, 147, 121, 145, 160, 203, 132, 159, 161, 202,
|
||||
643, 70, 120, 121, 196, 219, 134, 207, 221, 220, 204,
|
||||
644, 70, 172, 170, 196, 211, 183, 222, 221, 223, 224,
|
||||
645, 95, 99, 170, 195, 104, 213, 225, 227, 226, 228,
|
||||
646, 145, 45, 47, 196, 229, 56, 216, 206, 230, 201,
|
||||
647, 70, 123, 120, 195, 217, 126, 219, 232, 231, 233,
|
||||
648, 47, 45, 95, 196, 56, 234, 198, 201, 230, 200,
|
||||
649, 121, 120, 145, 196, 134, 235, 202, 204, 220, 206,
|
||||
650, 145, 39, 120, 121, 159, 133, 235, 202, 132, 134,
|
||||
651, 70, 120, 27, 121, 219, 137, 80, 207, 134, 136,
|
||||
652, 9, 47, 45, 95, 54, 56, 52, 102, 198, 234,
|
||||
653, 70, 27, 120, 123, 80, 137, 219, 217, 143, 126,
|
||||
654, 45, 47, 12, 145, 56, 57, 58, 229, 216, 152,
|
||||
655, 170, 95, 36, 99, 225, 109, 184, 213, 104, 119,
|
||||
656, 195, 45, 145, 196, 237, 229, 236, 238, 230, 206,
|
||||
657, 95, 45, 195, 196, 234, 237, 227, 200, 230, 238,
|
||||
658, 170, 95, 195, 196, 225, 227, 228, 224, 200, 238,
|
||||
659, 70, 170, 195, 196, 222, 228, 232, 221, 224, 238,
|
||||
660, 195, 120, 70, 196, 233, 219, 232, 238, 220, 221,
|
||||
661, 145, 120, 195, 196, 235, 233, 236, 206, 220, 238,
|
||||
662, 74, 24, 148, 196, 86, 165, 239, 241, 240, 242,
|
||||
663, 21, 74, 97, 196, 88, 243, 114, 244, 241, 245,
|
||||
664, 148, 33, 97, 196, 167, 116, 246, 242, 247, 245,
|
||||
665, 173, 124, 42, 195, 248, 129, 175, 250, 249, 251,
|
||||
666, 48, 15, 124, 195, 64, 144, 252, 254, 253, 249,
|
||||
667, 18, 48, 173, 195, 68, 255, 188, 256, 254, 250,
|
||||
668, 74, 70, 24, 196, 89, 85, 86, 241, 221, 240,
|
||||
669, 170, 18, 173, 195, 189, 188, 177, 228, 256, 250,
|
||||
670, 70, 74, 21, 196, 89, 88, 90, 221, 241, 244,
|
||||
671, 120, 123, 42, 195, 126, 125, 127, 233, 231, 251,
|
||||
672, 170, 173, 42, 195, 177, 175, 178, 228, 250, 251,
|
||||
673, 42, 124, 120, 195, 129, 130, 127, 251, 249, 233,
|
||||
674, 15, 122, 120, 195, 138, 140, 139, 253, 257, 233,
|
||||
675, 124, 15, 120, 195, 144, 139, 130, 249, 253, 233,
|
||||
676, 15, 48, 45, 195, 64, 66, 67, 253, 254, 237,
|
||||
677, 24, 147, 145, 196, 163, 161, 164, 240, 205, 206,
|
||||
678, 95, 97, 33, 196, 113, 116, 115, 200, 245, 247,
|
||||
679, 33, 98, 95, 196, 118, 103, 115, 247, 199, 200,
|
||||
680, 95, 96, 21, 196, 107, 111, 110, 200, 258, 244,
|
||||
681, 97, 95, 21, 196, 113, 110, 114, 245, 200, 244,
|
||||
682, 145, 33, 148, 196, 168, 167, 166, 206, 247, 242,
|
||||
683, 24, 145, 148, 196, 164, 166, 165, 240, 206, 242,
|
||||
684, 18, 45, 48, 195, 63, 66, 68, 256, 237, 254,
|
||||
685, 45, 18, 46, 195, 63, 62, 53, 237, 256, 259,
|
||||
686, 48, 124, 173, 195, 252, 248, 255, 254, 249, 250,
|
||||
687, 148, 97, 74, 196, 246, 243, 239, 242, 245, 241,
|
||||
688, 74, 24, 5, 148, 86, 25, 87, 239, 165, 169,
|
||||
689, 3, 49, 122, 15, 60, 260, 141, 16, 69, 138,
|
||||
690, 146, 12, 49, 3, 153, 59, 261, 156, 14, 60,
|
||||
691, 15, 124, 4, 48, 144, 131, 17, 64, 252, 65,
|
||||
692, 149, 1, 47, 12, 151, 55, 215, 150, 13, 57,
|
||||
693, 147, 7, 73, 24, 162, 82, 262, 163, 26, 81,
|
||||
694, 36, 172, 6, 96, 182, 185, 38, 108, 263, 112,
|
||||
695, 98, 47, 1, 9, 197, 55, 100, 101, 54, 10,
|
||||
696, 2, 174, 46, 18, 192, 264, 50, 19, 193, 62,
|
||||
697, 1, 149, 98, 33, 151, 265, 100, 34, 157, 118,
|
||||
698, 48, 173, 4, 18, 255, 176, 65, 68, 188, 20,
|
||||
699, 30, 72, 171, 8, 75, 210, 194, 32, 76, 180,
|
||||
700, 97, 21, 5, 74, 114, 22, 117, 243, 88, 87,
|
||||
701, 9, 46, 2, 99, 51, 50, 11, 105, 266, 106,
|
||||
702, 8, 123, 171, 42, 128, 267, 180, 44, 125, 179,
|
||||
703, 97, 5, 33, 148, 117, 35, 116, 246, 169, 167,
|
||||
704, 99, 174, 2, 36, 214, 192, 106, 119, 190, 37,
|
||||
705, 173, 124, 4, 42, 248, 131, 176, 175, 129, 43,
|
||||
706, 3, 122, 146, 39, 141, 268, 156, 40, 142, 158,
|
||||
707, 8, 72, 123, 27, 76, 218, 128, 29, 77, 143,
|
||||
708, 71, 172, 6, 30, 212, 185, 92, 91, 186, 31,
|
||||
709, 147, 121, 7, 39, 203, 135, 162, 160, 132, 41,
|
||||
710, 73, 121, 27, 7, 208, 136, 83, 82, 135, 28,
|
||||
711, 71, 6, 96, 21, 92, 112, 269, 94, 23, 111,
|
||||
712, 146, 49, 122, 3, 261, 260, 268, 156, 60, 141,
|
||||
713, 2, 46, 174, 99, 50, 264, 192, 106, 266, 214,
|
||||
714, 123, 171, 72, 8, 267, 210, 218, 128, 180, 76,
|
||||
715, 7, 73, 121, 147, 82, 208, 135, 162, 262, 203,
|
||||
716, 173, 4, 124, 48, 176, 131, 248, 255, 65, 252,
|
||||
717, 96, 172, 6, 71, 263, 185, 112, 269, 212, 92,
|
||||
718, 74, 5, 97, 148, 87, 117, 243, 239, 169, 246,
|
||||
719, 1, 98, 149, 47, 100, 265, 151, 55, 197, 215,
|
||||
720, 147, 121, 70, 73, 203, 207, 270, 262, 208, 84,
|
||||
721, 121, 147, 70, 196, 203, 270, 207, 204, 205, 221,
|
||||
722, 147, 70, 24, 73, 270, 85, 163, 262, 84, 81,
|
||||
723, 70, 147, 24, 196, 270, 163, 85, 221, 205, 240,
|
||||
724, 146, 195, 45, 145, 272, 237, 271, 154, 236, 229,
|
||||
725, 12, 45, 146, 49, 58, 271, 153, 59, 61, 261,
|
||||
726, 146, 45, 12, 145, 271, 58, 153, 154, 229, 152,
|
||||
727, 98, 47, 145, 149, 197, 216, 273, 265, 215, 155,
|
||||
728, 145, 47, 98, 196, 216, 197, 273, 206, 201, 199,
|
||||
729, 33, 98, 145, 149, 118, 273, 168, 157, 265, 155,
|
||||
730, 145, 98, 33, 196, 273, 118, 168, 206, 199, 247,
|
||||
731, 95, 196, 172, 96, 200, 223, 274, 107, 258, 263,
|
||||
732, 172, 196, 95, 170, 223, 200, 274, 183, 224, 225,
|
||||
733, 36, 95, 172, 96, 109, 274, 182, 108, 107, 263,
|
||||
734, 172, 95, 36, 170, 274, 109, 182, 183, 225, 184,
|
||||
735, 96, 70, 172, 71, 275, 211, 263, 269, 93, 212,
|
||||
736, 172, 70, 96, 196, 211, 275, 263, 223, 221, 258,
|
||||
737, 96, 21, 70, 71, 111, 90, 275, 269, 94, 93,
|
||||
738, 70, 21, 96, 196, 90, 111, 275, 221, 244, 258,
|
||||
739, 45, 195, 99, 95, 237, 226, 276, 234, 227, 104,
|
||||
740, 99, 195, 45, 46, 226, 237, 276, 266, 259, 53,
|
||||
741, 9, 45, 99, 95, 52, 276, 105, 102, 234, 104,
|
||||
742, 99, 45, 9, 46, 276, 52, 105, 266, 53, 51,
|
||||
743, 123, 170, 72, 171, 277, 209, 218, 267, 181, 210,
|
||||
744, 42, 170, 123, 171, 178, 277, 125, 179, 181, 267,
|
||||
745, 170, 42, 123, 195, 178, 125, 277, 228, 251, 231,
|
||||
746, 170, 70, 123, 72, 222, 217, 277, 209, 79, 218,
|
||||
747, 123, 70, 170, 195, 217, 222, 277, 231, 232, 228,
|
||||
748, 120, 146, 195, 122, 278, 272, 233, 140, 268, 257,
|
||||
749, 146, 120, 195, 145, 278, 233, 272, 154, 235, 236,
|
||||
750, 39, 146, 120, 122, 158, 278, 133, 142, 268, 140,
|
||||
751, 146, 39, 120, 145, 158, 133, 278, 154, 159, 235,
|
||||
752, 46, 99, 170, 174, 266, 213, 279, 264, 214, 191,
|
||||
753, 170, 99, 46, 195, 213, 266, 279, 228, 226, 259,
|
||||
754, 18, 46, 170, 174, 62, 279, 189, 193, 264, 191,
|
||||
755, 170, 46, 18, 195, 279, 62, 189, 228, 259, 256,
|
||||
756, 70, 30, 170, 172, 78, 187, 222, 211, 186, 183,
|
||||
757, 170, 30, 70, 72, 187, 78, 222, 209, 75, 79,
|
||||
758, 122, 45, 146, 195, 280, 271, 268, 257, 237, 272,
|
||||
759, 146, 45, 122, 49, 271, 280, 268, 261, 61, 260,
|
||||
760, 122, 15, 45, 195, 138, 67, 280, 257, 253, 237,
|
||||
761, 45, 15, 122, 49, 67, 138, 280, 61, 69, 260,
|
||||
1, 95, 98, 47, 196, 103, 197, 198, 200, 199, 201,
|
||||
2, 147, 121, 145, 196, 203, 202, 161, 205, 204, 206,
|
||||
3, 73, 70, 27, 121, 84, 80, 83, 208, 207, 136,
|
||||
4, 72, 170, 30, 171, 209, 187, 75, 210, 181, 194,
|
||||
5, 9, 98, 47, 95, 101, 197, 54, 102, 103, 198,
|
||||
6, 172, 70, 30, 71, 211, 78, 186, 212, 93, 91,
|
||||
7, 170, 99, 36, 174, 213, 119, 184, 191, 214, 190,
|
||||
8, 12, 47, 149, 145, 57, 215, 150, 152, 216, 155,
|
||||
9, 70, 27, 123, 72, 80, 143, 217, 79, 77, 218,
|
||||
10, 39, 147, 121, 145, 160, 203, 132, 159, 161, 202,
|
||||
11, 70, 120, 121, 196, 219, 134, 207, 221, 220, 204,
|
||||
12, 70, 172, 170, 196, 211, 183, 222, 221, 223, 224,
|
||||
13, 95, 99, 170, 195, 104, 213, 225, 227, 226, 228,
|
||||
14, 145, 45, 47, 196, 229, 56, 216, 206, 230, 201,
|
||||
15, 70, 123, 120, 195, 217, 126, 219, 232, 231, 233,
|
||||
16, 47, 45, 95, 196, 56, 234, 198, 201, 230, 200,
|
||||
17, 121, 120, 145, 196, 134, 235, 202, 204, 220, 206,
|
||||
18, 145, 39, 120, 121, 159, 133, 235, 202, 132, 134,
|
||||
19, 70, 120, 27, 121, 219, 137, 80, 207, 134, 136,
|
||||
20, 9, 47, 45, 95, 54, 56, 52, 102, 198, 234,
|
||||
21, 70, 27, 120, 123, 80, 137, 219, 217, 143, 126,
|
||||
22, 45, 47, 12, 145, 56, 57, 58, 229, 216, 152,
|
||||
23, 170, 95, 36, 99, 225, 109, 184, 213, 104, 119,
|
||||
24, 195, 45, 145, 196, 237, 229, 236, 238, 230, 206,
|
||||
25, 95, 45, 195, 196, 234, 237, 227, 200, 230, 238,
|
||||
26, 170, 95, 195, 196, 225, 227, 228, 224, 200, 238,
|
||||
27, 70, 170, 195, 196, 222, 228, 232, 221, 224, 238,
|
||||
28, 195, 120, 70, 196, 233, 219, 232, 238, 220, 221,
|
||||
29, 145, 120, 195, 196, 235, 233, 236, 206, 220, 238,
|
||||
30, 74, 24, 148, 196, 86, 165, 239, 241, 240, 242,
|
||||
31, 21, 74, 97, 196, 88, 243, 114, 244, 241, 245,
|
||||
32, 148, 33, 97, 196, 167, 116, 246, 242, 247, 245,
|
||||
33, 173, 124, 42, 195, 248, 129, 175, 250, 249, 251,
|
||||
34, 48, 15, 124, 195, 64, 144, 252, 254, 253, 249,
|
||||
35, 18, 48, 173, 195, 68, 255, 188, 256, 254, 250,
|
||||
36, 74, 70, 24, 196, 89, 85, 86, 241, 221, 240,
|
||||
37, 170, 18, 173, 195, 189, 188, 177, 228, 256, 250,
|
||||
38, 70, 74, 21, 196, 89, 88, 90, 221, 241, 244,
|
||||
39, 120, 123, 42, 195, 126, 125, 127, 233, 231, 251,
|
||||
40, 170, 173, 42, 195, 177, 175, 178, 228, 250, 251,
|
||||
41, 42, 124, 120, 195, 129, 130, 127, 251, 249, 233,
|
||||
42, 15, 122, 120, 195, 138, 140, 139, 253, 257, 233,
|
||||
43, 124, 15, 120, 195, 144, 139, 130, 249, 253, 233,
|
||||
44, 15, 48, 45, 195, 64, 66, 67, 253, 254, 237,
|
||||
45, 24, 147, 145, 196, 163, 161, 164, 240, 205, 206,
|
||||
46, 95, 97, 33, 196, 113, 116, 115, 200, 245, 247,
|
||||
47, 33, 98, 95, 196, 118, 103, 115, 247, 199, 200,
|
||||
48, 95, 96, 21, 196, 107, 111, 110, 200, 258, 244,
|
||||
49, 97, 95, 21, 196, 113, 110, 114, 245, 200, 244,
|
||||
50, 145, 33, 148, 196, 168, 167, 166, 206, 247, 242,
|
||||
51, 24, 145, 148, 196, 164, 166, 165, 240, 206, 242,
|
||||
52, 18, 45, 48, 195, 63, 66, 68, 256, 237, 254,
|
||||
53, 45, 18, 46, 195, 63, 62, 53, 237, 256, 259,
|
||||
54, 48, 124, 173, 195, 252, 248, 255, 254, 249, 250,
|
||||
55, 148, 97, 74, 196, 246, 243, 239, 242, 245, 241,
|
||||
56, 74, 24, 5, 148, 86, 25, 87, 239, 165, 169,
|
||||
57, 3, 49, 122, 15, 60, 260, 141, 16, 69, 138,
|
||||
58, 146, 12, 49, 3, 153, 59, 261, 156, 14, 60,
|
||||
59, 15, 124, 4, 48, 144, 131, 17, 64, 252, 65,
|
||||
60, 149, 1, 47, 12, 151, 55, 215, 150, 13, 57,
|
||||
61, 147, 7, 73, 24, 162, 82, 262, 163, 26, 81,
|
||||
62, 36, 172, 6, 96, 182, 185, 38, 108, 263, 112,
|
||||
63, 98, 47, 1, 9, 197, 55, 100, 101, 54, 10,
|
||||
64, 2, 174, 46, 18, 192, 264, 50, 19, 193, 62,
|
||||
65, 1, 149, 98, 33, 151, 265, 100, 34, 157, 118,
|
||||
66, 48, 173, 4, 18, 255, 176, 65, 68, 188, 20,
|
||||
67, 30, 72, 171, 8, 75, 210, 194, 32, 76, 180,
|
||||
68, 97, 21, 5, 74, 114, 22, 117, 243, 88, 87,
|
||||
69, 9, 46, 2, 99, 51, 50, 11, 105, 266, 106,
|
||||
70, 8, 123, 171, 42, 128, 267, 180, 44, 125, 179,
|
||||
71, 97, 5, 33, 148, 117, 35, 116, 246, 169, 167,
|
||||
72, 99, 174, 2, 36, 214, 192, 106, 119, 190, 37,
|
||||
73, 173, 124, 4, 42, 248, 131, 176, 175, 129, 43,
|
||||
74, 3, 122, 146, 39, 141, 268, 156, 40, 142, 158,
|
||||
75, 8, 72, 123, 27, 76, 218, 128, 29, 77, 143,
|
||||
76, 71, 172, 6, 30, 212, 185, 92, 91, 186, 31,
|
||||
77, 147, 121, 7, 39, 203, 135, 162, 160, 132, 41,
|
||||
78, 73, 121, 27, 7, 208, 136, 83, 82, 135, 28,
|
||||
79, 71, 6, 96, 21, 92, 112, 269, 94, 23, 111,
|
||||
80, 146, 49, 122, 3, 261, 260, 268, 156, 60, 141,
|
||||
81, 2, 46, 174, 99, 50, 264, 192, 106, 266, 214,
|
||||
82, 123, 171, 72, 8, 267, 210, 218, 128, 180, 76,
|
||||
83, 7, 73, 121, 147, 82, 208, 135, 162, 262, 203,
|
||||
84, 173, 4, 124, 48, 176, 131, 248, 255, 65, 252,
|
||||
85, 96, 172, 6, 71, 263, 185, 112, 269, 212, 92,
|
||||
86, 74, 5, 97, 148, 87, 117, 243, 239, 169, 246,
|
||||
87, 1, 98, 149, 47, 100, 265, 151, 55, 197, 215,
|
||||
88, 147, 121, 70, 73, 203, 207, 270, 262, 208, 84,
|
||||
89, 121, 147, 70, 196, 203, 270, 207, 204, 205, 221,
|
||||
90, 147, 70, 24, 73, 270, 85, 163, 262, 84, 81,
|
||||
91, 70, 147, 24, 196, 270, 163, 85, 221, 205, 240,
|
||||
92, 146, 195, 45, 145, 272, 237, 271, 154, 236, 229,
|
||||
93, 12, 45, 146, 49, 58, 271, 153, 59, 61, 261,
|
||||
94, 146, 45, 12, 145, 271, 58, 153, 154, 229, 152,
|
||||
95, 98, 47, 145, 149, 197, 216, 273, 265, 215, 155,
|
||||
96, 145, 47, 98, 196, 216, 197, 273, 206, 201, 199,
|
||||
97, 33, 98, 145, 149, 118, 273, 168, 157, 265, 155,
|
||||
98, 145, 98, 33, 196, 273, 118, 168, 206, 199, 247,
|
||||
99, 95, 196, 172, 96, 200, 223, 274, 107, 258, 263,
|
||||
100, 172, 196, 95, 170, 223, 200, 274, 183, 224, 225,
|
||||
101, 36, 95, 172, 96, 109, 274, 182, 108, 107, 263,
|
||||
102, 172, 95, 36, 170, 274, 109, 182, 183, 225, 184,
|
||||
103, 96, 70, 172, 71, 275, 211, 263, 269, 93, 212,
|
||||
104, 172, 70, 96, 196, 211, 275, 263, 223, 221, 258,
|
||||
105, 96, 21, 70, 71, 111, 90, 275, 269, 94, 93,
|
||||
106, 70, 21, 96, 196, 90, 111, 275, 221, 244, 258,
|
||||
107, 45, 195, 99, 95, 237, 226, 276, 234, 227, 104,
|
||||
108, 99, 195, 45, 46, 226, 237, 276, 266, 259, 53,
|
||||
109, 9, 45, 99, 95, 52, 276, 105, 102, 234, 104,
|
||||
110, 99, 45, 9, 46, 276, 52, 105, 266, 53, 51,
|
||||
111, 123, 170, 72, 171, 277, 209, 218, 267, 181, 210,
|
||||
112, 42, 170, 123, 171, 178, 277, 125, 179, 181, 267,
|
||||
113, 170, 42, 123, 195, 178, 125, 277, 228, 251, 231,
|
||||
114, 170, 70, 123, 72, 222, 217, 277, 209, 79, 218,
|
||||
115, 123, 70, 170, 195, 217, 222, 277, 231, 232, 228,
|
||||
116, 120, 146, 195, 122, 278, 272, 233, 140, 268, 257,
|
||||
117, 146, 120, 195, 145, 278, 233, 272, 154, 235, 236,
|
||||
118, 39, 146, 120, 122, 158, 278, 133, 142, 268, 140,
|
||||
119, 146, 39, 120, 145, 158, 133, 278, 154, 159, 235,
|
||||
120, 46, 99, 170, 174, 266, 213, 279, 264, 214, 191,
|
||||
121, 170, 99, 46, 195, 213, 266, 279, 228, 226, 259,
|
||||
122, 18, 46, 170, 174, 62, 279, 189, 193, 264, 191,
|
||||
123, 170, 46, 18, 195, 279, 62, 189, 228, 259, 256,
|
||||
124, 70, 30, 170, 172, 78, 187, 222, 211, 186, 183,
|
||||
125, 170, 30, 70, 72, 187, 78, 222, 209, 75, 79,
|
||||
126, 122, 45, 146, 195, 280, 271, 268, 257, 237, 272,
|
||||
127, 146, 45, 122, 49, 271, 280, 268, 261, 61, 260,
|
||||
128, 122, 15, 45, 195, 138, 67, 280, 257, 253, 237,
|
||||
129, 45, 15, 122, 49, 67, 138, 280, 61, 69, 260,
|
||||
|
||||
|
@@ -49,51 +49,51 @@
|
||||
|
||||
stresses (elem, integ.pnt.,sxx,syy,szz,sxy,sxz,syz) for set EALL and time 0.1000000E+01
|
||||
|
||||
37 1 3.404960E+00 -1.223741E+00 -1.146617E+01 -1.014816E+00 5.721404E-01 1.914876E+00
|
||||
37 2 1.400224E+00 -2.953124E+00 -1.263874E+01 -6.892873E-01 7.925952E-01 2.418160E-02
|
||||
37 3 -1.932021E-02 4.145572E+00 1.075800E+01 1.341622E-01 -1.077867E+00 -8.810057E-01
|
||||
37 4 8.558867E-01 2.410724E+00 5.031899E+00 -4.538675E-01 -8.363957E-01 -8.545765E-01
|
||||
38 1 -2.390976E-01 -6.281387E-01 -3.372011E-01 -4.253012E-01 -4.313375E-01 -3.639082E-02
|
||||
38 2 -7.078629E-01 -1.051329E+00 9.460542E-02 3.391396E-02 6.619598E-02 -1.109819E-01
|
||||
38 3 -4.586067E-01 -6.902739E-01 2.326885E-01 4.933190E-02 -3.895851E-01 2.906021E-01
|
||||
38 4 8.177110E-01 6.474442E-01 1.691349E-01 -5.346077E-02 3.495037E-01 1.078309E-01
|
||||
39 1 -3.738220E-01 5.244382E-02 5.043071E-02 -4.322174E-02 -5.119367E-02 -6.329539E-02
|
||||
39 2 -4.870176E-01 -1.365642E-01 -3.659017E-02 -8.585698E-02 -1.108073E-01 5.250735E-02
|
||||
39 3 -4.940118E-01 -4.307143E-02 -1.464103E-01 -1.050280E-01 -7.625476E-02 6.477853E-02
|
||||
39 4 8.967718E-01 1.138003E-01 1.116798E-01 1.910842E-01 1.655394E-01 -5.121702E-02
|
||||
40 1 4.012653E-01 3.057826E-02 5.455659E-01 1.235586E-01 -1.238112E-01 6.349248E-02
|
||||
40 2 -8.194046E-04 -3.368150E-01 -6.142789E-01 2.034512E-01 3.075178E-01 -1.461547E-01
|
||||
40 3 2.066455E-01 2.004212E-01 -5.374576E-02 2.225878E-01 2.561197E-01 1.619756E-01
|
||||
40 4 4.741484E-01 1.602642E-01 5.137134E-01 2.176972E-01 -5.926745E-03 -2.173092E-02
|
||||
41 1 -7.946980E-01 -4.942827E-01 -5.447915E-01 -1.912366E-01 -1.683255E-01 -2.154803E-01
|
||||
41 2 1.223945E+00 7.271678E-01 7.742165E-01 1.161181E-01 9.021013E-02 2.591346E-01
|
||||
41 3 -6.114285E-01 -1.081211E-01 -5.044171E-01 -1.959176E-01 -1.243099E-01 -8.182985E-03
|
||||
41 4 -6.040667E-01 -4.628108E-01 -1.156609E-01 -1.356655E-01 -1.859799E-01 -1.577666E-02
|
||||
42 1 -2.158509E-01 -5.325126E-01 -4.515843E-01 -3.866704E-01 -4.162330E-01 -4.108670E-02
|
||||
42 2 -6.757261E-01 -4.613765E-02 -8.915881E-01 2.110811E-01 -5.724646E-02 -1.256511E-01
|
||||
42 3 8.281455E-01 2.923749E-01 6.409637E-01 3.355626E-01 1.417774E-02 2.255109E-02
|
||||
42 4 -4.816843E-01 -1.251024E-01 -7.976278E-01 -1.806942E-01 6.804089E-02 3.420348E-01
|
||||
43 1 3.148795E-01 4.842984E-01 -1.212845E-01 -1.396304E-01 1.576929E-01 5.180396E-02
|
||||
43 2 1.572111E-01 -5.768416E-01 -1.511784E-01 3.266388E-01 8.790621E-02 -1.028829E-01
|
||||
43 3 4.376864E-01 4.768444E-01 1.206219E-01 -1.718879E-02 2.159821E-01 -1.329976E-02
|
||||
43 4 3.287772E-01 -3.254589E-02 1.220524E-01 2.782618E-01 2.770364E-01 1.119853E-01
|
||||
44 1 5.701030E-01 2.661561E-01 2.350779E-01 2.473974E-01 1.920553E-01 -8.597329E-02
|
||||
44 2 -5.767263E+00 -1.361109E+00 -2.493103E+00 1.062399E+00 1.121190E+00 -7.464096E-02
|
||||
44 3 -2.791280E+00 -2.396505E-01 -1.198247E+00 8.020567E-01 4.148892E-01 2.533118E-01
|
||||
44 4 4.664713E+00 1.415554E+00 2.781100E+00 -1.310904E+00 -5.274516E-01 -6.913113E-01
|
||||
45 1 6.199650E-01 3.396960E-01 1.887766E-01 2.972053E-01 1.410676E-01 -8.629576E-02
|
||||
45 2 -5.726302E+00 -2.197206E+00 -1.667618E+00 9.736955E-01 1.208750E+00 -6.498466E-02
|
||||
45 3 4.686756E+00 2.719609E+00 1.615152E+00 -6.160644E-01 -1.223586E+00 -7.749438E-01
|
||||
45 4 -2.704298E+00 -1.154649E+00 -6.016097E-01 4.111997E-01 8.008334E-01 3.444956E-01
|
||||
46 1 -5.437203E+00 -2.644227E+01 -2.765793E+01 8.276053E-01 9.432501E-01 1.482137E-01
|
||||
46 2 -4.193540E-01 -2.423150E+01 -2.544716E+01 -1.315881E-01 -8.004705E-02 1.482137E-01
|
||||
46 3 -3.379018E+00 -2.551852E+01 -2.673417E+01 1.043734E+00 2.548021E-01 1.482137E-01
|
||||
46 4 6.954096E+00 1.762891E+01 1.247931E+01 -1.762986E+00 -5.844363E-01 6.278434E-01
|
||||
47 1 -3.459645E+00 -2.680162E+01 -2.553961E+01 2.300758E-01 1.008848E+00 1.532041E-01
|
||||
47 2 -4.441059E-01 -2.549031E+01 -2.422831E+01 -5.195025E-02 -1.737574E-01 1.532041E-01
|
||||
47 3 -5.461955E+00 -2.770109E+01 -2.643908E+01 9.072431E-01 8.495398E-01 1.532041E-01
|
||||
47 4 6.904522E+00 1.232019E+01 1.766614E+01 -5.323384E-01 -1.829156E+00 6.489831E-01
|
||||
48 1 1.094742E-01 1.057881E+01 3.957891E+00 -1.038625E+00 4.987185E-01 -7.917258E-01
|
||||
48 2 8.440135E-01 5.019593E+00 2.575092E+00 -9.132367E-01 -2.821124E-01 -7.648862E-01
|
||||
48 3 1.344229E+00 -1.260257E+01 -2.845529E+00 6.886793E-01 -8.322797E-01 -1.251042E-01
|
||||
48 4 3.283453E+00 -1.148053E+01 -1.218374E+00 5.266032E-01 -1.187474E+00 1.955865E+00
|
||||
1 1 3.404960E+00 -1.223741E+00 -1.146617E+01 -1.014816E+00 5.721404E-01 1.914876E+00
|
||||
1 2 1.400224E+00 -2.953124E+00 -1.263874E+01 -6.892873E-01 7.925952E-01 2.418160E-02
|
||||
1 3 -1.932021E-02 4.145572E+00 1.075800E+01 1.341622E-01 -1.077867E+00 -8.810057E-01
|
||||
1 4 8.558867E-01 2.410724E+00 5.031899E+00 -4.538675E-01 -8.363957E-01 -8.545765E-01
|
||||
2 1 -2.390976E-01 -6.281387E-01 -3.372011E-01 -4.253012E-01 -4.313375E-01 -3.639082E-02
|
||||
2 2 -7.078629E-01 -1.051329E+00 9.460542E-02 3.391396E-02 6.619598E-02 -1.109819E-01
|
||||
2 3 -4.586067E-01 -6.902739E-01 2.326885E-01 4.933190E-02 -3.895851E-01 2.906021E-01
|
||||
2 4 8.177110E-01 6.474442E-01 1.691349E-01 -5.346077E-02 3.495037E-01 1.078309E-01
|
||||
3 1 -3.738220E-01 5.244382E-02 5.043071E-02 -4.322174E-02 -5.119367E-02 -6.329539E-02
|
||||
3 2 -4.870176E-01 -1.365642E-01 -3.659017E-02 -8.585698E-02 -1.108073E-01 5.250735E-02
|
||||
3 3 -4.940118E-01 -4.307143E-02 -1.464103E-01 -1.050280E-01 -7.625476E-02 6.477853E-02
|
||||
3 4 8.967718E-01 1.138003E-01 1.116798E-01 1.910842E-01 1.655394E-01 -5.121702E-02
|
||||
4 1 4.012653E-01 3.057826E-02 5.455659E-01 1.235586E-01 -1.238112E-01 6.349248E-02
|
||||
4 2 -8.194046E-04 -3.368150E-01 -6.142789E-01 2.034512E-01 3.075178E-01 -1.461547E-01
|
||||
4 3 2.066455E-01 2.004212E-01 -5.374576E-02 2.225878E-01 2.561197E-01 1.619756E-01
|
||||
4 4 4.741484E-01 1.602642E-01 5.137134E-01 2.176972E-01 -5.926745E-03 -2.173092E-02
|
||||
5 1 -7.946980E-01 -4.942827E-01 -5.447915E-01 -1.912366E-01 -1.683255E-01 -2.154803E-01
|
||||
5 2 1.223945E+00 7.271678E-01 7.742165E-01 1.161181E-01 9.021013E-02 2.591346E-01
|
||||
5 3 -6.114285E-01 -1.081211E-01 -5.044171E-01 -1.959176E-01 -1.243099E-01 -8.182985E-03
|
||||
5 4 -6.040667E-01 -4.628108E-01 -1.156609E-01 -1.356655E-01 -1.859799E-01 -1.577666E-02
|
||||
6 1 -2.158509E-01 -5.325126E-01 -4.515843E-01 -3.866704E-01 -4.162330E-01 -4.108670E-02
|
||||
6 2 -6.757261E-01 -4.613765E-02 -8.915881E-01 2.110811E-01 -5.724646E-02 -1.256511E-01
|
||||
6 3 8.281455E-01 2.923749E-01 6.409637E-01 3.355626E-01 1.417774E-02 2.255109E-02
|
||||
6 4 -4.816843E-01 -1.251024E-01 -7.976278E-01 -1.806942E-01 6.804089E-02 3.420348E-01
|
||||
7 1 3.148795E-01 4.842984E-01 -1.212845E-01 -1.396304E-01 1.576929E-01 5.180396E-02
|
||||
7 2 1.572111E-01 -5.768416E-01 -1.511784E-01 3.266388E-01 8.790621E-02 -1.028829E-01
|
||||
7 3 4.376864E-01 4.768444E-01 1.206219E-01 -1.718879E-02 2.159821E-01 -1.329976E-02
|
||||
7 4 3.287772E-01 -3.254589E-02 1.220524E-01 2.782618E-01 2.770364E-01 1.119853E-01
|
||||
8 1 5.701030E-01 2.661561E-01 2.350779E-01 2.473974E-01 1.920553E-01 -8.597329E-02
|
||||
8 2 -5.767263E+00 -1.361109E+00 -2.493103E+00 1.062399E+00 1.121190E+00 -7.464096E-02
|
||||
8 3 -2.791280E+00 -2.396505E-01 -1.198247E+00 8.020567E-01 4.148892E-01 2.533118E-01
|
||||
8 4 4.664713E+00 1.415554E+00 2.781100E+00 -1.310904E+00 -5.274516E-01 -6.913113E-01
|
||||
9 1 6.199650E-01 3.396960E-01 1.887766E-01 2.972053E-01 1.410676E-01 -8.629576E-02
|
||||
9 2 -5.726302E+00 -2.197206E+00 -1.667618E+00 9.736955E-01 1.208750E+00 -6.498466E-02
|
||||
9 3 4.686756E+00 2.719609E+00 1.615152E+00 -6.160644E-01 -1.223586E+00 -7.749438E-01
|
||||
9 4 -2.704298E+00 -1.154649E+00 -6.016097E-01 4.111997E-01 8.008334E-01 3.444956E-01
|
||||
10 1 -5.437203E+00 -2.644227E+01 -2.765793E+01 8.276053E-01 9.432501E-01 1.482137E-01
|
||||
10 2 -4.193540E-01 -2.423150E+01 -2.544716E+01 -1.315881E-01 -8.004705E-02 1.482137E-01
|
||||
10 3 -3.379018E+00 -2.551852E+01 -2.673417E+01 1.043734E+00 2.548021E-01 1.482137E-01
|
||||
10 4 6.954096E+00 1.762891E+01 1.247931E+01 -1.762986E+00 -5.844363E-01 6.278434E-01
|
||||
11 1 -3.459645E+00 -2.680162E+01 -2.553961E+01 2.300758E-01 1.008848E+00 1.532041E-01
|
||||
11 2 -4.441059E-01 -2.549031E+01 -2.422831E+01 -5.195025E-02 -1.737574E-01 1.532041E-01
|
||||
11 3 -5.461955E+00 -2.770109E+01 -2.643908E+01 9.072431E-01 8.495398E-01 1.532041E-01
|
||||
11 4 6.904522E+00 1.232019E+01 1.766614E+01 -5.323384E-01 -1.829156E+00 6.489831E-01
|
||||
12 1 1.094742E-01 1.057881E+01 3.957891E+00 -1.038625E+00 4.987185E-01 -7.917258E-01
|
||||
12 2 8.440135E-01 5.019593E+00 2.575092E+00 -9.132367E-01 -2.821124E-01 -7.648862E-01
|
||||
12 3 1.344229E+00 -1.260257E+01 -2.845529E+00 6.886793E-01 -8.322797E-01 -1.251042E-01
|
||||
12 4 3.283453E+00 -1.148053E+01 -1.218374E+00 5.266032E-01 -1.187474E+00 1.955865E+00
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
1C
|
||||
1UUSER
|
||||
1UDATE 28.july.2016
|
||||
1UTIME 10:14:28
|
||||
1UDATE 22.january.2017
|
||||
1UTIME 14:44:35
|
||||
1UHOST
|
||||
1UPGM CalculiX
|
||||
1UVERSION Version 2.10
|
||||
1UCOMPILETIME Sa 5. Mär 12:23:33 CET 2016
|
||||
1UDIR
|
||||
1UDBN
|
||||
1UMAT 1MECHANICALMATERIAL
|
||||
@@ -55,29 +57,29 @@
|
||||
-1 45 1.52908E+02 1.27000E+01 1.27000E+01
|
||||
-3
|
||||
3C 12 1
|
||||
-1 37 6 0 1
|
||||
-1 1 6 0 1
|
||||
-2 5 6 12 11 26 43 33 20 37 34
|
||||
-1 38 6 0 1
|
||||
-1 2 6 0 1
|
||||
-2 9 12 11 2 44 34 39 15 45 38
|
||||
-1 39 6 0 1
|
||||
-1 3 6 0 1
|
||||
-2 3 4 1 12 27 36 22 24 41 35
|
||||
-1 40 6 0 1
|
||||
-1 4 6 0 1
|
||||
-2 2 12 11 1 45 34 38 25 35 21
|
||||
-1 41 6 0 1
|
||||
-1 5 6 0 1
|
||||
-2 2 12 1 4 45 35 25 16 41 36
|
||||
-1 42 6 0 1
|
||||
-1 6 6 0 1
|
||||
-2 9 12 2 10 44 45 15 31 42 32
|
||||
-1 43 6 0 1
|
||||
-1 7 6 0 1
|
||||
-2 2 12 4 10 45 41 16 32 42 18
|
||||
-1 44 6 0 1
|
||||
-1 8 6 0 1
|
||||
-2 9 12 10 6 44 42 31 14 43 30
|
||||
-1 45 6 0 1
|
||||
-1 9 6 0 1
|
||||
-2 9 12 6 11 44 43 14 39 34 37
|
||||
-1 46 6 0 1
|
||||
-1 10 6 0 1
|
||||
-2 6 7 5 12 29 19 26 43 23 33
|
||||
-1 47 6 0 1
|
||||
-1 11 6 0 1
|
||||
-2 8 7 6 12 28 29 13 40 23 43
|
||||
-1 48 6 0 1
|
||||
-1 12 6 0 1
|
||||
-2 12 10 6 8 42 30 43 40 17 13
|
||||
-3
|
||||
1PSTEP 1 1 1
|
||||
|
||||
@@ -45,18 +45,18 @@
|
||||
44, 100.482, 12.7, 12.7
|
||||
45, 152.908, 12.7, 12.7
|
||||
*Element, TYPE=C3D10, ELSET=Eall
|
||||
37, 5, 6, 12, 11, 26, 43, 33, 20, 37, 34
|
||||
38, 9, 12, 11, 2, 44, 34, 39, 15, 45, 38
|
||||
39, 3, 4, 1, 12, 27, 36, 22, 24, 41, 35
|
||||
40, 2, 12, 11, 1, 45, 34, 38, 25, 35, 21
|
||||
41, 2, 12, 1, 4, 45, 35, 25, 16, 41, 36
|
||||
42, 9, 12, 2, 10, 44, 45, 15, 31, 42, 32
|
||||
43, 2, 12, 4, 10, 45, 41, 16, 32, 42, 18
|
||||
44, 9, 12, 10, 6, 44, 42, 31, 14, 43, 30
|
||||
45, 9, 12, 6, 11, 44, 43, 14, 39, 34, 37
|
||||
46, 6, 7, 5, 12, 29, 19, 26, 43, 23, 33
|
||||
47, 8, 7, 6, 12, 28, 29, 13, 40, 23, 43
|
||||
48, 12, 10, 6, 8, 42, 30, 43, 40, 17, 13
|
||||
1, 5, 6, 12, 11, 26, 43, 33, 20, 37, 34
|
||||
2, 9, 12, 11, 2, 44, 34, 39, 15, 45, 38
|
||||
3, 3, 4, 1, 12, 27, 36, 22, 24, 41, 35
|
||||
4, 2, 12, 11, 1, 45, 34, 38, 25, 35, 21
|
||||
5, 2, 12, 1, 4, 45, 35, 25, 16, 41, 36
|
||||
6, 9, 12, 2, 10, 44, 45, 15, 31, 42, 32
|
||||
7, 2, 12, 4, 10, 45, 41, 16, 32, 42, 18
|
||||
8, 9, 12, 10, 6, 44, 42, 31, 14, 43, 30
|
||||
9, 9, 12, 6, 11, 44, 43, 14, 39, 34, 37
|
||||
10, 6, 7, 5, 12, 29, 19, 26, 43, 23, 33
|
||||
11, 8, 7, 6, 12, 28, 29, 13, 40, 23, 43
|
||||
12, 12, 10, 6, 8, 42, 30, 43, 40, 17, 13
|
||||
|
||||
|
||||
|
||||
@@ -157,25 +157,25 @@ FemConstraintTemperature,11,11,310.93
|
||||
** written by write_constraints_heatflux function
|
||||
*FILM
|
||||
** Heat flux on face Face3
|
||||
39,F2,255.3722,0.005678
|
||||
43,F3,255.3722,0.005678
|
||||
47,F2,255.3722,0.005678
|
||||
48,F2,255.3722,0.005678
|
||||
3,F2,255.3722,0.005678
|
||||
7,F3,255.3722,0.005678
|
||||
11,F2,255.3722,0.005678
|
||||
12,F2,255.3722,0.005678
|
||||
** Heat flux on face Face4
|
||||
37,F2,255.3722,0.005678
|
||||
38,F4,255.3722,0.005678
|
||||
40,F4,255.3722,0.005678
|
||||
45,F4,255.3722,0.005678
|
||||
1,F2,255.3722,0.005678
|
||||
2,F4,255.3722,0.005678
|
||||
4,F4,255.3722,0.005678
|
||||
9,F4,255.3722,0.005678
|
||||
** Heat flux on face Face5
|
||||
37,F4,255.3722,0.005678
|
||||
39,F4,255.3722,0.005678
|
||||
40,F3,255.3722,0.005678
|
||||
46,F3,255.3722,0.005678
|
||||
1,F4,255.3722,0.005678
|
||||
3,F4,255.3722,0.005678
|
||||
4,F3,255.3722,0.005678
|
||||
10,F3,255.3722,0.005678
|
||||
** Heat flux on face Face6
|
||||
42,F4,255.3722,0.005678
|
||||
43,F4,255.3722,0.005678
|
||||
44,F4,255.3722,0.005678
|
||||
48,F3,255.3722,0.005678
|
||||
6,F4,255.3722,0.005678
|
||||
7,F4,255.3722,0.005678
|
||||
8,F4,255.3722,0.005678
|
||||
12,F3,255.3722,0.005678
|
||||
|
||||
***********************************************************
|
||||
** Outputs --> frd file
|
||||
@@ -197,9 +197,9 @@ S
|
||||
***********************************************************
|
||||
** CalculiX Input file
|
||||
** written by write_footer function
|
||||
** written by --> FreeCAD 0.17.8088 (Git)
|
||||
** written on --> Thu Jul 28 10:14:28 2016
|
||||
** file name --> FEM_spine.fcstd
|
||||
** written by --> FreeCAD 0.17.9749 (Git)
|
||||
** written on --> Sun Jan 22 14:33:57 2017
|
||||
** file name -->
|
||||
** analysis name --> Analysis
|
||||
**
|
||||
**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
U1: (-0.000942455, 0.0030585454755555556, 0.00729818)
|
||||
U2: (-0.00163382, 0.0006165889555555556, 0.00222318)
|
||||
U3: (-0.00185329, 0.0005439136222222222, 0.00220675)
|
||||
Uabs: (0.0, 0.003644782698151031, 0.007325712241135124)
|
||||
Sabs: (0.30712297252407333, 7.747458526266711, 35.86180372766652)
|
||||
U1: (-0.000942455, 0.0030585454755555556, 0.00729818)
|
||||
U2: (-0.00163382, 0.0006165889555555556, 0.00222318)
|
||||
U3: (-0.00185329, 0.0005439136222222222, 0.00220675)
|
||||
Uabs: (0.0, 0.003644782698151031, 0.007325712241135124)
|
||||
Sabs: (0.30712297252407333, 7.747458526266711, 35.86180372766652)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
37,5,6,12,11,26,43,33,20,37,34
|
||||
38,9,12,11,2,44,34,39,15,45,38
|
||||
39,3,4,1,12,27,36,22,24,41,35
|
||||
40,2,12,11,1,45,34,38,25,35,21
|
||||
41,2,12,1,4,45,35,25,16,41,36
|
||||
42,9,12,2,10,44,45,15,31,42,32
|
||||
43,2,12,4,10,45,41,16,32,42,18
|
||||
44,9,12,10,6,44,42,31,14,43,30
|
||||
45,9,12,6,11,44,43,14,39,34,37
|
||||
46,6,7,5,12,29,19,26,43,23,33
|
||||
47,8,7,6,12,28,29,13,40,23,43
|
||||
48,12,10,6,8,42,30,43,40,17,13
|
||||
1,5,6,12,11,26,43,33,20,37,34
|
||||
2,9,12,11,2,44,34,39,15,45,38
|
||||
3,3,4,1,12,27,36,22,24,41,35
|
||||
4,2,12,11,1,45,34,38,25,35,21
|
||||
5,2,12,1,4,45,35,25,16,41,36
|
||||
6,9,12,2,10,44,45,15,31,42,32
|
||||
7,2,12,4,10,45,41,16,32,42,18
|
||||
8,9,12,10,6,44,42,31,14,43,30
|
||||
9,9,12,6,11,44,43,14,39,34,37
|
||||
10,6,7,5,12,29,19,26,43,23,33
|
||||
11,8,7,6,12,28,29,13,40,23,43
|
||||
12,12,10,6,8,42,30,43,40,17,13
|
||||
|
||||
|
+2
-2
@@ -281,7 +281,7 @@ def process_emp(doc,filename,placement,board_thickness):
|
||||
comps=dict(comps)
|
||||
grp=doc.addObject("App::DocumentObjectGroup", "EMP Models")
|
||||
for place_item in placement:
|
||||
if comps.has_key(place_item[1]):
|
||||
if place_item[1] in comps:
|
||||
doc_comp=doc.addObject("Part::Feature",place_item[0])
|
||||
FreeCAD.Console.PrintMessage("Adding EMP model "+str(place_item[0])+"\n")
|
||||
doc_comp.Shape=comps[place_item[1]][0]
|
||||
@@ -362,7 +362,7 @@ def place_steps(doc,placement,board_thickness):
|
||||
step_dict=dict(step_dict)
|
||||
grp=doc.addObject("App::DocumentObjectGroup", "Step Models")
|
||||
for place_item in placement:
|
||||
if step_dict.has_key(place_item[2]):
|
||||
if place_item[2] in step_dict:
|
||||
step_model=doc.addObject("Part::Feature",place_item[0]+"_s")
|
||||
FreeCAD.Console.PrintMessage("Adding STEP model "+str(place_item[0])+"\n")
|
||||
#if prev_step!=place_item[2]:
|
||||
|
||||
@@ -46,7 +46,7 @@ class Type(object):
|
||||
if type(self._typedef) == str:
|
||||
if self._scope == None:
|
||||
raise AssertionError('No scope defined for this type')
|
||||
elif vars(self._scope).has_key(self._typedef):
|
||||
elif self._typedef in vars(self._scope):
|
||||
return vars(self._scope)[self._typedef]
|
||||
else:
|
||||
raise TypeError("Type '%s' is not defined in given scope"%self._typedef)
|
||||
|
||||
@@ -70,7 +70,7 @@ class ENUMERATION(object):
|
||||
"""
|
||||
def __init__(self,*kargs,**args):
|
||||
# first defining the scope
|
||||
if args.has_key('scope'):
|
||||
if 'scope' in args:
|
||||
self._scope = args['scope']
|
||||
else:
|
||||
self._scope = None
|
||||
@@ -96,7 +96,7 @@ class ENUMERATION(object):
|
||||
# has the same name as an enum id, it will replace it in the current scope.
|
||||
#
|
||||
for enum_id_name in self._enum_id_names:
|
||||
if not vars(self._scope).has_key(enum_id_name):
|
||||
if enum_id_name not in vars(self._scope):
|
||||
vars(self._scope)[enum_id_name] = self.__getattribute__(enum_id_name)
|
||||
|
||||
def get_enum_ids(self):
|
||||
@@ -109,7 +109,7 @@ class SELECT(object):
|
||||
"""
|
||||
def __init__(self,*kargs,**args):
|
||||
# first defining the scope
|
||||
if args.has_key('scope'):
|
||||
if 'scope' in args:
|
||||
self._scope = args['scope']
|
||||
else:
|
||||
self._scope = None
|
||||
|
||||
@@ -107,11 +107,11 @@ class SimpleParser:
|
||||
|
||||
for i in self._p21loader._instances_definition.keys():
|
||||
#print i
|
||||
if not self.instanceMape.has_key(i):
|
||||
if i not in self.instanceMape:
|
||||
self._create_entity_instance(i)
|
||||
|
||||
def _create_entity_instance(self, instance_id):
|
||||
if self._p21loader._instances_definition.has_key(instance_id):
|
||||
if instance_id in self._p21loader._instances_definition:
|
||||
instance_definition = self._p21loader._instances_definition[instance_id]
|
||||
#print "Instance definition to process",instance_definition
|
||||
# first find class name
|
||||
@@ -144,11 +144,11 @@ class SimpleParser:
|
||||
elif i[0] == '#':
|
||||
key = int(i[1:])
|
||||
#print 'Item: ',int(i[1:])
|
||||
if self.instanceMape.has_key(key):
|
||||
if key in self.instanceMape:
|
||||
attrList[n] = self.instanceMape[key]
|
||||
else:
|
||||
self._create_entity_instance(key)
|
||||
if not self.instanceMape.has_key(key):
|
||||
if key not in self.instanceMape:
|
||||
raise NameError("Needed instance not instanciated: ",key)
|
||||
else:
|
||||
attrList[n] = self.instanceMape[key]
|
||||
|
||||
@@ -5,7 +5,7 @@ Description = None
|
||||
Density = 0 kg/m^3
|
||||
DynamicViscosity = 0 kg/m/s
|
||||
KinematicViscosity = 0 m^2/s
|
||||
VolumetricExpansionCoefficient = 0 m/m/K
|
||||
VolumetricThermalExpansionCoefficient = 0 m/m/K
|
||||
|
||||
SpecificHeat = 0 J/kg/K
|
||||
ThermalConductivity = 0 W/m/K
|
||||
|
||||
@@ -7,7 +7,7 @@ Density = 998 kg/m^3
|
||||
DynamicViscosity = 1.003e-3 kg/m/s
|
||||
KinematicViscosity = 1.005 m^2/s
|
||||
|
||||
VolumetricExpansionCoefficient = 2.07e-4 m/m/K
|
||||
VolumetricThermalExpansionCoefficient = 2.07e-4 m/m/K
|
||||
|
||||
SpecificHeat = 4.182 J/kg/K
|
||||
ThermalConductivity = 0.591 W/m/K
|
||||
|
||||
@@ -460,6 +460,7 @@ PyMODINIT_FUNC initPart()
|
||||
Part::Geometry ::init();
|
||||
Part::GeomPoint ::init();
|
||||
Part::GeomCurve ::init();
|
||||
Part::GeomBoundedCurve ::init();
|
||||
Part::GeomBezierCurve ::init();
|
||||
Part::GeomBSplineCurve ::init();
|
||||
Part::GeomConic ::init();
|
||||
|
||||
@@ -71,7 +71,21 @@ int BSplineCurvePy::PyInit(PyObject* args, PyObject* /*kwd*/)
|
||||
return 0;
|
||||
}
|
||||
|
||||
PyObject* obj;
|
||||
// poles, [ periodic, degree, interpolate ]
|
||||
|
||||
obj = buildFromPoles(args);
|
||||
|
||||
if (obj) {
|
||||
Py_DECREF(obj);
|
||||
return 0;
|
||||
}
|
||||
else if (PyErr_ExceptionMatches(PartExceptionOCCError)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
PyErr_SetString(PyExc_TypeError, "B-Spline constructor accepts:\n"
|
||||
"-- poles, [ periodic, degree, interpolate ]\n"
|
||||
"-- empty parameter list\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#ifndef _PreComp_
|
||||
#endif
|
||||
|
||||
#include <Mod/Part/App/BodyBasePy.h>
|
||||
#include <App/Application.h>
|
||||
#include <App/Document.h>
|
||||
#include <Base/Placement.h>
|
||||
@@ -98,4 +99,13 @@ void BodyBase::onChanged (const App::Property* prop) {
|
||||
Part::Feature::onChanged ( prop );
|
||||
}
|
||||
|
||||
PyObject* BodyBase::getPyObject()
|
||||
{
|
||||
if (PythonObject.is(Py::_None())){
|
||||
// ref counter is set to 1
|
||||
PythonObject = Py::Object(new BodyBasePy(this),true);
|
||||
}
|
||||
return Py::new_reference_to(PythonObject);
|
||||
}
|
||||
|
||||
} /* Part */
|
||||
|
||||
@@ -78,6 +78,7 @@ public:
|
||||
* TODO introduce a findBodiesOf() if needed (2015-08-04, Fat-Zer)
|
||||
*/
|
||||
static BodyBase* findBodyOf(const App::DocumentObject* f);
|
||||
virtual PyObject* getPyObject();
|
||||
|
||||
protected:
|
||||
/// If BaseFeature is getting changed and Tip points to it resets the Tip
|
||||
|
||||
+312
-52
@@ -385,10 +385,9 @@ bool GeomCurve::closestParameter(const Base::Vector3d& point, double &u) const
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
std::cout << e->GetMessageString() << std::endl;
|
||||
return false;
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -409,22 +408,48 @@ bool GeomCurve::closestParameterToBasicCurve(const Base::Vector3d& point, double
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
std::cout << e->GetMessageString() << std::endl;
|
||||
return false;
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
else {
|
||||
return this->closestParameter(point, u);
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------
|
||||
|
||||
TYPESYSTEM_SOURCE_ABSTRACT(Part::GeomBoundedCurve, Part::GeomCurve)
|
||||
|
||||
GeomBoundedCurve::GeomBoundedCurve()
|
||||
{
|
||||
}
|
||||
|
||||
GeomBoundedCurve::~GeomBoundedCurve()
|
||||
{
|
||||
}
|
||||
|
||||
Base::Vector3d GeomBoundedCurve::getStartPoint() const
|
||||
{
|
||||
Handle_Geom_BoundedCurve curve = Handle_Geom_BoundedCurve::DownCast(handle());
|
||||
gp_Pnt pnt = curve->StartPoint();
|
||||
|
||||
return Base::Vector3d(pnt.X(), pnt.Y(), pnt.Z());
|
||||
}
|
||||
|
||||
Base::Vector3d GeomBoundedCurve::getEndPoint() const
|
||||
{
|
||||
Handle_Geom_BoundedCurve curve = Handle_Geom_BoundedCurve::DownCast(handle());
|
||||
gp_Pnt pnt = curve->EndPoint();
|
||||
|
||||
return Base::Vector3d(pnt.X(), pnt.Y(), pnt.Z());
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------
|
||||
|
||||
TYPESYSTEM_SOURCE(Part::GeomBezierCurve,Part::GeomCurve)
|
||||
TYPESYSTEM_SOURCE(Part::GeomBezierCurve,Part::GeomBoundedCurve)
|
||||
|
||||
GeomBezierCurve::GeomBezierCurve()
|
||||
{
|
||||
@@ -473,7 +498,7 @@ PyObject *GeomBezierCurve::getPyObject(void)
|
||||
|
||||
// -------------------------------------------------
|
||||
|
||||
TYPESYSTEM_SOURCE(Part::GeomBSplineCurve,Part::GeomCurve)
|
||||
TYPESYSTEM_SOURCE(Part::GeomBSplineCurve,Part::GeomBoundedCurve)
|
||||
|
||||
GeomBSplineCurve::GeomBSplineCurve()
|
||||
{
|
||||
@@ -528,13 +553,34 @@ void GeomBSplineCurve::setPole(int index, const Base::Vector3d& pole, double wei
|
||||
try {
|
||||
gp_Pnt pnt(pole.x,pole.y,pole.z);
|
||||
if (weight < 0.0)
|
||||
myCurve->SetPole(index+1,pnt);
|
||||
myCurve->SetPole(index,pnt);
|
||||
else
|
||||
myCurve->SetPole(index+1,pnt,weight);
|
||||
myCurve->SetPole(index,pnt,weight);
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
std::cout << e->GetMessageString() << std::endl;
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setPoles(const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights)
|
||||
{
|
||||
if (poles.size() != weights.size())
|
||||
throw Base::ValueError("knots and multiplicities mismatch");
|
||||
|
||||
Standard_Integer index=1;
|
||||
|
||||
for (std::size_t it = 0; it < poles.size(); it++, index++) {
|
||||
setPole(index, poles[it], weights[it]);
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setPoles(const std::vector<Base::Vector3d>& poles)
|
||||
{
|
||||
Standard_Integer index=1;
|
||||
|
||||
for (std::vector<Base::Vector3d>::const_iterator it = poles.begin(); it != poles.end(); ++it, index++){
|
||||
setPole(index, *it);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -552,6 +598,108 @@ std::vector<Base::Vector3d> GeomBSplineCurve::getPoles() const
|
||||
return poles;
|
||||
}
|
||||
|
||||
std::vector<double> GeomBSplineCurve::getWeights() const
|
||||
{
|
||||
std::vector<double> weights;
|
||||
weights.reserve(myCurve->NbPoles());
|
||||
TColStd_Array1OfReal w(1,myCurve->NbPoles());
|
||||
myCurve->Weights(w);
|
||||
|
||||
for (Standard_Integer i=w.Lower(); i<=w.Upper(); i++) {
|
||||
const Standard_Real& real = w(i);
|
||||
weights.push_back(real);
|
||||
}
|
||||
return weights;
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setWeights(const std::vector<double>& weights)
|
||||
{
|
||||
try {
|
||||
Standard_Integer index=1;
|
||||
|
||||
for (std::vector<double>::const_iterator it = weights.begin(); it != weights.end(); ++it, index++){
|
||||
myCurve->SetWeight(index, *it);
|
||||
}
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setKnot(int index, const double val, int mult)
|
||||
{
|
||||
try {
|
||||
if (mult < 0)
|
||||
myCurve->SetKnot(index, val);
|
||||
else
|
||||
myCurve->SetKnot(index, val, mult);
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setKnots(const std::vector<double>& knots)
|
||||
{
|
||||
Standard_Integer index=1;
|
||||
|
||||
for (std::vector<double>::const_iterator it = knots.begin(); it != knots.end(); ++it, index++) {
|
||||
setKnot(index, *it);
|
||||
}
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::setKnots(const std::vector<double>& knots, const std::vector<int>& multiplicities)
|
||||
{
|
||||
if (knots.size() != multiplicities.size())
|
||||
throw Base::ValueError("knots and multiplicities mismatch");
|
||||
|
||||
Standard_Integer index=1;
|
||||
|
||||
for (std::size_t it = 0; it < knots.size(); it++, index++) {
|
||||
setKnot(index, knots[it], multiplicities[it]);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<double> GeomBSplineCurve::getKnots() const
|
||||
{
|
||||
std::vector<double> knots;
|
||||
knots.reserve(myCurve->NbKnots());
|
||||
TColStd_Array1OfReal k(1,myCurve->NbKnots());
|
||||
myCurve->Knots(k);
|
||||
|
||||
for (Standard_Integer i=k.Lower(); i<=k.Upper(); i++) {
|
||||
const Standard_Real& real = k(i);
|
||||
knots.push_back(real);
|
||||
}
|
||||
return knots;
|
||||
}
|
||||
|
||||
std::vector<int> GeomBSplineCurve::getMultiplicities() const
|
||||
{
|
||||
std::vector<int> mults;
|
||||
mults.reserve(myCurve->NbKnots());
|
||||
TColStd_Array1OfInteger m(1,myCurve->NbKnots());
|
||||
myCurve->Multiplicities(m);
|
||||
|
||||
for (Standard_Integer i=m.Lower(); i<=m.Upper(); i++) {
|
||||
const Standard_Integer& nm = m(i);
|
||||
mults.push_back(nm);
|
||||
}
|
||||
return mults;
|
||||
}
|
||||
|
||||
int GeomBSplineCurve::getDegree() const
|
||||
{
|
||||
return myCurve->Degree();
|
||||
}
|
||||
|
||||
bool GeomBSplineCurve::isPeriodic() const
|
||||
{
|
||||
return myCurve->IsPeriodic()==Standard_True;
|
||||
}
|
||||
|
||||
bool GeomBSplineCurve::join(const Handle_Geom_BSplineCurve& spline)
|
||||
{
|
||||
GeomConvert_CompCurveToBSplineCurve ccbc(this->myCurve);
|
||||
@@ -651,9 +799,121 @@ void GeomBSplineCurve::makeC1Continuous(double tol, double ang_tol)
|
||||
}
|
||||
|
||||
// Persistence implementer
|
||||
unsigned int GeomBSplineCurve::getMemSize (void) const {assert(0); return 0;/* not implemented yet */}
|
||||
void GeomBSplineCurve::Save (Base::Writer &/*writer*/) const {assert(0); /* not implemented yet */}
|
||||
void GeomBSplineCurve::Restore (Base::XMLReader &/*reader*/) {assert(0); /* not implemented yet */}
|
||||
unsigned int GeomBSplineCurve::getMemSize (void) const
|
||||
{
|
||||
return sizeof(Geom_BSplineCurve);
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::Save(Base::Writer& writer) const
|
||||
{
|
||||
// save the attributes of the father class
|
||||
GeomCurve::Save(writer);
|
||||
|
||||
std::vector<Base::Vector3d> poles = this->getPoles();
|
||||
std::vector<double> weights = this->getWeights();
|
||||
std::vector<double> knots = this->getKnots();
|
||||
std::vector<int> mults = this->getMultiplicities();
|
||||
int degree = this->getDegree();
|
||||
bool isperiodic = this->isPeriodic();
|
||||
|
||||
writer.Stream()
|
||||
<< writer.ind()
|
||||
<< "<BSplineCurve "
|
||||
<< "PolesCount=\"" << poles.size() <<
|
||||
"\" KnotsCount=\"" << knots.size() <<
|
||||
"\" Degree=\"" << degree <<
|
||||
"\" IsPeriodic=\"" << (int) isperiodic <<
|
||||
"\">" << endl;
|
||||
|
||||
writer.incInd();
|
||||
|
||||
std::vector<Base::Vector3d>::const_iterator itp;
|
||||
std::vector<double>::const_iterator itw;
|
||||
|
||||
for (itp = poles.begin(), itw = weights.begin(); itp != poles.end() && itw != weights.end(); ++itp, ++itw) {
|
||||
writer.Stream()
|
||||
<< writer.ind()
|
||||
<< "<Pole "
|
||||
<< "X=\"" << (*itp).x <<
|
||||
"\" Y=\"" << (*itp).y <<
|
||||
"\" Z=\"" << (*itp).z <<
|
||||
"\" Weight=\"" << (*itw) <<
|
||||
"\"/>" << endl;
|
||||
}
|
||||
|
||||
std::vector<double>::const_iterator itk;
|
||||
std::vector<int>::const_iterator itm;
|
||||
|
||||
for (itk = knots.begin(), itm = mults.begin(); itk != knots.end() && itm != mults.end(); ++itk, ++itm) {
|
||||
writer.Stream()
|
||||
<< writer.ind()
|
||||
<< "<Knot "
|
||||
<< "Value=\"" << (*itk)
|
||||
<< "\" Mult=\"" << (*itm) <<
|
||||
"\"/>" << endl;
|
||||
}
|
||||
|
||||
writer.decInd();
|
||||
writer.Stream() << writer.ind() << "</BSplineCurve>" << endl ;
|
||||
}
|
||||
|
||||
void GeomBSplineCurve::Restore(Base::XMLReader& reader)
|
||||
{
|
||||
// read the attributes of the father class
|
||||
GeomCurve::Restore(reader);
|
||||
|
||||
reader.readElement("BSplineCurve");
|
||||
// get the value of my attribute
|
||||
int polescount = reader.getAttributeAsInteger("PolesCount");
|
||||
int knotscount = reader.getAttributeAsInteger("KnotsCount");
|
||||
int degree = reader.getAttributeAsInteger("Degree");
|
||||
bool isperiodic = (bool) reader.getAttributeAsInteger("IsPeriodic");
|
||||
|
||||
// Handle_Geom_BSplineCurve spline = new
|
||||
// Geom_BSplineCurve(occpoles,occweights,occknots,occmults,degree,
|
||||
// PyObject_IsTrue(periodic) ? Standard_True : Standard_False,
|
||||
// PyObject_IsTrue(CheckRational) ? Standard_True : Standard_False);
|
||||
|
||||
TColgp_Array1OfPnt p(1,polescount);
|
||||
TColStd_Array1OfReal w(1,polescount);
|
||||
TColStd_Array1OfReal k(1,knotscount);
|
||||
TColStd_Array1OfInteger m(1,knotscount);
|
||||
|
||||
for (int i = 1; i <= polescount; i++) {
|
||||
reader.readElement("Pole");
|
||||
double X = reader.getAttributeAsFloat("X");
|
||||
double Y = reader.getAttributeAsFloat("Y");
|
||||
double Z = reader.getAttributeAsFloat("Z");
|
||||
double W = reader.getAttributeAsFloat("Weight");
|
||||
p.SetValue(i, gp_Pnt(X,Y,Z));
|
||||
w.SetValue(i, W);
|
||||
}
|
||||
|
||||
for (int i = 1; i <= knotscount; i++) {
|
||||
reader.readElement("Knot");
|
||||
double val = reader.getAttributeAsFloat("Value");
|
||||
Standard_Integer mult = reader.getAttributeAsInteger("Mult");
|
||||
k.SetValue(i, val);
|
||||
m.SetValue(i, mult);
|
||||
}
|
||||
|
||||
reader.readEndElement("BSplineCurve");
|
||||
// Geom_BSplineCurve(occpoles,occweights,occknots,occmults,degree,periodic,CheckRational
|
||||
|
||||
try {
|
||||
Handle_Geom_BSplineCurve spline = new Geom_BSplineCurve(p, w, k, m, degree, isperiodic ? Standard_True : Standard_False, Standard_False);
|
||||
|
||||
if (!spline.IsNull())
|
||||
this->myCurve = spline;
|
||||
else
|
||||
throw Base::RuntimeError("BSpline restore failed");
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PyObject *GeomBSplineCurve::getPyObject(void)
|
||||
{
|
||||
@@ -690,7 +950,7 @@ void GeomConic::setLocation(const Base::Vector3d& Center)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -712,7 +972,7 @@ void GeomConic::setCenter(const Base::Vector3d& Center)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -761,7 +1021,7 @@ void GeomConic::setAngleXU(double angle)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -853,7 +1113,7 @@ void GeomArcOfConic::setCenter(const Base::Vector3d& Center)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -868,7 +1128,7 @@ void GeomArcOfConic::setLocation(const Base::Vector3d& Center)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -930,7 +1190,7 @@ void GeomArcOfConic::setAngleXU(double angle)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -976,7 +1236,7 @@ void GeomArcOfConic::setXAxisDir(const Base::Vector3d& newdir)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1028,7 +1288,7 @@ void GeomCircle::setRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1088,7 +1348,7 @@ void GeomCircle::Restore(Base::XMLReader& reader)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1154,7 +1414,7 @@ void GeomArcOfCircle::setRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1227,7 +1487,7 @@ void GeomArcOfCircle::setRange(double u, double v, bool emulateCCWXY)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1301,7 +1561,7 @@ void GeomArcOfCircle::Restore(Base::XMLReader &reader)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1356,7 +1616,7 @@ void GeomEllipse::setMajorRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1375,7 +1635,7 @@ void GeomEllipse::setMinorRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1413,7 +1673,7 @@ void GeomEllipse::setMajorAxisDir(Base::Vector3d newdir)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1495,7 +1755,7 @@ void GeomEllipse::Restore(Base::XMLReader& reader)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1564,7 +1824,7 @@ void GeomArcOfEllipse::setMajorRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1583,7 +1843,7 @@ void GeomArcOfEllipse::setMinorRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1625,7 +1885,7 @@ void GeomArcOfEllipse::setMajorAxisDir(Base::Vector3d newdir)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1672,7 +1932,7 @@ void GeomArcOfEllipse::setRange(double u, double v, bool emulateCCWXY)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1765,7 +2025,7 @@ void GeomArcOfEllipse::Restore(Base::XMLReader &reader)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1820,7 +2080,7 @@ void GeomHyperbola::setMajorRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1839,7 +2099,7 @@ void GeomHyperbola::setMinorRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1915,7 +2175,7 @@ void GeomHyperbola::Restore(Base::XMLReader& reader)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1979,7 +2239,7 @@ void GeomArcOfHyperbola::setMajorRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1998,7 +2258,7 @@ void GeomArcOfHyperbola::setMinorRadius(double Radius)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2041,7 +2301,7 @@ void GeomArcOfHyperbola::setMajorAxisDir(Base::Vector3d newdir)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2058,7 +2318,7 @@ void GeomArcOfHyperbola::getRange(double& u, double& v, bool emulateCCWXY) const
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
|
||||
u = myCurve->FirstParameter();
|
||||
@@ -2080,7 +2340,7 @@ void GeomArcOfHyperbola::setRange(double u, double v, bool emulateCCWXY)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2172,7 +2432,7 @@ void GeomArcOfHyperbola::Restore(Base::XMLReader &reader)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2226,7 +2486,7 @@ void GeomParabola::setFocal(double length)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2300,7 +2560,7 @@ void GeomParabola::Restore(Base::XMLReader& reader)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2364,7 +2624,7 @@ void GeomArcOfParabola::setFocal(double length)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2389,7 +2649,7 @@ void GeomArcOfParabola::getRange(double& u, double& v, bool emulateCCWXY) const
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
|
||||
u = myCurve->FirstParameter();
|
||||
@@ -2410,7 +2670,7 @@ void GeomArcOfParabola::setRange(double u, double v, bool emulateCCWXY)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2500,7 +2760,7 @@ void GeomArcOfParabola::Restore(Base::XMLReader &reader)
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2690,7 +2950,7 @@ void GeomLineSegment::setPoints(const Base::Vector3d& Start, const Base::Vector3
|
||||
}
|
||||
catch (Standard_Failure) {
|
||||
Handle_Standard_Failure e = Standard_Failure::Caught();
|
||||
throw Base::Exception(e->GetMessageString());
|
||||
throw Base::RuntimeError(e->GetMessageString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +130,19 @@ public:
|
||||
bool closestParameterToBasicCurve(const Base::Vector3d& point, double &u) const;
|
||||
};
|
||||
|
||||
class PartExport GeomBezierCurve : public GeomCurve
|
||||
class PartExport GeomBoundedCurve : public GeomCurve
|
||||
{
|
||||
TYPESYSTEM_HEADER();
|
||||
public:
|
||||
GeomBoundedCurve();
|
||||
virtual ~GeomBoundedCurve();
|
||||
|
||||
// Geometry helper
|
||||
virtual Base::Vector3d getStartPoint() const;
|
||||
virtual Base::Vector3d getEndPoint() const;
|
||||
};
|
||||
|
||||
class PartExport GeomBezierCurve : public GeomBoundedCurve
|
||||
{
|
||||
TYPESYSTEM_HEADER();
|
||||
public:
|
||||
@@ -153,7 +165,7 @@ private:
|
||||
Handle_Geom_BezierCurve myCurve;
|
||||
};
|
||||
|
||||
class PartExport GeomBSplineCurve : public GeomCurve
|
||||
class PartExport GeomBSplineCurve : public GeomBoundedCurve
|
||||
{
|
||||
TYPESYSTEM_HEADER();
|
||||
public:
|
||||
@@ -183,7 +195,18 @@ public:
|
||||
|
||||
int countPoles() const;
|
||||
void setPole(int index, const Base::Vector3d&, double weight=-1);
|
||||
void setPoles(const std::vector<Base::Vector3d>& poles, const std::vector<double>& weights);
|
||||
void setPoles(const std::vector<Base::Vector3d>& poles);
|
||||
void setWeights(const std::vector<double>& weights);
|
||||
void setKnot(int index, const double val, int mult=-1);
|
||||
void setKnots(const std::vector<double>& knots);
|
||||
void setKnots(const std::vector<double>& knots, const std::vector<int>& multiplicities);
|
||||
std::vector<Base::Vector3d> getPoles() const;
|
||||
std::vector<double> getWeights() const;
|
||||
std::vector<double> getKnots() const;
|
||||
std::vector<int> getMultiplicities() const;
|
||||
int getDegree() const;
|
||||
bool isPeriodic() const;
|
||||
bool join(const Handle_Geom_BSplineCurve&);
|
||||
void makeC1Continuous(double, double);
|
||||
std::list<Geometry*> toBiArcs(double tolerance) const;
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
|
||||
|
||||
#include "PrimitiveFeature.h"
|
||||
#include <Mod/Part/App/PartFeaturePy.h>
|
||||
#include <App/FeaturePythonPyImp.h>
|
||||
#include <Base/Console.h>
|
||||
#include <Base/Exception.h>
|
||||
#include <Base/Reader.h>
|
||||
@@ -105,6 +107,19 @@ App::DocumentObjectExecReturn* Primitive::execute(void) {
|
||||
return Part::Feature::execute();
|
||||
}
|
||||
|
||||
namespace Part {
|
||||
PYTHON_TYPE_DEF(PrimitivePy, PartFeaturePy)
|
||||
PYTHON_TYPE_IMP(PrimitivePy, PartFeaturePy)
|
||||
}
|
||||
|
||||
PyObject* Primitive::getPyObject()
|
||||
{
|
||||
if (PythonObject.is(Py::_None())){
|
||||
// ref counter is set to 1
|
||||
PythonObject = Py::Object(new PrimitivePy(this),true);
|
||||
}
|
||||
return Py::new_reference_to(PythonObject);
|
||||
}
|
||||
|
||||
void Primitive::Restore(Base::XMLReader &reader)
|
||||
{
|
||||
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
/// recalculate the feature
|
||||
App::DocumentObjectExecReturn *execute(void);
|
||||
short mustExecute() const;
|
||||
PyObject* getPyObject();
|
||||
//@}
|
||||
|
||||
protected:
|
||||
|
||||
@@ -30,10 +30,13 @@
|
||||
#include "DatumPoint.h"
|
||||
#include "DatumCS.h"
|
||||
#include <Mod/Part/App/modelRefine.h>
|
||||
#include <Mod/Part/App/PartFeaturePy.h>
|
||||
#include <Base/Exception.h>
|
||||
#include <Base/Tools.h>
|
||||
#include <App/Document.h>
|
||||
#include <App/Application.h>
|
||||
#include <App/FeaturePythonPyImp.h>
|
||||
|
||||
#include <BRepPrimAPI_MakeBox.hxx>
|
||||
#include <BRepBuilderAPI_GTransform.hxx>
|
||||
#include <BRepAlgoAPI_Fuse.hxx>
|
||||
@@ -152,6 +155,18 @@ void FeaturePrimitive::onChanged(const App::Property* prop)
|
||||
FeatureAddSub::onChanged(prop);
|
||||
}
|
||||
|
||||
PYTHON_TYPE_DEF(PrimitivePy, Part::PartFeaturePy)
|
||||
PYTHON_TYPE_IMP(PrimitivePy, Part::PartFeaturePy)
|
||||
|
||||
PyObject* FeaturePrimitive::getPyObject()
|
||||
{
|
||||
if (PythonObject.is(Py::_None())){
|
||||
// ref counter is set to 1
|
||||
PythonObject = Py::Object(new PrimitivePy(this),true);
|
||||
}
|
||||
return Py::new_reference_to(PythonObject);
|
||||
}
|
||||
|
||||
PROPERTY_SOURCE(PartDesign::Box, PartDesign::FeaturePrimitive)
|
||||
|
||||
Box::Box()
|
||||
|
||||
@@ -54,14 +54,15 @@ public:
|
||||
virtual const char* getViewProviderName(void) const {
|
||||
return "PartDesignGui::ViewProviderPrimitive";
|
||||
}
|
||||
Type getPrimitiveType() {return primitiveType;};
|
||||
Type getPrimitiveType() {return primitiveType;}
|
||||
TopoDS_Shape refineShapeIfActive(const TopoDS_Shape& oldShape) const;
|
||||
virtual void onChanged(const App::Property* prop);
|
||||
virtual PyObject* getPyObject();
|
||||
|
||||
/// Do nothing, just to suppress warning, must be redefined in derived classes
|
||||
virtual App::DocumentObjectExecReturn* execute() {
|
||||
return PartDesign::FeatureAddSub::execute();
|
||||
};
|
||||
}
|
||||
protected:
|
||||
//make the boolean ops with the primitives provided by the derived features
|
||||
App::DocumentObjectExecReturn* execute(const TopoDS_Shape& primitiveShape);
|
||||
|
||||
@@ -45,7 +45,17 @@ TaskFeatureParameters::TaskFeatureParameters(PartDesignGui::ViewProvider *vp, QW
|
||||
const std::string& pixmapname, const QString& parname)
|
||||
: TaskBox(Gui::BitmapFactory().pixmap(pixmapname.c_str()),parname,true, parent),
|
||||
vp(vp), blockUpdate(false)
|
||||
{ }
|
||||
{
|
||||
Gui::Document* doc = vp->getDocument();
|
||||
this->attachDocument(doc);
|
||||
this->enableNotifications(DocumentObserver::Delete);
|
||||
}
|
||||
|
||||
void TaskFeatureParameters::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj)
|
||||
{
|
||||
if (this->vp == &Obj)
|
||||
this->vp = nullptr;
|
||||
}
|
||||
|
||||
void TaskFeatureParameters::onUpdateView(bool on)
|
||||
{
|
||||
|
||||
@@ -26,25 +26,27 @@
|
||||
|
||||
#include <Gui/TaskView/TaskView.h>
|
||||
#include <Gui/TaskView/TaskDialog.h>
|
||||
#include <Gui/DocumentObserver.h>
|
||||
|
||||
#include "ViewProvider.h"
|
||||
|
||||
namespace PartDesignGui {
|
||||
|
||||
/// Convenience class to collect common methods for all SketchBased features
|
||||
class TaskFeatureParameters : public Gui::TaskView::TaskBox
|
||||
class TaskFeatureParameters : public Gui::TaskView::TaskBox,
|
||||
public Gui::DocumentObserver
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TaskFeatureParameters(PartDesignGui::ViewProvider* vp, QWidget *parent,
|
||||
const std::string& pixmapname, const QString& parname);
|
||||
virtual ~TaskFeatureParameters() {};
|
||||
virtual ~TaskFeatureParameters() {}
|
||||
|
||||
/// save field history
|
||||
virtual void saveHistory(void) {};
|
||||
virtual void saveHistory(void) {}
|
||||
/// apply changes made in the parameters input to the model via commands
|
||||
virtual void apply() {};
|
||||
virtual void apply() {}
|
||||
|
||||
void recomputeFeature();
|
||||
|
||||
@@ -52,6 +54,10 @@ protected Q_SLOTS:
|
||||
// TODO Add update view to all dialogs (2015-12-05, Fat-Zer)
|
||||
void onUpdateView(bool on);
|
||||
|
||||
private:
|
||||
/** Notifies when the object is about to be removed. */
|
||||
virtual void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj);
|
||||
|
||||
protected:
|
||||
PartDesignGui::ViewProvider *vp;
|
||||
/// Lock updateUI(), applying changes to the underlying feature and calling recomputeFeature()
|
||||
|
||||
@@ -370,18 +370,18 @@ unsigned TaskLinearPatternParameters::getOccurrences(void) const
|
||||
return ui->spinOccurrences->value();
|
||||
}
|
||||
|
||||
|
||||
TaskLinearPatternParameters::~TaskLinearPatternParameters()
|
||||
{
|
||||
//hide the parts coordinate system axis for selection
|
||||
PartDesign::Body * body = PartDesign::Body::findBodyOf ( getObject() );
|
||||
if(body) {
|
||||
PartDesign::Body * body = PartDesign::Body::findBodyOf(getObject());
|
||||
if (body) {
|
||||
try {
|
||||
App::Origin *origin = body->getOrigin();
|
||||
ViewProviderOrigin* vpOrigin;
|
||||
vpOrigin = static_cast<ViewProviderOrigin*>(Gui::Application::Instance->getViewProvider(origin));
|
||||
vpOrigin->resetTemporaryVisibility();
|
||||
} catch (const Base::Exception &ex) {
|
||||
}
|
||||
catch (const Base::Exception &ex) {
|
||||
Base::Console().Error ("%s\n", ex.what () );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ using namespace Gui;
|
||||
// Task Parameter
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
TaskPipeParameters::TaskPipeParameters(ViewProviderPipe *PipeView,bool /*newObj*/, QWidget *parent)
|
||||
TaskPipeParameters::TaskPipeParameters(ViewProviderPipe *PipeView, bool /*newObj*/, QWidget *parent)
|
||||
: TaskSketchBasedParameters(PipeView, parent, "PartDesign_Additive_Pipe",tr("Pipe parameters"))
|
||||
{
|
||||
// we need a separate container widget to add all controls to
|
||||
@@ -84,15 +84,15 @@ TaskPipeParameters::TaskPipeParameters(ViewProviderPipe *PipeView,bool /*newObj*
|
||||
this, SLOT(onButtonRefRemove(bool)));
|
||||
connect(ui->buttonProfileBase, SIGNAL(toggled(bool)),
|
||||
this, SLOT(onBaseButton(bool)));
|
||||
|
||||
|
||||
this->groupLayout()->addWidget(proxy);
|
||||
|
||||
|
||||
PartDesign::Pipe* pipe = static_cast<PartDesign::Pipe*>(PipeView->getObject());
|
||||
Gui::Document* doc = Gui::Application::Instance->activeDocument();
|
||||
|
||||
//make sure th euser sees al important things: the
|
||||
//spine/auxillery spine he already selected
|
||||
if(pipe->Spine.getValue()) {
|
||||
Gui::Document* doc = PipeView->getDocument();
|
||||
|
||||
//make sure the user sees all important things: the
|
||||
//spine/auxilliary spine he already selected
|
||||
if (pipe->Spine.getValue()) {
|
||||
auto* svp = doc->getViewProvider(pipe->Spine.getValue());
|
||||
spineShow = svp->isShow();
|
||||
svp->setVisible(true);
|
||||
@@ -104,9 +104,9 @@ TaskPipeParameters::TaskPipeParameters(ViewProviderPipe *PipeView,bool /*newObj*
|
||||
std::vector<std::string> strings = pipe->Spine.getSubValues();
|
||||
for (std::vector<std::string>::const_iterator i = strings.begin(); i != strings.end(); i++)
|
||||
ui->listWidgetReferences->addItem(QString::fromStdString(*i));
|
||||
|
||||
|
||||
ui->comboBoxTransition->setCurrentIndex(pipe->Transition.getValue());
|
||||
|
||||
|
||||
updateUI();
|
||||
}
|
||||
|
||||
@@ -151,18 +151,21 @@ void TaskPipeParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
|
||||
|
||||
TaskPipeParameters::~TaskPipeParameters()
|
||||
{
|
||||
PartDesign::Pipe* pipe = static_cast<PartDesign::Pipe*>(vp->getObject());
|
||||
Gui::Document* doc = Gui::Application::Instance->activeDocument();
|
||||
|
||||
//make sure th euser sees al important things: the
|
||||
//spine/auxillery spine he already selected
|
||||
if(pipe->Spine.getValue()) {
|
||||
auto* svp = doc->getViewProvider(pipe->Spine.getValue());
|
||||
svp->setVisible(spineShow);
|
||||
spineShow = false;
|
||||
if (vp) {
|
||||
PartDesign::Pipe* pipe = static_cast<PartDesign::Pipe*>(vp->getObject());
|
||||
Gui::Document* doc = vp->getDocument();
|
||||
|
||||
//make sure the user sees all important things: the
|
||||
//spine/auxilliary spine he already selected
|
||||
if (pipe->Spine.getValue()) {
|
||||
auto* svp = doc->getViewProvider(pipe->Spine.getValue());
|
||||
svp->setVisible(spineShow);
|
||||
spineShow = false;
|
||||
}
|
||||
|
||||
static_cast<ViewProviderPipe*>(vp)->highlightReferences(false, false);
|
||||
}
|
||||
static_cast<ViewProviderPipe*>(vp)->highlightReferences(false, false);
|
||||
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@@ -340,20 +343,22 @@ TaskPipeOrientation::TaskPipeOrientation(ViewProviderPipe* PipeView, bool /*newO
|
||||
updateUI(pipe->Mode.getValue());
|
||||
}
|
||||
|
||||
TaskPipeOrientation::~TaskPipeOrientation() {
|
||||
TaskPipeOrientation::~TaskPipeOrientation()
|
||||
{
|
||||
if (vp) {
|
||||
PartDesign::Pipe* pipe = static_cast<PartDesign::Pipe*>(vp->getObject());
|
||||
Gui::Document* doc = vp->getDocument();
|
||||
|
||||
PartDesign::Pipe* pipe = static_cast<PartDesign::Pipe*>(vp->getObject());
|
||||
Gui::Document* doc = Gui::Application::Instance->activeDocument();
|
||||
|
||||
//make sure th euser sees al important things: the base feature to select edges and the
|
||||
//spine/auxillery spine he already selected
|
||||
if(pipe->AuxillerySpine.getValue()) {
|
||||
auto* svp = doc->getViewProvider(pipe->AuxillerySpine.getValue());
|
||||
svp->setVisible(auxSpineShow);
|
||||
auxSpineShow = false;
|
||||
//make sure the user sees al important things: the base feature to select edges and the
|
||||
//spine/auxilliary spine he already selected
|
||||
if (pipe->AuxillerySpine.getValue()) {
|
||||
auto* svp = doc->getViewProvider(pipe->AuxillerySpine.getValue());
|
||||
svp->setVisible(auxSpineShow);
|
||||
auxSpineShow = false;
|
||||
}
|
||||
|
||||
static_cast<ViewProviderPipe*>(vp)->highlightReferences(false, true);
|
||||
}
|
||||
|
||||
static_cast<ViewProviderPipe*>(vp)->highlightReferences(false, true);
|
||||
}
|
||||
|
||||
void TaskPipeOrientation::onOrientationChanged(int idx) {
|
||||
|
||||
@@ -220,7 +220,11 @@ TaskBoxPrimitives::TaskBoxPrimitives(ViewProviderPrimitive* vp, QWidget* parent)
|
||||
if(i != index)
|
||||
ui.widgetStack->widget(i)->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored));
|
||||
}
|
||||
|
||||
|
||||
Gui::Document* doc = vp->getDocument();
|
||||
this->attachDocument(doc);
|
||||
this->enableNotifications(DocumentObserver::Delete);
|
||||
|
||||
//show the parts coordinate system axis for selection
|
||||
PartDesign::Body * body = PartDesign::Body::findBodyOf(vp->getObject());
|
||||
if(body) {
|
||||
@@ -241,8 +245,8 @@ TaskBoxPrimitives::TaskBoxPrimitives(ViewProviderPrimitive* vp, QWidget* parent)
|
||||
TaskBoxPrimitives::~TaskBoxPrimitives()
|
||||
{
|
||||
//hide the parts coordinate system axis for selection
|
||||
PartDesign::Body * body = PartDesign::Body::findBodyOf ( vp->getObject() );
|
||||
if(body) {
|
||||
PartDesign::Body * body = vp ? PartDesign::Body::findBodyOf(vp->getObject()) : 0;
|
||||
if (body) {
|
||||
try {
|
||||
App::Origin *origin = body->getOrigin();
|
||||
Gui::ViewProviderOrigin* vpOrigin;
|
||||
@@ -254,6 +258,12 @@ TaskBoxPrimitives::~TaskBoxPrimitives()
|
||||
}
|
||||
}
|
||||
|
||||
void TaskBoxPrimitives::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj)
|
||||
{
|
||||
if (this->vp == &Obj)
|
||||
this->vp = nullptr;
|
||||
}
|
||||
|
||||
void TaskBoxPrimitives::onBoxHeightChanged(double v) {
|
||||
PartDesign::Box* box = static_cast<PartDesign::Box*>(vp->getObject());
|
||||
box->Height.setValue(v);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
#include <Gui/TaskView/TaskView.h>
|
||||
#include <Gui/Selection.h>
|
||||
#include <Gui/DocumentObserver.h>
|
||||
#include <Gui/TaskView/TaskDialog.h>
|
||||
|
||||
#include "TaskSketchBasedParameters.h"
|
||||
@@ -49,7 +50,8 @@ namespace PartDesignGui {
|
||||
|
||||
namespace s = boost::signals;
|
||||
|
||||
class TaskBoxPrimitives : public Gui::TaskView::TaskBox
|
||||
class TaskBoxPrimitives : public Gui::TaskView::TaskBox,
|
||||
public Gui::DocumentObserver
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@@ -98,7 +100,11 @@ public Q_SLOTS:
|
||||
void onWedgeX2inChanged(double);
|
||||
void onWedgeZ2maxChanged(double);
|
||||
void onWedgeZ2inChanged(double);
|
||||
|
||||
|
||||
private:
|
||||
/** Notifies when the object is about to be removed. */
|
||||
virtual void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj);
|
||||
|
||||
private:
|
||||
QWidget* proxy;
|
||||
Ui_DlgPrimitives ui;
|
||||
|
||||
@@ -361,8 +361,8 @@ bool TaskRevolutionParameters::getReversed(void) const
|
||||
TaskRevolutionParameters::~TaskRevolutionParameters()
|
||||
{
|
||||
//hide the parts coordinate system axis for selection
|
||||
PartDesign::Body * body = PartDesign::Body::findBodyOf ( vp->getObject() );
|
||||
if ( body ) {
|
||||
PartDesign::Body * body = vp ? PartDesign::Body::findBodyOf(vp->getObject()) : 0;
|
||||
if (body) {
|
||||
try {
|
||||
App::Origin *origin = body->getOrigin();
|
||||
ViewProviderOrigin* vpOrigin;
|
||||
@@ -375,7 +375,7 @@ TaskRevolutionParameters::~TaskRevolutionParameters()
|
||||
|
||||
delete ui;
|
||||
|
||||
for(size_t i = 0 ; i < axesInList.size() ; i++ ){
|
||||
for (size_t i = 0; i < axesInList.size(); i++) {
|
||||
delete axesInList[i];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,12 @@ TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed *Tr
|
||||
blockUpdate(false)
|
||||
{
|
||||
selectionMode = none;
|
||||
|
||||
if (TransformedView) {
|
||||
Gui::Document* doc = TransformedView->getDocument();
|
||||
this->attachDocument(doc);
|
||||
this->enableNotifications(DocumentObserver::Delete);
|
||||
}
|
||||
}
|
||||
|
||||
TaskTransformedParameters::TaskTransformedParameters(TaskMultiTransformParameters *parentTask)
|
||||
@@ -92,6 +98,12 @@ TaskTransformedParameters::~TaskTransformedParameters()
|
||||
Gui::Selection().rmvSelectionGate();
|
||||
}
|
||||
|
||||
void TaskTransformedParameters::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj)
|
||||
{
|
||||
if (TransformedView == &Obj)
|
||||
TransformedView = nullptr;
|
||||
}
|
||||
|
||||
bool TaskTransformedParameters::isViewUpdated() const
|
||||
{
|
||||
return (blockUpdate == false);
|
||||
@@ -264,17 +276,18 @@ PartDesignGui::ViewProviderTransformed *TaskTransformedParameters::getTopTransfo
|
||||
}
|
||||
|
||||
PartDesign::Transformed *TaskTransformedParameters::getTopTransformedObject() const {
|
||||
App::DocumentObject *transform = getTopTransformedView()->getObject();
|
||||
assert (transform->isDerivedFrom(PartDesign::Transformed::getClassTypeId()));
|
||||
return static_cast<PartDesign::Transformed*>(transform);
|
||||
App::DocumentObject *transform = getTopTransformedView()->getObject();
|
||||
assert (transform->isDerivedFrom(PartDesign::Transformed::getClassTypeId()));
|
||||
return static_cast<PartDesign::Transformed*>(transform);
|
||||
}
|
||||
|
||||
|
||||
PartDesign::Transformed *TaskTransformedParameters::getObject() const {
|
||||
if (insideMultiTransform)
|
||||
return parentTask->getSubFeature();
|
||||
else
|
||||
else if (TransformedView)
|
||||
return static_cast<PartDesign::Transformed*>(TransformedView->getObject());
|
||||
else
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Part::Feature *TaskTransformedParameters::getBaseObject() const {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user