FastFiber

werken in een bepaald layout

Gestart door nootie, za 13 03 2010, 13:48:07

Vorige topic - Volgende topic

nootie

Dag, zojuist ben ik begonnen met het programmeren in autocad.

Mijn probleemsituatie gaat als volgt: ik heb een vijftigtal layouts en in iedere layout wil ik bepaalde bewerkingen uitvoeren.
Maar graag zou ik een code hebben die niet altijd de layouts activeert (want doordat ze zich telkens regenerate, duurt het een tijd).

Ikzelf probeer te werken met:

For Each elem In ThisDrawing.Layouts.Item(layoutname)
       elem.Delete
Next elem 


Maar hierbij verkrijg ik telkens een fout. Weet iemand een ander stukje code hiervoor.

EddyBeerke

Ik zie dat je bij alle elementen ".Delete" gebruikt (For Each...).
Misschien kun je proberen om "select all" te doen en dan "delete".
Je kunt bij het selecteren ook filters maken zodat niet alle elementen verwijdert worden.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

nootie

Dit is idd niet slecht gezien, maar ik blijf wel nog altijd met hetzelfde probleem zitten van die layouts.

HofCAD

#3
Citaat van: nootie op za 13 03 2010, 13:48:07
Dag, zojuist ben ik begonnen met het programmeren in autocad.


Beste Nootie,

Als je begint met programmeren, dan is het niet verstandig om nu nog
met VBA te beginnen.
Want in AutoCAD 2011 en misschien nog in AutoCAD 2012 wordt VBA
nog ondersteund, maar daarna is het in AutoCAD 2013 (Let op de 13) :twisted:
echt over.
Dus is het beter om VB.Net of C#  (Engels uitgesproken als "C sharp") te leren.
In deze twee talen kun je programmeren via de twee gratis programma's
Visual Studio 2008 Express  http://www.microsoft.com/express/downloads/
en SharpDevelop http://www.softpedia.com/get/Programming/Other-Programming-Files/SharpDevelop.shtml
Een cursus in VB.Net kun je volgen bij TEC / CADCollege en wordt
gegeven door ir. Ronald Boeklagen.
http://d106037.pem.kpn.net/cursus/cur_aanpassen3.htm
In zijn nieuwe boek van AutoCAD 2011 Computer Ondersteund Ontwerpen
zal ook VBA worden vervangen door VB.Net.
Kijk bijv. ook naar: http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=1911627
Om VBA in VB.Net om te zetten kijk naar: http://autodesk.mediasite.com/mediasite/Viewer/?peid=b820cebe54e34fc29a91542ec1e279e1

Met vriendelijke groet, HofCAD CSI.

PS 1
Julien zal in de toekomst moeten beslissen of hij voor 'Dot Net API'
een speciale categorie binnen dit forum aanmaakt naast de
categorie 'VBA/COM interop'.
Zie bijv.: http://forums.augi.com/forumdisplay.php?s=45e146e28a3cec5964b561b189b1392b&f=88

PS 2
Uit:  http://d106037.pem.kpn.net/cursus/cur_aanpassen3.htm  
Houdbaarheidsdatum VBA en VB.NET
AutoCAD 14: De VBA-editor staat op de CD van AutoCAD, maar wordt standaard niet geïnstalleerd.
VBA werkt met het ActiveX object (COM-object) van AutoCAD.

AutoCAD 2000 - 2009: De VBA programma's die u gemaakt heeft de afgelopen tien jaar kunt u zonder
enige aanpassing gebruiken tot en met AutoCAD 2009.

AutoCAD 2010-2011: DE VBA-editor staat niet meer op de CD, maar deze moet u eenmalig downloaden.
Uw VBA programma's blijven onveranderd werken.

AutoCAD 2012: De VBA-editor is niet meer te gebruiken in AutoCAD 2012. De VBA programma's zijn met
kleine aanpassingen om te zetten naar VB.NET. AutoCAD 2012 ondersteunt namelijk geen VBA,
maar ondersteunt wel het AutoCAD ActiveX, (COM) object dat gemaakt is voor VBA.
Deze kunt u tijdelijk blijven gebruiken in VB.NET.

AutoCAD 2013 ->: Vanaf AutoCAD 2013 verdwijnt het ActiveX object uit AutoCAD en moet alles gedaan
worden via het oorspronkelijk (Eng: native) .NET object.


