Merge branch 'master' of https://github.com/FreeCAD/FreeCAD into path_custom_source
This commit is contained in:
@@ -118,7 +118,7 @@ jobs:
|
||||
-DFREECAD_COPY_LIBPACK_BIN_TO_BUILD=OFF
|
||||
-DFREECAD_COPY_PLUGINS_BIN_TO_BUILD=ON
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
uses: microsoft/setup-msbuild@v1.3
|
||||
- name: Compiling sources
|
||||
run: |
|
||||
cd $env:builddir
|
||||
|
||||
@@ -40,6 +40,7 @@ install_manifest.txt
|
||||
/cmake-build*/
|
||||
/src/Tools/offlinedoc/localwiki/
|
||||
/src/Tools/offlinedoc/*.txt
|
||||
/conda/environment.yml
|
||||
OpenSCAD_rc.py
|
||||
tags
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
environment.yml
|
||||
@@ -266,6 +266,7 @@ SET(FreeCADApp_CPP_SRCS
|
||||
ColorModel.cpp
|
||||
ComplexGeoData.cpp
|
||||
ComplexGeoDataPyImp.cpp
|
||||
ElementMap.cpp
|
||||
Enumeration.cpp
|
||||
IndexedName.cpp
|
||||
MappedElement.cpp
|
||||
@@ -274,6 +275,7 @@ SET(FreeCADApp_CPP_SRCS
|
||||
MaterialPyImp.cpp
|
||||
Metadata.cpp
|
||||
MetadataPyImp.cpp
|
||||
ElementNamingUtils.cpp
|
||||
StringHasher.cpp
|
||||
StringHasherPyImp.cpp
|
||||
StringIDPyImp.cpp
|
||||
@@ -295,6 +297,7 @@ SET(FreeCADApp_HPP_SRCS
|
||||
MappedElement.h
|
||||
Material.h
|
||||
Metadata.h
|
||||
ElementNamingUtils.h
|
||||
StringHasher.h
|
||||
)
|
||||
|
||||
|
||||
+1
-100
@@ -27,10 +27,10 @@
|
||||
# include <cstdlib>
|
||||
#endif
|
||||
|
||||
#include <boost/algorithm/string/predicate.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
#include "ComplexGeoData.h"
|
||||
|
||||
#include <Base/BoundBox.h>
|
||||
#include <Base/Placement.h>
|
||||
#include <Base/Rotation.h>
|
||||
@@ -166,102 +166,3 @@ bool ComplexGeoData::getCenterOfGravity(Base::Vector3d&) const
|
||||
return false;
|
||||
}
|
||||
|
||||
const std::string &ComplexGeoData::elementMapPrefix() {
|
||||
static std::string prefix(";");
|
||||
return prefix;
|
||||
}
|
||||
|
||||
const char *ComplexGeoData::isMappedElement(const char *name) {
|
||||
if(name && boost::starts_with(name,elementMapPrefix()))
|
||||
return name+elementMapPrefix().size();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string ComplexGeoData::newElementName(const char *name) {
|
||||
if(!name)
|
||||
return std::string();
|
||||
const char *dot = strrchr(name,'.');
|
||||
if(!dot || dot==name)
|
||||
return name;
|
||||
const char *c = dot-1;
|
||||
for(;c!=name;--c) {
|
||||
if(*c == '.') {
|
||||
++c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(isMappedElement(c))
|
||||
return std::string(name,dot-name);
|
||||
return name;
|
||||
}
|
||||
|
||||
std::string ComplexGeoData::oldElementName(const char *name) {
|
||||
if(!name)
|
||||
return std::string();
|
||||
const char *dot = strrchr(name,'.');
|
||||
if(!dot || dot==name)
|
||||
return name;
|
||||
const char *c = dot-1;
|
||||
for(;c!=name;--c) {
|
||||
if(*c == '.') {
|
||||
++c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(isMappedElement(c))
|
||||
return std::string(name,c-name)+(dot+1);
|
||||
return name;
|
||||
}
|
||||
|
||||
std::string ComplexGeoData::noElementName(const char *name) {
|
||||
if(!name)
|
||||
return std::string();
|
||||
auto element = findElementName(name);
|
||||
if(element)
|
||||
return std::string(name,element-name);
|
||||
return name;
|
||||
}
|
||||
|
||||
const char *ComplexGeoData::findElementName(const char *subname) {
|
||||
if(!subname || !subname[0] || isMappedElement(subname))
|
||||
return subname;
|
||||
const char *dot = strrchr(subname,'.');
|
||||
if(!dot)
|
||||
return subname;
|
||||
const char *element = dot+1;
|
||||
if(dot==subname || isMappedElement(element))
|
||||
return element;
|
||||
for(--dot;dot!=subname;--dot) {
|
||||
if(*dot == '.') {
|
||||
++dot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(isMappedElement(dot))
|
||||
return dot;
|
||||
return element;
|
||||
}
|
||||
|
||||
const std::string &ComplexGeoData::tagPostfix() {
|
||||
static std::string postfix(elementMapPrefix() + ":T");
|
||||
return postfix;
|
||||
}
|
||||
|
||||
const std::string &ComplexGeoData::indexPostfix() {
|
||||
static std::string postfix(elementMapPrefix() + ":I");
|
||||
return postfix;
|
||||
}
|
||||
|
||||
const std::string &ComplexGeoData::missingPrefix() {
|
||||
static std::string prefix("?");
|
||||
return prefix;
|
||||
}
|
||||
|
||||
bool ComplexGeoData::hasMissingElement(const char *subname) {
|
||||
if(!subname)
|
||||
return false;
|
||||
auto dot = strrchr(subname,'.');
|
||||
if(dot)
|
||||
subname = dot+1;
|
||||
return boost::starts_with(subname,missingPrefix());
|
||||
}
|
||||
|
||||
@@ -164,41 +164,6 @@ public:
|
||||
virtual bool getCenterOfGravity(Base::Vector3d& center) const;
|
||||
//@}
|
||||
|
||||
/** @name Element name mapping */
|
||||
//@{
|
||||
/// Special prefix to mark the beginning of a mapped sub-element name
|
||||
static const std::string &elementMapPrefix();
|
||||
/// Special postfix to mark the following tag
|
||||
static const std::string &tagPostfix();
|
||||
/// Special postfix to mark the index of an array element
|
||||
static const std::string &indexPostfix();
|
||||
/// Special prefix to mark a missing element
|
||||
static const std::string &missingPrefix();
|
||||
/// Check if a subname contains missing element
|
||||
static bool hasMissingElement(const char *subname);
|
||||
/** Check if the name starts with elementMapPrefix()
|
||||
*
|
||||
* @param name: input name
|
||||
* @return Returns the name stripped with elementMapPrefix(), or 0 if not
|
||||
* start with the prefix
|
||||
*/
|
||||
static const char *isMappedElement(const char *name);
|
||||
|
||||
/// Strip out the trailing element name if there is mapped element name precedes it.
|
||||
static std::string newElementName(const char *name);
|
||||
/// Strip out the mapped element name if there is one.
|
||||
static std::string oldElementName(const char *name);
|
||||
/// Strip out the old and new element name if there is one.
|
||||
static std::string noElementName(const char *name);
|
||||
|
||||
/// Find the start of an element name in a subname
|
||||
static const char *findElementName(const char *subname);
|
||||
|
||||
static inline const char *hasMappedElementName(const char *subname) {
|
||||
return isMappedElement(findElementName(subname));
|
||||
}
|
||||
//@}
|
||||
|
||||
protected:
|
||||
|
||||
/// from local to outside
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <Base/Writer.h>
|
||||
|
||||
#include "Application.h"
|
||||
#include "ComplexGeoData.h"
|
||||
#include "ElementNamingUtils.h"
|
||||
#include "Document.h"
|
||||
#include "DocumentObject.h"
|
||||
#include "DocumentObjectExtension.h"
|
||||
@@ -1094,7 +1094,7 @@ DocumentObject *DocumentObject::resolve(const char *subname,
|
||||
// following it. So finding the last dot will give us the end of the last
|
||||
// object name.
|
||||
const char *dot=nullptr;
|
||||
if(Data::ComplexGeoData::isMappedElement(subname) ||
|
||||
if(Data::isMappedElement(subname) ||
|
||||
!(dot=strrchr(subname,'.')) ||
|
||||
dot == subname)
|
||||
{
|
||||
@@ -1117,7 +1117,7 @@ DocumentObject *DocumentObject::resolve(const char *subname,
|
||||
if(!elementMapChecked) {
|
||||
elementMapChecked = true;
|
||||
const char *sub = dot==subname?dot:dot+1;
|
||||
if(Data::ComplexGeoData::isMappedElement(sub)) {
|
||||
if(Data::isMappedElement(sub)) {
|
||||
lastDot = dot;
|
||||
if(dot==subname)
|
||||
break;
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <Base/Tools.h>
|
||||
|
||||
#include "Application.h"
|
||||
#include "ComplexGeoData.h"
|
||||
#include "ElementNamingUtils.h"
|
||||
#include "Document.h"
|
||||
#include "DocumentObserver.h"
|
||||
#include "GeoFeature.h"
|
||||
@@ -353,11 +353,11 @@ const std::string &SubObjectT::getSubName() const {
|
||||
}
|
||||
|
||||
std::string SubObjectT::getSubNameNoElement() const {
|
||||
return Data::ComplexGeoData::noElementName(subname.c_str());
|
||||
return Data::noElementName(subname.c_str());
|
||||
}
|
||||
|
||||
const char *SubObjectT::getElementName() const {
|
||||
return Data::ComplexGeoData::findElementName(subname.c_str());
|
||||
return Data::findElementName(subname.c_str());
|
||||
}
|
||||
|
||||
std::string SubObjectT::getNewElementName() const {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+257
-15
@@ -27,22 +27,264 @@
|
||||
#define DATA_ELEMENTMAP_H
|
||||
|
||||
#include "FCGlobal.h"
|
||||
#include "IndexedName.h"
|
||||
|
||||
namespace Data {
|
||||
#include "Application.h"
|
||||
#include "MappedElement.h"
|
||||
#include "StringHasher.h"
|
||||
|
||||
static constexpr const char *POSTFIX_TAG = ";:H";
|
||||
static constexpr const char *POSTFIX_DECIMAL_TAG = ";:T";
|
||||
static constexpr const char *POSTFIX_EXTERNAL_TAG = ";:X";
|
||||
static constexpr const char *POSTFIX_CHILD = ";:C";
|
||||
static constexpr const char *POSTFIX_INDEX = ";:I";
|
||||
static constexpr const char *POSTFIX_UPPER = ";:U";
|
||||
static constexpr const char *POSTFIX_LOWER = ";:L";
|
||||
static constexpr const char *POSTFIX_MOD = ";:M";
|
||||
static constexpr const char *POSTFIX_GEN = ";:G";
|
||||
static constexpr const char *POSTFIX_MODGEN = ";:MG";
|
||||
static constexpr const char *POSTFIX_DUPLICATE = ";D";
|
||||
#include <cstring>
|
||||
#include <deque>
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
|
||||
} // namespace data
|
||||
|
||||
#endif // DATA_ELEMENTMAP_H
|
||||
namespace Data
|
||||
{
|
||||
|
||||
class ElementMap;
|
||||
typedef std::shared_ptr<ElementMap> ElementMapPtr;
|
||||
|
||||
/* This class provides for ComplexGeoData's ability to provide proper naming.
|
||||
* Specifically, ComplexGeoData uses this class for it's `_id` property.
|
||||
* Most of the operations work with the `indexedNames` and `mappedNames` maps.
|
||||
* `indexedNames` maps a string to both a name queue and children.
|
||||
* each of those children store an IndexedName, offset details, postfix, ids, and
|
||||
* possibly a recursive elementmap
|
||||
* `mappedNames` maps a MappedName to a specific IndexedName.
|
||||
*/
|
||||
class AppExport ElementMap: public std::enable_shared_from_this<ElementMap> //TODO can remove shared_from_this?
|
||||
{
|
||||
public:
|
||||
/** Default constructor: hooks internal functions to \c signalSaveDocument and
|
||||
* \c signalStartRestoreDocument. This is related to the save and restore process
|
||||
* of the map.
|
||||
*/
|
||||
ElementMap();
|
||||
|
||||
/** Ensures that naming is properly assigned. It then marks as "used" all the StringID
|
||||
* that are used to make up this particular map and are stored in the hasher passed
|
||||
* as a parameter. Finally do this recursively for all childEelementMaps as well.
|
||||
*
|
||||
* @param hasher where all the StringID needed to build the map are stored.
|
||||
*/
|
||||
// FIXME this should be made part of \c save, to achieve symmetry with the restore method
|
||||
void beforeSave(const ::App::StringHasherRef& hasher) const;
|
||||
|
||||
/** Serialize this map. Calls \c collectChildMaps to get \c childMapSet and
|
||||
* \c postfixMap, then calls the other (private) save function with those parameters.
|
||||
* @param s: serialized stream
|
||||
*/
|
||||
void save(std::ostream& s) const;
|
||||
|
||||
/** Deserialize and restore this map. This function restores \c childMaps and
|
||||
* \c postfixes from the stream, then calls the other (private) restore function with those
|
||||
* parameters.
|
||||
* @param hasher: where all the StringIDs are stored
|
||||
* @param s: stream to deserialize
|
||||
*/
|
||||
ElementMapPtr restore(::App::StringHasherRef hasher, std::istream& s);
|
||||
|
||||
|
||||
/** Add a sub-element name mapping.
|
||||
*
|
||||
* @param element: the original \c Type + \c Index element name
|
||||
* @param name: the mapped sub-element name. May or may not start with
|
||||
* elementMapPrefix().
|
||||
* @param sid: in case you use a hasher to hash the element name, pass in
|
||||
* the string id reference using this parameter. You can have more than one
|
||||
* string id associated with the same name.
|
||||
* @param overwrite: if true, it will overwrite existing names
|
||||
*
|
||||
* @return Returns the stored mapped element name.
|
||||
*
|
||||
* An element can have multiple mapped names. However, a name can only be
|
||||
* mapped to one element
|
||||
*
|
||||
* Note: the original proc was in the context of ComplexGeoData, which provided `Tag` access,
|
||||
* now you must pass in `long masterTag` explicitly.
|
||||
*/
|
||||
MappedName setElementName(const IndexedName& element,
|
||||
const MappedName& name,
|
||||
long masterTag,
|
||||
const ElementIDRefs* sid = nullptr,
|
||||
bool overwrite = false);
|
||||
|
||||
/* Generates a new MappedName from the current details.
|
||||
*
|
||||
* The result is streamed to `ss` and stored in `name`.
|
||||
*
|
||||
* Note: the original proc was in the context of ComplexGeoData, which provided `Tag` access,
|
||||
* now you must pass in `long masterTag` explicitly.
|
||||
*/
|
||||
void encodeElementName(char element_type,
|
||||
MappedName& name,
|
||||
std::ostringstream& ss,
|
||||
ElementIDRefs* sids,
|
||||
long masterTag,
|
||||
const char* postfix = 0,
|
||||
long tag = 0,
|
||||
bool forceTag = false) const;
|
||||
|
||||
/// Remove \c name from the map
|
||||
void erase(const MappedName& name);
|
||||
|
||||
/// Remove \c idx and all the MappedNames associated with it
|
||||
void erase(const IndexedName& idx);
|
||||
|
||||
unsigned long size() const;
|
||||
|
||||
bool empty() const;
|
||||
|
||||
IndexedName find(const MappedName& name, ElementIDRefs* sids = nullptr) const;
|
||||
|
||||
MappedName find(const IndexedName& idx, ElementIDRefs* sids = nullptr) const;
|
||||
|
||||
std::vector<std::pair<MappedName, ElementIDRefs>> findAll(const IndexedName& idx) const;
|
||||
|
||||
// prefix searching is disabled, as TopoShape::getRelatedElement() is
|
||||
// deprecated in favor of GeoFeature::getRelatedElement(). Besides, there
|
||||
// is efficient way to support child element map if we were to implement
|
||||
// prefix search.
|
||||
#if 0
|
||||
std::vector<MappedElement> findAllStartsWith(const char *prefix) const;
|
||||
#endif
|
||||
|
||||
bool hasChildElementMap() const;
|
||||
|
||||
/* Ensures that for each IndexedName mapped to IndexedElements, that
|
||||
* each child is properly hashed (cached).
|
||||
*
|
||||
* Note: the original proc was in the context of ComplexGeoData, which provided `Tag` access,
|
||||
* now you must pass in `long masterTag` explicitly.
|
||||
*/
|
||||
void hashChildMaps(long masterTag);
|
||||
|
||||
struct AppExport MappedChildElements
|
||||
{
|
||||
IndexedName indexedName;
|
||||
int count;
|
||||
int offset;
|
||||
long tag;
|
||||
ElementMapPtr elementMap;
|
||||
QByteArray postfix;
|
||||
ElementIDRefs sids;
|
||||
|
||||
// prefix() has been moved to PostfixStringReferences.h
|
||||
};
|
||||
|
||||
/* Note: the original addChildElements passed `ComplexGeoData& master` for getting the `Tag`,
|
||||
* now it just passes `long masterTag`.*/
|
||||
void addChildElements(long masterTag, const std::vector<MappedChildElements>& children);
|
||||
|
||||
std::vector<MappedChildElements> getChildElements() const;
|
||||
|
||||
std::vector<MappedElement> getAll() const;
|
||||
|
||||
private:
|
||||
/** Serialize this map
|
||||
* @param s: serialized stream
|
||||
* @param childMapSet: where all child element maps are stored
|
||||
* @param postfixMap. where all postfixes are stored
|
||||
*/
|
||||
void save(std::ostream& s, int index, const std::map<const ElementMap*, int>& childMapSet,
|
||||
const std::map<QByteArray, int>& postfixMap) const;
|
||||
|
||||
/** Deserialize and restore this map.
|
||||
* @param hasher: where all the StringIDs are stored
|
||||
* @param s: stream to deserialize
|
||||
* @param childMaps: where all child element maps are stored
|
||||
* @param postfixes. where all postfixes are stored
|
||||
*/
|
||||
ElementMapPtr restore(::App::StringHasherRef hasher, std::istream& s,
|
||||
std::vector<ElementMapPtr>& childMaps,
|
||||
const std::vector<std::string>& postfixes);
|
||||
|
||||
/** Associate the MappedName \c name with the IndexedName \c idx.
|
||||
* @param name: the name to add
|
||||
* @param idx: the indexed name that \c name will be bound to
|
||||
* @param sids: where StringIDs that make up the name are stored
|
||||
* @param overwrite: if true, all the names associated with \c idx will be discarded
|
||||
* @param existing: out variable: if not overwriting, and \c name is already
|
||||
* associated with another indexedName, set \c existing to that indexedname
|
||||
* @return the name just added, or an empty name if it wasn't added.
|
||||
*/
|
||||
MappedName addName(MappedName& name, const IndexedName& idx, const ElementIDRefs& sids,
|
||||
bool overwrite, IndexedName* existing);
|
||||
|
||||
/** Utility function that adds \c postfix to \c postfixMap, and to \c postfixes
|
||||
* if it was not present in the map.
|
||||
*/
|
||||
static void addPostfix(const QByteArray& postfix, std::map<QByteArray, int>& postfixMap,
|
||||
std::vector<QByteArray>& postfixes);
|
||||
|
||||
/* Note: the original proc passed `ComplexGeoData& master` for getting the `Tag`,
|
||||
* now it just passes `long masterTag`.*/
|
||||
virtual MappedName renameDuplicateElement(int index, const IndexedName& element,
|
||||
const IndexedName& element2, const MappedName& name,
|
||||
ElementIDRefs& sids, long masterTag);
|
||||
|
||||
/** Convenience method to hash the main element name
|
||||
*
|
||||
* @param name: main element name
|
||||
* @param sid: store any output string ID references
|
||||
* @return the hashed element name;
|
||||
*/
|
||||
MappedName hashElementName(const MappedName& name, ElementIDRefs& sids) const;
|
||||
|
||||
/// Reverse hashElementName()
|
||||
MappedName dehashElementName(const MappedName& name) const;
|
||||
|
||||
//FIXME duplicate code? as in copy/paste
|
||||
const MappedNameRef* findMappedRef(const IndexedName& idx) const;
|
||||
MappedNameRef* findMappedRef(const IndexedName& idx);
|
||||
|
||||
MappedNameRef& mappedRef(const IndexedName& idx);
|
||||
|
||||
void collectChildMaps(std::map<const ElementMap*, int>& childMapSet,
|
||||
std::vector<const ElementMap*>& childMaps,
|
||||
std::map<QByteArray, int>& postfixMap,
|
||||
std::vector<QByteArray>& postfixes) const;
|
||||
|
||||
struct CStringComp
|
||||
{
|
||||
public:
|
||||
bool operator()(const char* str1, const char* str2) const
|
||||
{
|
||||
return std::strcmp(str1, str2) < 0;
|
||||
}
|
||||
};
|
||||
|
||||
struct IndexedElements
|
||||
{
|
||||
std::deque<MappedNameRef> names;
|
||||
std::map<int, MappedChildElements> children;
|
||||
};
|
||||
|
||||
std::map<const char*, IndexedElements, CStringComp> indexedNames;
|
||||
|
||||
std::map<MappedName, IndexedName, std::less<MappedName>> mappedNames;
|
||||
|
||||
struct ChildMapInfo
|
||||
{
|
||||
int index = 0;
|
||||
MappedChildElements* childMap = nullptr;
|
||||
std::map<ElementMap*, int> mapIndices;
|
||||
};
|
||||
|
||||
QHash<QByteArray, ChildMapInfo> childElements;
|
||||
std::size_t childElementSize = 0;
|
||||
|
||||
mutable unsigned _id = 0;
|
||||
|
||||
void init();
|
||||
|
||||
public:
|
||||
/// String hasher for element name shortening
|
||||
App::StringHasherRef hasher;
|
||||
};
|
||||
|
||||
|
||||
}// namespace Data
|
||||
|
||||
#endif// DATA_ELEMENTMAP_H
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
#include "PreCompiled.h"
|
||||
|
||||
#include "ElementNamingUtils.h"
|
||||
#include <boost/algorithm/string/predicate.hpp>
|
||||
|
||||
|
||||
const char *Data::isMappedElement(const char *name) {
|
||||
if(name && boost::starts_with(name, ELEMENT_MAP_PREFIX))
|
||||
return name + ELEMENT_MAP_PREFIX_SIZE;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string Data::newElementName(const char *name) {
|
||||
if(!name)
|
||||
return std::string();
|
||||
const char *dot = strrchr(name,'.');
|
||||
if(!dot || dot==name)
|
||||
return name;
|
||||
const char *c = dot-1;
|
||||
for(;c!=name;--c) {
|
||||
if(*c == '.') {
|
||||
++c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(isMappedElement(c))
|
||||
return std::string(name,dot-name);
|
||||
return name;
|
||||
}
|
||||
|
||||
std::string Data::oldElementName(const char *name) {
|
||||
if(!name)
|
||||
return std::string();
|
||||
const char *dot = strrchr(name,'.');
|
||||
if(!dot || dot==name)
|
||||
return name;
|
||||
const char *c = dot-1;
|
||||
for(;c!=name;--c) {
|
||||
if(*c == '.') {
|
||||
++c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(isMappedElement(c))
|
||||
return std::string(name,c-name)+(dot+1);
|
||||
return name;
|
||||
}
|
||||
|
||||
std::string Data::noElementName(const char *name) {
|
||||
if(!name)
|
||||
return std::string();
|
||||
auto element = findElementName(name);
|
||||
if(element)
|
||||
return std::string(name,element-name);
|
||||
return name;
|
||||
}
|
||||
|
||||
const char *Data::findElementName(const char *subname) {
|
||||
if(!subname || !subname[0] || isMappedElement(subname))
|
||||
return subname;
|
||||
const char *dot = strrchr(subname,'.');
|
||||
if(!dot)
|
||||
return subname;
|
||||
const char *element = dot+1;
|
||||
if(dot==subname || isMappedElement(element))
|
||||
return element;
|
||||
for(--dot;dot!=subname;--dot) {
|
||||
if(*dot == '.') {
|
||||
++dot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(isMappedElement(dot))
|
||||
return dot;
|
||||
return element;
|
||||
}
|
||||
|
||||
bool Data::hasMissingElement(const char *subname) {
|
||||
if(!subname)
|
||||
return false;
|
||||
auto dot = strrchr(subname,'.');
|
||||
if(dot)
|
||||
subname = dot+1;
|
||||
return boost::starts_with(subname, MISSING_PREFIX);
|
||||
}
|
||||
|
||||
const char *Data::hasMappedElementName(const char *subname) {
|
||||
return isMappedElement(findElementName(subname));
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
#ifndef ELEMENT_NAMING_UTILS_H
|
||||
#define ELEMENT_NAMING_UTILS_H
|
||||
|
||||
#include <string>
|
||||
#include "FCGlobal.h"
|
||||
|
||||
|
||||
namespace Data
|
||||
{
|
||||
|
||||
/// Special prefix to mark the beginning of a mapped sub-element name
|
||||
constexpr const char* ELEMENT_MAP_PREFIX = ";";
|
||||
constexpr size_t ELEMENT_MAP_PREFIX_SIZE = 1;
|
||||
|
||||
/// Special prefix to mark a missing element
|
||||
constexpr const char* MISSING_PREFIX = "?";
|
||||
|
||||
// IMPORTANT: For all the constants below, the semicolon ";"
|
||||
// at the start is ELEMENT_MAP_PREFIX
|
||||
|
||||
constexpr const char* MAPPED_CHILD_ELEMENTS_PREFIX = ";:R";
|
||||
|
||||
/// Special postfix to mark the following tag
|
||||
constexpr const char* POSTFIX_TAG = ";:H";
|
||||
constexpr size_t POSTFIX_TAG_SIZE = 3;
|
||||
|
||||
constexpr const char* POSTFIX_DECIMAL_TAG = ";:T";
|
||||
constexpr const char* POSTFIX_EXTERNAL_TAG = ";:X";
|
||||
constexpr const char* POSTFIX_CHILD = ";:C";
|
||||
|
||||
/// Special postfix to mark the index of an array element
|
||||
constexpr const char* POSTFIX_INDEX = ";:I";
|
||||
constexpr const char* POSTFIX_UPPER = ";:U";
|
||||
constexpr const char* POSTFIX_LOWER = ";:L";
|
||||
constexpr const char* POSTFIX_MOD = ";:M";
|
||||
constexpr const char* POSTFIX_GEN = ";:G";
|
||||
constexpr const char* POSTFIX_MODGEN = ";:MG";
|
||||
constexpr const char* POSTFIX_DUPLICATE = ";D";
|
||||
|
||||
|
||||
/// Check if a subname contains missing element
|
||||
AppExport bool hasMissingElement(const char *subname);
|
||||
|
||||
/** Check if the name starts with elementMapPrefix()
|
||||
*
|
||||
* @param name: input name
|
||||
* @return Returns the name stripped with elementMapPrefix(), or 0 if not
|
||||
* start with the prefix
|
||||
*/
|
||||
AppExport const char *isMappedElement(const char *name);
|
||||
|
||||
/// Strip out the trailing element name if there is mapped element name precedes it.
|
||||
AppExport std::string newElementName(const char *name);
|
||||
|
||||
/// Strip out the mapped element name if there is one.
|
||||
AppExport std::string oldElementName(const char *name);
|
||||
|
||||
/// Strip out the old and new element name if there is one.
|
||||
AppExport std::string noElementName(const char *name);
|
||||
|
||||
/// Find the start of an element name in a subname
|
||||
AppExport const char *findElementName(const char *subname);
|
||||
|
||||
AppExport const char *hasMappedElementName(const char *subname);
|
||||
|
||||
|
||||
}// namespace Data
|
||||
|
||||
#endif // ELEMENT_NAMING_UTILS_H
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
#include "GeoFeature.h"
|
||||
#include "GeoFeatureGroupExtension.h"
|
||||
#include "ComplexGeoData.h"
|
||||
#include "ElementNamingUtils.h"
|
||||
|
||||
|
||||
using namespace App;
|
||||
@@ -101,7 +101,7 @@ DocumentObject *GeoFeature::resolveElement(DocumentObject *obj, const char *subn
|
||||
return nullptr;
|
||||
if(!subname)
|
||||
subname = "";
|
||||
const char *element = Data::ComplexGeoData::findElementName(subname);
|
||||
const char *element = Data::findElementName(subname);
|
||||
if(_element) *_element = element;
|
||||
auto sobj = obj->getSubObject(subname);
|
||||
if(!sobj)
|
||||
@@ -114,7 +114,7 @@ DocumentObject *GeoFeature::resolveElement(DocumentObject *obj, const char *subn
|
||||
return nullptr;
|
||||
if(!element || !element[0]) {
|
||||
if(append)
|
||||
elementName.second = Data::ComplexGeoData::oldElementName(subname);
|
||||
elementName.second = Data::oldElementName(subname);
|
||||
return sobj;
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ DocumentObject *GeoFeature::resolveElement(DocumentObject *obj, const char *subn
|
||||
if(!append)
|
||||
elementName.second = element;
|
||||
else
|
||||
elementName.second = Data::ComplexGeoData::oldElementName(subname);
|
||||
elementName.second = Data::oldElementName(subname);
|
||||
return sobj;
|
||||
}
|
||||
if(!append)
|
||||
|
||||
+9
-9
@@ -29,7 +29,7 @@
|
||||
#include <Base/Uuid.h>
|
||||
|
||||
#include "Application.h"
|
||||
#include "ComplexGeoData.h"
|
||||
#include "ElementNamingUtils.h"
|
||||
#include "ComplexGeoDataPy.h"
|
||||
#include "Document.h"
|
||||
#include "DocumentObserver.h"
|
||||
@@ -1051,7 +1051,7 @@ DocumentObject *LinkBaseExtension::getLink(int depth) const{
|
||||
}
|
||||
|
||||
int LinkBaseExtension::getArrayIndex(const char *subname, const char **psubname) {
|
||||
if(!subname || Data::ComplexGeoData::isMappedElement(subname))
|
||||
if(!subname || Data::isMappedElement(subname))
|
||||
return -1;
|
||||
const char *dot = strchr(subname,'.');
|
||||
if(!dot) dot= subname+strlen(subname);
|
||||
@@ -1073,7 +1073,7 @@ int LinkBaseExtension::getArrayIndex(const char *subname, const char **psubname)
|
||||
}
|
||||
|
||||
int LinkBaseExtension::getElementIndex(const char *subname, const char **psubname) const {
|
||||
if(!subname || Data::ComplexGeoData::isMappedElement(subname))
|
||||
if(!subname || Data::isMappedElement(subname))
|
||||
return -1;
|
||||
int idx = -1;
|
||||
const char *dot = strchr(subname,'.');
|
||||
@@ -1313,7 +1313,7 @@ bool LinkBaseExtension::extensionGetSubObject(DocumentObject *&ret, const char *
|
||||
return true;
|
||||
ret = elements[idx]->getSubObject(subname,pyObj,mat,true,depth+1);
|
||||
// do not resolve the link if this element is the last referenced object
|
||||
if(!subname || Data::ComplexGeoData::isMappedElement(subname) || !strchr(subname,'.'))
|
||||
if(!subname || Data::isMappedElement(subname) || !strchr(subname,'.'))
|
||||
ret = elements[idx];
|
||||
return true;
|
||||
}
|
||||
@@ -1381,7 +1381,7 @@ bool LinkBaseExtension::extensionGetSubObject(DocumentObject *&ret, const char *
|
||||
std::string postfix;
|
||||
if(ret) {
|
||||
// do not resolve the link if we are the last referenced object
|
||||
if(subname && !Data::ComplexGeoData::isMappedElement(subname) && strchr(subname,'.')) {
|
||||
if(subname && !Data::isMappedElement(subname) && strchr(subname,'.')) {
|
||||
if(mat)
|
||||
*mat = matNext;
|
||||
}
|
||||
@@ -1394,7 +1394,7 @@ bool LinkBaseExtension::extensionGetSubObject(DocumentObject *&ret, const char *
|
||||
}
|
||||
else {
|
||||
if(idx) {
|
||||
postfix = Data::ComplexGeoData::indexPostfix();
|
||||
postfix = Data::POSTFIX_INDEX;
|
||||
postfix += std::to_string(idx);
|
||||
}
|
||||
if(mat)
|
||||
@@ -1488,7 +1488,7 @@ void LinkBaseExtension::parseSubName() const {
|
||||
}
|
||||
const auto &subs = xlink->getSubValues();
|
||||
auto subname = subs.front().c_str();
|
||||
auto element = Data::ComplexGeoData::findElementName(subname);
|
||||
auto element = Data::findElementName(subname);
|
||||
if(!element || !element[0]) {
|
||||
mySubName = subs[0];
|
||||
if(hasSubElement)
|
||||
@@ -1499,7 +1499,7 @@ void LinkBaseExtension::parseSubName() const {
|
||||
mySubName = std::string(subname,element-subname);
|
||||
for(std::size_t i=1;i<subs.size();++i) {
|
||||
auto &sub = subs[i];
|
||||
element = Data::ComplexGeoData::findElementName(sub.c_str());
|
||||
element = Data::findElementName(sub.c_str());
|
||||
if(element && element[0] && boost::starts_with(sub,mySubName))
|
||||
mySubElements.emplace_back(element);
|
||||
}
|
||||
@@ -1938,7 +1938,7 @@ void LinkBaseExtension::onExtendedDocumentRestored() {
|
||||
} else {
|
||||
std::set<std::string> subset(mySubElements.begin(),mySubElements.end());
|
||||
auto sub = xlink->getSubValues().front();
|
||||
auto element = Data::ComplexGeoData::findElementName(sub.c_str());
|
||||
auto element = Data::findElementName(sub.c_str());
|
||||
if(element && element[0]) {
|
||||
subset.insert(element);
|
||||
sub.resize(element - sub.c_str());
|
||||
|
||||
+168
-6
@@ -26,19 +26,26 @@
|
||||
# include <unordered_set>
|
||||
#endif
|
||||
|
||||
//#include <boost/functional/hash.hpp>
|
||||
|
||||
#include "MappedName.h"
|
||||
|
||||
using namespace Data;
|
||||
#include "Base/Console.h"
|
||||
|
||||
//#include <boost/functional/hash.hpp>
|
||||
#include <boost/iostreams/device/array.hpp>
|
||||
#include <boost/iostreams/stream.hpp>
|
||||
|
||||
|
||||
void MappedName::compact()
|
||||
FC_LOG_LEVEL_INIT("MappedName", true, 2);
|
||||
|
||||
namespace Data {
|
||||
|
||||
void MappedName::compact() const
|
||||
{
|
||||
auto self = const_cast<MappedName*>(this); //FIXME this is a workaround for a single call in ElementMap::addName()
|
||||
|
||||
if (this->raw) {
|
||||
this->data = QByteArray(this->data.constData(), this->data.size());
|
||||
this->raw = false;
|
||||
self->data = QByteArray(self->data.constData(), self->data.size());
|
||||
self->raw = false;
|
||||
}
|
||||
|
||||
#if 0
|
||||
@@ -51,3 +58,158 @@ void MappedName::compact()
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int MappedName::findTagInElementName(long* tag, int* len, const char* postfix,
|
||||
char* type, bool negative, bool recursive) const
|
||||
{
|
||||
bool hex = true;
|
||||
int pos = this->rfind(POSTFIX_TAG);
|
||||
|
||||
// Example name, tagPosfix == ;:H
|
||||
// #94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H1b:10,F
|
||||
// ^
|
||||
// |
|
||||
// pos
|
||||
|
||||
if(pos < 0) {
|
||||
pos = this->rfind(POSTFIX_DECIMAL_TAG);
|
||||
if (pos < 0)
|
||||
return -1;
|
||||
hex = false;
|
||||
}
|
||||
int offset = pos + (int)POSTFIX_TAG_SIZE;
|
||||
long _tag = 0;
|
||||
int _len = 0;
|
||||
char sep = 0;
|
||||
char sep2 = 0;
|
||||
char tp = 0;
|
||||
char eof = 0;
|
||||
|
||||
int size;
|
||||
const char *s = this->toConstString(offset, size);
|
||||
|
||||
// check if the number followed by the tagPosfix is negative
|
||||
bool isNegative = (s[0] == '-');
|
||||
if (isNegative) {
|
||||
++s;
|
||||
--size;
|
||||
}
|
||||
boost::iostreams::stream<boost::iostreams::array_source> iss(s, size);
|
||||
if (!hex) {
|
||||
// no hex is an older version of the encoding scheme
|
||||
iss >> _tag >> sep;
|
||||
} else {
|
||||
// The purpose of tag postfix is to encode one model operation. The
|
||||
// 'tag' field is used to record the own object ID of that model shape,
|
||||
// and the 'len' field indicates the length of the operation codes
|
||||
// before the tag postfix. These fields are in hex. The trailing 'F' is
|
||||
// the shape type of this element, 'F' for face, 'E' edge, and 'V' vertex.
|
||||
//
|
||||
// #94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H1b:10,F
|
||||
// | | ^^ ^^
|
||||
// | | | |
|
||||
// ---len = 0x10--- tag len
|
||||
|
||||
iss >> std::hex;
|
||||
// _tag field can be skipped, if it is 0
|
||||
if (s[0] == ',' || s[0] == ':')
|
||||
iss >> sep;
|
||||
else
|
||||
iss >> _tag >> sep;
|
||||
}
|
||||
|
||||
if (isNegative)
|
||||
_tag = -_tag;
|
||||
|
||||
if (sep == ':') {
|
||||
// ':' is followed by _len field.
|
||||
//
|
||||
// For decTagPostfix() (i.e. older encoding scheme), this is the length
|
||||
// of the string before the entire postfix (A postfix may contain
|
||||
// multiple segments usually separated by ELEMENT_MAP_PREFIX.
|
||||
//
|
||||
// For newer POSTFIX_TAG, this counts the number of characters that
|
||||
// proceeds this tag postfix segment that forms the op code (see
|
||||
// example above).
|
||||
//
|
||||
// The reason of this change is so that the postfix can stay the same
|
||||
// regardless of the prefix, which can increase memory efficiency.
|
||||
//
|
||||
iss >> _len >> sep2 >> tp >> eof;
|
||||
|
||||
// The next separator to look for is either ':' for older tag postfix, or ','
|
||||
if (!hex && sep2 == ':')
|
||||
sep2 = ',';
|
||||
}
|
||||
else if (hex && sep == ',') {
|
||||
// ',' is followed by a single character that indicates the element type.
|
||||
iss >> tp >> eof;
|
||||
sep = ':';
|
||||
sep2 = ',';
|
||||
}
|
||||
|
||||
if (_len < 0 || sep != ':' || sep2 != ',' || tp == 0 || eof != 0)
|
||||
return -1;
|
||||
|
||||
if (hex) {
|
||||
if (pos-_len < 0)
|
||||
return -1;
|
||||
if (_len && recursive && (tag || len)) {
|
||||
// in case of recursive tag postfix (used by hierarchy element
|
||||
// map), look for any embedded tag postifx
|
||||
int next = MappedName::fromRawData(*this, pos-_len, _len).rfind(POSTFIX_TAG);
|
||||
if (next >= 0) {
|
||||
next += pos - _len;
|
||||
// #94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H1b:10,F
|
||||
// ^ ^
|
||||
// | |
|
||||
// next pos
|
||||
//
|
||||
// There maybe other operation codes after this embedded tag
|
||||
// postfix, search for the sperator.
|
||||
//
|
||||
int end;
|
||||
if (pos == next)
|
||||
end = -1;
|
||||
else
|
||||
end = MappedName::fromRawData(*this, next+1, pos-next-1).find(ELEMENT_MAP_PREFIX);
|
||||
if (end >= 0) {
|
||||
end += next+1;
|
||||
// #94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H1b:10,F
|
||||
// ^
|
||||
// |
|
||||
// end
|
||||
_len = pos - end;
|
||||
// #94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H1b:10,F
|
||||
// | |
|
||||
// -- len --
|
||||
} else
|
||||
_len = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Now convert the 'len' field back to the length of the remaining name
|
||||
//
|
||||
// #94;:G0;XTR;:H19:8,F;:H1a,F;BND:-1:0;:H1b:10,F
|
||||
// | |
|
||||
// ----------- len -----------
|
||||
_len = pos - _len;
|
||||
}
|
||||
if(type)
|
||||
*type = tp;
|
||||
if(tag) {
|
||||
if (_tag == 0 && recursive)
|
||||
return MappedName(*this, 0, _len).findTagInElementName(tag, len, postfix, type, negative);
|
||||
if(_tag>0 || negative)
|
||||
*tag = _tag;
|
||||
else
|
||||
*tag = -_tag;
|
||||
}
|
||||
if(len)
|
||||
*len = _len;
|
||||
if(postfix)
|
||||
this->toString(*postfix, pos);
|
||||
return pos;
|
||||
}
|
||||
|
||||
}
|
||||
+132
-9
@@ -26,15 +26,19 @@
|
||||
#define APP_MAPPED_NAME_H
|
||||
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <boost/algorithm/string/predicate.hpp>
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QHash>
|
||||
#include <QVector>
|
||||
|
||||
#include "ComplexGeoData.h"
|
||||
#include "IndexedName.h"
|
||||
#include "StringHasher.h"
|
||||
#include "ElementNamingUtils.h"
|
||||
|
||||
|
||||
namespace Data
|
||||
@@ -62,8 +66,8 @@ public:
|
||||
if (!name) {
|
||||
return;
|
||||
}
|
||||
if (boost::starts_with(name, ComplexGeoData::elementMapPrefix())) {
|
||||
name += ComplexGeoData::elementMapPrefix().size();
|
||||
if (boost::starts_with(name, ELEMENT_MAP_PREFIX)) {
|
||||
name += ELEMENT_MAP_PREFIX_SIZE;
|
||||
}
|
||||
|
||||
data = size < 0 ? QByteArray(name) : QByteArray(name, size);
|
||||
@@ -78,9 +82,9 @@ public:
|
||||
{
|
||||
auto size = nameString.size();
|
||||
const char* name = nameString.c_str();
|
||||
if (boost::starts_with(nameString, ComplexGeoData::elementMapPrefix())) {
|
||||
name += ComplexGeoData::elementMapPrefix().size();
|
||||
size -= ComplexGeoData::elementMapPrefix().size();
|
||||
if (boost::starts_with(nameString, ELEMENT_MAP_PREFIX)) {
|
||||
name += ELEMENT_MAP_PREFIX_SIZE;
|
||||
size -= ELEMENT_MAP_PREFIX_SIZE;
|
||||
}
|
||||
data = QByteArray(name, static_cast<int>(size));
|
||||
}
|
||||
@@ -622,7 +626,7 @@ public:
|
||||
const char* appendToBufferWithPrefix(std::string& buf) const
|
||||
{
|
||||
if (!toIndexedName()) {
|
||||
buf += ComplexGeoData::elementMapPrefix();
|
||||
buf += ELEMENT_MAP_PREFIX;
|
||||
}
|
||||
appendToBuffer(buf);
|
||||
return buf.c_str();
|
||||
@@ -714,7 +718,7 @@ public:
|
||||
}
|
||||
|
||||
/// Ensure that this data is unshared, making a copy if necessary.
|
||||
void compact();
|
||||
void compact() const;
|
||||
|
||||
/// Boolean conversion is the inverse of empty(), returning true if there is data in either the
|
||||
/// data or postfix, and false if there is nothing in either.
|
||||
@@ -786,8 +790,7 @@ public:
|
||||
if (!searchTarget) {
|
||||
return -1;
|
||||
}
|
||||
if (startPosition < 0
|
||||
|| startPosition >= this->data.size()) {
|
||||
if (startPosition < 0 || startPosition >= this->data.size()) {
|
||||
if (startPosition >= data.size()) {
|
||||
startPosition -= data.size();
|
||||
}
|
||||
@@ -887,6 +890,22 @@ public:
|
||||
offset);
|
||||
}
|
||||
|
||||
/// Extract tag and other information from a encoded element name
|
||||
///
|
||||
/// \param tag: optional pointer to receive the extracted tag
|
||||
/// \param len: optional pointer to receive the length field after the tag field.
|
||||
/// This gives the length of the previous hashsed element name starting
|
||||
/// from the beginning of the give element name.
|
||||
/// \param postfix: optional pointer to receive the postfix starting at the found tag field.
|
||||
/// \param type: optional pointer to receive the element type character
|
||||
/// \param negative: return negative tag as it is. If disabled, then always return positive tag.
|
||||
/// Negative tag is sometimes used for element disambiguation.
|
||||
/// \param recursive: recursively find the last non-zero tag
|
||||
///
|
||||
/// \return Return the end position of the tag field, or return -1 if not found.
|
||||
int findTagInElementName(long* tag = 0, int* len = 0, const char* postfix = 0, char* type = 0,
|
||||
bool negative = false, bool recursive = true) const;
|
||||
|
||||
/// Get a hash for this MappedName
|
||||
std::size_t hash() const
|
||||
{
|
||||
@@ -899,6 +918,110 @@ private:
|
||||
bool raw;
|
||||
};
|
||||
|
||||
|
||||
typedef QVector<::App::StringIDRef> ElementIDRefs;
|
||||
|
||||
struct MappedNameRef
|
||||
{
|
||||
MappedName name;
|
||||
ElementIDRefs sids;
|
||||
std::unique_ptr<MappedNameRef> next;
|
||||
|
||||
MappedNameRef() = default;
|
||||
|
||||
MappedNameRef(const MappedName& name, const ElementIDRefs& sids = ElementIDRefs())
|
||||
: name(name),
|
||||
sids(sids)
|
||||
{
|
||||
compact();
|
||||
}
|
||||
|
||||
MappedNameRef(const MappedNameRef& other)
|
||||
: name(other.name),
|
||||
sids(other.sids)
|
||||
{}
|
||||
|
||||
MappedNameRef(MappedNameRef&& other)
|
||||
: name(std::move(other.name)),
|
||||
sids(std::move(other.sids)),
|
||||
next(std::move(other.next))
|
||||
{}
|
||||
|
||||
MappedNameRef& operator=(MappedNameRef&& other)
|
||||
{
|
||||
name = std::move(other.name);
|
||||
sids = std::move(other.sids);
|
||||
next = std::move(other.next);
|
||||
return *this;
|
||||
}
|
||||
|
||||
explicit operator bool() const
|
||||
{
|
||||
return !name.empty();
|
||||
}
|
||||
|
||||
void append(const MappedName& name, const ElementIDRefs sids = ElementIDRefs())
|
||||
{
|
||||
if (!name)
|
||||
return;
|
||||
if (!this->name) {
|
||||
this->name = name;
|
||||
this->sids = sids;
|
||||
compact();
|
||||
return;
|
||||
}
|
||||
std::unique_ptr<MappedNameRef> n(new MappedNameRef(name, sids));
|
||||
if (!this->next)
|
||||
this->next = std::move(n);
|
||||
else {
|
||||
this->next.swap(n);
|
||||
this->next->next = std::move(n);
|
||||
}
|
||||
}
|
||||
|
||||
void compact()
|
||||
{
|
||||
if (sids.size() > 1) {
|
||||
std::sort(sids.begin(), sids.end());
|
||||
sids.erase(std::unique(sids.begin(), sids.end()), sids.end());
|
||||
}
|
||||
}
|
||||
|
||||
bool erase(const MappedName& name)
|
||||
{
|
||||
if (this->name == name) {
|
||||
this->name.clear();
|
||||
this->sids.clear();
|
||||
if (this->next) {
|
||||
this->name = std::move(this->next->name);
|
||||
this->sids = std::move(this->next->sids);
|
||||
std::unique_ptr<MappedNameRef> tmp;
|
||||
tmp.swap(this->next);
|
||||
this->next = std::move(tmp->next);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
for (std::unique_ptr<MappedNameRef>* p = &this->next; *p; p = &(*p)->next) {
|
||||
if ((*p)->name == name) {
|
||||
std::unique_ptr<MappedNameRef> tmp;
|
||||
tmp.swap(*p);
|
||||
*p = std::move(tmp->next);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
this->name.clear();
|
||||
this->sids.clear();
|
||||
this->next.reset();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// NOLINTEND(cppcoreguidelines-pro-bounds-pointer-arithmetic)
|
||||
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <cassert>
|
||||
#include <memory>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <zipios++/zipios-config.h>
|
||||
|
||||
+117
-239
@@ -59,6 +59,7 @@
|
||||
#include "WhatsThis.h"
|
||||
#include "Widgets.h"
|
||||
#include "Workbench.h"
|
||||
#include "WorkbenchManager.h"
|
||||
#include "ShortcutManager.h"
|
||||
#include "Tools.h"
|
||||
|
||||
@@ -602,34 +603,8 @@ void ActionGroup::onHovered (QAction *act)
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
namespace Gui {
|
||||
|
||||
/**
|
||||
* The WorkbenchActionEvent class is used to send an event of which workbench must be activated.
|
||||
* We cannot activate the workbench directly as we will destroy the widget that emits the signal.
|
||||
* @author Werner Mayer
|
||||
*/
|
||||
class WorkbenchActionEvent : public QEvent
|
||||
WorkbenchComboBox::WorkbenchComboBox(QWidget* parent) : QComboBox(parent)
|
||||
{
|
||||
public:
|
||||
explicit WorkbenchActionEvent(QAction* act)
|
||||
: QEvent(QEvent::User), act(act)
|
||||
{ }
|
||||
QAction* action() const
|
||||
{ return act; }
|
||||
private:
|
||||
QAction* act;
|
||||
|
||||
Q_DISABLE_COPY(WorkbenchActionEvent)
|
||||
};
|
||||
}
|
||||
|
||||
WorkbenchComboBox::WorkbenchComboBox(WorkbenchGroup* wb, QWidget* parent) : QComboBox(parent), group(wb)
|
||||
{
|
||||
connect(this, qOverload<int>(&WorkbenchComboBox::activated),
|
||||
this, qOverload<int>(&WorkbenchComboBox::onActivated));
|
||||
connect(getMainWindow(), &MainWindow::workbenchActivated,
|
||||
this, &WorkbenchComboBox::onWorkbenchActivated);
|
||||
}
|
||||
|
||||
void WorkbenchComboBox::showPopup()
|
||||
@@ -644,71 +619,122 @@ void WorkbenchComboBox::showPopup()
|
||||
QComboBox::showPopup();
|
||||
}
|
||||
|
||||
void WorkbenchComboBox::actionEvent ( QActionEvent* qae )
|
||||
void WorkbenchComboBox::refreshList(QList<QAction*> actionList)
|
||||
{
|
||||
QAction *action = qae->action();
|
||||
switch (qae->type()) {
|
||||
case QEvent::ActionAdded:
|
||||
{
|
||||
if (action->isVisible()) {
|
||||
QIcon icon = action->icon();
|
||||
if (icon.isNull()) {
|
||||
this->addItem(action->text(), action->data());
|
||||
}
|
||||
else {
|
||||
this->addItem(icon, action->text(), action->data());
|
||||
}
|
||||
if (action->isChecked()) {
|
||||
this->setCurrentIndex(action->data().toInt());
|
||||
}
|
||||
}
|
||||
break;
|
||||
clear();
|
||||
|
||||
for (QAction* action : actionList) {
|
||||
QIcon icon = action->icon();
|
||||
if (icon.isNull()) {
|
||||
this->addItem(action->text());
|
||||
}
|
||||
case QEvent::ActionChanged:
|
||||
{
|
||||
QVariant data = action->data();
|
||||
int index = this->findData(data);
|
||||
// added a workbench
|
||||
if (index < 0 && action->isVisible()) {
|
||||
QIcon icon = action->icon();
|
||||
if (icon.isNull())
|
||||
this->addItem(action->text(), data);
|
||||
else
|
||||
this->addItem(icon, action->text(), data);
|
||||
}
|
||||
// removed a workbench
|
||||
else if (index >=0 && !action->isVisible()) {
|
||||
this->removeItem(index);
|
||||
}
|
||||
break;
|
||||
else {
|
||||
this->addItem(icon, action->text());
|
||||
}
|
||||
case QEvent::ActionRemoved:
|
||||
{
|
||||
//Nothing needs to be done
|
||||
break;
|
||||
|
||||
if (action->isChecked()) {
|
||||
this->setCurrentIndex(this->count() - 1);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void WorkbenchComboBox::onActivated(int item)
|
||||
/* TRANSLATOR Gui::WorkbenchGroup */
|
||||
WorkbenchGroup::WorkbenchGroup ( Command* pcCmd, QObject * parent )
|
||||
: ActionGroup( pcCmd, parent )
|
||||
{
|
||||
// Send the event to the workbench group to delay the destruction of the emitting widget.
|
||||
int index = itemData(item).toInt();
|
||||
auto ev = new WorkbenchActionEvent(this->actions().at(index));
|
||||
QApplication::postEvent(this->group, ev);
|
||||
refreshWorkbenchList();
|
||||
|
||||
Application::Instance->signalRefreshWorkbenches.connect(boost::bind(&WorkbenchGroup::refreshWorkbenchList, this));
|
||||
|
||||
connect(getMainWindow(), &MainWindow::workbenchActivated,
|
||||
this, &WorkbenchGroup::onWorkbenchActivated);
|
||||
}
|
||||
|
||||
void WorkbenchComboBox::onActivated(QAction* action)
|
||||
void WorkbenchGroup::addTo(QWidget *widget)
|
||||
{
|
||||
// set the according item to the action
|
||||
QVariant data = action->data();
|
||||
int index = this->findData(data);
|
||||
setCurrentIndex(index);
|
||||
auto setupBox = [&](WorkbenchComboBox* box) {
|
||||
box->setIconSize(QSize(16, 16));
|
||||
box->setToolTip(toolTip());
|
||||
box->setStatusTip(action()->statusTip());
|
||||
box->setWhatsThis(action()->whatsThis());
|
||||
box->refreshList(actions());
|
||||
connect(this, &WorkbenchGroup::workbenchListRefreshed, box, &WorkbenchComboBox::refreshList);
|
||||
connect(groupAction(), &QActionGroup::triggered, box, [this, box](QAction* action) {
|
||||
box->setCurrentIndex(actions().indexOf(action));
|
||||
});
|
||||
connect(box, qOverload<int>(&WorkbenchComboBox::activated), this, [this](int index) {
|
||||
actions()[index]->trigger();
|
||||
});
|
||||
};
|
||||
if (widget->inherits("QToolBar")) {
|
||||
auto* box = new WorkbenchComboBox(widget);
|
||||
setupBox(box);
|
||||
|
||||
qobject_cast<QToolBar*>(widget)->addWidget(box);
|
||||
}
|
||||
else if (widget->inherits("QMenuBar")) {
|
||||
auto* box = new WorkbenchComboBox(widget);
|
||||
setupBox(box);
|
||||
|
||||
bool left = WorkbenchSwitcher::isLeftCorner(WorkbenchSwitcher::getValue());
|
||||
qobject_cast<QMenuBar*>(widget)->setCornerWidget(box, left ? Qt::TopLeftCorner : Qt::TopRightCorner);
|
||||
}
|
||||
else if (widget->inherits("QMenu")) {
|
||||
auto menu = qobject_cast<QMenu*>(widget);
|
||||
menu = menu->addMenu(action()->text());
|
||||
menu->addActions(actions());
|
||||
|
||||
connect(this, &WorkbenchGroup::workbenchListRefreshed, this, [menu](QList<QAction*> actions) {
|
||||
menu->clear();
|
||||
menu->addActions(actions);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void WorkbenchComboBox::onWorkbenchActivated(const QString& name)
|
||||
void WorkbenchGroup::refreshWorkbenchList()
|
||||
{
|
||||
QStringList enabled_wbs_list = DlgSettingsWorkbenchesImp::getEnabledWorkbenches();
|
||||
|
||||
// Clear the actions.
|
||||
for (QAction* action : actions()) {
|
||||
groupAction()->removeAction(action);
|
||||
delete action;
|
||||
}
|
||||
|
||||
std::string activeWbName = "";
|
||||
Workbench* activeWB = WorkbenchManager::instance()->active();
|
||||
if (activeWB)
|
||||
activeWbName = activeWB->name();
|
||||
|
||||
// Create action list of enabled wb
|
||||
int index = 0;
|
||||
for (const auto& wbName : enabled_wbs_list) {
|
||||
QString name = Application::Instance->workbenchMenuText(wbName);
|
||||
QPixmap px = Application::Instance->workbenchIcon(wbName);
|
||||
QString tip = Application::Instance->workbenchToolTip(wbName);
|
||||
|
||||
QAction* action = groupAction()->addAction(name);
|
||||
action->setCheckable(true);
|
||||
action->setData(QVariant(index)); // set the index
|
||||
action->setObjectName(wbName);
|
||||
action->setIcon(px);
|
||||
action->setToolTip(tip);
|
||||
action->setStatusTip(tr("Select the '%1' workbench").arg(name));
|
||||
if (index < 9) {
|
||||
action->setShortcut(QKeySequence(QString::fromUtf8("W,%1").arg(index + 1)));
|
||||
}
|
||||
if (wbName.toStdString() == activeWbName) {
|
||||
action->setChecked(true);
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
// Signal to the widgets (WorkbenchComboBox & menu) to update the wb list
|
||||
workbenchListRefreshed(actions());
|
||||
}
|
||||
|
||||
void WorkbenchGroup::onWorkbenchActivated(const QString& name)
|
||||
{
|
||||
// There might be more than only one instance of WorkbenchComboBox there.
|
||||
// However, all of them share the same QAction objects. Thus, if the user
|
||||
@@ -720,166 +746,17 @@ void WorkbenchComboBox::onWorkbenchActivated(const QString& name)
|
||||
// activateWorkbench the method refreshWorkbenchList() shouldn't set the
|
||||
// checked item.
|
||||
//QVariant item = itemData(currentIndex());
|
||||
QList<QAction*> act = actions();
|
||||
for (QList<QAction*>::Iterator it = act.begin(); it != act.end(); ++it) {
|
||||
if ((*it)->objectName() == name) {
|
||||
if (/*(*it)->data() != item*/!(*it)->isChecked()) {
|
||||
(*it)->trigger();
|
||||
|
||||
for (QAction* action : actions()) {
|
||||
if (action->objectName() == name) {
|
||||
if (!action->isChecked()) {
|
||||
action->trigger();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* TRANSLATOR Gui::WorkbenchGroup */
|
||||
WorkbenchGroup::WorkbenchGroup ( Command* pcCmd, QObject * parent )
|
||||
: ActionGroup( pcCmd, parent )
|
||||
{
|
||||
// Start a list with 50 elements but extend it when requested
|
||||
for (int i=0; i<50; i++) {
|
||||
QAction* action = groupAction()->addAction(QLatin1String(""));
|
||||
action->setVisible(false);
|
||||
action->setCheckable(true);
|
||||
action->setData(QVariant(i)); // set the index
|
||||
}
|
||||
|
||||
Application::Instance->signalActivateWorkbench.connect(boost::bind(&WorkbenchGroup::slotActivateWorkbench, this, bp::_1));
|
||||
Application::Instance->signalAddWorkbench.connect(boost::bind(&WorkbenchGroup::slotAddWorkbench, this, bp::_1));
|
||||
Application::Instance->signalRemoveWorkbench.connect(boost::bind(&WorkbenchGroup::slotRemoveWorkbench, this, bp::_1));
|
||||
}
|
||||
|
||||
void WorkbenchGroup::addTo(QWidget *widget)
|
||||
{
|
||||
refreshWorkbenchList();
|
||||
|
||||
auto setupBox = [&](WorkbenchComboBox* box) {
|
||||
box->setIconSize(QSize(16, 16));
|
||||
box->setToolTip(toolTip());
|
||||
box->setStatusTip(action()->statusTip());
|
||||
box->setWhatsThis(action()->whatsThis());
|
||||
box->addActions(groupAction()->actions());
|
||||
connect(groupAction(), &QActionGroup::triggered, box, qOverload<QAction*>(&WorkbenchComboBox::onActivated));
|
||||
};
|
||||
if (widget->inherits("QToolBar")) {
|
||||
auto* box = new WorkbenchComboBox(this, widget);
|
||||
setupBox(box);
|
||||
|
||||
qobject_cast<QToolBar*>(widget)->addWidget(box);
|
||||
}
|
||||
else if (widget->inherits("QMenuBar")) {
|
||||
auto* box = new WorkbenchComboBox(this, widget);
|
||||
setupBox(box);
|
||||
|
||||
bool left = WorkbenchSwitcher::isLeftCorner(WorkbenchSwitcher::getValue());
|
||||
qobject_cast<QMenuBar*>(widget)->setCornerWidget(box, left ? Qt::TopLeftCorner : Qt::TopRightCorner);
|
||||
}
|
||||
else if (widget->inherits("QMenu")) {
|
||||
auto menu = qobject_cast<QMenu*>(widget);
|
||||
menu = menu->addMenu(action()->text());
|
||||
menu->addActions(groupAction()->actions());
|
||||
}
|
||||
}
|
||||
|
||||
void WorkbenchGroup::setWorkbenchData(int index, const QString& wb)
|
||||
{
|
||||
QList<QAction*> workbenches = groupAction()->actions();
|
||||
QString name = Application::Instance->workbenchMenuText(wb);
|
||||
QPixmap px = Application::Instance->workbenchIcon(wb);
|
||||
QString tip = Application::Instance->workbenchToolTip(wb);
|
||||
|
||||
workbenches[index]->setObjectName(wb);
|
||||
workbenches[index]->setIcon(px);
|
||||
workbenches[index]->setText(name);
|
||||
workbenches[index]->setToolTip(tip);
|
||||
workbenches[index]->setStatusTip(tr("Select the '%1' workbench").arg(name));
|
||||
workbenches[index]->setVisible(true);
|
||||
if (index < 9) {
|
||||
workbenches[index]->setShortcut(QKeySequence(QString::fromUtf8("W,%1").arg(index+1)));
|
||||
}
|
||||
}
|
||||
|
||||
void WorkbenchGroup::refreshWorkbenchList()
|
||||
{
|
||||
QStringList enabled_wbs_list = DlgSettingsWorkbenchesImp::getEnabledWorkbenches();
|
||||
|
||||
// Resize the action group.
|
||||
QList<QAction*> workbenches = groupAction()->actions();
|
||||
int numActions = workbenches.size();
|
||||
int extend = enabled_wbs_list.size() - numActions;
|
||||
if (extend > 0) {
|
||||
for (int i=0; i<extend; i++) {
|
||||
QAction* action = groupAction()->addAction(QLatin1String(""));
|
||||
action->setCheckable(true);
|
||||
action->setData(QVariant(numActions++)); // set the index
|
||||
}
|
||||
}
|
||||
|
||||
// Show all enabled wb
|
||||
int index = 0;
|
||||
for (const auto& it : enabled_wbs_list) {
|
||||
setWorkbenchData(index++, it);
|
||||
}
|
||||
}
|
||||
|
||||
void WorkbenchGroup::customEvent( QEvent* event )
|
||||
{
|
||||
if (event->type() == QEvent::User) {
|
||||
auto ce = static_cast<Gui::WorkbenchActionEvent*>(event);
|
||||
ce->action()->trigger();
|
||||
}
|
||||
}
|
||||
|
||||
void WorkbenchGroup::slotActivateWorkbench(const char* /*name*/)
|
||||
{
|
||||
}
|
||||
|
||||
void WorkbenchGroup::slotAddWorkbench(const char* name)
|
||||
{
|
||||
QList<QAction*> workbenches = groupAction()->actions();
|
||||
QAction* action = nullptr;
|
||||
for (auto it : workbenches) {
|
||||
if (!it->isVisible()) {
|
||||
action = it;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!action) {
|
||||
int index = workbenches.size();
|
||||
action = groupAction()->addAction(QLatin1String(""));
|
||||
action->setCheckable(true);
|
||||
action->setData(QVariant(index)); // set the index
|
||||
}
|
||||
|
||||
QString wb = QString::fromLatin1(name);
|
||||
QPixmap px = Application::Instance->workbenchIcon(wb);
|
||||
QString text = Application::Instance->workbenchMenuText(wb);
|
||||
QString tip = Application::Instance->workbenchToolTip(wb);
|
||||
action->setIcon(px);
|
||||
action->setObjectName(wb);
|
||||
action->setText(text);
|
||||
action->setToolTip(tip);
|
||||
action->setStatusTip(tr("Select the '%1' workbench").arg(wb));
|
||||
action->setVisible(true); // do this at last
|
||||
}
|
||||
|
||||
void WorkbenchGroup::slotRemoveWorkbench(const char* name)
|
||||
{
|
||||
QString workbench = QString::fromLatin1(name);
|
||||
QList<QAction*> workbenches = groupAction()->actions();
|
||||
for (auto it : workbenches) {
|
||||
if (it->objectName() == workbench) {
|
||||
it->setObjectName(QString());
|
||||
it->setIcon(QIcon());
|
||||
it->setText(QString());
|
||||
it->setToolTip(QString());
|
||||
it->setStatusTip(QString());
|
||||
it->setVisible(false); // do this at last
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
class RecentFilesAction::Private: public ParameterGrp::ObserverType
|
||||
@@ -1174,15 +1051,16 @@ void RecentMacrosAction::setFiles(const QStringList& files)
|
||||
if (!existingCommands.isEmpty()) {
|
||||
auto msgMain = QStringLiteral("Recent macros : keyboard shortcut(s)");
|
||||
for (int index = 0; index < accel_col.count(); index++) {
|
||||
msgMain = msgMain + QStringLiteral(" %1").arg(accel_col[index]);
|
||||
msgMain += QStringLiteral(" %1").arg(accel_col[index]);
|
||||
}
|
||||
msgMain = msgMain + QStringLiteral(" disabled because of conflicts with");
|
||||
msgMain += QStringLiteral(" disabled because of conflicts with");
|
||||
for (int index = 0; index < existingCommands.count(); index++) {
|
||||
msgMain = msgMain + QStringLiteral(" %1").arg(existingCommands[index]);
|
||||
msgMain += QStringLiteral(" %1").arg(existingCommands[index]);
|
||||
}
|
||||
msgMain = msgMain + QStringLiteral(" respectively.\nHint: In Preferences -> Macros -> Recent Macros -> Keyboard Modifiers"
|
||||
" this should be Ctrl+Shift+ by default, if this is now blank then you should revert"
|
||||
" it back to Ctrl+Shift+ by pressing both keys at the same time.");
|
||||
msgMain += QStringLiteral(" respectively.\nHint: In Preferences -> Python -> Macro ->"
|
||||
" Recent Macros menu -> Keyboard Modifiers this should be Ctrl+Shift+"
|
||||
" by default, if this is now blank then you should revert it back to"
|
||||
" Ctrl+Shift+ by pressing both keys at the same time.");
|
||||
Base::Console().Warning("%s\n", qPrintable(msgMain));
|
||||
}
|
||||
}
|
||||
|
||||
+7
-19
@@ -177,29 +177,18 @@ private:
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
class WorkbenchGroup;
|
||||
class GuiExport WorkbenchComboBox : public QComboBox
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit WorkbenchComboBox(WorkbenchGroup* wb, QWidget* parent=nullptr);
|
||||
explicit WorkbenchComboBox(QWidget* parent=nullptr);
|
||||
void showPopup() override;
|
||||
|
||||
public Q_SLOTS:
|
||||
void onActivated(int);
|
||||
void onActivated(QAction*);
|
||||
|
||||
protected Q_SLOTS:
|
||||
void onWorkbenchActivated(const QString&);
|
||||
|
||||
protected:
|
||||
void actionEvent (QActionEvent*) override;
|
||||
void refreshList(QList<QAction*>);
|
||||
|
||||
private:
|
||||
WorkbenchGroup* group;
|
||||
|
||||
Q_DISABLE_COPY(WorkbenchComboBox)
|
||||
};
|
||||
|
||||
@@ -222,15 +211,14 @@ public:
|
||||
void refreshWorkbenchList();
|
||||
|
||||
void slotActivateWorkbench(const char*);
|
||||
void slotAddWorkbench(const char*);
|
||||
void slotRemoveWorkbench(const char*);
|
||||
|
||||
protected:
|
||||
void customEvent(QEvent* event) override;
|
||||
Q_SIGNALS:
|
||||
void workbenchListRefreshed(QList<QAction*>);
|
||||
|
||||
protected Q_SLOTS:
|
||||
void onWorkbenchActivated(const QString&);
|
||||
|
||||
private:
|
||||
void setWorkbenchData(int index, const QString& wb);
|
||||
|
||||
Q_DISABLE_COPY(WorkbenchGroup)
|
||||
};
|
||||
|
||||
|
||||
@@ -126,10 +126,8 @@ public:
|
||||
boost::signals2::signal<void (const Gui::ViewProvider&)> signalActivatedObject;
|
||||
/// signal on activated workbench
|
||||
boost::signals2::signal<void (const char*)> signalActivateWorkbench;
|
||||
/// signal on added workbench
|
||||
boost::signals2::signal<void (const char*)> signalAddWorkbench;
|
||||
/// signal on removed workbench
|
||||
boost::signals2::signal<void (const char*)> signalRemoveWorkbench;
|
||||
/// signal on added/removed workbench
|
||||
boost::signals2::signal<void ()> signalRefreshWorkbenches;
|
||||
/// signal on show hidden items
|
||||
boost::signals2::signal<void (const Gui::Document&)> signalShowHidden;
|
||||
/// signal on activating view
|
||||
|
||||
@@ -976,7 +976,7 @@ PyObject* Application::sAddWorkbenchHandler(PyObject * /*self*/, PyObject *args)
|
||||
}
|
||||
|
||||
PyDict_SetItemString(Instance->_pcWorkbenchDictionary,item.c_str(),object.ptr());
|
||||
Instance->signalAddWorkbench(item.c_str());
|
||||
Instance->signalRefreshWorkbenches();
|
||||
}
|
||||
catch (const Py::Exception&) {
|
||||
return nullptr;
|
||||
@@ -997,9 +997,9 @@ PyObject* Application::sRemoveWorkbenchHandler(PyObject * /*self*/, PyObject *ar
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Instance->signalRemoveWorkbench(psKey);
|
||||
WorkbenchManager::instance()->removeWorkbench(psKey);
|
||||
PyDict_DelItemString(Instance->_pcWorkbenchDictionary,psKey);
|
||||
Instance->signalRefreshWorkbenches();
|
||||
|
||||
Py_Return;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
#endif
|
||||
|
||||
#include <App/Application.h>
|
||||
#include <App/ComplexGeoData.h>
|
||||
#include <App/ElementNamingUtils.h>
|
||||
#include <App/Document.h>
|
||||
#include <App/DocumentObject.h>
|
||||
#include <App/Link.h>
|
||||
@@ -294,8 +294,8 @@ void StdCmdLinkMakeRelative::activated(int) {
|
||||
if(!sel.pObject || !sel.pObject->getNameInDocument())
|
||||
continue;
|
||||
auto key = std::make_pair(sel.pObject,
|
||||
Data::ComplexGeoData::noElementName(sel.SubName));
|
||||
auto element = Data::ComplexGeoData::findElementName(sel.SubName);
|
||||
Data::noElementName(sel.SubName));
|
||||
auto element = Data::findElementName(sel.SubName);
|
||||
auto &info = linkInfo[key];
|
||||
info.first = sel.pResolvedObject;
|
||||
if(element && element[0])
|
||||
|
||||
@@ -293,6 +293,9 @@ void DlgSettingsWorkbenchesImp::saveSettings()
|
||||
hGrp->SetASCII("Ordered", orderedStr.str().c_str());
|
||||
hGrp->SetASCII("Disabled", disabledStr.str().c_str());
|
||||
|
||||
//Update the list of workbenches in the WorkbenchGroup and in the WorkbenchComboBox & workbench QMenu
|
||||
Application::Instance->signalRefreshWorkbenches();
|
||||
|
||||
App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/General")->
|
||||
SetASCII("BackgroundAutoloadModules", autoloadStr.str().c_str());
|
||||
|
||||
@@ -477,8 +480,6 @@ void DlgSettingsWorkbenchesImp::loadWorkbenchSelector()
|
||||
|
||||
void DlgSettingsWorkbenchesImp::wbToggled(const QString& wbName, bool enabled)
|
||||
{
|
||||
requireRestart();
|
||||
|
||||
setStartWorkbenchComboItems();
|
||||
|
||||
//reorder the list of items.
|
||||
@@ -551,7 +552,6 @@ void DlgSettingsWorkbenchesImp::setStartWorkbenchComboItems()
|
||||
|
||||
void DlgSettingsWorkbenchesImp::wbItemMoved()
|
||||
{
|
||||
requireRestart();
|
||||
for (int i = 0; i < ui->wbList->count(); i++) {
|
||||
wbListItem* wbItem = dynamic_cast<wbListItem*>(ui->wbList->itemWidget(ui->wbList->item(i)));
|
||||
if (wbItem) {
|
||||
|
||||
@@ -36,11 +36,11 @@
|
||||
#endif
|
||||
|
||||
#include <App/AutoTransaction.h>
|
||||
#include <App/ComplexGeoData.h>
|
||||
#include <App/Document.h>
|
||||
#include <App/DocumentObject.h>
|
||||
#include <App/DocumentObjectGroup.h>
|
||||
#include <App/Transactions.h>
|
||||
#include <App/ElementNamingUtils.h>
|
||||
#include <Base/Console.h>
|
||||
#include <Base/Exception.h>
|
||||
#include <Base/Matrix.h>
|
||||
@@ -408,7 +408,7 @@ bool Document::setEdit(Gui::ViewProvider* p, int ModNum, const char *subname)
|
||||
d->_editSubname.clear();
|
||||
|
||||
if (subname) {
|
||||
const char *element = Data::ComplexGeoData::findElementName(subname);
|
||||
const char *element = Data::findElementName(subname);
|
||||
if (element) {
|
||||
d->_editSubname = std::string(subname,element-subname);
|
||||
d->_editSubElement = element;
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 149 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 149 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 396 KiB |
@@ -4731,7 +4731,7 @@ You can also use the form: John Doe <[email protected]></source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Асноўны колер для ўсіх элементаў</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4732,7 +4732,7 @@ Sie können auch das Formular verwenden: John Doe <[email protected]></translat
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Grundfarbe für alle Elemente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4740,7 +4740,7 @@ También puede utilizar el formulario: John Doe <[email protected]></translatio
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Color base para todos los elementos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
@@ -8042,7 +8042,7 @@ Do you want to specify another directory?</source>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="911"/>
|
||||
<source>Show an extra tree view column for item description. The item's description can be set by pressing F2 (or your OS's edit button) or by editing the 'label2' property.</source>
|
||||
<translation>Mostrar una columna extra de vista de árbol para la descripción del elemento. La descripción del elemento se puede establecer pulsando F2 (o el botón de edición de tu sistema operativo) o editando la propiedad 'label2'.</translation>
|
||||
<translation>Muestra una columna extra de vista de árbol para la descripción del artículo. La descripción del elemento se puede establecer pulsando F2 (o el botón de edición de tu sistema operativo) o editando la propiedad 'label2'.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="952"/>
|
||||
|
||||
@@ -4742,7 +4742,7 @@ También puede utilizar el formulario: John Doe <[email protected]></translatio
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Color base para todos los elementos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4748,7 +4748,7 @@ Honako forma ere erabili dezakezu: Jon Inor <[email protected]></translation>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Elementu guztietarako oinarri-kolorea</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4738,7 +4738,7 @@ Vous pouvez également utiliser la forme : John Doe <[email protected]></transl
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Couleur de base pour tous les éléments</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4744,7 +4744,7 @@ Használhatja az űrlapot is: Gipsz Jakab <[email protected]></translation>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Alapszín minden elemnek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
<location filename="../CommandTest.cpp" line="718"/>
|
||||
<location filename="../CommandTest.cpp" line="719"/>
|
||||
<source>Run test cases to verify console messages</source>
|
||||
<translation type="unfinished">Run test cases to verify console messages</translation>
|
||||
<translation>コンソールメッセージを確認するためのテストケースを実行</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -98,7 +98,7 @@
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="3303"/>
|
||||
<source>Clear all visible measurements</source>
|
||||
<translation type="unfinished">Clear all visible measurements</translation>
|
||||
<translation>表示されているすべての測定値をクリア</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -111,7 +111,7 @@
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="3333"/>
|
||||
<source>Turn on or off the display of all measurements</source>
|
||||
<translation type="unfinished">Turn on or off the display of all measurements</translation>
|
||||
<translation>すべての測定値の表示をオンまたはオフにする</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -228,7 +228,7 @@
|
||||
<location filename="../TaskView/TaskImage.cpp" line="258"/>
|
||||
<location filename="../TaskView/TaskOrientation.cpp" line="65"/>
|
||||
<source>Edit image</source>
|
||||
<translation type="unfinished">Edit image</translation>
|
||||
<translation>画像の編集</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -2033,12 +2033,12 @@ dot/period will always be printed.</translation>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="20"/>
|
||||
<source>Language and number format</source>
|
||||
<translation type="unfinished">Language and number format</translation>
|
||||
<translation>言語と数値形式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="41"/>
|
||||
<source>Language:</source>
|
||||
<translation type="unfinished">Language:</translation>
|
||||
<translation>言語:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="55"/>
|
||||
@@ -2048,7 +2048,7 @@ dot/period will always be printed.</translation>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="62"/>
|
||||
<source>Unit system that should be used for all parts of the application</source>
|
||||
<translation type="unfinished">Unit system that should be used for all parts of the application</translation>
|
||||
<translation>アプリケーションのすべての部品で使用される単位系</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="71"/>
|
||||
@@ -2073,7 +2073,7 @@ dot/period will always be printed.</translation>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="180"/>
|
||||
<source>Substitute decimal separator</source>
|
||||
<translation type="unfinished">Substitute decimal separator</translation>
|
||||
<translation>小数点以下の区切り文字</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="196"/>
|
||||
@@ -2118,7 +2118,7 @@ this according to your screen size or personal taste</source>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="264"/>
|
||||
<source>Size of recent file list:</source>
|
||||
<translation type="unfinished">Size of recent file list:</translation>
|
||||
<translation>最近使用したファイル一覧のサイズ:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="287"/>
|
||||
@@ -2882,7 +2882,7 @@ Specify another directory, please.</source>
|
||||
<message>
|
||||
<location filename="../DlgPreferencesImp.cpp" line="493"/>
|
||||
<source>Restart required</source>
|
||||
<translation type="unfinished">Restart required</translation>
|
||||
<translation>再起動が必要です。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgPreferencesImp.cpp" line="494"/>
|
||||
@@ -3059,12 +3059,12 @@ Specify another directory, please.</source>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.cpp" line="106"/>
|
||||
<source>Failed to extract project</source>
|
||||
<translation type="unfinished">Failed to extract project</translation>
|
||||
<translation>プロジェクトの展開に失敗しました。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.cpp" line="123"/>
|
||||
<source>Failed to create project</source>
|
||||
<translation type="unfinished">Failed to create project</translation>
|
||||
<translation>プロジェクトの作成に失敗しました。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -6963,7 +6963,7 @@ How do you want to proceed?</source>
|
||||
<message>
|
||||
<location filename="../ManualAlignment.cpp" line="1262"/>
|
||||
<source>&Align</source>
|
||||
<translation type="unfinished">&Align</translation>
|
||||
<translation>整列(&A)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ManualAlignment.cpp" line="1263"/>
|
||||
@@ -8823,12 +8823,12 @@ Do you want to continue?</source>
|
||||
<location filename="../NotificationArea.cpp" line="553"/>
|
||||
<location filename="../NotificationArea.cpp" line="1022"/>
|
||||
<source>Message</source>
|
||||
<translation type="unfinished">Message</translation>
|
||||
<translation>メッセージ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../NotificationArea.cpp" line="963"/>
|
||||
<source>Notifier: </source>
|
||||
<translation type="unfinished">Notifier: </translation>
|
||||
<translation>通知: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../NotificationArea.cpp" line="965"/>
|
||||
@@ -9386,7 +9386,7 @@ the current copy will be lost.
|
||||
<message>
|
||||
<location filename="../ViewProviderImagePlane.cpp" line="147"/>
|
||||
<source>Change image...</source>
|
||||
<translation type="unfinished">Change image...</translation>
|
||||
<translation>画像を変更...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SoFCColorGradient.cpp" line="89"/>
|
||||
@@ -11824,7 +11824,7 @@ the current copy will be lost.
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="1811"/>
|
||||
<source>Save image...</source>
|
||||
<translation type="unfinished">Save image...</translation>
|
||||
<translation>画像を保存...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="1812"/>
|
||||
@@ -12083,7 +12083,7 @@ Do you still want to proceed?</source>
|
||||
<message>
|
||||
<location filename="../Workbench.cpp" line="531"/>
|
||||
<source>Clipboard</source>
|
||||
<translation type="unfinished">Clipboard</translation>
|
||||
<translation>クリップボード</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Workbench.cpp" line="532"/>
|
||||
@@ -12200,7 +12200,7 @@ Do you still want to proceed?</source>
|
||||
<location filename="../DlgSettingsNotificationArea.ui" line="14"/>
|
||||
<location filename="../DlgSettingsNotificationArea.cpp" line="57"/>
|
||||
<source>Notification Area</source>
|
||||
<translation type="unfinished">Notification Area</translation>
|
||||
<translation>通知領域</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNotificationArea.ui" line="20"/>
|
||||
@@ -12240,7 +12240,7 @@ Do you still want to proceed?</source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNotificationArea.ui" line="76"/>
|
||||
<source>Debug errors</source>
|
||||
<translation type="unfinished">Debug errors</translation>
|
||||
<translation>デバッグエラー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNotificationArea.ui" line="92"/>
|
||||
@@ -12486,27 +12486,27 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../TaskView/TaskImage.ui" line="103"/>
|
||||
<source>X distance:</source>
|
||||
<translation type="unfinished">X distance:</translation>
|
||||
<translation>X 距離:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../TaskView/TaskImage.ui" line="123"/>
|
||||
<source>Y distance:</source>
|
||||
<translation type="unfinished">Y distance:</translation>
|
||||
<translation>Y 距離:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../TaskView/TaskImage.ui" line="143"/>
|
||||
<source>Rotation :</source>
|
||||
<translation type="unfinished">Rotation :</translation>
|
||||
<translation>回転 :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../TaskView/TaskImage.ui" line="159"/>
|
||||
<source>Transparency :</source>
|
||||
<translation type="unfinished">Transparency :</translation>
|
||||
<translation>透明度 :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../TaskView/TaskImage.ui" line="191"/>
|
||||
<source>Image size</source>
|
||||
<translation type="unfinished">Image size</translation>
|
||||
<translation>画像サイズ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../TaskView/TaskImage.ui" line="197"/>
|
||||
@@ -12521,7 +12521,7 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../TaskView/TaskImage.ui" line="237"/>
|
||||
<source>Keep aspect ratio</source>
|
||||
<translation type="unfinished">Keep aspect ratio</translation>
|
||||
<translation>アスペクト比を維持</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../TaskView/TaskImage.ui" line="247"/>
|
||||
@@ -12569,7 +12569,7 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsWorkbenchesImp.cpp" line="127"/>
|
||||
<source>Auto-load</source>
|
||||
<translation type="unfinished">Auto-load</translation>
|
||||
<translation>自動読み込み</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsWorkbenchesImp.cpp" line="128"/>
|
||||
@@ -12625,12 +12625,12 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../NotificationArea.cpp" line="585"/>
|
||||
<source>Delete user notifications</source>
|
||||
<translation type="unfinished">Delete user notifications</translation>
|
||||
<translation>ユーザー通知を削除</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../NotificationArea.cpp" line="592"/>
|
||||
<source>Delete All</source>
|
||||
<translation type="unfinished">Delete All</translation>
|
||||
<translation>すべて削除</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -12638,12 +12638,12 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../NotificationArea.cpp" line="861"/>
|
||||
<source>Delete user notifications</source>
|
||||
<translation type="unfinished">Delete user notifications</translation>
|
||||
<translation>ユーザー通知を削除</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../NotificationArea.cpp" line="871"/>
|
||||
<source>Delete All</source>
|
||||
<translation type="unfinished">Delete All</translation>
|
||||
<translation>すべて削除</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -12661,7 +12661,7 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../ImageView.cpp" line="182"/>
|
||||
<source>Fit to window</source>
|
||||
<translation type="unfinished">Fit to window</translation>
|
||||
<translation>ウィンドウに合わせる</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ImageView.cpp" line="187"/>
|
||||
@@ -12679,13 +12679,13 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="1982"/>
|
||||
<source>Load image...</source>
|
||||
<translation type="unfinished">Load image...</translation>
|
||||
<translation>画像を読み込み...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="1983"/>
|
||||
<location filename="../CommandView.cpp" line="1985"/>
|
||||
<source>Loads an image</source>
|
||||
<translation type="unfinished">Loads an image</translation>
|
||||
<translation>画像を読み込み</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
||||
@@ -4737,7 +4737,7 @@ You can also use the form: John Doe <[email protected]></source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>ყველა ელემენტის ძირითადი ფერი</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4747,7 +4747,7 @@ U kunt ook het formulier gebruiken: John Doe <[email protected]></translation>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Basiskleur voor alle elementen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4746,7 +4746,7 @@ Możesz również skorzystać z formatki: John Doe <[email protected]></transla
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Podstawowy kolor dla wszystkich elementów</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
@@ -12729,7 +12729,7 @@ po uruchomieniu FreeCAD</translation>
|
||||
<message>
|
||||
<location filename="../NaviCube.cpp" line="1092"/>
|
||||
<source>Movable navigation cube</source>
|
||||
<translation>Ruchoma Kostka nawigacyjna</translation>
|
||||
<translation>Ruchoma kostka nawigacyjna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../NaviCube.cpp" line="1093"/>
|
||||
|
||||
@@ -4737,7 +4737,7 @@ You can also use the form: John Doe <[email protected]></source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Основной цвет для всех элементов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4750,7 +4750,7 @@ Lahko uporabite tudi obliko: Neznanec <[email protected]></translation>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Osnovna barva vseh predmetov</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4744,7 +4744,7 @@ Takođe možete koristiti obrazac: Pera Perić <[email protected]></translati
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Osnovna boja za sve elemente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -4744,7 +4744,7 @@ You can also use the form: John Doe <[email protected]></source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Основна боја за све елементе</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<message>
|
||||
<location filename="../ViewProviderOrigin.cpp" line="55"/>
|
||||
<source>The displayed size of the origin</source>
|
||||
<translation>Відображається розмір оригінала</translation>
|
||||
<translation>Розмір початку координат, що відображується на екрані</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ViewProviderOriginFeature.cpp" line="51"/>
|
||||
@@ -79,7 +79,7 @@
|
||||
<message>
|
||||
<location filename="../CommandTest.cpp" line="717"/>
|
||||
<source>Test console output</source>
|
||||
<translation>Вивід тестової консолі</translation>
|
||||
<translation>Тест виводу консолі</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CommandTest.cpp" line="718"/>
|
||||
@@ -334,7 +334,7 @@
|
||||
<message>
|
||||
<location filename="../DlgCustomizeSpNavSettings.ui" line="72"/>
|
||||
<source>Enable Translations</source>
|
||||
<translation>Ввімкнути переміщення</translation>
|
||||
<translation>Ввімкнути перетворення</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgCustomizeSpNavSettings.ui" line="82"/>
|
||||
@@ -443,7 +443,7 @@
|
||||
<message>
|
||||
<location filename="../Application.h" line="264"/>
|
||||
<source>Cutting</source>
|
||||
<translation>Перерізання</translation>
|
||||
<translation>Переріз</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Application.h" line="265"/>
|
||||
@@ -622,7 +622,7 @@ while doing a left or right click and move the mouse up or down</source>
|
||||
<message>
|
||||
<location filename="../WidgetFactory.cpp" line="369"/>
|
||||
<source>&Cancel</source>
|
||||
<translation>&Скасування</translation>
|
||||
<translation>&Скасувати</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -687,7 +687,7 @@ while doing a left or right click and move the mouse up or down</source>
|
||||
<message>
|
||||
<location filename="../AboutApplication.ui" line="177"/>
|
||||
<source>Word size</source>
|
||||
<translation>Розмір слова</translation>
|
||||
<translation>Розрядність</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AboutApplication.ui" line="225"/>
|
||||
@@ -1277,30 +1277,27 @@ If this is not ticked, then the property must be uniquely named, and it is acces
|
||||
<message>
|
||||
<location filename="../DlgKeyboard.ui" line="119"/>
|
||||
<source>&New shortcut:</source>
|
||||
<translation>&Новий ярлик:</translation>
|
||||
<translation>&Нова комбінація клавіш:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgKeyboard.ui" line="137"/>
|
||||
<source>Multi-key sequence delay: </source>
|
||||
<translation type="unfinished">Multi-key sequence delay: </translation>
|
||||
<translation>Затримка послідовності з мультиклавішами: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgKeyboard.ui" line="156"/>
|
||||
<source>Time in milliseconds to wait for the next key stroke of the current key sequence.
|
||||
For example, pressing 'F' twice in less than the time delay setting here will be
|
||||
be treated as shorctcut key sequence 'F, F'.</source>
|
||||
<translation type="unfinished">Time in milliseconds to wait for the next key stroke of the current key sequence.
|
||||
For example, pressing 'F' twice in less than the time delay setting here will be
|
||||
be treated as shorctcut key sequence 'F, F'.</translation>
|
||||
<translation>Час очікування в мілісекундах наступного натискання клавіші поточної послідовності клавіш.
|
||||
Наприклад, натискання 'F' двічі за час, менший за встановлену тут затримку, буде розцінюватиметься як скорочена послідовність клавіш 'F, F'.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgKeyboard.ui" line="186"/>
|
||||
<source>This list shows commands having the same shortcut in the priority from high
|
||||
to low. If more than one command with the same shortcut are active at the
|
||||
same time. The one with the highest priority will be triggered.</source>
|
||||
<translation type="unfinished">This list shows commands having the same shortcut in the priority from high
|
||||
to low. If more than one command with the same shortcut are active at the
|
||||
same time. The one with the highest priority will be triggered.</translation>
|
||||
<translation>У цьому списку показані команди, що мають однакову комбінацію клавіш з пріоритетом від високого до низького. Якщо декілька команд з однаковою комбінацією будуть активні одночасно, то спрацює та, що має найвищий пріоритет.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgKeyboard.ui" line="191"/>
|
||||
@@ -1362,7 +1359,7 @@ same time. The one with the highest priority will be triggered.</translation>
|
||||
<message>
|
||||
<location filename="../DlgKeyboardImp.cpp" line="141"/>
|
||||
<source>Type to search...</source>
|
||||
<translation>Введіть для пошуку...</translation>
|
||||
<translation>Введіть текст для пошуку...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgKeyboardImp.cpp" line="218"/>
|
||||
@@ -2867,7 +2864,7 @@ Specify another directory, please.</source>
|
||||
<message>
|
||||
<location filename="../DlgPreferencesImp.cpp" line="364"/>
|
||||
<source>Clear user settings</source>
|
||||
<translation>Очищення настроюань користувача</translation>
|
||||
<translation>Скинути налаштування користувача</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgPreferencesImp.cpp" line="365"/>
|
||||
@@ -2920,7 +2917,7 @@ Specify another directory, please.</source>
|
||||
<message>
|
||||
<location filename="../DlgProjectInformation.ui" line="47"/>
|
||||
<source>&Name:</source>
|
||||
<translation>Назва:</translation>
|
||||
<translation>&Назва:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectInformation.ui" line="73"/>
|
||||
@@ -2940,27 +2937,27 @@ Specify another directory, please.</source>
|
||||
<message>
|
||||
<location filename="../DlgProjectInformation.ui" line="142"/>
|
||||
<source>Created &by:</source>
|
||||
<translation>Створено:</translation>
|
||||
<translation>Створен&ий:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectInformation.ui" line="165"/>
|
||||
<source>Creation &date:</source>
|
||||
<translation>Дата створення:</translation>
|
||||
<translation>Дата ств&орення:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectInformation.ui" line="191"/>
|
||||
<source>&Last modified by:</source>
|
||||
<translation>І останні зміни внесені:</translation>
|
||||
<translation>&Останні зміни внесені:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectInformation.ui" line="214"/>
|
||||
<source>Last &modification date:</source>
|
||||
<translation>Дата останньої зміни:</translation>
|
||||
<translation>Дата ре&дагування:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectInformation.ui" line="240"/>
|
||||
<source>Com&pany:</source>
|
||||
<translation>Компанія:</translation>
|
||||
<translation>Комп&анія:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectInformation.ui" line="263"/>
|
||||
@@ -2992,7 +2989,7 @@ Specify another directory, please.</source>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.ui" line="14"/>
|
||||
<source>Project utility</source>
|
||||
<translation>Утиліта проєкту</translation>
|
||||
<translation>Утиліта роботи з проєктом</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.ui" line="22"/>
|
||||
@@ -3003,13 +3000,13 @@ Specify another directory, please.</source>
|
||||
<location filename="../DlgProjectUtility.ui" line="28"/>
|
||||
<location filename="../DlgProjectUtility.ui" line="78"/>
|
||||
<source>Source</source>
|
||||
<translation>Вихідний файл</translation>
|
||||
<translation>З файлу</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.ui" line="42"/>
|
||||
<location filename="../DlgProjectUtility.ui" line="92"/>
|
||||
<source>Destination</source>
|
||||
<translation>Тека Призначення</translation>
|
||||
<translation>У теку</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.ui" line="65"/>
|
||||
@@ -3040,13 +3037,13 @@ Specify another directory, please.</source>
|
||||
<location filename="../DlgProjectUtility.cpp" line="65"/>
|
||||
<location filename="../DlgProjectUtility.cpp" line="82"/>
|
||||
<source>Empty source</source>
|
||||
<translation>Порожній вихідний файл</translation>
|
||||
<translation>Файл не заданий</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.cpp" line="65"/>
|
||||
<location filename="../DlgProjectUtility.cpp" line="82"/>
|
||||
<source>No source is defined.</source>
|
||||
<translation>Немає визначеного джерела.</translation>
|
||||
<translation>Файл не заданий.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.cpp" line="70"/>
|
||||
@@ -3058,7 +3055,7 @@ Specify another directory, please.</source>
|
||||
<location filename="../DlgProjectUtility.cpp" line="70"/>
|
||||
<location filename="../DlgProjectUtility.cpp" line="86"/>
|
||||
<source>No destination is defined.</source>
|
||||
<translation>Не визначено теки призначення.</translation>
|
||||
<translation>Тека призначення відсутня.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgProjectUtility.cpp" line="106"/>
|
||||
@@ -3091,7 +3088,7 @@ Specify another directory, please.</source>
|
||||
<message>
|
||||
<location filename="../DlgPropertyLink.ui" line="56"/>
|
||||
<source>Sync sub-object selection</source>
|
||||
<translation>Синхронізувати вибір субоб’єкту</translation>
|
||||
<translation>Синхронізувати вибір підоб’єкту</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgPropertyLink.ui" line="88"/>
|
||||
@@ -3412,7 +3409,7 @@ in the corner -- in % of height/width of viewport</source>
|
||||
<location filename="../DlgSettings3DView.ui" line="101"/>
|
||||
<source>Axis cross will be shown by default at file
|
||||
opening or creation</source>
|
||||
<translation>Під час відкриття або створення файлу за замовчуванням буде зображатися перетин осей</translation>
|
||||
<translation>Під час відкриття або створення файлу за замовчуванням буде зображено перетин осей</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="105"/>
|
||||
@@ -3453,7 +3450,7 @@ Changing this option requires a restart of the application.</source>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="177"/>
|
||||
<source>Use OpenGL VBO (Vertex Buffer Object)</source>
|
||||
<translation>Використовувати OpenGL VBO (Vertex Buffer Object)</translation>
|
||||
<translation>Використати OpenGL VBO (Vertex Buffer Object)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="192"/>
|
||||
@@ -3533,7 +3530,7 @@ but slower response to any scene changes.</translation>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="264"/>
|
||||
<source>Line Smoothing</source>
|
||||
<translation>Згладжування лінії</translation>
|
||||
<translation>Згладжування ліній</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="269"/>
|
||||
@@ -3553,7 +3550,7 @@ but slower response to any scene changes.</translation>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="290"/>
|
||||
<source>Transparent objects:</source>
|
||||
<translation>Прозорі обʼєкти:</translation>
|
||||
<translation>Обчислення прозорості об'єктів:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="303"/>
|
||||
@@ -3628,7 +3625,7 @@ bounding box size of the 3D object that is currently displayed.</source>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="535"/>
|
||||
<source>Perspective renderin&g</source>
|
||||
<translation>Пе&рспективна візуалізація</translation>
|
||||
<translation>Пе&рспективна проєкція</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="548"/>
|
||||
@@ -3638,7 +3635,7 @@ bounding box size of the 3D object that is currently displayed.</source>
|
||||
<message>
|
||||
<location filename="../DlgSettings3DView.ui" line="551"/>
|
||||
<source>Or&thographic rendering</source>
|
||||
<translation>Ор&тогональна візуалізація</translation>
|
||||
<translation>Ор&тогональна проєкція</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source/>
|
||||
@@ -4746,7 +4743,7 @@ You can also use the form: John Doe <[email protected]></source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>Базовий колір для всіх елементів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
@@ -6996,7 +6993,7 @@ How do you want to proceed?</source>
|
||||
<message>
|
||||
<location filename="../ManualAlignment.cpp" line="1265"/>
|
||||
<source>&Cancel</source>
|
||||
<translation>&Скасування</translation>
|
||||
<translation>&Скасувати</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ManualAlignment.cpp" line="1269"/>
|
||||
@@ -11008,7 +11005,7 @@ the current copy will be lost.
|
||||
<message>
|
||||
<location filename="../CommandWindow.cpp" line="316"/>
|
||||
<source>Tool&bars</source>
|
||||
<translation>Панелі інструментів</translation>
|
||||
<translation>П&анелі інструментів</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CommandWindow.cpp" line="317"/>
|
||||
@@ -12747,12 +12744,12 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../View3DSettings.cpp" line="533"/>
|
||||
<source>FRONT</source>
|
||||
<translation type="unfinished">FRONT</translation>
|
||||
<translation>ПОПЕРЕДУ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View3DSettings.cpp" line="535"/>
|
||||
<source>TOP</source>
|
||||
<translation type="unfinished">TOP</translation>
|
||||
<translation>ВЕРХ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../View3DSettings.cpp" line="537"/>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
<location filename="../CommandTest.cpp" line="718"/>
|
||||
<location filename="../CommandTest.cpp" line="719"/>
|
||||
<source>Run test cases to verify console messages</source>
|
||||
<translation type="unfinished">Run test cases to verify console messages</translation>
|
||||
<translation>請執行測試案例以驗證主控台訊息。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -428,7 +428,7 @@
|
||||
<message>
|
||||
<location filename="../Application.h" line="255"/>
|
||||
<source>The object will be edited using the mode defined internally to be the most appropriate for the object type</source>
|
||||
<translation type="unfinished">The object will be edited using the mode defined internally to be the most appropriate for the object type</translation>
|
||||
<translation>此物件將被使用內部定義模式來編輯,這會是最適合的物件類型。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Application.h" line="259"/>
|
||||
@@ -438,7 +438,7 @@
|
||||
<message>
|
||||
<location filename="../Application.h" line="260"/>
|
||||
<source>The object will have its placement editable with the Std TransformManip command</source>
|
||||
<translation type="unfinished">The object will have its placement editable with the Std TransformManip command</translation>
|
||||
<translation>此物件的位置將可透過 Std TransformManip 指令進行編輯</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Application.h" line="264"/>
|
||||
@@ -448,7 +448,7 @@
|
||||
<message>
|
||||
<location filename="../Application.h" line="265"/>
|
||||
<source>This edit mode is implemented as available but currently does not seem to be used by any object</source>
|
||||
<translation type="unfinished">This edit mode is implemented as available but currently does not seem to be used by any object</translation>
|
||||
<translation>此編輯模式已實作為可用,但目前似乎沒有被任何物件使用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Application.h" line="269"/>
|
||||
@@ -458,7 +458,7 @@
|
||||
<message>
|
||||
<location filename="../Application.h" line="270"/>
|
||||
<source>The object will have the color of its individual faces editable with the Part FaceColors command</source>
|
||||
<translation type="unfinished">The object will have the color of its individual faces editable with the Part FaceColors command</translation>
|
||||
<translation>該物件的個別面的顏色將可透過 Part FaceColors 指令進行編輯</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1958,10 +1958,7 @@ same time. The one with the highest priority will be triggered.</source>
|
||||
will be substituted with locale separator, except
|
||||
in Python Console and Macro Editor where a
|
||||
dot/period will always be printed.</source>
|
||||
<translation>如果啟用,數字鍵盤小數點分隔符
|
||||
將替換為語系環境分隔符,除了
|
||||
在 Python 控制台和巨集編輯器中
|
||||
點/句點將始終顯示.</translation>
|
||||
<translation>如果啟用,數字鍵盤的小數點分隔符號將會被替換為區域設定的分隔符號,但在 Python 主控台和巨集編輯器中,將始終顯示一個點/句號。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgGeneral.ui" line="341"/>
|
||||
@@ -3111,7 +3108,7 @@ Specify another directory, please.</source>
|
||||
<message>
|
||||
<location filename="../DlgReportView.ui" line="14"/>
|
||||
<source>Report view</source>
|
||||
<translation>報表檢視</translation>
|
||||
<translation>報告檢視</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgReportView.ui" line="20"/>
|
||||
@@ -3270,8 +3267,8 @@ on-screen while displaying the log message</source>
|
||||
<location filename="../DlgReportView.ui" line="507"/>
|
||||
<source>Internal Python output will be redirected
|
||||
from Python console to Report view panel</source>
|
||||
<translation>內部 Python 輸出將從 Python 控制台
|
||||
重新指向到報告視窗面板</translation>
|
||||
<translation>內部 Python 輸出將從 Python 主控台
|
||||
轉向到報告視窗面板</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgReportView.ui" line="511"/>
|
||||
@@ -4587,7 +4584,7 @@ You can also use the form: John Doe <[email protected]></source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsMacro.ui" line="192"/>
|
||||
<source>Commands executed by macro scripts are shown in Python console</source>
|
||||
<translation>巨集腳本執行的指令會顯示在 Python 控制台中</translation>
|
||||
<translation>巨集腳本執行的指令會顯示在 Python 主控台中</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsMacro.ui" line="195"/>
|
||||
@@ -4736,7 +4733,7 @@ You can also use the form: John Doe <[email protected]></source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="212"/>
|
||||
<source>Base color for all elements</source>
|
||||
<translation type="unfinished">Base color for all elements</translation>
|
||||
<translation>所有元件之基底顏色</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsNavigation.ui" line="244"/>
|
||||
@@ -4955,7 +4952,7 @@ Mouse tilting is not disabled by this setting.</source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsPythonConsole.ui" line="14"/>
|
||||
<source>Python console</source>
|
||||
<translation>Python 控制台</translation>
|
||||
<translation>Python 主控台</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsPythonConsole.ui" line="20"/>
|
||||
@@ -4966,7 +4963,7 @@ Mouse tilting is not disabled by this setting.</source>
|
||||
<location filename="../DlgSettingsPythonConsole.ui" line="26"/>
|
||||
<source>Words will be wrapped when they exceed available
|
||||
horizontal space in Python console</source>
|
||||
<translation>當字詞超出 Python 控制台中的可用水平空間時,字詞將會換行</translation>
|
||||
<translation>當字詞在 Python 主控台中超過可用的水平空間時,它們將被換行。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgSettingsPythonConsole.ui" line="30"/>
|
||||
@@ -5038,7 +5035,7 @@ Larger value eases to pick things, but can make small features impossible to sel
|
||||
<message>
|
||||
<location filename="../DlgSettingsSelection.ui" line="91"/>
|
||||
<source>Add checkboxes for selection in document tree</source>
|
||||
<translation>在文件樹中增加複選框以供選擇</translation>
|
||||
<translation>在文件樹中添加複選框以進行選擇</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -5999,7 +5996,7 @@ The 'Status' column shows whether the document could be recovered.</source>
|
||||
<message>
|
||||
<location filename="../SceneInspector.cpp" line="69"/>
|
||||
<source>Inventor Tree</source>
|
||||
<translation>發明歷程</translation>
|
||||
<translation>建立者樹</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SceneInspector.cpp" line="71"/>
|
||||
@@ -6281,7 +6278,7 @@ originally selected prior to opening this dialog</source>
|
||||
<location filename="../ReportView.cpp" line="83"/>
|
||||
<location filename="../ReportView.cpp" line="108"/>
|
||||
<source>Python console</source>
|
||||
<translation>Python 控制台</translation>
|
||||
<translation>Python 主控台</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -7248,7 +7245,7 @@ Do you want to exit without saving your data?</source>
|
||||
<location filename="../PythonConsole.cpp" line="879"/>
|
||||
<location filename="../PythonConsole.cpp" line="882"/>
|
||||
<source>Python console</source>
|
||||
<translation>Python 控制台</translation>
|
||||
<translation>Python 主控台</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../PythonConsole.cpp" line="873"/>
|
||||
@@ -7313,7 +7310,7 @@ Do you want to exit without saving your data?</source>
|
||||
<message>
|
||||
<location filename="../PythonConsole.cpp" line="1347"/>
|
||||
<source>Clear console</source>
|
||||
<translation>清除控制台</translation>
|
||||
<translation>清除主控台</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../PythonConsole.cpp" line="1351"/>
|
||||
@@ -8009,7 +8006,7 @@ Do you want to specify another directory?</source>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="461"/>
|
||||
<source>Search for objects</source>
|
||||
<translation>搜尋物體</translation>
|
||||
<translation>搜尋物件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="887"/>
|
||||
@@ -8024,12 +8021,12 @@ Do you want to specify another directory?</source>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="906"/>
|
||||
<source>Tree settings</source>
|
||||
<translation type="unfinished">Tree settings</translation>
|
||||
<translation>樹狀設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="910"/>
|
||||
<source>Show description column</source>
|
||||
<translation type="unfinished">Show description column</translation>
|
||||
<translation>顯示說明欄</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="911"/>
|
||||
@@ -8105,12 +8102,12 @@ Do you want to specify another directory?</source>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="2808"/>
|
||||
<source>Add dependent objects to selection</source>
|
||||
<translation>將依賴物體增加到選擇</translation>
|
||||
<translation>將相依物件增加到選擇</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="2809"/>
|
||||
<source>Adds all dependent objects to the selection</source>
|
||||
<translation>將所有依賴物體增加到選擇</translation>
|
||||
<translation>將所有相依物件增加到選擇</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="2811"/>
|
||||
@@ -8150,7 +8147,7 @@ Do you want to specify another directory?</source>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="2822"/>
|
||||
<source>Enable or disable recomputating editing object when 'skip recomputation' is enabled</source>
|
||||
<translation>啟用'跳過重新計算'時啟用或禁用重新計算編輯物體</translation>
|
||||
<translation>啟用'跳過重新計算'時啟用或禁用重新計算編輯物件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="2824"/>
|
||||
@@ -8165,12 +8162,12 @@ Do you want to specify another directory?</source>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="2828"/>
|
||||
<source>Recompute object</source>
|
||||
<translation>重新計算物體</translation>
|
||||
<translation>重新計算物件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="2829"/>
|
||||
<source>Recompute the selected object</source>
|
||||
<translation>重新計算所選的物體</translation>
|
||||
<translation>重新計算所選的物件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Tree.cpp" line="4911"/>
|
||||
@@ -8422,12 +8419,12 @@ Do you want to specify another directory?</source>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="619"/>
|
||||
<source>Report view</source>
|
||||
<translation>報表檢視</translation>
|
||||
<translation>報告檢視</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="639"/>
|
||||
<source>Python console</source>
|
||||
<translation>Python 控制台</translation>
|
||||
<translation>Python 主控台</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgDisplayPropertiesImp.cpp" line="52"/>
|
||||
@@ -8838,7 +8835,7 @@ Do you want to continue?</source>
|
||||
<message>
|
||||
<location filename="../NotificationArea.cpp" line="965"/>
|
||||
<source>Do you want to skip confirmation of further critical message notifications while loading the file?</source>
|
||||
<translation type="unfinished">Do you want to skip confirmation of further critical message notifications while loading the file?</translation>
|
||||
<translation>當載入檔案時,您是否想要跳過進一步重要訊息通知的確認?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../NotificationArea.cpp" line="969"/>
|
||||
@@ -8855,9 +8852,7 @@ Do you want to continue?</source>
|
||||
<source>Identical physical path detected. It may cause unwanted overwrite of existing document!
|
||||
|
||||
</source>
|
||||
<translation type="unfinished">Identical physical path detected. It may cause unwanted overwrite of existing document!
|
||||
|
||||
</translation>
|
||||
<translation>偵測到相同的實體路徑。這可能會導致現有文件被不必要地覆寫!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="1052"/>
|
||||
@@ -8903,11 +8898,9 @@ Do you want to continue?</source>
|
||||
"%1"
|
||||
|
||||
Would you like to save the file with a different name?</source>
|
||||
<translation type="unfinished">There was an issue trying to save the file. This may be because some of the parent folders do not exist, or you do not have sufficient permissions, or for other reasons. Error details:
|
||||
<translation>儲存檔案時發生問題。這可能是因為一些上層資料夾不存在、您沒有足夠的權限,或其他原因所造成的。錯誤詳情:
|
||||
|
||||
"%1"
|
||||
|
||||
Would you like to save the file with a different name?</translation>
|
||||
"%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="1112"/>
|
||||
@@ -8924,7 +8917,7 @@ Would you like to save the file with a different name?</translation>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="1160"/>
|
||||
<source>The file contains external dependencies. Do you want to save the dependent files, too?</source>
|
||||
<translation type="unfinished">The file contains external dependencies. Do you want to save the dependent files, too?</translation>
|
||||
<translation>該檔案包含外部相依性。您是否也要一併儲存相依的檔案?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="1194"/>
|
||||
@@ -8957,7 +8950,7 @@ Would you like to save the file with a different name?</translation>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="1258"/>
|
||||
<source>Documents contains cyclic dependencies. Do you still want to save them?</source>
|
||||
<translation type="unfinished">Documents contains cyclic dependencies. Do you still want to save them?</translation>
|
||||
<translation>文件包含循環相依性。您是否仍然要儲存它們?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="1309"/>
|
||||
@@ -8987,7 +8980,7 @@ Would you like to save the file with a different name?</translation>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="2002"/>
|
||||
<source>The document%1 could not be saved. Do you want to cancel closing it?</source>
|
||||
<translation type="unfinished">The document%1 could not be saved. Do you want to cancel closing it?</translation>
|
||||
<translation>文件%1無法被儲存。請問您是否要關閉它?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="2330"/>
|
||||
@@ -9002,16 +8995,16 @@ Would you like to save the file with a different name?</translation>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="2332"/>
|
||||
<source>There are grouped transactions in the following documents with other preceding transactions</source>
|
||||
<translation type="unfinished">There are grouped transactions in the following documents with other preceding transactions</translation>
|
||||
<translation>以下文件中存在與其他前置交易進行分組的交易。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../Document.cpp" line="2335"/>
|
||||
<source>Choose 'Yes' to roll back all preceding transactions.
|
||||
Choose 'No' to roll back in the active document only.
|
||||
Choose 'Abort' to abort</source>
|
||||
<translation type="unfinished">Choose 'Yes' to roll back all preceding transactions.
|
||||
Choose 'No' to roll back in the active document only.
|
||||
Choose 'Abort' to abort</translation>
|
||||
<translation>選擇「是」以回滾所有前置交易。
|
||||
選擇「否」僅回滾活動文件中的交易。
|
||||
選擇「中止」以中止操作。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../EditorView.cpp" line="347"/>
|
||||
@@ -9135,7 +9128,7 @@ Please open a browser window and type in: http://localhost:%1.</source>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="697"/>
|
||||
<source>Do you want to save your changes to document before closing?</source>
|
||||
<translation type="unfinished">Do you want to save your changes to document before closing?</translation>
|
||||
<translation>您是否在關閉前要儲存改變至此文件?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="699"/>
|
||||
@@ -9155,7 +9148,7 @@ Please open a browser window and type in: http://localhost:%1.</source>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="795"/>
|
||||
<source>Some documents could not be saved. Do you want to cancel closing?</source>
|
||||
<translation type="unfinished">Some documents could not be saved. Do you want to cancel closing?</translation>
|
||||
<translation>某些文件無法被儲存。請問您是否要關閉它?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgMacroExecuteImp.cpp" line="440"/>
|
||||
@@ -9265,8 +9258,7 @@ Please open a browser window and type in: http://localhost:%1.</source>
|
||||
<location filename="../DlgAddProperty.cpp" line="103"/>
|
||||
<source>The property name or group name must only contain alpha numericals,
|
||||
underscore, and must not start with a digit.</source>
|
||||
<translation type="unfinished">The property name or group name must only contain alpha numericals,
|
||||
underscore, and must not start with a digit.</translation>
|
||||
<translation>屬性名稱或群組名稱只能包含字母、數字、底線,且不能以數字開頭。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../DlgAddProperty.cpp" line="116"/>
|
||||
@@ -9297,12 +9289,12 @@ underscore, and must not start with a digit.</translation>
|
||||
<message>
|
||||
<location filename="../ViewProviderLink.cpp" line="2422"/>
|
||||
<source>Select which object to copy or exclude when configuration changes. All external linked objects are excluded by default.</source>
|
||||
<translation type="unfinished">Select which object to copy or exclude when configuration changes. All external linked objects are excluded by default.</translation>
|
||||
<translation>當設定變更時,請選擇什麼物件要複製或排除。預設情況下,所有外部連結的物件都會被排除。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ViewProviderLink.cpp" line="2437"/>
|
||||
<source>Please select which objects to copy when the configuration is changed</source>
|
||||
<translation type="unfinished">Please select which objects to copy when the configuration is changed</translation>
|
||||
<translation>請選擇在設定變更時要複製的物件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ViewProviderLink.cpp" line="2439"/>
|
||||
@@ -9313,8 +9305,7 @@ underscore, and must not start with a digit.</translation>
|
||||
<location filename="../ViewProviderLink.cpp" line="2440"/>
|
||||
<source>Apply the setting to all links. Or, uncheck this
|
||||
option to apply only to this link.</source>
|
||||
<translation type="unfinished">Apply the setting to all links. Or, uncheck this
|
||||
option to apply only to this link.</translation>
|
||||
<translation>套用此設定至所有連結。或者,取消選中此選項僅將其套用於此連結。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ViewProviderLink.cpp" line="2485"/>
|
||||
@@ -9329,7 +9320,7 @@ option to apply only to this link.</translation>
|
||||
<message>
|
||||
<location filename="../ViewProviderLink.cpp" line="2487"/>
|
||||
<source>Enable auto copy of linked object when its configuration is changed</source>
|
||||
<translation type="unfinished">Enable auto copy of linked object when its configuration is changed</translation>
|
||||
<translation>當連結物件的設定更改時啟用自動複製連結物件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ViewProviderLink.cpp" line="2500"/>
|
||||
@@ -9341,8 +9332,8 @@ option to apply only to this link.</translation>
|
||||
<source>Copy the linked object when its configuration is changed.
|
||||
Also auto redo the copy if the original linked object is changed.
|
||||
</source>
|
||||
<translation type="unfinished">Copy the linked object when its configuration is changed.
|
||||
Also auto redo the copy if the original linked object is changed.
|
||||
<translation>當連結物件的設定更改時,複製該連結物件。
|
||||
如果原始連結物件發生更改,也自動重新執行複製。
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -9361,9 +9352,7 @@ Also auto redo the copy if the original linked object is changed.
|
||||
creating a new deep copy. Note that any changes made to
|
||||
the current copy will be lost.
|
||||
</source>
|
||||
<translation type="unfinished">Synchronize the original configurable source object by
|
||||
creating a new deep copy. Note that any changes made to
|
||||
the current copy will be lost.
|
||||
<translation>通過建立一個新的深度拷貝,將原始可配置的源物件進行同步。請注意,對目前拷貝所做的任何更改將會丟失。
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -9374,7 +9363,7 @@ the current copy will be lost.
|
||||
<message>
|
||||
<location filename="../ViewProviderLink.cpp" line="2577"/>
|
||||
<source>Change whether show each link array element as individual objects</source>
|
||||
<translation type="unfinished">Change whether show each link array element as individual objects</translation>
|
||||
<translation>更改是否將每個連結陣列元素顯示為個別的物件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ViewProviderLink.cpp" line="2595"/>
|
||||
@@ -10789,13 +10778,13 @@ the current copy will be lost.
|
||||
<message>
|
||||
<location filename="../CommandFeat.cpp" line="130"/>
|
||||
<source>&Send to Python Console</source>
|
||||
<translation>發送到 Python 控制台(&S)</translation>
|
||||
<translation>發送到 Python 主控台(&S)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CommandFeat.cpp" line="131"/>
|
||||
<location filename="../CommandFeat.cpp" line="133"/>
|
||||
<source>Sends the selected object to the Python console</source>
|
||||
<translation>將所選物體發送到 Python 控制台</translation>
|
||||
<translation>將所選物件發送到 Python 主控台</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -10907,7 +10896,7 @@ the current copy will be lost.
|
||||
<location filename="../CommandMacro.cpp" line="295"/>
|
||||
<location filename="../CommandMacro.cpp" line="297"/>
|
||||
<source>Add or remove a breakpoint at this position</source>
|
||||
<translation type="unfinished">Add or remove a breakpoint at this position</translation>
|
||||
<translation>在此位置增加或移除中斷點</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -11061,7 +11050,7 @@ the current copy will be lost.
|
||||
<location filename="../CommandView.cpp" line="3073"/>
|
||||
<location filename="../CommandView.cpp" line="3075"/>
|
||||
<source>Select all instances of the current selected object</source>
|
||||
<translation>選擇目前選定物體的全部實例</translation>
|
||||
<translation>選擇目前選定物件的全部實例</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -11643,7 +11632,7 @@ the current copy will be lost.
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="3475"/>
|
||||
<source>Collapse/Expand</source>
|
||||
<translation>收合摺疊/展開</translation>
|
||||
<translation>折疊/展開</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="3476"/>
|
||||
@@ -11657,7 +11646,7 @@ the current copy will be lost.
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="3604"/>
|
||||
<source>Initiate dragging</source>
|
||||
<translation>開始拖動</translation>
|
||||
<translation>開始拖曳</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="3605"/>
|
||||
@@ -11743,7 +11732,7 @@ the current copy will be lost.
|
||||
<message>
|
||||
<location filename="../CommandView.cpp" line="3551"/>
|
||||
<source>Auto adjust placement on drag and drop objects across coordinate systems</source>
|
||||
<translation>自動調整跨坐標系統拖放物體的位置</translation>
|
||||
<translation>在不同座標系統中拖放物件時自動調整位置</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -11867,7 +11856,7 @@ the current copy will be lost.
|
||||
<location filename="../CommandView.cpp" line="2430"/>
|
||||
<location filename="../CommandView.cpp" line="2432"/>
|
||||
<source>Increase the zoom factor by a fixed amount</source>
|
||||
<translation type="unfinished">Increase the zoom factor by a fixed amount</translation>
|
||||
<translation>以固定數量來增加縮放比例</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -11881,7 +11870,7 @@ the current copy will be lost.
|
||||
<location filename="../CommandView.cpp" line="2459"/>
|
||||
<location filename="../CommandView.cpp" line="2461"/>
|
||||
<source>Decrease the zoom factor by a fixed amount</source>
|
||||
<translation type="unfinished">Decrease the zoom factor by a fixed amount</translation>
|
||||
<translation>以固定數量來減少縮放比例</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -12602,7 +12591,7 @@ after FreeCAD launches</source>
|
||||
<message>
|
||||
<location filename="../DlgSettingsWorkbenchesImp.cpp" line="145"/>
|
||||
<source>To preserve resources, FreeCAD does not load workbenches until they are used. Loading them may provide access to additional preferences related to their functionality.</source>
|
||||
<translation type="unfinished">To preserve resources, FreeCAD does not load workbenches until they are used. Loading them may provide access to additional preferences related to their functionality.</translation>
|
||||
<translation>為了保留資源,FreeCAD 在使用前不會載入工作台。載入工作台可能會提供對與其功能相關的其他偏好設定的存取。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
||||
@@ -1752,11 +1752,14 @@ QPixmap MainWindow::splashImage() const
|
||||
fontExe.setPointSizeF(20.0);
|
||||
QFontMetrics metricExe(fontExe);
|
||||
int l = QtTools::horizontalAdvance(metricExe, title);
|
||||
if (title == QLatin1String("FreeCAD")) {
|
||||
l = 0.0; // "FreeCAD" text is already part of the splashscreen, version goes below it
|
||||
}
|
||||
int w = splash_image.width();
|
||||
int h = splash_image.height();
|
||||
|
||||
QFont fontVer = painter.font();
|
||||
fontVer.setPointSizeF(12.0);
|
||||
fontVer.setPointSizeF(14.0);
|
||||
QFontMetrics metricVer(fontVer);
|
||||
int v = QtTools::horizontalAdvance(metricVer, version);
|
||||
|
||||
@@ -1777,7 +1780,10 @@ QPixmap MainWindow::splashImage() const
|
||||
if (color.isValid()) {
|
||||
painter.setPen(color);
|
||||
painter.setFont(fontExe);
|
||||
painter.drawText(x, y, title);
|
||||
if (title != QLatin1String("FreeCAD")) {
|
||||
// FreeCAD's Splashscreen already contains the EXE name, no need to draw it
|
||||
painter.drawText(x, y, title);
|
||||
}
|
||||
painter.setFont(fontVer);
|
||||
painter.drawText(x + (l + 5), y, version);
|
||||
painter.end();
|
||||
|
||||
@@ -667,8 +667,8 @@ void NaviCubeImplementation::prepare() {
|
||||
addCubeFace(y,-z-x, ShapeId::Edge, PickId::BottomLeft, M_PI);
|
||||
|
||||
// create the flat buttons
|
||||
addButtonFace(PickId::ArrowNorth, SbVec3f(1, 0, 0));
|
||||
addButtonFace(PickId::ArrowSouth, SbVec3f(-1, 0, 0));
|
||||
addButtonFace(PickId::ArrowNorth, SbVec3f(-1, 0, 0));
|
||||
addButtonFace(PickId::ArrowSouth, SbVec3f(1, 0, 0));
|
||||
addButtonFace(PickId::ArrowEast, SbVec3f(0, 1, 0));
|
||||
addButtonFace(PickId::ArrowWest, SbVec3f(0, -1, 0));
|
||||
addButtonFace(PickId::ArrowLeft, SbVec3f(0, 0, 1));
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
#endif
|
||||
|
||||
#include <App/Document.h>
|
||||
#include <App/ComplexGeoData.h>
|
||||
#include <App/ElementNamingUtils.h>
|
||||
#include <Base/Tools.h>
|
||||
|
||||
#include "SoFCUnifiedSelection.h"
|
||||
@@ -624,7 +624,7 @@ bool SoFCUnifiedSelection::setSelection(const std::vector<PickedInfo> &infos, bo
|
||||
objectName << ", " << subName);
|
||||
std::string newElement;
|
||||
if(subSelected) {
|
||||
newElement = Data::ComplexGeoData::newElementName(subSelected);
|
||||
newElement = Data::newElementName(subSelected);
|
||||
subSelected = newElement.c_str();
|
||||
std::string nextsub;
|
||||
const char *next = strrchr(subSelected,'.');
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
# include <sstream>
|
||||
#endif
|
||||
|
||||
#include <App/ComplexGeoData.h>
|
||||
#include <App/ElementNamingUtils.h>
|
||||
#include <App/Document.h>
|
||||
|
||||
#include "TaskElementColors.h"
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
auto obj = vpParent->getObject();
|
||||
editDoc = obj->getDocument()->getName();
|
||||
editObj = obj->getNameInDocument();
|
||||
editSub = Data::ComplexGeoData::noElementName(editSub.c_str());
|
||||
editSub = Data::noElementName(editSub.c_str());
|
||||
}
|
||||
}
|
||||
if(editDoc.empty()) {
|
||||
@@ -162,7 +162,7 @@ public:
|
||||
c.setRgbF(color.r,color.g,color.b,1.0-color.a);
|
||||
px.fill(c);
|
||||
auto item = new QListWidgetItem(QIcon(px),
|
||||
QString::fromLatin1(Data::ComplexGeoData::oldElementName(v.first.c_str()).c_str()),
|
||||
QString::fromLatin1(Data::oldElementName(v.first.c_str()).c_str()),
|
||||
ui->elementList);
|
||||
item->setData(Qt::UserRole,c);
|
||||
item->setData(Qt::UserRole+1,QString::fromLatin1(v.first.c_str()));
|
||||
@@ -419,7 +419,7 @@ void ElementColors::onHideSelectionClicked() {
|
||||
if(!subs.empty()) {
|
||||
for(auto &sub : subs) {
|
||||
if(boost::starts_with(sub,d->editSub)) {
|
||||
auto name = Data::ComplexGeoData::noElementName(sub.c_str()+d->editSub.size());
|
||||
auto name = Data::noElementName(sub.c_str()+d->editSub.size());
|
||||
name += ViewProvider::hiddenMarker();
|
||||
d->addItem(-1,name.c_str());
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
#endif
|
||||
|
||||
#include <boost/range.hpp>
|
||||
#include <App/ComplexGeoData.h>
|
||||
#include <App/ElementNamingUtils.h>
|
||||
#include <App/Document.h>
|
||||
#include <Base/BoundBoxPy.h>
|
||||
#include <Base/MatrixPy.h>
|
||||
@@ -635,7 +635,7 @@ public:
|
||||
break;
|
||||
}
|
||||
// new style mapped sub-element
|
||||
if(Data::ComplexGeoData::isMappedElement(dot+1))
|
||||
if(Data::isMappedElement(dot+1))
|
||||
break;
|
||||
auto next = strchr(dot+1,'.');
|
||||
if(!next) {
|
||||
@@ -1031,7 +1031,7 @@ void LinkView::setLinkViewObject(ViewProviderDocumentObject *vpd,
|
||||
subInfo.clear();
|
||||
for(const auto &sub : subs) {
|
||||
if(sub.empty()) continue;
|
||||
const char *subelement = Data::ComplexGeoData::findElementName(sub.c_str());
|
||||
const char *subelement = Data::findElementName(sub.c_str());
|
||||
std::string subname = sub.substr(0,subelement-sub.c_str());
|
||||
auto it = subInfo.find(subname);
|
||||
if(it == subInfo.end()) {
|
||||
|
||||
@@ -159,9 +159,9 @@ int main( int argc, char ** argv )
|
||||
App::Application::Config()["StartWorkbench"] = "StartWorkbench";
|
||||
//App::Application::Config()["HiddenDockWindow"] = "Property editor";
|
||||
App::Application::Config()["SplashAlignment" ] = "Bottom|Left";
|
||||
App::Application::Config()["SplashTextColor" ] = "#ffffff"; // white
|
||||
App::Application::Config()["SplashInfoColor" ] = "#c8c8c8"; // light grey
|
||||
App::Application::Config()["SplashInfoPosition" ] = "15.210";
|
||||
App::Application::Config()["SplashTextColor" ] = "#8aadf4"; // light blue
|
||||
App::Application::Config()["SplashInfoColor" ] = "#8aadf4"; // light blue
|
||||
App::Application::Config()["SplashInfoPosition" ] = "6,75";
|
||||
|
||||
QGuiApplication::setDesktopFileName(QStringLiteral("org.freecad.FreeCAD.desktop"));
|
||||
|
||||
|
||||
@@ -285,7 +285,7 @@ class _Equipment(ArchComponent.Component):
|
||||
# IFC2x3 does know a IfcFurnishingElement
|
||||
obj.IfcType = "Furnishing Element"
|
||||
else:
|
||||
obj.IfcType = "Undefined"
|
||||
obj.IfcType = "Building Element Proxy"
|
||||
# Add features in the SketchArch External Add-on, if present
|
||||
self.addSketchArchFeatures(obj)
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ class _ArchPipe(ArchComponent.Component):
|
||||
obj.IfcType = "Pipe Segment"
|
||||
else:
|
||||
# IFC2x3 does not know a Pipe Segment
|
||||
obj.IfcType = "Undefined"
|
||||
obj.IfcType = "Building Element Proxy"
|
||||
|
||||
def setProperties(self,obj):
|
||||
|
||||
|
||||
@@ -516,7 +516,7 @@ class ProfileTaskPanel:
|
||||
elif isinstance(self.obj.Proxy,_ProfileT):
|
||||
self.type = "T"
|
||||
else:
|
||||
self.type = "Undefined"
|
||||
self.type = "Building Element Proxy"
|
||||
self.form = QtGui.QWidget()
|
||||
layout = QtGui.QVBoxLayout(self.form)
|
||||
self.comboCategory = QtGui.QComboBox(self.form)
|
||||
|
||||
@@ -117,7 +117,7 @@ def makeStructure(baseobj=None,length=None,width=None,height=None,name=None):
|
||||
obj.Length = h
|
||||
|
||||
if not height and not length:
|
||||
obj.IfcType = "Undefined"
|
||||
obj.IfcType = "Building Element Proxy"
|
||||
obj.Label = name if name else translate("Arch","Structure")
|
||||
elif obj.Length > obj.Height:
|
||||
obj.IfcType = "Beam"
|
||||
|
||||
@@ -4007,11 +4007,5 @@
|
||||
}
|
||||
],
|
||||
"complex_attributes": []
|
||||
},
|
||||
"IfcUndefined": {
|
||||
"is_abstract": false,
|
||||
"parent": "IfcObject",
|
||||
"attributes": [],
|
||||
"complex_attributes": []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13265,11 +13265,5 @@
|
||||
"type": "IfcProductRepresentation"
|
||||
}
|
||||
]
|
||||
},
|
||||
"IfcUndefined": {
|
||||
"is_abstract": false,
|
||||
"parent": "IfcObject",
|
||||
"attributes": [],
|
||||
"complex_attributes": []
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -337,7 +337,19 @@ Leave blank to use all objects from the document</source>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>Неабавязковы спіс фільтраў "Уласцівасць:Значэнне", якія падзелены кропкай з коскай (;).
|
||||
Дадаць ! да назвы ўласцівасці, каб інвертаваць эфект фільтра (выключыць аб'екты, якія адпавядаюць фільтру).
|
||||
Аб'екты, уласцівасць якіх змяшчае значэнне, будуць супастаўленыя.
|
||||
|
||||
Прыклады дапушчальных фільтраў (усе без уліку рэгістра):
|
||||
Name:Wall - будуць улічвацца толькі аб'екты, у назве якіх ёсць 'сцяна' (унутранае імя);
|
||||
!Name: Wall - будуць улічвацца толькі аб'екты, у назве якіх няма 'сцяны' (унутранае імя);
|
||||
Description:Win - будуць разглядацца толькі аб'екты з словам 'акно' у іх апісанні;
|
||||
!Label:Win - будуць улічвацца толькі аб'екты, у якіх у меткі няма слова 'акно';
|
||||
IfcType:Wall - будуць улічвацца толькі аб'екты, тып Ifc якіх роўны 'Сцяна';
|
||||
!Tag:Wall - будуць улічвацца толькі аб'екты, у якіх метка не з'яўляецца 'Сцяной'.
|
||||
|
||||
Калі вы пакінеце гэта поле пустым, фільтраванне не будзе ўжытае</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -334,7 +334,7 @@ Deje en blanco para usar todos los objetos del documento</translation>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>Una lista opcional de filtros propiedad:valor separados por punto y coma (;). Antepon ! al nombre de propiedad para invertir el efecto del filtro (excluir objetos que coinciden con el filtro). La coincidencia se producirá en aquellos objetos cuya propiedad contenga el valor. Algunos ejemplos de filtros válidos (no se distingue entre mayúsculas y minúsculas): Nombre:Muro - Solo se considerarán los objetos con "muro" en su nombre (nombre interno); !Nombre:Muro - Solo se considerarán los objetos que NO contengan "muro" en su nombre (nombre interno); Descripcion:Win - Solo se considerarán los objetos con 'win' en su descripción; !Etiqueta:Win - Solo se considerarán aquellos objetos que NO tengan "win" en su etiqueta; TipoIfc:Muro - Solo se considerarán aquellos objetos cuyo Tipo Ifc sea "Muro"; !Tag:Muro - Solo se considerarán aquellos objetos cuyo "tag" NO sea "Muro". Si deja este campo vacío, no se aplicará ningún filtro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -334,7 +334,7 @@ Deje en blanco para usar todos los objetos del documento</translation>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>Una lista opcional de filtros propiedad:valor separados por punto y coma (;). Antepon ! al nombre de propiedad para invertir el efecto del filtro (excluir objetos que coinciden con el filtro). La coincidencia se producirá en aquellos objetos cuya propiedad contenga el valor. Algunos ejemplos de filtros válidos (no se distingue entre mayúsculas y minúsculas): Nombre:Muro - Solo se considerarán los objetos con "muro" en su nombre (nombre interno); !Nombre:Muro - Solo se considerarán los objetos que NO contengan "muro" en su nombre (nombre interno); Descripcion:Win - Solo se considerarán los objetos con 'win' en su descripción; !Etiqueta:Win - Solo se considerarán aquellos objetos que NO tengan "win" en su etiqueta; TipoIfc:Muro - Solo se considerarán aquellos objetos cuyo Tipo Ifc sea "Muro"; !Tag:Muro - Solo se considerarán aquellos objetos cuyo "tag" NO sea "Muro". Si deja este campo vacío, no se aplicará ningún filtro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -334,7 +334,7 @@ Utzi hutsik dokumentuko objektu guztiak erabili daitezen.</translation>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>Propietatea:balioa iragazkien zerrenda bat, puntu eta komaz (;) bananduta. Jarri ! aurretik propietate-izen bati, iragazkiaren efektua indargabetu nahi izanez gero (iragazkiarekin bat datozen objektuak baztertzen dira). Balioa betetzen duen propietatea duten objektuek egingo dute bat iragazkiarekin. Baliozko iragazkien adibideak (maiuskulak/minuskulak kontuan hartu gabe beti): 'Name:Wall' - Izenean (barnekoan) 'wall' duten objektuak soilik kontsideratuko ditu; '!Name:Wall' - Izenean (barnekoan) 'wal' EZ duten objektuak soilik kontsideratuko ditu; 'Description:Win' - Deskribapenean 'win' duten objektuak soilik kontsideratuko ditu; '!Label:Win' - Etiketan 'win' EZ duten objektuak soilik kontsideratuko ditu; 'ifcType:Wall' - Ifc motan 'wall' duten objektuak soilik kontsideratuko ditu; '!Tag:Wall' - Etiketan 'wall' EZ duten objektuak soilik kontsideratuko ditu. Eremua hutsik uzten bada, ez da iragazkirik aplikatuko.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -331,7 +331,7 @@ Leave blank to use all objects from the document</source>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>Une liste facultative de filtres propriété/valeur séparés par des points-virgules ( ;). Ajouter ! au nom d'une propriété pour inverser l'effet du filtre (exclure les objets qui correspondent au filtre). Les objets dont la propriété contient la valeur seront pris en compte. Exemples de filtres valides (tout est insensible à la casse) : Name:Wall - Ne prendra en compte que les objets dont le nom (nom interne) contient "wall" ; !Name:Wall - Ne prendra en compte que les objets dont le nom (nom interne) ne contient pas "wall" ; Description:Win - Ne prendra en compte que les objets dont la description contient "win" ; !Label:Win - Ne prendra en compte que les objets dont le label ne contient pas "win" ; IfcType:Wall - Ne prendra en compte que les objets dont le type Ifc est "Wall" ; !Tag:Wall - Ne prendra en compte que les objets dont le tag n'est PAS "Wall". Si vous laissez ce champ vide, aucun filtrage n'est appliqué.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -334,7 +334,7 @@ Hagyja üresen a dokumentum összes objektumának használatát</translation>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>A tulajdonság:érték szűrők pontosvesszővel (;) elválasztott választható listája. A ! előtagot a tulajdonságnév elé helyezve megfordítja a szűrő hatását (kizárja azokat a tárgyakat, amelyek megfelelnek a szűrőnek). Azok a tárgyak, amelyek tulajdonsága tartalmazza az értéket, illeszkedni fognak. Példák az érvényes szűrőkre (minden esetben a nagy- és kisbetűket figyelmen kívül kell hagyni): Név:Fal - Csak olyan tárgyakat vesz figyelembe, amelyek nevében (belső nevében) szerepel a 'fal'; !Név:Fal - Csak olyan tárgyakat vesz figyelembe, amelyek nevében (belső nevében) NEM szerepel a 'fal'; Leírás:Win - Csak olyan tárgyakat vesz figyelembe, amelyek leírásában szerepel a 'win'; !Címke:Win - Csak olyan tárgyakat vesz figyelembe, amelyek címkéjében NEM szerepel a 'win'; IfcType:Wall - Csak olyan objektumokat vesz figyelembe, amelyek Ifc típusa 'Wall'; !Mező:Wall - Csak olyan tárgyakat vesz figyelembe, amelyek mezője NEM 'Wall'. Ha ezt a mezőt üresen hagyja, nem történik szűrés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -333,7 +333,7 @@ Leave blank to use all objects from the document</source>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>არასავალდებულო წერტილმძიმით (;) გამოყოფილი თვისება:მნიშვნელობის ფილტრების სია. მიაწერეთ თავში ! ფილტრის ეფექტის ინვერსიისთვის (გამონაკლისია ობიექტები, რომლებიც ფილტრს ემთხვევა). გამოჩნდება ობიექტებ, რომლის თვისებაც მითითებულ მნიშვნელობას შეიცავს. სწორი ფილტრის მაგალითებია (რეგისტრს მნიშვნელობა არ აქვს): Name:Wall - გამოიტანს ობიექტებს, რომელიც მათ სახელში 'wall'-ს შეიცავს (შიდა სახელი); !Name:Wall გამოიტანს ობიექტებს, რომლებიც მათ სახელში 'wall'-ს *არ* სეიცევან (შიდა სახელი); Descriptiom:Win - გამოიტანს მხოლოდ იმ ობიექტებს, რომლებიც აღწერაში 'win'-ს შეიცავენ. !Label:Win გამოიტანს ობიექტებს, რომლებიც მათ ჭდეში 'wil'-ს *არ* შეიცავენ. IfcType:Wall გამოიტანს ობიექტებს, რომლის Ifc ტიპი 'wall'-ის ტოლია. !Tag:Wall - გამოიტანს მხოლოდ იმ ობიექტებს, რომლის ჭდეც 'wall' *არაა*. თუ ამ ველს ცარიელს დატოვებთ, ფილტრი გამოყენებული არ იქნება</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -335,7 +335,7 @@ Uwaga dotycząca eksportu CSV: W programie Libreoffice plik CSV można połączy
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>Opcjonalna lista właściwości filtrów: wartości oddzielona średnikiem (;). Przedrostek ! do nazwy właściwości odwraca efekt filtru (wyklucza obiekty pasujące do filtru). Obiekty, których właściwość zawiera wartość, zostaną dopasowane. Przykłady prawidłowych filtrów (wielkość liter nie ma znaczenia): Name:Wall - Uwzględni tylko obiekty z "wall" w nazwie (nazwa wewnętrzna); !Name:Wall - Uwzględni tylko obiekty, które NIE mają "wall" w nazwie (nazwa wewnętrzna); Description:Win - Uwzględni tylko obiekty z "win" w opisie; !Label:Win - Uwzględni tylko obiekty, które NIE mają "win" w etykiecie; IfcType:Wall - Uwzględni tylko obiekty, których typ IFC to "Wall"; !Tag:Wall - Uwzględni tylko obiekty, których tag NIE jest "Wall". Jeśli pozostawisz to pole puste, filtrowanie nie zostanie zastosowane</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -254,7 +254,7 @@ Deixe em branco para usar todos os objetos do documento</translation>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="71"/>
|
||||
<source>The property to retrieve from each object.Can be 'Count' to count the objects, or property names like 'Length' or 'Shape.Volume' to retrieve a certain property.</source>
|
||||
<translation type="unfinished">The property to retrieve from each object.Can be 'Count' to count the objects, or property names like 'Length' or 'Shape.Volume' to retrieve a certain property.</translation>
|
||||
<translation>Propriedade a ser recuperada em cada objeto. Pode ser "Contar" para contar os objetos, ou propriedades como "Comprimento" ou "Forma.Volume" para recuperar uma certa propriedade.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="108"/>
|
||||
@@ -319,12 +319,12 @@ Deixe em branco para usar todos os objetos do documento</translation>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="184"/>
|
||||
<source>Put selected objects into the 'Objects' column of the selected row</source>
|
||||
<translation type="unfinished">Put selected objects into the 'Objects' column of the selected row</translation>
|
||||
<translation>Coloque os objetos selecionados na coluna "Objetos" da linha selecionada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="208"/>
|
||||
<source>This exports the results to a CSV or Markdown file. Note for CSV export: In Libreoffice, you can keep this CSV file linked by right-clicking the Sheets tab bar, New sheet, From file, Link (Note: as of LibreOffice v6.x the correct path now is: Sheet, Insert Sheet..., From file, Browse...)</source>
|
||||
<translation type="unfinished">This exports the results to a CSV or Markdown file. Note for CSV export: In Libreoffice, you can keep this CSV file linked by right-clicking the Sheets tab bar, New sheet, From file, Link (Note: as of LibreOffice v6.x the correct path now is: Sheet, Insert Sheet..., From file, Browse...)</translation>
|
||||
<translation>Isto exporta o resultado para um arquivo CSV ou Markdown. Nota para a exportação CSV: No Libreoffice, você pode manter este arquivo CSV linkado clicando com o botão direito na barra Planilhas - Nova Planilha - Do ficheiro - Link (Nota: A partir do LibreOffice v6.. mudou para: barra de nomes de folhas - Insert Planilha... - Do ficheiro - Procurar...)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="187"/>
|
||||
@@ -1738,7 +1738,7 @@ No entanto, alguns aplicativos BIM usarão este fator para escolher com qual uni
|
||||
<message>
|
||||
<location filename="../../ArchStructure.py" line="150"/>
|
||||
<source>StructuralSystem</source>
|
||||
<translation type="unfinished">StructuralSystem</translation>
|
||||
<translation>Sistema Estrutural</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchStructure.py" line="205"/>
|
||||
@@ -2032,7 +2032,7 @@ No entanto, alguns aplicativos BIM usarão este fator para escolher com qual uni
|
||||
<location filename="../../ArchBuildingPart.py" line="221"/>
|
||||
<location filename="../../ArchFloor.py" line="89"/>
|
||||
<source>Floor</source>
|
||||
<translation type="unfinished">Floor</translation>
|
||||
<translation>Piso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchBuildingPart.py" line="302"/>
|
||||
@@ -2253,7 +2253,7 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchReference.py" line="64"/>
|
||||
<source>External Reference</source>
|
||||
<translation type="unfinished">External Reference</translation>
|
||||
<translation>Referência externa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchReference.py" line="498"/>
|
||||
@@ -2308,32 +2308,32 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../importSHP.py" line="135"/>
|
||||
<source>The shapefile python library was not found on your system. Would you like to download it now from <a href="https://github.com/GeospatialPython/pyshp">https://github.com/GeospatialPython/pyshp</a>? It will be placed in your macros folder.</source>
|
||||
<translation type="unfinished">The shapefile python library was not found on your system. Would you like to download it now from <a href="https://github.com/GeospatialPython/pyshp">https://github.com/GeospatialPython/pyshp</a>? It will be placed in your macros folder.</translation>
|
||||
<translation>A biblioteca python do shapefile não foi encontrada no seu sistema. Gostaria de baixá-la agora de <a href="https://github.com/GeospatialPython/pyshp">https://github. om/GeospatialPython/pyshp</a>? Ela será colocada na sua pasta de macros.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../importSHP.py" line="141"/>
|
||||
<source>Error: Unable to download from:</source>
|
||||
<translation type="unfinished">Error: Unable to download from:</translation>
|
||||
<translation>Erro: Não foi possível baixar de:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../importSHP.py" line="153"/>
|
||||
<source>Could not download shapefile module. Aborting.</source>
|
||||
<translation type="unfinished">Could not download shapefile module. Aborting.</translation>
|
||||
<translation>Não foi possível baixar o módulo shapefile. Cancelando operação.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../importSHP.py" line="156"/>
|
||||
<source>Shapefile module not downloaded. Aborting.</source>
|
||||
<translation type="unfinished">Shapefile module not downloaded. Aborting.</translation>
|
||||
<translation>O módulo Shapefile não foi baixado. Cancelando operação.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../importSHP.py" line="159"/>
|
||||
<source>Shapefile module not found. Aborting.</source>
|
||||
<translation type="unfinished">Shapefile module not found. Aborting.</translation>
|
||||
<translation>O módulo Shapefile não foi encontrado. Cancelando operação.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../importSHP.py" line="160"/>
|
||||
<source>The shapefile library can be downloaded from the following URL and installed in your macros folder:</source>
|
||||
<translation type="unfinished">The shapefile library can be downloaded from the following URL and installed in your macros folder:</translation>
|
||||
<translation>A biblioteca de shapefile pode ser baixada da seguinte URL e instalada na sua pasta de macros:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="88"/>
|
||||
@@ -2350,7 +2350,7 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="246"/>
|
||||
<source>Choose a face on an existing object or select a preset</source>
|
||||
<translation type="unfinished">Choose a face on an existing object or select a preset</translation>
|
||||
<translation>Selecione uma face em um objeto existente ou escolha uma predefinição</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="298"/>
|
||||
@@ -2360,12 +2360,12 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="308"/>
|
||||
<source>No Width and/or Height constraint in window sketch. Window not resized.</source>
|
||||
<translation type="unfinished">No Width and/or Height constraint in window sketch. Window not resized.</translation>
|
||||
<translation>Nenhuma restrição de largura e/ou altura no esboço da janela. A janela não será redimensionada.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="311"/>
|
||||
<source>No window found. Cannot continue.</source>
|
||||
<translation type="unfinished">No window found. Cannot continue.</translation>
|
||||
<translation>Nenhuma janela encontrada. Não é possível continuar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="367"/>
|
||||
@@ -2375,44 +2375,44 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="371"/>
|
||||
<source>Auto include in host object</source>
|
||||
<translation type="unfinished">Auto include in host object</translation>
|
||||
<translation>Incluir automaticamente um hospedeiro no objeto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="377"/>
|
||||
<source>Sill height</source>
|
||||
<translation type="unfinished">Sill height</translation>
|
||||
<translation>Altura do peitoril</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1321"/>
|
||||
<source>This window has no defined opening</source>
|
||||
<translation type="unfinished">This window has no defined opening</translation>
|
||||
<translation>Essa janela não tem abertura definida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1598"/>
|
||||
<location filename="../../ArchWindow.py" line="1647"/>
|
||||
<location filename="../../ArchWindow.py" line="1808"/>
|
||||
<source>Get selected edge</source>
|
||||
<translation type="unfinished">Get selected edge</translation>
|
||||
<translation>Usar a aresta selecionada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1747"/>
|
||||
<source>Unable to create component</source>
|
||||
<translation type="unfinished">Unable to create component</translation>
|
||||
<translation>Não é possível criar componente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1785"/>
|
||||
<source>Window elements</source>
|
||||
<translation type="unfinished">Window elements</translation>
|
||||
<translation>Elementos da janela</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1786"/>
|
||||
<source>Hole wire</source>
|
||||
<translation type="unfinished">Hole wire</translation>
|
||||
<translation>Arame para o furo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1787"/>
|
||||
<source>The number of the wire that defines a hole in the host object. A value of zero will automatically adopt the largest wire</source>
|
||||
<translation type="unfinished">The number of the wire that defines a hole in the host object. A value of zero will automatically adopt the largest wire</translation>
|
||||
<translation>O número do arame que define um furo no objeto hospedeiro. Um valor de zero selecionará automaticamente o maior arame</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1788"/>
|
||||
@@ -2457,18 +2457,18 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1792"/>
|
||||
<source>Create/update component</source>
|
||||
<translation type="unfinished">Create/update component</translation>
|
||||
<translation>Criar/atualizar um componente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1793"/>
|
||||
<source>Base 2D object</source>
|
||||
<translation type="unfinished">Base 2D object</translation>
|
||||
<translation>Objeto base 2D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1794"/>
|
||||
<location filename="../../ArchWindow.py" line="1799"/>
|
||||
<source>Wires</source>
|
||||
<translation type="unfinished">Wires</translation>
|
||||
<translation>Arames</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1795"/>
|
||||
@@ -2512,39 +2512,39 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1802"/>
|
||||
<source>Hinge</source>
|
||||
<translation type="unfinished">Hinge</translation>
|
||||
<translation>Dobradiça</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1803"/>
|
||||
<source>Opening mode</source>
|
||||
<translation type="unfinished">Opening mode</translation>
|
||||
<translation>Modo de abertura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1804"/>
|
||||
<location filename="../../ArchWindow.py" line="1806"/>
|
||||
<source>+ default</source>
|
||||
<translation type="unfinished">+ default</translation>
|
||||
<translation>+ padrão</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1805"/>
|
||||
<source>If this is checked, the default Frame value of this window will be added to the value entered here</source>
|
||||
<translation type="unfinished">If this is checked, the default Frame value of this window will be added to the value entered here</translation>
|
||||
<translation>Se isto estiver marcado, o valor padrão do quadro desta janela será adicionado ao valor inserido aqui</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1807"/>
|
||||
<source>If this is checked, the default Offset value of this window will be added to the value entered here</source>
|
||||
<translation type="unfinished">If this is checked, the default Offset value of this window will be added to the value entered here</translation>
|
||||
<translation>Se isto estiver marcado, o valor de deslocamento padrão desta janela será adicionado ao valor inserido aqui</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1809"/>
|
||||
<source>Press to retrieve the selected edge</source>
|
||||
<translation type="unfinished">Press to retrieve the selected edge</translation>
|
||||
<translation>Pressione para recuperar a aresta selecionada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1251"/>
|
||||
<location filename="../../ArchWindow.py" line="1810"/>
|
||||
<source>Invert opening direction</source>
|
||||
<translation type="unfinished">Invert opening direction</translation>
|
||||
<translation>Inverter direção de abertura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchWindow.py" line="1260"/>
|
||||
@@ -2653,7 +2653,7 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchStairs.py" line="171"/>
|
||||
<source>Railing</source>
|
||||
<translation type="unfinished">Railing</translation>
|
||||
<translation>Corrimão</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchStairs.py" line="219"/>
|
||||
@@ -2663,12 +2663,12 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchStairs.py" line="428"/>
|
||||
<source>removed properties 'OutlineWireLeft' and 'OutlineWireRight', and added properties 'RailingLeft' and 'RailingRight'</source>
|
||||
<translation type="unfinished">removed properties 'OutlineWireLeft' and 'OutlineWireRight', and added properties 'RailingLeft' and 'RailingRight'</translation>
|
||||
<translation>removidas propriedades 'OutlineWireLeft' e 'OutlineWireRight', e adicionadas propriedades 'RailingLeft' e 'RailingRight'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchStairs.py" line="442"/>
|
||||
<source>changed the type of properties 'RailingLeft' and 'RailingRight'</source>
|
||||
<translation type="unfinished">changed the type of properties 'RailingLeft' and 'RailingRight'</translation>
|
||||
<translation>alteradas os tipos de propriedades 'RailingLeft' e 'RailingRight'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchMaterial.py" line="123"/>
|
||||
@@ -2683,7 +2683,7 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchMaterial.py" line="214"/>
|
||||
<source>Merge duplicates</source>
|
||||
<translation type="unfinished">Merge duplicates</translation>
|
||||
<translation>Mesclar duplicatas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchMaterial.py" line="56"/>
|
||||
@@ -2695,7 +2695,7 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchMaterial.py" line="88"/>
|
||||
<source>MultiMaterial</source>
|
||||
<translation type="unfinished">MultiMaterial</translation>
|
||||
<translation>MultiMaterial</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchMaterial.py" line="920"/>
|
||||
@@ -2797,12 +2797,12 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchGrid.py" line="430"/>
|
||||
<source>Create span</source>
|
||||
<translation type="unfinished">Create span</translation>
|
||||
<translation>Criar intervalo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchGrid.py" line="431"/>
|
||||
<source>Remove span</source>
|
||||
<translation type="unfinished">Remove span</translation>
|
||||
<translation>Remover intervalo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchGrid.py" line="432"/>
|
||||
@@ -2832,17 +2832,17 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1007"/>
|
||||
<source>Dent length</source>
|
||||
<translation type="unfinished">Dent length</translation>
|
||||
<translation>Comprimento do dente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1008"/>
|
||||
<source>Dent width</source>
|
||||
<translation type="unfinished">Dent width</translation>
|
||||
<translation>Largura do dente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1009"/>
|
||||
<source>Dent height</source>
|
||||
<translation type="unfinished">Dent height</translation>
|
||||
<translation>Altura do dente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1010"/>
|
||||
@@ -2872,32 +2872,32 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1015"/>
|
||||
<source>Number of grooves</source>
|
||||
<translation type="unfinished">Number of grooves</translation>
|
||||
<translation>Número de sulcos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1016"/>
|
||||
<source>Depth of grooves</source>
|
||||
<translation type="unfinished">Depth of grooves</translation>
|
||||
<translation>Profundidade dos sulcos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1017"/>
|
||||
<source>Height of grooves</source>
|
||||
<translation type="unfinished">Height of grooves</translation>
|
||||
<translation>Altura dos sulcos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1018"/>
|
||||
<source>Spacing between grooves</source>
|
||||
<translation type="unfinished">Spacing between grooves</translation>
|
||||
<translation>Espaçamento entre os sulcos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1019"/>
|
||||
<source>Number of risers</source>
|
||||
<translation type="unfinished">Number of risers</translation>
|
||||
<translation>Número de elevadores</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1020"/>
|
||||
<source>Length of down floor</source>
|
||||
<translation type="unfinished">Length of down floor</translation>
|
||||
<translation>Comprimento do patamar inferior</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1021"/>
|
||||
@@ -2907,37 +2907,37 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1022"/>
|
||||
<source>Depth of treads</source>
|
||||
<translation type="unfinished">Depth of treads</translation>
|
||||
<translation>Profundidade dos degraus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1407"/>
|
||||
<source>Precast options</source>
|
||||
<translation type="unfinished">Precast options</translation>
|
||||
<translation>Opções de pré-moldados</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1408"/>
|
||||
<source>Dents list</source>
|
||||
<translation type="unfinished">Dents list</translation>
|
||||
<translation>Lista de amassados</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1409"/>
|
||||
<source>Add dent</source>
|
||||
<translation type="unfinished">Add dent</translation>
|
||||
<translation>Adicionar amassado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1410"/>
|
||||
<source>Remove dent</source>
|
||||
<translation type="unfinished">Remove dent</translation>
|
||||
<translation>Remover amassado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1414"/>
|
||||
<source>Slant</source>
|
||||
<translation type="unfinished">Slant</translation>
|
||||
<translation>Inclinação</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1415"/>
|
||||
<source>Level</source>
|
||||
<translation type="unfinished">Level</translation>
|
||||
<translation>Nível</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="1416"/>
|
||||
@@ -2952,7 +2952,7 @@ Se a extensão = 0, ela será calculada de modo que a altura seja a mesma do per
|
||||
<message>
|
||||
<location filename="../../ArchPanel.py" line="105"/>
|
||||
<source>View of</source>
|
||||
<translation type="unfinished">View of</translation>
|
||||
<translation>Vista de</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPanel.py" line="120"/>
|
||||
@@ -3241,27 +3241,27 @@ Floor creation aborted.</translation>
|
||||
<location filename="../../importOBJ.py" line="87"/>
|
||||
<location filename="../../importOBJ.py" line="98"/>
|
||||
<source>Found a shape containing curves, triangulating</source>
|
||||
<translation type="unfinished">Found a shape containing curves, triangulating</translation>
|
||||
<translation>Uma forma contendo curvas foi encontrada e será triangulada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../importOBJ.py" line="359"/>
|
||||
<source>Successfully imported</source>
|
||||
<translation type="unfinished">Successfully imported</translation>
|
||||
<translation>Importado com sucesso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="928"/>
|
||||
<source>Error computing the shape of this object</source>
|
||||
<translation type="unfinished">Error computing the shape of this object</translation>
|
||||
<translation>Não foi possível computar a forma do objeto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="949"/>
|
||||
<source>has no solid</source>
|
||||
<translation type="unfinished">has no solid</translation>
|
||||
<translation>não tem sólido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="956"/>
|
||||
<source>has an invalid shape</source>
|
||||
<translation type="unfinished">has an invalid shape</translation>
|
||||
<translation>tem uma forma inválida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchPrecast.py" line="128"/>
|
||||
@@ -3272,44 +3272,44 @@ Floor creation aborted.</translation>
|
||||
<location filename="../../ArchPrecast.py" line="679"/>
|
||||
<location filename="../../ArchComponent.py" line="958"/>
|
||||
<source>has a null shape</source>
|
||||
<translation type="unfinished">has a null shape</translation>
|
||||
<translation>tem uma forma nula</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchSite.py" line="943"/>
|
||||
<location filename="../../ArchComponent.py" line="1510"/>
|
||||
<source>Toggle subcomponents</source>
|
||||
<translation type="unfinished">Toggle subcomponents</translation>
|
||||
<translation>Alternar subcomponentes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1636"/>
|
||||
<source>Closing Sketch edit</source>
|
||||
<translation type="unfinished">Closing Sketch edit</translation>
|
||||
<translation>Fechar edição do Esboço</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1944"/>
|
||||
<location filename="../../ArchCommands.py" line="216"/>
|
||||
<source>Component</source>
|
||||
<translation type="unfinished">Component</translation>
|
||||
<translation>Componente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1947"/>
|
||||
<source>Components of this object</source>
|
||||
<translation type="unfinished">Components of this object</translation>
|
||||
<translation>Componentes deste objeto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1948"/>
|
||||
<source>Base component</source>
|
||||
<translation type="unfinished">Base component</translation>
|
||||
<translation>Componente base</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1949"/>
|
||||
<source>Additions</source>
|
||||
<translation type="unfinished">Additions</translation>
|
||||
<translation>Adições</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1950"/>
|
||||
<source>Subtractions</source>
|
||||
<translation type="unfinished">Subtractions</translation>
|
||||
<translation>Subtrações</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1951"/>
|
||||
@@ -3319,7 +3319,7 @@ Floor creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1954"/>
|
||||
<source>Fixtures</source>
|
||||
<translation type="unfinished">Fixtures</translation>
|
||||
<translation>Fixações</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1955"/>
|
||||
@@ -3334,12 +3334,12 @@ Floor creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1957"/>
|
||||
<source>Edit IFC properties</source>
|
||||
<translation type="unfinished">Edit IFC properties</translation>
|
||||
<translation>Editar propriedades IFC</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="1958"/>
|
||||
<source>Edit standard code</source>
|
||||
<translation type="unfinished">Edit standard code</translation>
|
||||
<translation>Editar código padrão</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="2007"/>
|
||||
@@ -3349,12 +3349,12 @@ Floor creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="2012"/>
|
||||
<source>Add property...</source>
|
||||
<translation type="unfinished">Add property...</translation>
|
||||
<translation>Adicionar propriedade...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="2013"/>
|
||||
<source>Add property set...</source>
|
||||
<translation type="unfinished">Add property set...</translation>
|
||||
<translation>Adicione conjunto de propriedades...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="2014"/>
|
||||
@@ -3364,12 +3364,12 @@ Floor creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="2152"/>
|
||||
<source>New property</source>
|
||||
<translation type="unfinished">New property</translation>
|
||||
<translation>Propriedade nova</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchComponent.py" line="2187"/>
|
||||
<source>New property set</source>
|
||||
<translation type="unfinished">New property set</translation>
|
||||
<translation>Novo conjunto de propriedades</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchRebar.py" line="64"/>
|
||||
@@ -3380,12 +3380,12 @@ Floor creation aborted.</translation>
|
||||
<location filename="../../ArchRebar.py" line="130"/>
|
||||
<location filename="../../ArchRebar.py" line="151"/>
|
||||
<source>Create Rebar</source>
|
||||
<translation type="unfinished">Create Rebar</translation>
|
||||
<translation>Criar Armação</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchRebar.py" line="158"/>
|
||||
<source>Please select a base face on a structural object</source>
|
||||
<translation type="unfinished">Please select a base face on a structural object</translation>
|
||||
<translation>Por favor, selecione uma face de base em um objeto estrutural</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="68"/>
|
||||
@@ -3395,22 +3395,22 @@ Floor creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="839"/>
|
||||
<source>Create Section Plane</source>
|
||||
<translation type="unfinished">Create Section Plane</translation>
|
||||
<translation>Criar um plano de corte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="1192"/>
|
||||
<source>Toggle Cutview</source>
|
||||
<translation type="unfinished">Toggle Cutview</translation>
|
||||
<translation>Alternar Vista de Corte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="1369"/>
|
||||
<source>Section plane settings</source>
|
||||
<translation type="unfinished">Section plane settings</translation>
|
||||
<translation>Configurações do plano de corte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="1371"/>
|
||||
<source>Remove highlighted objects from the list above</source>
|
||||
<translation type="unfinished">Remove highlighted objects from the list above</translation>
|
||||
<translation>Remover objetos destacados da lista acima</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="1372"/>
|
||||
@@ -3420,12 +3420,12 @@ Floor creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="1373"/>
|
||||
<source>Add selected object(s) to the scope of this section plane</source>
|
||||
<translation type="unfinished">Add selected object(s) to the scope of this section plane</translation>
|
||||
<translation>Adicionar objeto(s) selecionado(s) ao escopo deste plano de secção</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="1374"/>
|
||||
<source>Objects seen by this section plane:</source>
|
||||
<translation type="unfinished">Objects seen by this section plane:</translation>
|
||||
<translation>Objetos vistos por este plano de corte:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchSectionPlane.py" line="1375"/>
|
||||
@@ -6037,22 +6037,22 @@ Building creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../InitGui.py" line="163"/>
|
||||
<source>Draft creation tools</source>
|
||||
<translation type="unfinished">Draft creation tools</translation>
|
||||
<translation>Ferramentas de criação de esboço</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../InitGui.py" line="166"/>
|
||||
<source>Draft annotation tools</source>
|
||||
<translation type="unfinished">Draft annotation tools</translation>
|
||||
<translation>Ferramentas de anotação de esboço</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../InitGui.py" line="169"/>
|
||||
<source>Draft modification tools</source>
|
||||
<translation type="unfinished">Draft modification tools</translation>
|
||||
<translation>Ferramentas de modificação de esboço</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../InitGui.py" line="172"/>
|
||||
<source>Draft snap</source>
|
||||
<translation type="unfinished">Draft snap</translation>
|
||||
<translation>Referências a objetos de esboço</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../InitGui.py" line="177"/>
|
||||
@@ -6520,7 +6520,7 @@ Building creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchFloor.py" line="116"/>
|
||||
<source>Level</source>
|
||||
<translation type="unfinished">Level</translation>
|
||||
<translation>Nível</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchFloor.py" line="120"/>
|
||||
@@ -6750,7 +6750,7 @@ Building creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchCommands.py" line="1579"/>
|
||||
<source>Component</source>
|
||||
<translation type="unfinished">Component</translation>
|
||||
<translation>Componente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchCommands.py" line="1583"/>
|
||||
@@ -6789,7 +6789,7 @@ Building creation aborted.</translation>
|
||||
<message>
|
||||
<location filename="../../ArchCommands.py" line="1680"/>
|
||||
<source>Toggle subcomponents</source>
|
||||
<translation type="unfinished">Toggle subcomponents</translation>
|
||||
<translation>Alternar subcomponentes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchCommands.py" line="1683"/>
|
||||
|
||||
Binary file not shown.
@@ -333,7 +333,7 @@ Leave blank to use all objects from the document</source>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>Список фильтров по значению свойств, перечисленных через точку с запятой (;). Добавьте восклицательный знак (!) к имени свойства, чтобы инвертировать действие фильтра (исключить объекты, соответствующие фильтру). Объекты, чье свойство содержит значение, будут найдены. Примеры допустимых фильтров (все фильтры не чувствительны к регистру): Name:Wall - будут рассматриваться только объекты с 'wall' в их имени (внутреннее имя); !Name:Wall - будут рассматриваться только объекты, которые НЕ имеют 'wall' в их имени (внутреннее имя); Description:Win - будут рассматриваться только объекты с 'win' в их описании; !Label:Win - будут рассматриваться только объекты, которые НЕ имеют 'win' в их метке; IfcType:Wall - будут рассматриваться только объекты, Ifc Type которых 'Wall'; !Tag:Wall - будут рассматриваться только объекты, тег которых НЕ 'Wall'. Если оставить это поле пустым, фильтрация не будет применяться</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -334,7 +334,7 @@ Pustite prazno, če želite uporabiti vse predmete v dokumentu</translation>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="98"/>
|
||||
<source>An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</source>
|
||||
<translation type="unfinished">An optional semicolon (;) separated list of property:value filters. Prepend ! to a property name to invert the effect of the filter (exclude objects that match the filter). Objects whose property contains the value will be matched. Examples of valid filters (everything is case-insensitive): Name:Wall - Will only consider objects with 'wall' in their name (internal name); !Name:Wall - Will only consider objects which DON'T have 'wall' in their name (internal name); Description:Win - Will only consider objects with 'win' in their description; !Label:Win - Will only consider objects which DO NOT have 'win' in their label; IfcType:Wall - Will only consider objects which Ifc Type is 'Wall'; !Tag:Wall - Will only consider objects which tag is NOT 'Wall'. If you leave this field empty, no filtering is applied</translation>
|
||||
<translation>Možnosten, s podpičjem (;) ločen seznam lastnostnih:vrednostnih sit. Predpnite imenu lastnosti !, če želite obrniti učinek sita (izvzeti predmete, ki ustrezajo situ). Predmeti, katerih lastnost vsebuje vrednost, bodo izbrani. Primeri veljavnih sit (nikjer ni razlikovanja velikih in malih črk): Ime:Stena - zaznani bodo le predmeti z besedo "stena" v (zalednem) imenu; Opis:Okn - zaznani bodo le predmeti, ki imajo v opisu "okn"; !Oznaka:Okn - zaznani bodo le predmeti, ki v oznaki NIMAJO "okn"; IfcType:Wall - zaznani bodo le predmeti ki spada v Ifc vrsto "Wall" (stena); !Značka:Stena - zaznani bodo le predmeti, ki NIMAJO značke "Stena". Če to polje pustite prazno, se ne preseja</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/ArchSchedule.ui" line="194"/>
|
||||
|
||||
Binary file not shown.
@@ -2252,7 +2252,7 @@ If Run = 0 then the run is calculated so that the height is the same as the rela
|
||||
<message>
|
||||
<location filename="../../ArchCutPlane.py" line="153"/>
|
||||
<source>Cutting</source>
|
||||
<translation>Перерізання</translation>
|
||||
<translation>Переріз</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../ArchCutPlane.py" line="187"/>
|
||||
|
||||
@@ -678,7 +678,7 @@ class ArchTest(unittest.TestCase):
|
||||
def testRemove(self):
|
||||
App.Console.PrintLog ('Checking Arch Remove...\n')
|
||||
l=Draft.makeLine(App.Vector(0,0,0),App.Vector(2,0,0))
|
||||
w = Arch.makeWall(l,width=0.2,height=2)
|
||||
w = Arch.makeWall(l,width=0.2,height=2,align="Right")
|
||||
sb = Part.makeBox(1,1,1)
|
||||
b = App.ActiveDocument.addObject('Part::Feature','Box')
|
||||
b.Shape = sb
|
||||
|
||||
@@ -2368,7 +2368,7 @@ def getRepresentation(
|
||||
placement = ifcbin.createIfcLocalPlacement()
|
||||
representation = [ifcfile.createIfcShapeRepresentation(context,'Body',solidType,shapes)]
|
||||
# additional representations?
|
||||
if Draft.getType(obj) in ["Wall"]:
|
||||
if Draft.getType(obj) in ["Wall","Structure"]:
|
||||
addrepr = createAxis(ifcfile,obj,preferences)
|
||||
if addrepr:
|
||||
representation = representation + [addrepr]
|
||||
@@ -2477,9 +2477,14 @@ def getAxisContext(ifcfile):
|
||||
def createAxis(ifcfile,obj,preferences):
|
||||
"""Creates an axis for a given wall, if applicable"""
|
||||
|
||||
if hasattr(obj,"Base") and hasattr(obj.Base,"Shape") and obj.Base.Shape:
|
||||
if obj.Base.Shape.ShapeType in ["Wire","Edge"]:
|
||||
curve = createCurve(ifcfile,obj.Base.Shape,preferences["SCALE_FACTOR"])
|
||||
shape = None
|
||||
if getattr(obj,"Nodes",None):
|
||||
shape = Part.makePolygon([obj.Placement.multVec(v) for v in obj.Nodes])
|
||||
elif hasattr(obj,"Base") and hasattr(obj.Base,"Shape") and obj.Base.Shape:
|
||||
shape = obj.Base.Shape
|
||||
if shape:
|
||||
if shape.ShapeType in ["Wire","Edge"]:
|
||||
curve = createCurve(ifcfile,shape,preferences["SCALE_FACTOR"])
|
||||
if curve:
|
||||
ctx = getAxisContext(ifcfile)
|
||||
axis = ifcfile.createIfcShapeRepresentation(ctx,'Axis','Curve2D',[curve])
|
||||
|
||||
@@ -20,34 +20,29 @@
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
"""This module contains placeholders for viewproviders provided by the NativeIFC addon"""
|
||||
|
||||
import FreeCAD
|
||||
|
||||
class ifc_vp_object:
|
||||
"""NativeIFC class placeholder"""
|
||||
def __init__(self):
|
||||
pass
|
||||
def attach(self, vobj):
|
||||
return
|
||||
def getDisplayModes(self, obj):
|
||||
return []
|
||||
def getDefaultDisplayMode(self):
|
||||
return "FlatLines"
|
||||
def setDisplayMode(self,mode):
|
||||
return mode
|
||||
def __getstate__(self):
|
||||
return None
|
||||
def __setstate__(self, state):
|
||||
return None
|
||||
|
||||
class ifc_vp_document(ifc_vp_object):
|
||||
class ifc_vp_document:
|
||||
"""NativeIFC class placeholder"""
|
||||
def __init__(self):
|
||||
pass
|
||||
def attach(self, vobj):
|
||||
FreeCAD.Console.PrintWarning("Warning: Object "+vobj.Object.Label+" depends on the NativeIFC addon which is not installed, and will not display correctly in the 3D view\n")
|
||||
FreeCAD.Console.PrintWarning("Warning: Object "+vobj.Object.Label+" depends on the NativeIFC addon which is not installed, and might not display correctly in the 3D view\n")
|
||||
return
|
||||
|
||||
class ifc_vp_group:
|
||||
"""NativeIFC class placeholder"""
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
class ifc_vp_material:
|
||||
"""NativeIFC class placeholder"""
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
@@ -50,7 +50,7 @@ def open(filename):
|
||||
"called when freecad wants to open a file"
|
||||
if not check3DS():
|
||||
return
|
||||
docname = (os.path.splitext(os.path.basename(filename))[0]).encode("utf8")
|
||||
docname = os.path.splitext(os.path.basename(filename))[0]
|
||||
doc = FreeCAD.newDocument(docname)
|
||||
doc.Label = docname
|
||||
FreeCAD.ActiveDocument = doc
|
||||
|
||||
@@ -90,7 +90,7 @@ def open(filename):
|
||||
|
||||
if not checkCollada():
|
||||
return
|
||||
docname = (os.path.splitext(os.path.basename(filename))[0]).encode("utf8")
|
||||
docname = os.path.splitext(os.path.basename(filename))[0]
|
||||
doc = FreeCAD.newDocument(docname)
|
||||
doc.Label = docname
|
||||
FreeCAD.ActiveDocument = doc
|
||||
|
||||
@@ -279,8 +279,8 @@ def export(exportList,filename,colors=None):
|
||||
|
||||
def open(filename):
|
||||
"called when freecad wants to open a file"
|
||||
docname = (os.path.splitext(os.path.basename(filename))[0])
|
||||
doc = FreeCAD.newDocument(docname.encode("utf8"))
|
||||
docname = os.path.splitext(os.path.basename(filename))[0]
|
||||
doc = FreeCAD.newDocument(docname)
|
||||
doc.Label = docname
|
||||
return insert(filename,doc.Name)
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ if open.__module__ in ['__builtin__','io']:
|
||||
|
||||
def open(filename):
|
||||
"called when freecad wants to open a file"
|
||||
docname = (os.path.splitext(os.path.basename(filename))[0]).encode("utf8")
|
||||
docname = os.path.splitext(os.path.basename(filename))[0]
|
||||
doc = FreeCAD.newDocument(docname)
|
||||
doc.Label = docname
|
||||
FreeCAD.ActiveDocument = doc
|
||||
|
||||
Binary file not shown.
@@ -3746,77 +3746,77 @@ Per habilitar FreeCAD a descarregar aquestes llibreries, respongui Si.</translat
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit.py" line="536"/>
|
||||
<source>No edit point found for selected object</source>
|
||||
<translation type="unfinished">No edit point found for selected object</translation>
|
||||
<translation>No s`ha trobat cap punt d'edició per l'objecte seleccionat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit.py" line="789"/>
|
||||
<source>Too many objects selected, max number set to:</source>
|
||||
<translation type="unfinished">Too many objects selected, max number set to:</translation>
|
||||
<translation>S'han seleccionat massa objectes, el màxim està establert en:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit.py" line="797"/>
|
||||
<source>: this object is not editable</source>
|
||||
<translation type="unfinished">: this object is not editable</translation>
|
||||
<translation>: aquest objete no es editable</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_annotationstyleeditor.py" line="68"/>
|
||||
<source>Annotation style editor</source>
|
||||
<translation type="unfinished">Annotation style editor</translation>
|
||||
<translation>Editor d'estils d'anotació</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_annotationstyleeditor.py" line="294"/>
|
||||
<source>Open styles file</source>
|
||||
<translation type="unfinished">Open styles file</translation>
|
||||
<translation>Obre el fitxer d'estils</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_annotationstyleeditor.py" line="296"/>
|
||||
<location filename="../../draftguitools/gui_annotationstyleeditor.py" line="316"/>
|
||||
<source>JSON file (*.json)</source>
|
||||
<translation type="unfinished">JSON file (*.json)</translation>
|
||||
<translation>Fitxer JSON (*.json)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_annotationstyleeditor.py" line="314"/>
|
||||
<source>Save styles file</source>
|
||||
<translation type="unfinished">Save styles file</translation>
|
||||
<translation>Desa el fitxer d'estils</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_shape2dview.py" line="68"/>
|
||||
<source>Select an object to project</source>
|
||||
<translation type="unfinished">Select an object to project</translation>
|
||||
<translation>Seleccioneu un objecte a projectar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_points.py" line="134"/>
|
||||
<location filename="../../draftguitools/gui_points.py" line="147"/>
|
||||
<source>Create Point</source>
|
||||
<translation type="unfinished">Create Point</translation>
|
||||
<translation>Crear Punt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="79"/>
|
||||
<source>Select an object to rotate</source>
|
||||
<translation type="unfinished">Select an object to rotate</translation>
|
||||
<translation>Seleccioneu un objecte per girar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="99"/>
|
||||
<source>Pick rotation center</source>
|
||||
<translation type="unfinished">Pick rotation center</translation>
|
||||
<translation>Trieu el centre de rotació</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="193"/>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="403"/>
|
||||
<source>Base angle</source>
|
||||
<translation type="unfinished">Base angle</translation>
|
||||
<translation>Angle de base</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="194"/>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="404"/>
|
||||
<source>The base angle you wish to start the rotation from</source>
|
||||
<translation type="unfinished">The base angle you wish to start the rotation from</translation>
|
||||
<translation>L'angle de base d'on voleu iniciar la rotació</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="199"/>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="407"/>
|
||||
<source>Pick base angle</source>
|
||||
<translation type="unfinished">Pick base angle</translation>
|
||||
<translation>Trieu angle de base</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="205"/>
|
||||
@@ -3829,29 +3829,29 @@ Per habilitar FreeCAD a descarregar aquestes llibreries, respongui Si.</translat
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="417"/>
|
||||
<source>The amount of rotation you wish to perform.
|
||||
The final angle will be the base angle plus this amount.</source>
|
||||
<translation type="unfinished">The amount of rotation you wish to perform.
|
||||
The final angle will be the base angle plus this amount.</translation>
|
||||
<translation>La quantitat de rotació que voleu realitzar.
|
||||
L'angle final serà l'angle de base més aquesta quantitat.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="213"/>
|
||||
<location filename="../../draftguitools/gui_rotate.py" line="425"/>
|
||||
<source>Pick rotation angle</source>
|
||||
<translation type="unfinished">Pick rotation angle</translation>
|
||||
<translation>Trieu angle de rotació</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="65"/>
|
||||
<source>Add to group</source>
|
||||
<translation type="unfinished">Add to group</translation>
|
||||
<translation>Afegir a el grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="68"/>
|
||||
<source>Ungroup</source>
|
||||
<translation type="unfinished">Ungroup</translation>
|
||||
<translation>Desagrupa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="70"/>
|
||||
<source>Add new group</source>
|
||||
<translation type="unfinished">Add new group</translation>
|
||||
<translation>Afegir un nou grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="159"/>
|
||||
@@ -3861,7 +3861,7 @@ The final angle will be the base angle plus this amount.</translation>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="193"/>
|
||||
<source>No new selection. You must select non-empty groups or objects inside groups.</source>
|
||||
<translation type="unfinished">No new selection. You must select non-empty groups or objects inside groups.</translation>
|
||||
<translation>Cap selecció nova. Heu de seleccionar grups no buits o objectes dins dels grups.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="203"/>
|
||||
@@ -3871,27 +3871,27 @@ The final angle will be the base angle plus this amount.</translation>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="250"/>
|
||||
<source>Add new Layer</source>
|
||||
<translation type="unfinished">Add new Layer</translation>
|
||||
<translation>Afegir una nova capa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="304"/>
|
||||
<source>Add to construction group</source>
|
||||
<translation type="unfinished">Add to construction group</translation>
|
||||
<translation>Afegir al grup de construcció</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="355"/>
|
||||
<source>Add a new group with a given name</source>
|
||||
<translation type="unfinished">Add a new group with a given name</translation>
|
||||
<translation>Afegiu un grup nou amb un nom donat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="383"/>
|
||||
<source>Add group</source>
|
||||
<translation type="unfinished">Add group</translation>
|
||||
<translation>Afegir grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="385"/>
|
||||
<source>Group name</source>
|
||||
<translation type="unfinished">Group name</translation>
|
||||
<translation>Nom del grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_groups.py" line="392"/>
|
||||
@@ -3906,52 +3906,52 @@ The final angle will be the base angle plus this amount.</translation>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_sketcher_objects.py" line="63"/>
|
||||
<source>Sketch is too complex to edit: it is suggested to use sketcher default editor</source>
|
||||
<translation type="unfinished">Sketch is too complex to edit: it is suggested to use sketcher default editor</translation>
|
||||
<translation>L'esbós és massa complex per editar-lo: es suggereix usar l'editor d'esbossos per defecte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="76"/>
|
||||
<source>Fillet radius</source>
|
||||
<translation type="unfinished">Fillet radius</translation>
|
||||
<translation>Radi d'arrodoniment</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="79"/>
|
||||
<source>Radius of fillet</source>
|
||||
<translation type="unfinished">Radius of fillet</translation>
|
||||
<translation>Radi de l'arrodoniment</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="107"/>
|
||||
<source>Enter radius.</source>
|
||||
<translation type="unfinished">Enter radius.</translation>
|
||||
<translation>Entreu un radi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="126"/>
|
||||
<source>Delete original objects:</source>
|
||||
<translation type="unfinished">Delete original objects:</translation>
|
||||
<translation>Esborra els objectes originals:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="131"/>
|
||||
<source>Chamfer mode:</source>
|
||||
<translation type="unfinished">Chamfer mode:</translation>
|
||||
<translation>Mode de xamfrà:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="148"/>
|
||||
<source>Two elements needed.</source>
|
||||
<translation type="unfinished">Two elements needed.</translation>
|
||||
<translation>Calen dos elements.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="155"/>
|
||||
<source>Test object</source>
|
||||
<translation type="unfinished">Test object</translation>
|
||||
<translation>Objecte de prova</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="156"/>
|
||||
<source>Test object removed</source>
|
||||
<translation type="unfinished">Test object removed</translation>
|
||||
<translation>S'ha esborrat l'objecte de prova</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="158"/>
|
||||
<source>Fillet cannot be created</source>
|
||||
<translation type="unfinished">Fillet cannot be created</translation>
|
||||
<translation>No es pot crear l'arrodoniment</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_fillets.py" line="188"/>
|
||||
@@ -3961,70 +3961,70 @@ The final angle will be the base angle plus this amount.</translation>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_polygons.py" line="231"/>
|
||||
<source>Create Polygon (Part)</source>
|
||||
<translation type="unfinished">Create Polygon (Part)</translation>
|
||||
<translation>Crea Polígon (Peça)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_polygons.py" line="250"/>
|
||||
<source>Create Polygon</source>
|
||||
<translation type="unfinished">Create Polygon</translation>
|
||||
<translation>Crea Polígon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_split.py" line="64"/>
|
||||
<source>Click anywhere on a line to split it.</source>
|
||||
<translation type="unfinished">Click anywhere on a line to split it.</translation>
|
||||
<translation>Cliqueu a aqualsevol punt d'una línia per a dividir-la.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_split.py" line="106"/>
|
||||
<source>Split line</source>
|
||||
<translation type="unfinished">Split line</translation>
|
||||
<translation>Dividir línia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_trimex.py" line="94"/>
|
||||
<source>Select objects to trim or extend</source>
|
||||
<translation type="unfinished">Select objects to trim or extend</translation>
|
||||
<translation>Seleccioneu objecte(s) per a retallar o allargar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_trimex.py" line="173"/>
|
||||
<location filename="../../draftguitools/gui_offset.py" line="146"/>
|
||||
<source>Pick distance</source>
|
||||
<translation type="unfinished">Pick distance</translation>
|
||||
<translation>Tria la distància</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_trimex.py" line="222"/>
|
||||
<source>Offset angle</source>
|
||||
<translation type="unfinished">Offset angle</translation>
|
||||
<translation>Angle de Ofset</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_trimex.py" line="483"/>
|
||||
<source>Unable to trim these objects, only Draft wires and arcs are supported.</source>
|
||||
<translation type="unfinished">Unable to trim these objects, only Draft wires and arcs are supported.</translation>
|
||||
<translation>No es poden retallar aquests objectes, només es permeten polilínies i arcs.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_trimex.py" line="488"/>
|
||||
<source>Unable to trim these objects, too many wires</source>
|
||||
<translation type="unfinished">Unable to trim these objects, too many wires</translation>
|
||||
<translation>No es poden retallar aquests objectes, massa polilínies</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_trimex.py" line="505"/>
|
||||
<source>These objects don't intersect.</source>
|
||||
<translation type="unfinished">These objects don't intersect.</translation>
|
||||
<translation>Aquests objectes no s'intersequen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_trimex.py" line="508"/>
|
||||
<source>Too many intersection points.</source>
|
||||
<translation type="unfinished">Too many intersection points.</translation>
|
||||
<translation>Massa punts d'intersecció.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_splines.py" line="120"/>
|
||||
<source>Spline has been closed</source>
|
||||
<translation type="unfinished">Spline has been closed</translation>
|
||||
<translation>S'ha tancat la Spline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_splines.py" line="131"/>
|
||||
<location filename="../../draftguitools/gui_beziers.py" line="142"/>
|
||||
<location filename="../../draftguitools/gui_beziers.py" line="381"/>
|
||||
<source>Last point has been removed</source>
|
||||
<translation type="unfinished">Last point has been removed</translation>
|
||||
<translation>S'ha esborrat l'últim punt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_splines.py" line="182"/>
|
||||
@@ -4034,19 +4034,19 @@ The final angle will be the base angle plus this amount.</translation>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_styles.py" line="75"/>
|
||||
<source>Change Style</source>
|
||||
<translation type="unfinished">Change Style</translation>
|
||||
<translation>Canvia l'estil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="92"/>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="601"/>
|
||||
<source>This object does not support possible coincident points, please try again.</source>
|
||||
<translation type="unfinished">This object does not support possible coincident points, please try again.</translation>
|
||||
<translation>Aquest objecte no suporta punts coincidents possibles, si us plau, torneu a provar-ho.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="109"/>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="618"/>
|
||||
<source>Delete point</source>
|
||||
<translation type="unfinished">Delete point</translation>
|
||||
<translation>Suprimir punt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="114"/>
|
||||
@@ -4057,7 +4057,7 @@ The final angle will be the base angle plus this amount.</translation>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="124"/>
|
||||
<source>Open wire</source>
|
||||
<translation type="unfinished">Open wire</translation>
|
||||
<translation>Obrir polilínia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="127"/>
|
||||
@@ -4067,111 +4067,111 @@ The final angle will be the base angle plus this amount.</translation>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="132"/>
|
||||
<source>Reverse wire</source>
|
||||
<translation type="unfinished">Reverse wire</translation>
|
||||
<translation>Invertir polilínia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="177"/>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="840"/>
|
||||
<source>Active object must have more than two points/nodes</source>
|
||||
<translation type="unfinished">Active object must have more than two points/nodes</translation>
|
||||
<translation>L'objecte actiu ha de tenir més de dos punts/nodes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="200"/>
|
||||
<source>Open spline</source>
|
||||
<translation type="unfinished">Open spline</translation>
|
||||
<translation>Obrir spline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="203"/>
|
||||
<source>Close spline</source>
|
||||
<translation type="unfinished">Close spline</translation>
|
||||
<translation>Tancar spline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="206"/>
|
||||
<source>Reverse spline</source>
|
||||
<translation type="unfinished">Reverse spline</translation>
|
||||
<translation>Invertir spline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="371"/>
|
||||
<source>Move arc</source>
|
||||
<translation type="unfinished">Move arc</translation>
|
||||
<translation>Moure arc</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="375"/>
|
||||
<source>Set first angle</source>
|
||||
<translation type="unfinished">Set first angle</translation>
|
||||
<translation>Estableix el primer angle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="379"/>
|
||||
<source>Set last angle</source>
|
||||
<translation type="unfinished">Set last angle</translation>
|
||||
<translation>Estableix l'últim angle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="383"/>
|
||||
<source>Set radius</source>
|
||||
<translation type="unfinished">Set radius</translation>
|
||||
<translation>Establir radi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="408"/>
|
||||
<source>Invert arc</source>
|
||||
<translation type="unfinished">Invert arc</translation>
|
||||
<translation>Invertir arc</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="619"/>
|
||||
<source>Make sharp</source>
|
||||
<translation type="unfinished">Make sharp</translation>
|
||||
<translation>Fer afilat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="620"/>
|
||||
<source>Make tangent</source>
|
||||
<translation type="unfinished">Make tangent</translation>
|
||||
<translation>Fer tangent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="621"/>
|
||||
<source>Make symmetric</source>
|
||||
<translation type="unfinished">Make symmetric</translation>
|
||||
<translation>Fer simètric</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="628"/>
|
||||
<source>Reverse curve</source>
|
||||
<translation type="unfinished">Reverse curve</translation>
|
||||
<translation>Invertir corba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="634"/>
|
||||
<source>Open curve</source>
|
||||
<translation type="unfinished">Open curve</translation>
|
||||
<translation>Obrir corba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="637"/>
|
||||
<source>Close curve</source>
|
||||
<translation type="unfinished">Close curve</translation>
|
||||
<translation>Tancar corba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="751"/>
|
||||
<source>Selection is not a Knot</source>
|
||||
<translation type="unfinished">Selection is not a Knot</translation>
|
||||
<translation>La selecció no és un Nus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_edit_draft_objects.py" line="778"/>
|
||||
<source>Endpoint of BezCurve can't be smoothed</source>
|
||||
<translation type="unfinished">Endpoint of BezCurve can't be smoothed</translation>
|
||||
<translation>El punt final d'una corba Bézier no es pot suavitzar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_beziers.py" line="134"/>
|
||||
<location filename="../../draftguitools/gui_beziers.py" line="345"/>
|
||||
<source>Bézier curve has been closed</source>
|
||||
<translation type="unfinished">Bézier curve has been closed</translation>
|
||||
<translation>S’ha tancat la corba Bézier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_beziers.py" line="212"/>
|
||||
<location filename="../../draftguitools/gui_beziers.py" line="466"/>
|
||||
<source>Create BezCurve</source>
|
||||
<translation type="unfinished">Create BezCurve</translation>
|
||||
<translation>Crear corba Bézier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_beziers.py" line="389"/>
|
||||
<location filename="../../draftguitools/gui_beziers.py" line="393"/>
|
||||
<source>Click and drag to define next knot</source>
|
||||
<translation type="unfinished">Click and drag to define next knot</translation>
|
||||
<translation>Feu clic i arrossegueu per definir el següent nus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_ellipses.py" line="128"/>
|
||||
|
||||
Binary file not shown.
@@ -119,13 +119,13 @@
|
||||
<message>
|
||||
<location filename="../ui/dialog_AnnotationStyleEditor.ui" line="265"/>
|
||||
<source>Show line</source>
|
||||
<translation type="unfinished">Show line</translation>
|
||||
<translation>Mostrar liña</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/dialog_AnnotationStyleEditor.ui" line="288"/>
|
||||
<location filename="../ui/dialog_AnnotationStyleEditor.ui" line="298"/>
|
||||
<source>The width of the lines</source>
|
||||
<translation type="unfinished">The width of the lines</translation>
|
||||
<translation>A largura das liñas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ui/dialog_AnnotationStyleEditor.ui" line="301"/>
|
||||
|
||||
Binary file not shown.
@@ -5471,7 +5471,7 @@ from menu Tools -> Addon Manager</translation>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_setstyle.py" line="292"/>
|
||||
<source>Warning</source>
|
||||
<translation type="unfinished">Warning</translation>
|
||||
<translation>Waarschuwing</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../draftguitools/gui_setstyle.py" line="293"/>
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -123,33 +123,40 @@ def autogroup(obj):
|
||||
return
|
||||
|
||||
# autogroup code
|
||||
active_group = None
|
||||
if Gui.draftToolBar.autogroup is not None:
|
||||
active_group = App.ActiveDocument.getObject(Gui.draftToolBar.autogroup)
|
||||
if active_group:
|
||||
found = False
|
||||
for o in active_group.Group:
|
||||
if o.Name == obj.Name:
|
||||
found = True
|
||||
if not found:
|
||||
gr = active_group.Group
|
||||
gr = active_group.Group
|
||||
if not obj in gr:
|
||||
gr.append(obj)
|
||||
active_group.Group = gr
|
||||
|
||||
else:
|
||||
if Gui.ActiveDocument.ActiveView.getActiveObject("NativeIFC"):
|
||||
# NativeIFC handling
|
||||
try:
|
||||
import ifc_tools
|
||||
parent = Gui.ActiveDocument.ActiveView.getActiveObject("NativeIFC")
|
||||
if parent != active_group:
|
||||
ifc_tools.aggregate(obj, parent)
|
||||
except:
|
||||
pass
|
||||
|
||||
if Gui.ActiveDocument.ActiveView.getActiveObject("Arch"):
|
||||
# add object to active Arch Container
|
||||
active_arch_obj = Gui.ActiveDocument.ActiveView.getActiveObject("Arch")
|
||||
elif Gui.ActiveDocument.ActiveView.getActiveObject("Arch"):
|
||||
# add object to active Arch Container
|
||||
active_arch_obj = Gui.ActiveDocument.ActiveView.getActiveObject("Arch")
|
||||
if active_arch_obj != active_group:
|
||||
if obj in active_arch_obj.InListRecursive:
|
||||
# do not autogroup if obj points to active_arch_obj to prevent cyclic references
|
||||
return
|
||||
active_arch_obj.addObject(obj)
|
||||
|
||||
elif Gui.ActiveDocument.ActiveView.getActiveObject("part", False) is not None:
|
||||
# add object to active part and change it's placement accordingly
|
||||
# so object does not jump to different position, works with App::Link
|
||||
# if not scaled. Modified accordingly to realthunder suggestions
|
||||
active_part, parent, sub = Gui.ActiveDocument.ActiveView.getActiveObject("part", False)
|
||||
elif Gui.ActiveDocument.ActiveView.getActiveObject("part", False) is not None:
|
||||
# add object to active part and change it's placement accordingly
|
||||
# so object does not jump to different position, works with App::Link
|
||||
# if not scaled. Modified accordingly to realthunder suggestions
|
||||
active_part, parent, sub = Gui.ActiveDocument.ActiveView.getActiveObject("part", False)
|
||||
if active_part != active_group:
|
||||
if obj in active_part.InListRecursive:
|
||||
# do not autogroup if obj points to active_part to prevent cyclic references
|
||||
return
|
||||
|
||||
@@ -96,8 +96,6 @@ SET(FemExamples_SRCS
|
||||
femexamples/square_pipe_end_twisted_edgeforces.py
|
||||
femexamples/square_pipe_end_twisted_nodeforces.py
|
||||
femexamples/thermomech_bimetall.py
|
||||
femexamples/thermomech_flow1d.py
|
||||
femexamples/thermomech_spine.py
|
||||
femexamples/truss_3d_cs_circle_ele_seg2.py
|
||||
femexamples/truss_3d_cs_circle_ele_seg3.py
|
||||
)
|
||||
@@ -135,8 +133,6 @@ SET(FemExampleMeshes_SRCS
|
||||
femexamples/meshes/mesh_selfweight_cantilever_tetra10.py
|
||||
femexamples/meshes/mesh_square_pipe_end_twisted_tria6.py
|
||||
femexamples/meshes/mesh_thermomech_bimetall_tetra10.py
|
||||
femexamples/meshes/mesh_thermomech_flow1d_seg3.py
|
||||
femexamples/meshes/mesh_thermomech_spine_tetra10.py
|
||||
femexamples/meshes/mesh_transform_beam_hinged_tetra10.py
|
||||
femexamples/meshes/mesh_transform_torque_tetra10.py
|
||||
femexamples/meshes/mesh_truss_crane_seg2.py
|
||||
@@ -381,17 +377,6 @@ SET(FemTestsCcx_SRCS
|
||||
femtest/data/calculix/square_pipe_end_twisted_edgeforces.inp
|
||||
femtest/data/calculix/square_pipe_end_twisted_nodeforces.inp
|
||||
femtest/data/calculix/thermomech_bimetall.inp
|
||||
femtest/data/calculix/thermomech_flow1D.inp
|
||||
femtest/data/calculix/thermomech_flow1D.dat
|
||||
femtest/data/calculix/thermomech_flow1D.frd
|
||||
femtest/data/calculix/thermomech_flow1D_expected_values
|
||||
femtest/data/calculix/thermomech_flow1D_inout_nodes.txt
|
||||
femtest/data/calculix/thermomech_flow1D.FCStd
|
||||
femtest/data/calculix/thermomech_spine.inp
|
||||
femtest/data/calculix/thermomech_spine.dat
|
||||
femtest/data/calculix/thermomech_spine.frd
|
||||
femtest/data/calculix/thermomech_spine_expected_values
|
||||
femtest/data/calculix/thermomech_spine.FCStd
|
||||
)
|
||||
|
||||
SET(FemTestsElmer_SRCS
|
||||
|
||||
@@ -5368,12 +5368,12 @@ used for the Elmer solver</source>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="53"/>
|
||||
<source>Electromagnetic Constraints</source>
|
||||
<translation type="unfinished">Electromagnetic Constraints</translation>
|
||||
<translation>Электрамагнітныя абмежаванні</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="54"/>
|
||||
<source>&Electromagnetic Constraints</source>
|
||||
<translation type="unfinished">&Electromagnetic Constraints</translation>
|
||||
<translation>&Электрамагнітныя абмежаванні</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="55"/>
|
||||
|
||||
@@ -5369,12 +5369,12 @@ für den Löser Elmer verwendet werden</translation>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="53"/>
|
||||
<source>Electromagnetic Constraints</source>
|
||||
<translation type="unfinished">Electromagnetic Constraints</translation>
|
||||
<translation>Elektromagnetische Randbedingungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="54"/>
|
||||
<source>&Electromagnetic Constraints</source>
|
||||
<translation type="unfinished">&Electromagnetic Constraints</translation>
|
||||
<translation>&Elektromagnetische Randbedingungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="55"/>
|
||||
|
||||
@@ -5393,12 +5393,12 @@ usada por el solver Elmer</translation>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="53"/>
|
||||
<source>Electromagnetic Constraints</source>
|
||||
<translation type="unfinished">Electromagnetic Constraints</translation>
|
||||
<translation>Restricciones electromagnéticas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="54"/>
|
||||
<source>&Electromagnetic Constraints</source>
|
||||
<translation type="unfinished">&Electromagnetic Constraints</translation>
|
||||
<translation>Restricciones &electromagnéticas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../Workbench.cpp" line="55"/>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user