| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Blockhuckepack (1659 / mal gelesen)
|
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 06. Nov. 2018 11:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, suche Hilfe für mehrfaches Verschieben von Blöcken. Ich habe das OBJROT.lsp von CADmium dahingehend angepasst, dass es einen Block auf einen anderen Block schiebt. Funktioniert soweit gut und erspart das saubere Picken der Griffe. Bei Hunderten zu verschiebenden Blöcken bleibt es aber weiterhin mühselig, da alles geklickt werden muss. Toll wäre eine Erweiterung wie folgt. Alle zu verschiebenden Blöcke, mit dem Namen A, sollen auf den nächstgelegenen Block, mit dem Namen B, geschoben werden. (defun C:OBJMOV (/ OBJ M) (if(and(setq OBJ(car(entsel "\nObjektziel wählen: "))) (setq OBJ(vlax-ename->vla-object OBJ)) (or(not(vl-catch-all-error-p(setq M(vl-catch-all-apply 'vla-get-InsertionPoint (list OBJ))))) (prompt "\n Basiskoordinaten nicht auslesbar .. ") ) ) (while(setq OBJ (car (entsel "\nzu verschiebendes Objekt wählen: "))) (and(setq OBJ(vlax-ename->vla-object OBJ)) (or(not(vl-catch-all-error-p(vl-catch-all-apply 'vla-put-InsertionPoint (list OBJ M)))) (prompt "\n Objekt nicht verschiebbar .. ") ) ) ) ) (princ) )
Danke & Gruß GAP
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 06. Nov. 2018 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
...hat sicher keiner rumliegen. Musst du dir also sicher selber stricken so ein Dingsbums du musst erstmal für dich rausfinden, wie du 'den nächstgelegenen Block' identifizierst. Wenn du in etwa weisst wie weit so ein 'nächstgelegener' Block weg von einem Ausgangs Objekt liegt, könntest du mit einem ssget Auswahlsatz um den Ausgangsblock mit entsprechender Suchbox fischen und dann eine Aktion lostreten. OBJROT hört sich aber nach rotieren und nicht verschieben an. Ob das der richtige Ansatz ist? ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 06. Nov. 2018 13:43 <-- editieren / zitieren --> Unities abgeben:
Danke für die Rückmeldung. Überlegungen gibt es schon: Abfrage für Auswahlbereich Auswahlbereich festlegen Auswahl eines Zielblocks um den Namen der B Blöcke zu erhalten Auswahl eines Verschiebeblocks um den Namen der A Blöcke zu erhalten Erstelle Liste A von n Blöcken mit Namen A Erstelle Liste B von n Blöcken mit Namen B Nimm ersten Block A aus Liste A Rechne die Abstände der Einfügepunkte (aus Koordinaten X,Y) zu allen Blöcken B aus Liste B Merke jenen Block B mit dem kürzesten Abstand zum ersten Block A (Berechnung des ersten Abstands von Block A zu Block B, nächste Berechnung, wenn Abstand länger als erste Berechnung mit Block B dann vergessen, wenn Abstand kürzer dann ist der Wert aktueller neuer kürzester Abstand, weiter bis alle durchgerechnet sind) Übergib den Einfügepunkt des selektierten Blocks B an ersten Block A Verschiebe ersten Block A (oder merke und verschiebe alle Blöcke A gesammelt am Ende?) Nimm zweiten Block A aus Liste A Rechne die Abstände der Einfügepunkte (aus Koordinaten X,Y) zu allen (restlichen?) Blöcken B aus Liste B Merke den Block B mit dem kürzesten Abstand zum zweiten Block A (Berechnung des ersten Abstands von Block A zu Block B, nächste Berechnung, wenn Abstand länger als erste Berechnung mit Block B dann vergessen, wenn Abstand kürzer dann ist der Wert aktueller neuer kürzester Abstand, weiter bis alle durchgerechnet sind) Übergib den Einfügepunkt des selektierten Blocks B an zweiten Block A Verschiebe zweiten Block A (oder merke und verschiebe alle Blöcke A gesammelt am Ende?) usw. So in etwa? Tut mir leid, aber das liegt außerhalb meiner Lisp-Möglichkeiten.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
Beiträge: 229 Registriert: 24.05.2005 Windows 10 BricsCAD Pro V23
|
erstellt am: 06. Nov. 2018 16:08 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Hallo, Nur so als Denkanstoß... Vielleicht verstehe ich auch deine Aufgabe falsch, aber eventuell ist das auch die Lösung für dein Problem?: 1) Kopiere alle Blockreferenzen Block B 2) Referenziere mit den kopierten Referenzen statt auf Block B auf Block A (GK 2) Wenn du weniger Blockreferenzen A als B hast, wird das Ergebnis nicht deinem beschriebenen Wunsch entsprechen, aber was wäre denn dein Wunsch, wenn es mehr Referenzen A als B gibt?
Zitat: Rechne die Abstände der Einfügepunkte (aus Koordinaten X,Y) zu allen (restlichen?) Blöcken B aus Liste B
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 06. Nov. 2018 17:40 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Hallo cadoc, das ist eigentlich recht einfach aber eine frage hab ich noch: Wenn ein B zufällig der nächste Block zu zwei As ist dann liegen am Ende die zwei As übereinander und en anderes B hat kein A. Kann man das so ausdrücken ??? Sollte nicht vielleicht erst mal von allen As zu allen Bs eine Abstandsliste erzeugt und so verarbeitet werden dass nur jeweils ein A zu einem B kommt ? Vielleicht sowas wie: Kürzeste Abstände zuerst und die Elemente dann nicht nochmal verarbeiten. Wenn dir das so gefallen würde dann wäre es das hier (A anklicken für Name, As wählen, B anklicken): Ist noch ohne Kosmetik. Geht schöner aber funzt erst mal. Code: (defun c:blockhuckepack (/ DATA DATA_LIST ENT1_DATA ENT1_DATALIST ENT1_NAME ENT2_DATA ENT2_DATALIST ENT2_NAME ENT_NAME SATZ ) (vl-load-com) (defun k_satz->entlist (satz) ;;; Elementliste aus Auswahlsatz erstellen (if (= (type satz) 'PICKSET) (vl-remove-if-not '(lambda (dummy) (= (type dummy) 'ENAME)) (mapcar 'cadr (ssnamex satz)) ) ) ) (defun k_->obj_name (name) ;;; VLA-OBJECT zurückgeben (cond ((= (type name) 'ENAME) (vlax-ename->vla-object name) ) ((= (type name) 'VLA-OBJECT) name ) ((= (type name) 'STRING) (vlax-ename->vla-object (handent name)) ) ((= (type name) 'LIST) (vlax-ename->vla-object (cdr (assoc -1 name))) ) ) ) (defun k_->ent_name (name) ;;; Elementname zurückgeben (cond ((= (type name) 'ENAME) name ) ((= (type name) 'VLA-OBJECT) (vlax-vla-object->ename name) ) ((= (type name) 'STRING) (handent name) ) ((= (type name) 'LIST) (cdr (assoc -1 name)) ) ) ) (defun k_entlist->satz (ent_list / n satz ent_name) ;;; Auswahlsatz aus Elementliste erstellen (if (listp ent_list) (progn (setq satz (ssadd)) (mapcar '(lambda (ent_name) (cond ((= (type ent_name) 'VLA-OBJECT) (setq satz (ssadd (vlax-vla-object->ename ent_name) satz) ) ) ((= (type ent_name) 'ename) (setq satz (ssadd ent_name satz)) ) ((= (type ent_name) 'str) (if (handent ent_name) (setq satz (ssadd (handent ent_name) satz)) ) ) ) ) ent_list ) ) ) satz ) (if (setq ent1_name (car (entsel))) (if (= (cdr (assoc 0 (setq ent1_data (entget ent1_name)))) "INSERT" ) (progn (setq ent1_datalist (mapcar 'entget (k_satz->entlist (ssget (list '(0 . "INSERT") (assoc 2 ent1_data)) ) ) ) ent2_name (car (entsel)) ent2_datalist (mapcar 'entget (k_satz->entlist (ssget "x" (list '(0 . "INSERT") (assoc 2 (entget ent2_name)) ) ) ) ) data_list (vl-sort (apply 'append (mapcar '(lambda (ent1_data) (mapcar '(lambda (ent2_data) (list (distance (cdr (assoc 10 ent1_data)) (cdr (assoc 10 ent2_data)) ) ent1_data ent2_data ) ) ent2_datalist ) ) ent1_datalist ) ) '(lambda (data1 data2) (< (car data1) (car data2))) ) ) (while data_list (setq data (car data_list) data_list (vl-remove-if '(lambda (dummy) (or (equal (cadr dummy) (cadr data)) (equal (cadr dummy) (caddr data)) (equal (caddr dummy) (cadr data)) (equal (caddr dummy) (caddr data)) ) ) data_list ) ent1_datalist (vl-remove-if '(lambda (dummy) (or (equal dummy (cadr data)) (equal dummy (caddr data)) ) ) ent1_datalist ) ) (vla-put-insertionpoint (k_->obj_name (cdr (assoc -1 (cadr data)))) (vla-get-insertionpoint (k_->obj_name (cdr (assoc -1 (caddr data)))) ) ) ) (if ent1_datalist (progn (setq satz (k_entlist->satz (mapcar 'k_->ent_name ent1_datalist)) ) (sssetfirst satz satz) (alert (strcat "für " (itoa (sslength satz)) " Objekt(e) keine Ziele gefunden\rObjekte sind markiert" ) ) ) ) ) ) ) )
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de [Diese Nachricht wurde von Andreas Kraus am 06. Nov. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 08:01 <-- editieren / zitieren --> Unities abgeben:
Wow! Ist ja mächtig. Nur versteh ichs noch nicht ganz. Was wird in welcher Reihenfolge geklickt? Vielleicht noch zur näheren Erklärung. In 99% der Fälle gibt es mehr (Verschiebe-) A-Blöcke als (Ziel-) B-Blöcke. Beide besitzen viele unterschiedliche Attribute, Tags und Inhalte. Das bedeutet aber auch, dass einige A-Blöcke übrig bleiben und nicht verschoben werden sollten, wenn alle B-Blöcke schon verbraucht sind. Ob man diese "Untouchables" kennzeichnen sollte/könnte? Der zweite Schritt wäre dann ja noch von Block B das B_Attribut_1 in z.B. das A_Attribut_3 von Block A hinüberzuschaufeln, vorausgesetzt sie haben den gleichen Einfügepunkt, also Huckepack ;-). Aber damit wollte ich euch nicht schon am Anfang verscheuchen. Derzeit mache ich das auch einzeln mit der TTC.lsp. ;; ==================================================================== ;; ;; ;; ;; TTC.LSP - The program copies the text from: DText, MText, ;; ;; Tables, Dimensions, Attributes, Attributes, ;; ;; Attributes Definitions, DText, MText and inner ;; ;; block's DText and MText to: DText, MText, Tables, ;; ;; Attribures and Attributes Definitions. There are ;; ;; Multiple and Pair-wise modes. ;; ;; ;; ;; ==================================================================== ;; ;; ;; ;; Command(s) to call: TTC ;; ;; ;; ;; ==================================================================== ;; ;; ;; ;; THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ON ANY ;; ;; MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS PROGRAM OR ;; ;; PARTS OF IT ABSOLUTELY FREE. ;; ;; ;; ;; THIS PROGRAM PROVIDES 'AS IS' WITH ALL FAULTS AND SPECIFICALLY ;; ;; DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS ;; ;; FOR A PARTICULAR USE. ;; ;; ;; ;; ==================================================================== ;; ;; ;; ;; V1.3, 29 November, 2005, Riga, Latvia ;; ;; © Aleksandr Smirnov (ASMI) ;; ;; For AutoCAD 2000 - 2008 (isn't tested in a next versions) ;; ;; ;; ;; http://www.asmitools.com ;; ;; ;; ;; ==================================================================== ;; (defun c:ttc (/ actDoc vlaObj sObj sText curObj oldForm oType oldMode conFlag errFlag *error*) (vl-load-com) (setq actDoc(vla-get-ActiveDocument (vlax-get-acad-object))) (vla-StartUndoMark actDoc) (defun TTC_Paste(pasteStr / nslLst vlaObj hitPt hitRes Row Column) (setq errFlag nil) (if (setq nslLst(nentsel "\nPaste text >")) (progn (cond ((and (= 4(length nslLst)) (= "DIMENSION"(cdr(assoc 0(entget(car(last nslLst)))))) ); end and (setq vlaObj(vlax-ename->vla-object (cdr(assoc -1(entget(car(last nslLst))))))) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-TextOverride(list vlaObj pasteStr))) (progn (princ "\n<!> Can't paste. Object may be on locked layer <!> ") (setq errFlag T) ); end progn ); end if ); end condition #1 ((and (= 4(length nslLst)) (= "ACAD_TABLE"(cdr(assoc 0(entget(car(last nslLst)))))) ); end and (setq vlaObj (vlax-ename->vla-object (cdr(assoc -1(entget(car(last nslLst)))))) hitPt(vlax-3D-Point(trans(cadr nslLst)1 0)) hitRes(vla-HitTest vlaObj hitPt (vlax-3D-Point '(0.0 0.0 1.0)) 'Row 'Column) ); end setq (if(= :vlax-true hitRes) (progn (if(vl-catch-all-error-p (vl-catch-all-apply 'vla-SetText(list vlaObj Row Column pasteStr))) (progn (princ "\n<!> Can't paste. Object may be on locked layer <!> ") (setq errFlag T) ); end progn ); end if ); end progn ); end if ); end condition # 2 ((and (= 4(length nslLst)) (= "INSERT"(cdr(assoc 0(entget(car(last nslLst)))))) ); end and (princ "\n<!> Can't paste to block's DText or MText <!> ") (setq errFlag T) ); end condition #3 ((and (= 2(length nslLst)) (member(cdr(assoc 0(entget(car nslLst)))) '("TEXT" "MTEXT" "ATTRIB" "ATTDEF")) ); end and (setq vlaObj(vlax-ename->vla-object(car nslLst))) (if(vl-catch-all-error-p (vl-catch-all-apply 'vla-put-TextString(list vlaObj pasteStr))) (progn (princ "\n<!> Error. Can't pase text <!> ") (setq errFlag T) ); end progn ); end if ); end condition #4 (T (princ "\n<!> Can't paste. Invalid object <!> ") (setq errFlag T) ); end condition #5 ); end cond T ); end progn nil ); end if ); end of TTC_Paste (defun TTC_MText_Clear(Mtext / Text Str) (setq Text "") (while(/= Mtext "") (cond ((wcmatch(strcase (setq Str (substr Mtext 1 2)))"\\[\\{}`~]") (setq Mtext(substr Mtext 3) Text(strcat Text Str) ); end setq ); end condition #1 ((wcmatch(substr Mtext 1 1) "[{}]") (setq Mtext (substr Mtext 2)) ); end condition #2 ((and (wcmatch (strcase (substr Mtext 1 2)) "\\P") (/=(substr Mtext 3 1) " ") ); end and (setq Mtext (substr Mtext 3) Text (strcat Text " ") ); end setq ); end condition #3 ((wcmatch (strcase (substr Mtext 1 2)) "\\[LOP]") (setq Mtext(substr Mtext 3)) ); end condition #4 ((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]") (setq Mtext (substr Mtext (+ 2(vl-string-search ";" Mtext)))) ); end condition #5 ((wcmatch (strcase (substr Mtext 1 2)) "\\S") (setq Str(substr Mtext 3 (- (vl-string-search ";" Mtext) 2)) Text(strcat Text (vl-string-translate "#^\\" " " Str)) Mtext(substr Mtext (+ 4 (strlen Str))) ); end setq (print Str) ); end condition #6 (T(setq Text(strcat Text(substr Mtext 1 1)) Mtext (substr Mtext 2) ); end setq ); end condition #7 ); end cond ); end while Text ); end of TTC_MText_Clear
(defun TTC_Copy (/ sObj sText tType actDoc) (if (and (setq sObj(car(nentsel "\nCopy text... "))) (member(setq tType(cdr(assoc 0(entget sObj)))) '("TEXT" "MTEXT" "ATTRIB" "ATTDEF")) ); end and (progn (setq actDoc(vla-get-ActiveDocument (vlax-get-Acad-object)) sText(vla-get-TextString (vlax-ename->vla-object sObj)) ); end setq (if(= tType "MTEXT") (setq sText(TTC_MText_Clear sText)) ); end if ); end progn ); end if sText ); end of TTC_Copy
(defun CCT_Str_Echo(paseStr / comStr) (if(< 20(strlen paseStr)) (setq comStr (strcat (substr paseStr 1 17)"...")) (setq comStr paseStr) ); end if (princ(strcat "\nText = \"" comStr "\"")) (princ) ); end of CCT_Str_Echo (defun *error*(msg) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (princ "\nQuit TTC") (princ) ); end of *error* (if(not ttc:Mode)(setq ttc:Mode "Multiple")) (initget "Multiple Pair-wise") (setq oldMode ttc:Mode ttc:Mode(getkword (strcat "\nSpecify mode [Multiple/Pair-wise] <"ttc:Mode">: ")) conFlag T paseStr "" ); end setq (if(null ttc:Mode)(setq ttc:Mode oldMode)) (if(= ttc:Mode "Multiple") (progn (if(and(setq paseStr(TTC_Copy))conFlag) (progn (CCT_Str_Echo paseStr) (while(setq conFlag(TTC_Paste paseStr))T ); end while ); end progn ); end if ); end progn (progn (while(and conFlag paseStr) (setq paseStr(TTC_Copy)) (if(and paseStr conFlag) (progn (CCT_Str_Echo paseStr) (setq errFlag T) (while errFlag (setq conFlag(TTC_Paste paseStr)) );end while ); end progn ); end if ); end while ); end progn ); end if (vla-EndUndoMark actDoc) (princ "\nQuit TTC") (princ) ); end c:ttc (princ "\n[Info] http:\\\\www.AsmiTools.com [Info]") (princ "\n[Info] Type TTC to run text to text copy tool [Info]")
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 07. Nov. 2018 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Hallo cadoc, Zitat: Was wird in welcher Reihenfolge geklickt?
Klick auf einen A-Block (um den Namen zu erhalten) wählen der A-Blöcke (welche sollen verschoben werden) Klick auf einen B-Block (damit der nächste passende Block gesucht werden kann) Übriggebliebene A-Blöcke werden markiert. Das wars ... viel Spass damit Die TTC-LSP schau ich mir nachher mal an. Kenn ich noch nicht. Mal sehn was du vorhast. Ich bin ja soooo gespannt ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 10:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, leider funktioniert das Lisp irgendwie nicht so ganz bei mir (Acad Map 2017). Bekomme immer ein "nil". Wozu das Ganze? A-Blöcke repräsentieren digitalisierte Objekte mit vielen Attributen die noch ihre richtige Lage suchen. B-Blöcke sind vermessene Punkte, davon haben aber nicht alle immer eine/die richtige Bezeichnung (deswegen die Identifikation mit dem nächstgelegenen B-Block) und es werden auch nicht immer alle Objekte in der Natur gefunden (deswegen bleiben immer ein paar A-Blöcke übrig). Beim Einfügen neuer Teilvermessungen könnte der ganze Vorgang problemlos oft wiederholt werden. Ausschließen müßte man vielleicht noch den " Tandem-Huckepack " soweit LG & Besten Dank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 07. Nov. 2018 10:53 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Hallo cadoc, kannst du mal die Aufgabenstellung mit Worten aus der realen Welt beschreiben. Ich meine: - was ist tatsächlich gegeben? - wie soll das Ergebnis aussehen? - über welche realen Eigenschaften kann ein Zusammenhang der realen Objekte hergestellt werden? Ich denke, dass es Sinn macht, deinen Lösungsansatz zu hinterfragen, vielleicht auch anzupassen. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 07. Nov. 2018 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Du bekommst ein nil Ich hoffe ich hab alle weiteren benötigten Module reingepackt und keins vergessen. Bekommst du denn nur ein nil oder steht da sonst noch was ? Ich kann auch TeamViewer anbieten wenn du das darfst. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 10:58 <-- editieren / zitieren --> Unities abgeben:
|
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 11:09 <-- editieren / zitieren --> Unities abgeben:
Klick auf einen A-Block (um den Namen zu erhalten) OK wählen der A-Blöcke (welche sollen verschoben werden) OK - Eigentlich immer alle Klick auf einen B-Block (damit der nächste passende Block gesucht werden kann) OK Objekte wählen: 0 gefunden, 0 gesamt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 07. Nov. 2018 11:23 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Zitat: Original erstellt von cadoc: Hallo Holger, siehe eins drüber. Mehr is nicht.LG
Woher kommen die digitalisierten Objekte? Woraus entstehen die A-Blöcke, die die digitalisierten Objekte darstellen? Woher kommen die vermessenen Punkte? Woraus entstehen B-Blöcke, die die vermessenen Punkte darstellen? Wie gelangen die Objekte aus der realen Welt in die CAD-Welt? Was stellen die A-Blöcke dar? Welche fachlichen Zusammenhänge gibt es - lassen sich darüber Verbindungen zwischen A-und B-Block herstellen? Sorry, ich erlebe zu oft, dass mir in sich schlüssig erscheinende Teillösungen präsentiert werden, der schon ein fester Lösungsweg zugrunde liegt. Das versperrt oftmals die Sicht auf andere Lösungsansätze. Diese kann man aber nur entwickeln, wenn die übergeordnete Aufgabenstellung bekannt und frei von technischen Detail-Lösungsansätzen formuliert wird. Gerade Entwickler hangeln sich an Lösungsansätzen entlang, die durch die ihnen bekannten möglichen Teillösungen geprägt sind. Ich selbst spreche mich davon auch nicht frei. In der Community sind aber viele Entwickler, die in Summe über einen großen Erfahrungsschatz von Teillösungen verfügen und darauf basierend auch verschiedene Lösungswege vorschlagen könn(t)en. Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 11:52 <-- editieren / zitieren --> Unities abgeben:
Ist mir schon klar was du meinst. Versuche es nochmal zu erklären. Woher kommen die digitalisierten Objekte? Alle digitalisierten Objekte (1000+) = A-Block mit ca. 90 Attributen, werden händisch gesetzt und befüllt. So ein Objekt kann/könnte alles mögliche sein vom Abfalleimer bis Zooeingang. Dateneingabe erfolgt teils in in der grafischen Oberfläche im Eigenschaftsfenster, teils mit attout - attin über Excel. Woraus entstehen die A-Blöcke, die die digitalisierten Objekte darstellen? Aus einem Kreis und den ~ 90 Attributen. Woher kommen die vermessenen Punkte? Vom Vermesser dem ich die Eingabe der Bezeichnung ersparen will, bzw. der nicht immer über die aktuellen verfügt. Woraus entstehen B-Blöcke, die die vermessenen Punkte darstellen? Die Vermessungsblöcke bestehen ebenfalls aus einem Kreis und ~ 5 Attributen Wie gelangen die Objekte aus der realen Welt in die CAD-Welt? Der Vermesser übergibt mir eine dwg mit seinen Vermessungspunkten = B-Block Was stellen die A-Blöcke dar? Welche fachlichen Zusammenhänge gibt es - lassen sich darüber Verbindungen zwischen A-und B-Block herstellen? A-Blöcke sind letztlich Datencontainer in der dwg die mir schlußendlich auch eine korrekte Lageinformation geben sollen. Die Beziehung soll über den (nächsliegenden) Einfügepunkt des B-Blocks hergestellt werden (wie im ersten Beitrag beschrieben). Ziel ist die erhaltene nun genau Lageinformation, ohne auf eine Bezeichnung oder sonstiges zurückgreifen zu müssen, an meine Blöcke zu übergeben. Hilft das weiter? LG
Zitat: Original erstellt von Brischke:
Woher kommen die digitalisierten Objekte? Woraus entstehen die A-Blöcke, die die digitalisierten Objekte darstellen? Woher kommen die vermessenen Punkte? Woraus entstehen B-Blöcke, die die vermessenen Punkte darstellen? Wie gelangen die Objekte aus der realen Welt in die CAD-Welt? Was stellen die A-Blöcke dar? Welche fachlichen Zusammenhänge gibt es - lassen sich darüber Verbindungen zwischen A-und B-Block herstellen? Sorry, ich erlebe zu oft, dass mir in sich schlüssig erscheinende Teillösungen präsentiert werden, der schon ein fester Lösungsweg zugrunde liegt. Das versperrt oftmals die Sicht auf andere Lösungsansätze. Diese kann man aber nur entwickeln, wenn die übergeordnete Aufgabenstellung bekannt und frei von technischen Detail-Lösungsansätzen formuliert wird. Gerade Entwickler hangeln sich an Lösungsansätzen entlang, die durch die ihnen bekannten möglichen Teillösungen geprägt sind. Ich selbst spreche mich davon auch nicht frei. In der Community sind aber viele Entwickler, die in Summe über einen großen Erfahrungsschatz von Teillösungen verfügen und darauf basierend auch verschiedene Lösungswege vorschlagen könn(t)en. Grüße! Holger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 07. Nov. 2018 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Hm... stell doch mal ne Beispiel-DWG hier rein. Vielleicht gehts hier um unbenannte Blöcke, dann ist das mit dem Namen natürlich nix. Da muss man anders ran. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 07. Nov. 2018 12:15 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
... hilft nicht weiter, da du den Anfang, das Entstehen der Daten nicht beschrieben hast. Es fehlt auch die Ursache, weshalb diese Zuordnung von A- und B-Block fehlt - du schreibst nur, dass diese fehlt. Ich sehe das bisher wie folgt: Der Weg nur über die Entfernung der Objekte kann niemals eindeutig sein. Sobald eine automatisierte Lösung nicht 100&ig sichere Ergebnisse liefert, ist eine manuelle Prüfung erforderlich - den Aufwand für die Programmierung kann man sich sparen. Es braucht mindestens irgendeinen 2. Zusammenhang, um eine Eindeutigkeit herstellen zu können. Mit meinen Fragen bin ich auf der Suche danach - deine Infos genügen dafür allerdings nicht. Oder es gibt keinen weiteren Zusammenhang, dann gibt es eben auch keine Lösung - es gibt nicht für alles eine programmierbare Lösung.
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 12:26 <-- editieren / zitieren --> Unities abgeben:
Eine abgespeckte Version davon. Zitat: Original erstellt von Andreas Kraus: Hm... stell doch mal ne Beispiel-DWG hier rein. Vielleicht gehts hier um unbenannte Blöcke, dann ist das mit dem Namen natürlich nix. Da muss man anders ran.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 12:52 <-- editieren / zitieren --> Unities abgeben:
... hilft nicht weiter, da du den Anfang, das Entstehen der Daten nicht beschrieben hast. Es fehlt auch die Ursache, weshalb diese Zuordnung von A- und B-Block fehlt - du schreibst nur, dass diese fehlt. ----- Wenn ich zum Beispiel einen Kataster erstelle, sagen wir von Leitpflöcken. Ich kenne die Orte wo sie vor 10 Jahren gesetzt wurden, annähernd. Trage sie in den Plan ein. Manche gibt es noch, manche nicht, manche sind neu. Zu erwarten ist, dass es in der Natur weniger gibt als angenommen. Σ Digitalisierte A-Blöcke > Σ Vermessungs B-Blöcke ----- Ich sehe das bisher wie folgt: Der Weg nur über die Entfernung der Objekte kann niemals eindeutig sein. Sobald eine automatisierte Lösung nicht 100&ig sichere Ergebnisse liefert, ist eine manuelle Prüfung erforderlich - den Aufwand für die Programmierung kann man sich sparen. ----- Auf die Bezeichnung will ich mich ebenfalls nicht 100% verlassen. Eine abschließende manuelle/optische Prüfung ist dabei immer notwendig. ----- Es braucht mindestens irgendeinen 2. Zusammenhang, um eine Eindeutigkeit herstellen zu können. Mit meinen Fragen bin ich auf der Suche danach - deine Infos genügen dafür allerdings nicht. Oder es gibt keinen weiteren Zusammenhang, dann gibt es eben auch keine Lösung - es gibt nicht für alles eine programmierbare Lösung. ----- OK, will nicht, dass ihr gaue Haare bekommt -----
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 07. Nov. 2018 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
... wenn ich es nun richtig verstehe, dann geht jemand raus und erzeugt irgendwelche Messpunkte, ohne dass von diesen am Ende bekannt ist, was dieser Messpunkt zum Inhalt hat - richtig? Falls dem so ist, dann gibt es keine Lösung. Dann kann es immer passieren, dass der Mülleimer vorm Zoo eindeutig dem nächstgelegenen Leitpfosten der 10km entfernten Landstraße zugeordnet wird. Nicht dass wir uns hier falsch verstehen. Es würde schon genügen, wenn in der Messpunkt-DWG nur Leitpfosten enthalten sind. Das wäre die 2. Information die es braucht, um eine eindeutige Zuordnung oder eben eine Eindeutige Nichtzuordnung feststellen zu können. Soll heißen: Entstehen die Daten qualifiziert, ohne dass die Qualifizierung an irgendeiner Stelle vermerkt ist, dann muss der Workflow beschrieben sein, und das Programm kann saubere Ergebnisse liefern.
Zitat: Original erstellt von cadoc: ...OK, will nicht, dass ihr gaue Haare bekommt
Darauf hast du keinen Einfluß mehr. Meine Haare sind schon grau. ;-) Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 13:24 <-- editieren / zitieren --> Unities abgeben:
... wenn ich es nun richtig verstehe, dann geht jemand raus und erzeugt irgendwelche Messpunkte, ohne dass von diesen am Ende bekannt ist, was dieser Messpunkt zum Inhalt hat - richtig? Falls dem so ist, dann gibt es keine Lösung. Dann kann es immer passieren, dass der Mülleimer vorm Zoo eindeutig dem nächstgelegenen Leitpfosten der 10km entfernten Landstraße zugeordnet wird. Nicht dass wir uns hier falsch verstehen. Es würde schon genügen, wenn in der Messpunkt-DWG nur Leitpfosten enthalten sind. ----- Dem ist so. Entweder separate dwg oder in einem Attribut vermerkt. ----- Das wäre die 2. Information die es braucht, um eine eindeutige Zuordnung oder eben eine Eindeutige Nichtzuordnung feststellen zu können. Soll heißen: Entstehen die Daten qualifiziert, ohne dass die Qualifizierung an irgendeiner Stelle vermerkt ist, dann muss der Workflow beschrieben sein, und das Programm kann saubere Ergebnisse liefern.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 13:25 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 07. Nov. 2018 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Da es ja "in beide Richtungen funktioniert" ist zunächst mal egal ob hier rot oder weiss verschoben wird, ich kommentiere einfach noch mal und du machst es in der (deiner) hier angehängten Datei. Ob BlockA die weissen oder die roten sind ist ja wurscht, im Anschluß verscuhst du es dann einfach noch mal mit den jeweils anderen. Öffne die Datei neu, lade den code, starte blockhuckepack und verklick sich nicht (ggf. ist da ein Bug drin - aber ich schaue nicht nach. Zitat: Original erstellt von cadoc: Klick auf einen A-Block (um den Namen zu erhalten) OK Ok, eine Blockreferenz gewählt wählen der A-Blöcke (welche sollen verschoben werden) OK - Eigentlich immer alle dann wähle diese aus, egal wie, gerne auch mit der Objektwahl ALLE Klick auf einen B-Block (damit der nächste passende Block gesucht werden kann) OK gut, dann sollte nun die Rückmeldung nicht Objekte wählen: 0 gefunden, 0 gesamt lauten sondernBefehl: BLOCKHUCKEPACK Objekt wählen: Objekte wählen: alle 3 gefunden Objekte wählen: Objekt wählen: nil Befehl: #oder# Befehl: BLOCKHUCKEPACK Objekt wählen: Objekte wählen: alle 4 gefunden Objekte wählen: Objekt wählen: nil Befehl:[i][/i]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 13:53 <-- editieren / zitieren --> Unities abgeben:
Sozusagen einfach nur saugeil D A N K E Zitat: Original erstellt von cadffm: Da es ja "in beide Richtungen funktioniert" ist zunächst mal egal ob hier rot oder weiss verschoben wird, ich kommentiere einfach noch mal und du machst es in der (deiner) hier angehängten Datei. Ob BlockA die weissen oder die roten sind ist ja wurscht, im Anschluß verscuhst du es dann einfach noch mal mit den jeweils anderen.Öffne die Datei neu, lade den code, starte blockhuckepack und verklick sich nicht (ggf. ist da ein Bug drin - aber ich schaue nicht nach.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 07. Nov. 2018 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
Zitat: Original erstellt von cadoc: ... Dem ist so. Entweder separate dwg oder in einem Attribut vermerkt. ...
Dann brauchst du doch nur die Filterbedingung festlegen, welche A-Blöcke überhaupt in den Entfernungsvergleich einzubeziehen sind. Ich gehe davon aus, dass es eine begrenzte Ungenauigkeit beim Aufmaß gibt. Damit kannst du die Zuordnungsbedingungen eindeutig formulieren. Im Ergebnis existieren, dann 1) zu B-Blöcken zugeordnete A-Blöcke 2) A-Blocke, zu denen kein B-Block zugeordnet werden konnte 3) B-Blöcke, zu denen kein A-Block zugeordnet werden konnte Dein Programmablauf passt ja für die einzelne Betrachtung, so dass ich nur noch einen Konfigurationsbereich ergänzen wollte. Im Ablauf muss dann beim Einlesen der Vermesser-dwg die Qualifikation des Inhalts stattfinden, damit du die Filterung der A-Blöcke vornehmen kannst. Zusätzlich kann man für jeden Typ sicher auch die Genauigkeit festlegen, in welchem Umkreis sich ein A- und B-Block überhaupt für einen Vergleich befinden müssten. A) Konfigurationsbereich A1) Festlegung von Typen (Leitpfosten/Mülleimer, ...) und deren Erkennungsmerkmale (z.Bsp. Attributinhalt(e) A2) Definition der Vermessungsungenauigkeit [Delta] Wenn natürlich schon alles in einer Zeichnung ist, dann wird's eng. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 07. Nov. 2018 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
So, bin wieder da und hab wohl einiges verpasst. Kaum ist man mal am Arbeiten dreht sich die Welt weiter Sowas aber auch. Es scheint zu klappen. Freut mich (und dich auch) Ich kann dann auch noch Fehlerbehandlung usw. reinpacken und den Code etwas schöner machen. Holgers Ideen sind gut ... das kann richtig schön werden. Wenn noch was ist einfach melden Danke auch an alle die zur Klärung beigetragen haben. Super Truppe hier (wohlfühl ) ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 07. Nov. 2018 14:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger ja ich habs schon gemerkt, an dir kommt nichts vorbei, gründlicher als man ahnen konnte ;-). Zwingt einen sich zu "sortieren" und alle Eventualitäten zu berücksichtigen. Hallo Andreas, wie gesagt, funtioniert schon gut genug für mich. Sahnehäubchen wäre natürlich noch, die Übergabe der Höhe des zweitgewählten Blocks im Attribut HOEHE an den nun verschobenen einfügepunktgleichen erstgewählten Block in z.B. das Attribut S_ATT1. Aber ich verneige mich auch so schon vor euch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 08. Nov. 2018 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für cadoc
So, hier das Ganze mit Übernahme des Attributwerts. Auch hier ohne viel Kosmetik. Attributnamen sind fest im Programm eingetragen. Kann man natürlich auch noch mit Auswahl und/oder Dialogfeld aufmotzen. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadoc Mitglied
Beiträge: 28 Registriert: 23.08.2018
|
erstellt am: 08. Nov. 2018 15:17 <-- editieren / zitieren --> Unities abgeben:
|