VB.NET
Programma's gemaakt in VB.NET moeten om de drie jaar opnieuw gecompileerd worden.
AutoCAD 2005 - 2009: Visual Studio 2005 en het objectenmodel van .NET of het ActiveX objectenmodel
AutoCAD 2010 - 2012: Visual Studio 2008 en het objectenmodel van .NET of het ActiveX objectenmodel
AutoCAD 2013 ->: Visual Studio 2010 en alleen het objectenmodel van .NET
ACADcadabra

nootie

#4
Het probleem is wel dat ik al bijna mijn volledig programma heb gemaakt in vba. Indien ik toch zou overschakelen naar vb.net of c#, is het dan al mogelijk om het in autocad 2009 te integreren of lukt dit enkel maar vanaf de versie 2012 (wanneer autocad geen vba meer ondersteund)? Of is het beter dat ik eens probeer met autolisp?

Mijn probleemsituaties is dus een 50-tal layouts waarbij telkens een block met attributen is ingevoegd. Ik wil dus een code om uit excel de attributen van de blocks in alle 100-tal layouts in te vullen. Ik zou ook graag een code willen om de 50-tal layouts via één command/knop af te drukken. Dit is me al voor een groot gedeelte gelukt via vba, het enige probleem is dat het veel te lang duurt (grotendeels door regenerating, maar ook door het door te sturen naar een printer). Zal dit ook het geval zijn met de vb.net, autolisp? Of is de traagheid vooral doordat mijn grafische kaart van mijn laptop het niet aankan?

Ik ben nu al zover geraakt met vba en zou het graag willen afwerken.
Graag had ik jullie gedacht eens hierover gehoord.

** Met dit stukje code kan ik al veel vlugger afdrukken, enkel nog regenerate van de layouts duurt enorm lang **

      ThisDrawing.SetVariable "BACKGROUNDPLOT", 0

bart

je zou een kunnen proberen de systeem variabele regenauto te wijzigenen
of de onderstaande
LAYOUTREGENCTL Alles uitvouwen



Type: Geheel getal
Opgeslagen in: Register
Beginwaarde 2

Deze systeemvariabele bepaalt hoe de weergavelijst wordt bijgewerkt op het tabblad Model en op de lay-outtabbladen.

Voor elk tabblad wordt de weergavelijst bijgewerkt door de tekening opnieuw te genereren wanneer u overschakelt naar het desbetreffende tabblad of door de weergavelijst in het geheugen op te slaan en alleen de gewijzigde objecten opnieuw te genereren wanneer u overschakelt naar dat tabblad. Het wijzigen van de systeemvariabele LAYOUTREGENCTL kan tot een prestatieverbetering leiden.

0
Steeds wanneer u naar een ander tabblad overschakelt, wordt de tekening geregenereerd.

1
Voor het tabblad Model en voor het laatst geactiveerde lay-outtabblad wordt de weergavelijst in het geheugen opgeslagen. Er vindt geen regeneratie plaats wanneer u overschakelt tussen beide tabbladen. Alle andere tabbladen worden wel opnieuw gegenereerd als u hiernaar overschakelt.

2
Alleen de eerste keer dat u naar elk van de tabbladen overschakelt, wordt de tekening geregenereerd. Gedurende de rest van de tekensessie, wordt de weergavelijst opgeslagen in het geheugen en wordt het opnieuw genereren onderdrukt wanneer u overschakelt naar die tabbladen.


De prestatieverbetering die u kunt bereiken door LAYOUTREGENCTL te wijzigen, is afhankelijk van diverse factoren, zoals tekeningtype en -grootte, beschikbaar geheugen en het effect van andere geopende tekeningen of toepassingen. Als LAYOUTREGENCTL op 1 of 2 is ingesteld, is de hoeveelheid extra gebruikt geheugen gelijk aan de grootte van de weergavelijst op het tabblad Model, vermenigvuldigd met het aantal vensters in elke layout waarvoor de weergavelijst wordt opgeslagen.

Als LAYOUTREGENCTL op 1 of 2 is ingesteld en het systeem trager werkt (al dan niet als gevolg van het overschakelen naar een tabblad waarvoor de weergavelijst wordt opgeslagen), kunt u deze systeemvariabele wellicht beter op 0 of 1 instellen, zodat er een betere balans ontstaat voor uw specifieke werkomgeving. Op het tabblad System (in het dialoogvenster Options) vindt u meer informatie over prestatie-instellingen.

