Übersichtlichkeit und Suche von Konstruktionselementen

In diesem Forum Fragen und Diskussionen in Deutsch
Forum rules
Foren-Regeln und hilfreiche Informationen

WICHTIG: Bitte zuerst lesen, bevor Sie posten
Post Reply
freecad-heini-1
Veteran
Posts: 7791
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Übersichtlichkeit und Suche von Konstruktionselementen

Post by freecad-heini-1 »

Hallo zusammen,
hab die letzten Tage komplexe Projekte in der Mache. Alles in Part-WB konstruiert, mit Features aus der Curves-, PoM-, Draft und Lattice2 Workbench.
So langsam werden die Projekte umfangreicher und damit leider unübersichtlich obwohl ich die Features durchnummeriert- und mit Klarnamen umbenannt habe.
DAG-View hilft etwas, aber ein frühes Feature im Combo-View zu finden gestaltet sich als schwierig, wenn boolsche Operationen, Split/Slice-, sowie Lattice2 explode Compound im Spiel sind. Mit Clone und Shrinkage arbeite ich auch.
Immerhin ermöglicht DAG-View das Highlighten von Features im Viewport und der Datentab wird auch geöffnet.
Wenn sich jetzt noch der Modellbaum bis zum gewählten Feature aufklappe würde, wäre fein.

Gibt es eine Funktion Features nach ihrer Entstehungsreihenfolge zu sortieren- oder gar automatisch durchnummerieren zu lassen? Gibt es eine Suchfunktion für Features, wenn man einen Teil der Benennung kennt?
Der Abhängigkeitsgraph ist schön übersichtlich, wenn man dann noch die Möglichkeit hätte Features auswählen zu können wäre es sehr hilfreich. Welche nützlichen Tools gibt es um komplexe Projekte beherrschen zu können?

Kleine Anmerkung: die Änderungsfreundlichkeit und Parametrik funktioniert sagenhaft gut!
Freecad erledigt diese Aufgabe mit bravour, wenn man weiß wie man Features ändert oder umdefiniert.

Viele Grüße
Wilfried
User avatar
Gift
Posts: 769
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: Übersichtlichkeit und Suche von Konstruktionselementen

Post by Gift »

Versuch 1

Code: Select all

# -*- coding: utf-8 -*-
# Search features in the tree

from PySide import QtGui, QtCore

from PySide.QtCore import *
from PySide.QtGui import *

import FreeCADGui

class TreeSearch(QtGui.QWidget):

    def __init__(self):
        super(TreeSearch, self).__init__()      
        self.initUI()

    def initUI(self): 

        # create info label

        self.lbInfo = QtGui.QLabel('Search: ', self)
        self.lbInfo.move(10, 30)
        self.lbInfo.setFixedWidth(350)

        self.leEdit = QtGui.QLineEdit(self)
        self.leEdit.move(60, 26)
        
        self.btButton = QtGui.QPushButton('Search', self)
        self.btButton.clicked.connect(self.clickedButton)
        self.btButton.resize(self.btButton.minimumSizeHint())
        self.btButton.move(200, 26) 

        self.setGeometry(300, 350, 350, 80)
        self.setWindowTitle('Search')

    def searchTreeItem(self, tree, item, matchcode):
        for idx in range(item.childCount()):
            itm = item.child(idx)
            itm.setBackground(0, QBrush())
            tree.collapseItem(itm)
            if matchcode in itm.text(0):                
                itm.setBackground(0, QColor(255, 255, 0, 100))
                self.expandParent(tree, itm)
            self.searchTreeItem(tree, item.child(idx), matchcode)

    def expandParent(self, tree, item):
        parent = item.parent()
        if parent:
            print parent
            tree.expandItem(parent)
            self.expandParent(tree, parent)

    def clickedButton(self):
        mw = FreeCADGui.getMainWindow()
        tab = mw.findChild(QtGui.QTabWidget, u'combiTab')
        tree = tab.widget(0).findChildren(QtGui.QTreeWidget)[0]
        top = tree.topLevelItem(0) 
        for idx in range(top.childCount()):
            self.searchTreeItem(tree, top.child(idx), self.leEdit.text())

    def resetAll(self, item):
        for idx in range(item.childCount()):
            itm = item.child(idx)
            itm.setBackground(0, QBrush())
            self.resetAll(itm)


    def closeEvent(self, event):
        mw = FreeCADGui.getMainWindow()
        tab = mw.findChild(QtGui.QTabWidget, u'combiTab')
        tree = tab.widget(0).findChildren(QtGui.QTreeWidget)[0]
        top = tree.topLevelItem(0)
        for idx in range(top.childCount()): 
            self.resetAll(top.child(idx))
            

