| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Entmod bei Layer dauert sehr lange (BRICSCAD) (2295 mal gelesen)
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 16. Apr. 2009 13:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich verwende Bricscad V9. Die Frage habe ich schon im Bricscadforum gestellt, jedoch keine Antwort bekommen. Deshalb ein zweiter Versuch. Ich habe festgestellt, dass es sehr lange dauern kann, bis der Befehl entmod auf einen Layer angewendet wurde. Ich habe eine Zeichnung mit folgenden Kennwerten: - ca 88 Kb, 24 Layer - 2 Referenzen (232 Kb und 1,9 MB) zusammen 50 Layer - Keine Pixelbilder Wenn ich da den folgenden Code ausführe, dauert es ca. 2,9(!) Sekunden. Bei einer Leeren Zeichnung dauert es nur 0,02 Sekunden. Der folgende Code gibt direkt die Zeit in Sekunden zurück. Es wird keine Änderung in der Zeichnung vorgenommen. Code: (progn(setq zeit (getvar "cdate"))(entmod (tblnext "Layer" 'T))(princ (rtos (* (- (getvar "cdate") Zeit) 1000000) 2 2))(princ))
Vielleicht kann jemand das mal mit einer Seiner Zeichnungen ausprobieren. Vielleicht im Vergleich dazu mit Autocad. Die 2,9 Sekunden sind schon happig. Vorallem wenn man wie in dieser Zeichnung über 70 Layern abarbeitet. Wer hat eine Idee, wie man das ganze beschleuigen kann? Ein echter Zeitfaktor scheint das vorhanden sein von Xrefs zu sein. Vorallem wenn hier viele Objekte vorhanden sind. (Bei angehängten Katasterplänen sind 100.000 Objekte schnell mal zusammen). Aber ob die Xrefs auf dem betroffenen Layer liegen oder nicht scheint keine Rolle zu spielen. REGENMODE hat auch keinen Einfluss. Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 16. Apr. 2009 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
(tblnext "Layer" 'T) liefert nur eine unvollständige GC-Liste -> vergleiche mal mit (entget(tblobjname "LAYER"(cdr(assoc 2 (tblnext "Layer" 'T))))) und probier es dann mit : (entmod(entget(tblobjname "LAYER"(cdr(assoc 2 (tblnext "Layer" 'T)))))) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 16. Apr. 2009 19:48 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 16. Apr. 2009 21:22 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 17. Apr. 2009 08:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadmium, Hallo Theodor, ja, ich meine das Bricscad-Forum von CAD.DE. (entget(tblobjname "LAYER"(cdr(assoc 2 (tblnext "Layer" 'T))))) gibt bei mir genau das gleiche zurück wie (tblnext "Layer" 'T) und (entmod(entget(tblobjname "LAYER"(cdr(assoc 2 (tblnext "Layer" 'T)))))) dauert genauso lange. Interessant wäre für mich, ob ACAD auch so lange braucht. Das Geheimnis hinter dem Problem ist, dass ich den Layermanager aus den Expresstools in Bricscad verwenden will. Das Modifizieren der Layerdefinition ist aber ein echter Zeitkiller. Heute habe ich einigen Stress , ich werde am Wochenende oder am Montag noch mal reinschauen. Danke für die bisherigen Antworten. Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 18. Apr. 2009 20:39 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich hatte inzwischen die Möglichkeit, die Codezeilen auf ACAD2006 zu testen. Der Vorgang dauert so kurz, dass die Zeit sich nicht mehr in 100stel Sekunden ausdrücken lässt. Tja, ist wohl ein Bricscad Problem. Das geht nächste Woche zum Support. Danke für Eure Hilfe. Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 23. Apr. 2009 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Zitat: Original erstellt von s.wickel: Hallo!Ich hatte inzwischen die Möglichkeit, die Codezeilen auf ACAD2006 zu testen. Der Vorgang dauert so kurz, dass die Zeit sich nicht mehr in 100stel Sekunden ausdrücken lässt. Tja, ist wohl ein Bricscad Problem. Das geht nächste Woche zum Support. Danke für Eure Hilfe. Stefan
Das liegt daran, dass Autocad ein ENTMOD auf einen Tabelleneintrag sowieso nicht akzeptiert. Du kannst in ACAD einen Layer nicht mit entmod auf die Tabelle nicht ändern. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 23. Apr. 2009 12:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Fuchsi, probier das mal: Code: (progn(setq zeit (getvar "cdate"))(entmod (subst (cons 62 (1+ (cdr (assoc 62 (tblnext "Layer" 'T))))) (assoc 62 (tblnext "Layer" 'T)) (tblnext "Layer" 'T)))(princ (rtos (* (- (getvar "cdate") Zeit) 1000000) 2 2))(princ))
Die Farbeinstellung des Layer 0 wird damit um eine Nummer erhöht (z. B. wird aus Farbe 3 Farbe 4). Aber das kann halt länger dauern.Mit ENTMOD wird im Layermanager der Expresstools die Layerdefinition geändert wenn ein Layerstatus erzeugt wird. Also funktionierts doch!? Stefan
[Diese Nachricht wurde von s.wickel am 23. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 23. Apr. 2009 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
(entmod (subst (cons 62 (1+ (cdr (assoc 62 (tblnext "Layer" 'T))))) (assoc 62 (tblnext "Layer" 'T)) (tblnext "Layer" 'T))) Ergibt bei mir nil, und die Farbe des ersten layer (im Regelfall 0) bleibt wo sie ist. getestet Acad2009 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 23. Apr. 2009 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Zudem finde ich nur COMMANDs in der LMAN die dazu genutzt werden Layer in einer DWG zu ändern . Das was du gesehen hast ändert die XDATA der Applikation RAK welche an einem Layer hängen. Alles was zum gc-3 gehört, gehört praktisch nicht zu dem Objekt "LAYER" . Tolle Erklärung oder ? evtl. bestätigt man sie ja nochmal ..
------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk) [Diese Nachricht wurde von cadffm am 23. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 29. Apr. 2009 14:37 <-- editieren / zitieren --> Unities abgeben:
Hallo, 'Tschuldigung dass ich das Thema hab schleifen lassen. Also in BCAD kann ich definitiv die Farbe des Layers mit entmod ändern. Dieser Unterschied deutet ja darauf hin, dass ACAD und BCAD sich etwas unterschiedlich verhalten. Ich habe mich noch nicht an den Support gewandt. Aber das mach ich gleich noch. Ich melde mich wieder, wenn ich eine Rückmeldung habe. Danke für die Hilfe, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 29. Apr. 2009 15:45 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Falls es dir hilft: In AutoCAD auch - aber derobige Code ist falsch weil dir tblnext nicht die vollständige Entityliste ausgibt und diese nicht zum entmod ausreicht ! (entget(tblobjname "LAYER" "0")) würden funktionieren ! (Zeit nicht messbar - wie oben bereits erwähnt) EDIT: Versuche es also mal "korrekt"-im Acad-Sinne mit (entget(tblobjname in BCAD ------------------ die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk)
[Diese Nachricht wurde von cadffm am 29. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 30. Apr. 2009 12:26 <-- editieren / zitieren --> Unities abgeben:
Also ich sehe (in BCAD) keinen unterschied: (entget(tblobjname "LAYER"(cdr(assoc 2 (tblnext "Layer" 'T))))) ergibt in BCAD: ((-1 . <Entity name: 0b3c5f18> ) (0 . "LAYER") (5 . "10") (330 . <Entity name: 0aefbf18> ) (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous") (290 . 1) (370 . -3) (390 . <Entity name: 1253bfe0> )) (tblnext "Layer" 'T) ergibt: ((-1 . <Entity name: 0b3c5f18> ) (0 . "LAYER") (5 . "10") (330 . <Entity name: 0aefbf18> ) (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous") (290 . 1) (370 . -3) (390 . <Entity name: 1253bfe0> )) Ok, in ACAD ist der Code falsch, aber entmod dauert bei beiden Versionen sehr lange. Gruß, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 30. Apr. 2009 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
in ACAD ... Befehl: (tblnext "Layer" 'T) ((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous")) Befehl: (entget(tblobjname "LAYER"(cdr(assoc 2 (tblnext "Layer" 'T))))) ((-1 . <Objektname: 7d6fdc80> ) (0 . "LAYER") (5 . "10") (102 . "{ACAD_XDICTIONARY") (360 . <Objektname: 7d32ca88> ) (102 . "}") (330 . <Objektname: 7d6fdc10> ) (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous") (290 . 1) (370 . -3) (390 . <Objektname: 7d6fdc78> ) (347 . <Objektname: 7d32c700> )) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 04. Mai. 2009 07:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich habe Antwort vom Bricscad Support: Zitat:
Your request 19449 - entmod auf einen Layer angewandt dauert sehr lange [2009-04-29] Ich habe dass Problem, dass ein entmod-Befehl, der auf eine Entget-Liste angewandt wird teilweise sehr lange dauert. Siehe dazu bitte auch: http://ww3.cad.de/foren/ubb/Forum145/HTML/002805.shtml Fragen: - Ist das Verhalten von BCAD beim Entmod-Befehl anders als das Verhalten von ACAD? - Handelt es sich um Absicht oder einen BUG? - Wie kann ich das Problem eventuell umgehen? Zusatzfrage: - Wann wird es möglich sein das Objekt "AutoCAD.AcadLayerStateManager.16" zu verwenden? Vielen Dank für Ihre Mühe, Stefan Wickel Our answer [2009-05-01] TM: Hallo, Herr Wickel, Danke für Ihr Feedback - habe auch bei CAD.de nachgelesen :-) dverse Anmerkungen : - momentan liefert Bricscad tatsächlich mit (tblsearch/tblnext) die gleiche (entget) Liste, wie mit (entget (tblobjname ...)) - ist eine Unsauberkeit, welche ich in Kürze beheben werde, sodass Bcad + Acad wieder gleich sind bei (tblsearch/tblnext) ... - insofern hat cadffm Recht, die Liste von (tblsearch) kann normalerweise nicht genutzt werden, um Layer zu ändern ... evtl. klappt es aber bei Acad und/oder Bcad dennohc ? - sicherer ist es, mit (entget (tblobjname ...)) zu arbeiten - diese Liste kann mit (entmod) verarbeitet werden Performance Bricscad : ja, es scheint noch recht langsam zu sein, was (entmod) betrifft ... evtl. aber auch durch das Display-Update nach Layer-Änderung verursacht ... zusätzlich, meine ich. Tip: REGENMODE=0 setzen vorher, und REGENMODE=1 nach dem Ändern von Layern - (command "_regen") muss aber folgen, evtl. reicht auch (redraw) ... Alternativ : man kann die Layer-Eigenschaften auch über (vla-...) Funktionen abfragen + einstellen - dies geht ca. 20...50 mal schneller als (entget)/(entmod) - kein Witz ! Und ist auch in Bricscad extrem schnell, sogar schneller als in Acad :-) Falls Fragen bestehen, bitte einfach melden - ich bin auch ern behilflich, jenen LMAN zu portieren :-) Viele Grüsse Torsten Moses
Somit ist ja alles bestätigt, was gesagt wurde. REGENMODE hat allerdings keinen Einfluss auf die Geschwindigkeit. Mit VLA- werde ich ein anderes mal Experimentieren. Vielen Dank für alle die geholfen haben! Stefan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 08. Sep. 2009 11:40 <-- editieren / zitieren --> Unities abgeben:
Neue Antwort von Bricsys: Zitat: Hallo, Herr Wickel,seit der Version V9.3.9 ist das Problem behoben - wie ich nach eigenen Benchmarks bestätigen kann, ist das Problem behoben, und (entmod ) arbeitet nicht nennenswert langsamer als in Acad. Viele Grüsse und einen schönen Tag Torsten Moses
Leider hatte ich noch keine Möglichkeit es auszuprobieren. Aber nächste Woche hab ich die neuste Version. Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 14. Sep. 2009 08:08 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 19. Sep. 2009 20:44 <-- editieren / zitieren --> Unities abgeben:
Hallo, hab's auf 9.3.13 getestet. Dauert immer noch lang. Ich habe mich damit abgefunden. Ich nutze den eingebauten Layermanager. Ob der inzwischen von Lisp aus zu steuern ist kann ich allerdings nicht sagen. Zur Zeit habe ich zuviel "echte" Arbeit. Bin schließlich nicht als Programmierer angestellt. Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |