| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Mit SAP ERP/PLM den Anlagenbau perfekt organisiert - NEUMAN & ESSER GROUP (CIDEON, SAP, ERP, PLM, CAD), ein Anwenderbericht
|
Autor
|
Thema: Attributwert als Objekteigenschaft (2467 mal gelesen)
|
ejjj Mitglied Student
Beiträge: 5 Registriert: 15.11.2013 Autocad Civil 3D 2010
|
erstellt am: 15. Nov. 2013 11:36 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 15. Nov. 2013 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 15. Nov. 2013 11:43 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
|
ejjj Mitglied Student
Beiträge: 5 Registriert: 15.11.2013 Autocad Civil 3D 2010
|
erstellt am: 15. Nov. 2013 11:47 <-- editieren / zitieren --> Unities abgeben:
Habe von einer Stadt das Kanalnetz bekommen und möchte nun die Fließrichtungspfeile, welche als Block eingefügt sind und das Attribut Winkel haben, in den Richtigen "Winkel" drehen. Also den Attributwert von Winkel als Objekteigenschaft Drehung einsetzten. Leider kann ich die Lisp nicht selbst anpassen. Da es über 400 Blöcke sind, welche gedreht werden müssen, würde das halt so viel schneller gehen. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3424 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 15. Nov. 2013 12:35 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
Servus, oder du verwendest civil.... pfeile in sdf (mapexport) inkl. Attributwerte und dann die Darstellung mit der Drehung Attribut abhängig. ------------------ <----- Bitte Systeminfo eintragen, warum siehst du hier. "Warum Einfach es geht auch kompliziert". Schöne Grüsse aus der Steiermark Bernd P. Sport ist Mord Rekorde: Scalelist>11727, Fehler>34365, Layerfilter>XXXX Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 270 Registriert: 07.06.2013
|
erstellt am: 19. Nov. 2013 11:47 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
mit vba eine relativ triviale Sache Im Prinzip schauts wie folgt aus: Function block_get_attribute(blo As AcadBlockReference, tagname) As String Dim AttList As Variant On Error Resume Next If blo.HasAttributes Then AttList = blo.GetAttributes For i = LBound(AttList) To UBound(AttList) If UCase(AttList(i).TagString) = tagname Or UCase(Trim(AttList(i).TagString)) = tagname & "_001" Then block_get_attribute = AttList(i).textstring Exit Function
End If Next End If End Function sub rotateme dim blockref as acadblockreference dim entity as acadentity for each entity in thisdrawing.modelspace if lcase(entity.objectname)="acdbblockreference" then set blockref=entity if blockref.effectivename="BLOCKNAME" then S= block_get_attribute(blockref, "ATTRIBUTNAME") C= block_get_attribute(blockref, "FARBATTRIBUTNAME") if isnumeric(s) then r=val(s) blockref.rotation=r select case C case "ROT" blockref.color=acred case "BLAU" blockref.color=acblue blockref.update end if endif end if next
end sub Wie ueblich sind die ueblichen Huerden wie winkelumrechnungen etc zu beachten. Und ist auch klar in dem falle sollte der blockeinfuegepunkt gleichzeitig der drehpunkt sein.
------------------ Wer es nicht versucht, hat schon verlorn Und bei 3 Typos gibts den vierten gratis ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ejjj Mitglied Student
Beiträge: 5 Registriert: 15.11.2013 Autocad Civil 3D 2010
|
erstellt am: 22. Nov. 2013 16:14 <-- editieren / zitieren --> Unities abgeben:
|
Cader52 Mitglied Konstrukteur
Beiträge: 70 Registriert: 29.09.2011 AutoCAD 2012 SP1 AutoCAD 2013 SP1 Windows XP-Pro Prozesseor AMD Athlon X2 (2 x 3.2GHz)
|
erstellt am: 22. Nov. 2013 17:32 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
|
Cader52 Mitglied Konstrukteur
Beiträge: 70 Registriert: 29.09.2011 AutoCAD 2012 SP1 AutoCAD 2013 SP1 Windows XP-Pro Prozesseor AMD Athlon X2 (2 x 3.2GHz)
|
erstellt am: 22. Nov. 2013 17:36 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
|
ejjj Mitglied Student
Beiträge: 5 Registriert: 15.11.2013 Autocad Civil 3D 2010
|
erstellt am: 25. Nov. 2013 15:33 <-- editieren / zitieren --> Unities abgeben:
Es funktioniert mit beiden Varianten nicht. Wenn ich das Makro per Einzelschritt ausführe tritt nie der Fall lcase(entity.objectname)="acdbblockreference" ein. Selbiges wenn ich es nur ausführe. Was mache ich denn falsch? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 25. Nov. 2013 20:16 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
Keinen Block in der aktiven Zeichnung? Oder verschachtelte Blöcke? Prinzipiell funktioniert der Code von Rexxitall, fehlt nur ein End select: Kannst ja mal hiermit probieren, bei mir macht es alles was es soll ... Code:
Function block_get_attribute(blo As AcadBlockReference, tagname) As String Dim AttList As Variant On Error Resume Next If blo.HasAttributes Then AttList = blo.GetAttributes For i = LBound(AttList) To UBound(AttList) If UCase(AttList(i).TagString) = tagname _ Or UCase(Trim(AttList(i).TagString)) = tagname & "_001" Then block_get_attribute = AttList(i).TextString Exit Function End If Next End If End Function Sub rotateme() Dim blockref As AcadBlockReference Dim entity As AcadEntity Dim pi As Double pi = 4 * Atn(1) For Each entity In ThisDrawing.ModelSpace If LCase(entity.ObjectName) = "acdbblockreference" Then Set blockref = entity If blockref.EffectiveName = "UNNAMED" Then S = block_get_attribute(blockref, "WINKEL") C = block_get_attribute(blockref, "FARBE") If IsNumeric(S) Then r = Val(S) / 180# * pi blockref.Rotation = r Select Case C Case "ROT" blockref.Color = acRed Case "BLAU" blockref.Color = acBlue End Select blockref.Update End If End If End If Next
End Sub
Wenn es nicht klappt, stell doch bitte eine Zeichnung mit einem Block hier ein.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 26. Nov. 2013 09:34 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
Hallo @all, ich habe mal ein paar Bausteine zusammen gesetzt. Das Ergebnis ist das anbei befindliche Tool mit dem aus den Attributwerten -> die Farbe (Nur ACI-Farben 0-256) -> die Layer (sofern diese in der Zeichnung existieren) -> die Drehung der Blockreferenz geändert werden können. Das Tool ist Freeware und läuft unter AutoCAD 2011 - 2014 (und den darauf basierenden Applikationen). Zur Installation via Setup-Routine sind Admin-Rechte erforderlich. Hat man die nicht, nimmt man die DLL's speichert diese auf der lokalen Festplatte, startet AutoCAD und lädt die entsprechend der eigenen AutoCAD-Version benannte DLL-Programmdatei mit dem Befehl NETLOAD (auch dies ist nur einmalig erforderlich, weil sich das Tool selbst für den AutoLoad registriert). Über Feedback freue ich mich (wie immer). 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 |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 26. Nov. 2013 10:41 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
Danke Holger, Werde es gelegentlich mal testen, wenn ich mal wieder mit einer aktuellen AutoCAD Version arbeiten darf :P (Verwende zur Zeit hauptsächlich Bricscad aber bei VBA ist das ja egal, bei Net natürlich nicht ) Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 270 Registriert: 07.06.2013
|
erstellt am: 29. Nov. 2013 16:17 <-- editieren / zitieren --> Unities abgeben: Nur für ejjj
|