Als u een blok opnieuw definieert of een overschakeling naar een tabblad ongedaan maakt, wordt de tekening geregenereerd wanneer u naar een willekeurig tabblad overschakelt dat opgeslagen vensters bevat. Er wordt dan geen rekening meer gehouden met de waarde die u bij LAYOUTREGENCTL hebt ingesteld.
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

sschevers

Citaat van: nootie op za 20 03 2010, 12:12:41
Het probleem is wel dat ik al bijna mijn volledig programma heb gemaakt in vba. Indien ik toch zou overschakelen naar vb.net of c#, is het dan al mogelijk om het in autocad 2009 te integreren of lukt dit enkel maar vanaf de versie 2012 (wanneer autocad geen vba meer ondersteund)? Of is het beter dat ik eens probeer met autolisp?

Mijn probleemsituaties is dus een 50-tal layouts waarbij telkens een block met attributen is ingevoegd. Ik wil dus een code om uit excel de attributen van de blocks in alle 100-tal layouts in te vullen. Ik zou ook graag een code willen om de 50-tal layouts via één command/knop af te drukken. Dit is me al voor een groot gedeelte gelukt via vba, het enige probleem is dat het veel te lang duurt (grotendeels door regenerating, maar ook door het door te sturen naar een printer). Zal dit ook het geval zijn met de vb.net, autolisp? Of is de traagheid vooral doordat mijn grafische kaart van mijn laptop het niet aankan?

Ik ben nu al zover geraakt met vba en zou het graag willen afwerken.
Graag had ik jullie gedacht eens hierover gehoord.

** Met dit stukje code kan ik al veel vlugger afdrukken, enkel nog regenerate van de layouts duurt enorm lang **

      ThisDrawing.SetVariable "BACKGROUNDPLOT", 0