search = TreeSearch()
search.show()
freecad-heini-1
Veteran
Posts: 7791
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Übersichtlichkeit und Suche von Konstruktionselementen

Post by freecad-heini-1 »

Gift wrote: Thu Nov 01, 2018 9:04 pm Versuch 1

Code: Select all

# -*- coding: utf-8 -*-
# Search features in the tree

from PySide import QtGui, QtCore

from PySide.QtCore import *
from PySide.QtGui import *

import FreeCADGui

class TreeSearch(QtGui.QWidget):

    def __init__(self):
        super(TreeSearch, self).__init__()      
        self.initUI()

    def initUI(self): 

        # create info label

        self.lbInfo = QtGui.QLabel('Search: ', self)
        self.lbInfo.move(10, 30)
        self.lbInfo.setFixedWidth(350)

        self.leEdit = QtGui.QLineEdit(self)
        self.leEdit.move(60, 26)
        
        self.btButton = QtGui.QPushButton('Search', self)
        self.btButton.clicked.connect(self.clickedButton)
        self.btButton.resize(self.btButton.minimumSizeHint())
        self.btButton.move(200, 26) 

        self.setGeometry(300, 350, 350, 80)
        self.setWindowTitle('Search')

    def searchTreeItem(self, tree, item, matchcode):
        for idx in range(item.childCount()):
            itm = item.child(idx)
            itm.setBackground(0, QBrush())
            tree.collapseItem(itm)
            if matchcode in itm.text(0):                
                itm.setBackground(0, QColor(255, 255, 0, 100))
                self.expandParent(tree, itm)
            self.searchTreeItem(tree, item.child(idx), matchcode)

    def expandParent(self, tree, item):
        parent = item.parent()
        if parent:
            print parent
            tree.expandItem(parent)
            self.expandParent(tree, parent)

    def clickedButton(self):
        mw = FreeCADGui.getMainWindow()
        tab = mw.findChild(QtGui.QTabWidget, u'combiTab')
        tree = tab.widget(0).findChildren(QtGui.QTreeWidget)[0]
        top = tree.topLevelItem(0) 
        for idx in range(top.childCount()):
            self.searchTreeItem(tree, top.child(idx), self.leEdit.text())

    def resetAll(self, item):
        for idx in range(item.childCount()):
            itm = item.child(idx)
            itm.setBackground(0, QBrush())
            self.resetAll(itm)


    def closeEvent(self, event):
        mw = FreeCADGui.getMainWindow()
        tab = mw.findChild(QtGui.QTabWidget, u'combiTab')
        tree = tab.widget(0).findChildren(QtGui.QTreeWidget)[0]
        top = tree.topLevelItem(0)
        for idx in range(top.childCount()): 
            self.resetAll(top.child(idx))
            

search = TreeSearch()
search.show()
Hallo Benjamin,
vielen lieben Dank. Das funktioniert sehr gut. Im DAG-View sehe ich den Namen aller Features, kann Features highlighten, nach einer Suche mit Deinem Skript werden die betreffenden Features im Modellbaum aufgeklappt und farblich unterlegt. Suchbegriff "Sketch" zeigt alle Sketche. Ich bin der Meinung, dass diese Suchfunktion in Freecad Master integriert werden sollte. Ein extrem nützliches Tool!

Viele Grüße
Wilfried
freecad-heini-1
Veteran
Posts: 7791
Joined: Tue Jan 07, 2014 11:10 am
Contact:

Re: Übersichtlichkeit und Suche von Konstruktionselementen

Post by freecad-heini-1 »

Hehe, Mario war schneller, schon im Mai 2018:
https://www.freecadweb.org/wiki/Macro_FCTreeView
User avatar
Gift
Posts: 769
Joined: Tue Aug 18, 2015 10:08 am
Location: Germany, Sauerland

Re: Übersichtlichkeit und Suche von Konstruktionselementen

Post by Gift »

Wow!
Post Reply