De dot.net api is al vanaf acad 2006 beschikbaar. Je hoeft dus niet te wachten tot versie 2012. Je zult bij elke nieuwe versie moeten checken of je programma nog werkt en desnoods moet je de code (een dll) opnieuw compileren. Mijn mening is dat je niet te lang moet wachten met de overstap naar de dot.net omgeving (vb.net of C#). De manier van programmeren verschilt nogal van wat je gewent bent onder vba.
Ga een cursus vb.net of C# volgen. Ga daarna een cursus volgen waarin de dotnet api van acad uitgelegt wordt.

greetz stephan

EddyBeerke

Citaat van: HofCAD op di 16 03 2010, 09:39:20
...

AutoCAD 2013 ->: Vanaf AutoCAD 2013 verdwijnt het ActiveX object uit AutoCAD en moet alles gedaan
worden via het oorspronkelijk (Eng: native) .NET object. [/color]
...

Beste HofCAD,

Jij weet zo veel... maar hoe zit het dan met (Visual)Lisp?
Ik hoorde van een Ex-AutoCAD-Alfa/Beta tester (deze wordt door ons ingehuurd) dat er (een paar versies terug) al sprake van was dat Lisp niet meer ondersteund gaat worden, althans dat had hij weer gehoord.

Ik heb een korte poging gedaan om iets met VB.Net te gaan doen, maar je moet platform-afhankelijk programmeren en dat hoeft met Lisp niet, dus ben er voor nu mee gestopt maar met Lisp wil ik wel verder.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

sschevers

Citaat van: EddyBeerke op di 01 06 2010, 21:33:18
Beste HofCAD,

Jij weet zo veel... maar hoe zit het dan met (Visual)Lisp?
Ik hoorde van een Ex-AutoCAD-Alfa/Beta tester (deze wordt door ons ingehuurd) dat er (een paar versies terug) al sprake van was dat Lisp niet meer ondersteund gaat worden, althans dat had hij weer gehoord.

Ik heb een korte poging gedaan om iets met VB.Net te gaan doen, maar je moet platform-afhankelijk programmeren en dat hoeft met Lisp niet, dus ben er voor nu mee gestopt maar met Lisp wil ik wel verder.

Eddy,

Wat bedoel je met "met VB.NET moet je platform-afhankelijk programmeren"?  Ik heb C# programma's die draaien zowel op vista als xp. Of bedoel je dat je programma's moet checken als je van versie veranderd. Dit moet je je met lisp programma's ook omdat commando's komen te vervallen. Je zult je programmatuur altijd moeten testen als je naar een andere versie overgaat dus dat is naar mijn idee geen reden om niet over te stappen naar Vb.NET of C#

stephan

EddyBeerke

Citaat van: sschevers op wo 02 06 2010, 07:29:54
Eddy,

Wat bedoel je met "met VB.NET moet je platform-afhankelijk programmeren"?  Ik heb C# programma's die draaien zowel op vista als xp. Of bedoel je dat je programma's moet checken als je van versie veranderd. Dit moet je je met lisp programma's ook omdat commando's komen te vervallen. Je zult je programmatuur altijd moeten testen als je naar een andere versie overgaat dus dat is naar mijn idee geen reden om niet over te stappen naar Vb.NET of C#

stephan

Natuurlijk dien je altijd je code te testen met een andere versie van Acad, maar ik heb het eigenlijk over een ander besturingsysteem.

Je moet rekening houden met het "Framework"
Dit is met Window's XP SP2 anders dan met SP3, en dat zal wel het zelfde zijn met vista of 7.

Ik probeerde wat in "Microsoft Visual Studio 2010 Express"
Het lukt mij niet om te debuggen (F8 voor stapsgewijs), wel kon ik met NETLOAD de .dll laden met het commando: "HelloWorld" (ja echt, ik heb deze dus gewoon gemaakt omdat ie zo lekker simpel leek).
Hierbij kreeg ik de volgende melding:
Citeer
Command: NETLOAD
Cannot load assembly. Error details: System.BadImageFormatException: Could not
load file or assembly 'file:///U:\Visual Studio
2010\Projects\Test20100518\Test20100518\bin\Debug\Test20100518.dll' or one of
its dependencies. This assembly is built by a runtime newer than the currently
loaded runtime and cannot be loaded.
File name: 'file:///U:\Visual Studio
2010\Projects\Test20100518\Test20100518\bin\Debug\Test20100518.dll'
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,
Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,
Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,
Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence
securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm,
Boolean forIntrospection, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
at loadmgd()

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value
[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure
logging.
To turn this feature off, remove the registry value
[HKLM\Software\Microsoft\Fusion!EnableLog].

Het kan zijn dat ik niet goed heb gelezen op diverse forums maar ik kon er niets over vinden, tot ik wat verder keek en een error zag en dat ging over "FrameWork 2" en ik moest dus "FrameWork 3" hebben.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

sschevers

Mits je voor externe mensen applicaties maakt zule je hier tekening moeten/ kunnen houden. Als je je spullen met een installer verspreid kun je met aanwezigheid van een framework rekening houden. In je handleiding neem je op dat je software alleen werkt als dot.net frame 2, 3 , 3.5 aanwezig moet zijn omdat anders je spullen niet werken.
Dit doet autodesk zelf ook die neemt het benodigde framework op in hun installers.

Is je software voor intern gebruik dan weet je welk framework er verspreid is. Ik neem dan even aan dat je een centrale IT afdeling hebt en die kan je vertellen welk framework bij jullie gangbaar is.

Het probleem met vs2010 is bekend. Zie bijgaande link voor meer info
http://through-the-interface.typepad.com/through_the_interface/2010/04/hitting-breakpoints-in-net-class-libraries-while-debugging-with-visual-studio-2010.html

Ik hoop hiermee de nodige scepsis weg genomen te hebben en dat je toch naar de dot.net omgeving over te laten gaan. Je kunt zoveel meer me dan met lisp en vba. Het is een drempel die je moet nemen maar je krijgt er veel voor terug. Volgens mij is vs2008 expres ook nog te downloaden. Dan heb je de problemen die met vs2010 ondervind niet
http://www.microsoft.com/express/downloads/#%20

stephan

EddyBeerke

Met de simpele dingen zou ik toch graag met lisp blijven werken.
Ik ben in het bedrijf voor tekenwerk en niet voor programeerwerk is vaak het antwoord wat je krijgt.
Als je dan toch iets wil ben je aangewezen op lisp.(ik mag dus eigenlijk nieteens programmas installeren)
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

FastFiber