manual del desarrollador de activex y vba · visual basic para aplicaciones. visual basic. ... en...

Post on 29-Sep-2018

247 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

<$nopage>ActiveXAutomation(interface):proyectosdeautomatización.<$nopage>ÍndicedecoloresdeAutoCAD(números).<$nopage>Color(propiedad):<$nopage>TrueColor(propiedad):<$nopage>VB:proyectosdeautomatización.<$nopage>VBA:proyectosdeautomatización.<$nopage>VisualBasicparaaplicaciones.<$nopage>VisualBasic.Lice<$nopage>proyectosdeautomatización:migraraAutoCAD2004:<$nopage>proyectos:automatización.<$nopage>nombresdecoloresestándar.

ManualdeldesarrolladordeActiveXyVBA>

Introducción

EnestaintroducciónseexplicaelconceptodeexposicióndeobjetosdeAutoCADatravésdeunainterfazdeActiveXAutomationydelaprogramacióndeestosobjetosenelentornodeprogramaciónVisualBasicparaaplicaciones.

PresentacióngeneraldelatecnologíaActiveXdeAutoCADPresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)UsocombinadodeActiveXyVBAenAutoCADOrganizacióndeestemanualParaobtenermásinformaciónCódigodeejemploMigracióndeproyectosdeautomatización

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>

PresentacióngeneraldelatecnologíaActiveXdeAutoCAD

ConAutoCAD®ActiveX®puedemanipularAutoCADmediantelaprogramacióndesdedentroofueradeAutoCAD.EstemétodoconsisteenexponerobjetosdeAutoCADal“mundoexterior.”Unavezexpuestos,sefacilitaelaccesoaellosdesdenumerososentornosylenguajesdeprogramación,asícomodesdeaplicacionestalescomoMicrosoft®WordVBAoExcelVBA.

ADDAX_INTROgraphic

LainclusióndeunainterfazdeActiveXparaAutoCADofrecedosventajas:

ElaccesoprogramáticoalosdibujosdeAutoCADpuederealizarsedesdemuchosotrosentornosdeprogramación.AntesdeActiveXAutomation,losdesarrolladoresdebíanlimitarseaunainterfazAutoLISP®oC++.

LaposibilidaddecompartirinformaciónconotrasaplicacionesparaWindows®,comoMicrosoftExcelyWord,sehafacilitadoenormemente.

LosobjetosconstituyenelbloquedeintegraciónprincipaldetodaslasaplicacionesActiveX.CadaobjetoexpuestorepresentauncomponenteconcretodeAutoCAD.ExistenmultituddetiposdeobjetosdiferentesenlainterfazdeActiveXdeAutoCAD.Porejemplo:

Loselementosgráficoscomolaslíneas,losarcos,eltextoylascotassonobjetos.

Losparámetrosdeestilocomoeltipodelíneayelestilodecotasonobjetos.

Lasestructurasdeorganizacióncomolascapas,losgruposylosbloquessonobjetos.

Laspantallasdedibujo,comovistasyventanasgráficas,sonobjetos.

SeconsideranobjetosinclusoeldibujoylaaplicaciónAutoCAD.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>

PresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)

MicrosoftVBAesunentornodeprogramaciónorientadoaobjetos,concebidoparasuministrarfuncionesavanzadasdedesarrollosimilaresalasdeVisualBasic6(VB).LadiferenciaprincipalentreVBAyVBesqueelprimeroseejecutaenelmismoespaciodeprocesoqueAutoCAD,loqueproporcionaunentornodeprogramaciónmuyrápidoycompatibleconAutoCAD.

VBApermitetambiénlaintegraciónconotrasaplicacionesqueadmitenVBA.LoquesignificaqueAutoCADpuede,mediantelasbibliotecasdeobjetosdeotrasaplicaciones,funcionarcomocontroladordeautomatizacióndeotrasaplicacionescomoMicrosoftWordoExcel.

LasedicionesdedesarrolloindependientesdeVisualBasic6,quedebenadquirirseporseparado,complementanaVBAdeAutoCADconcomponentesadicionales,comounmotordebasededatosexternoyfuncionesdegeneracióndeinformes.

LainclusióndeActiveXparaAutoCADofrececuatroventajas:

VBAysuentornoresultanfácilesdeaprenderydeusar.

VBAseejecutajuntoconAutoCAD.Estosetraduceenunaejecucióndeprogramamuyrápida.

Laconstruccióndecuadrosdediálogosesrápidayeficaz.Estopermitealosdesarrolladoresrealizarprototiposdeaplicacionesyrecibirinformaciónsobrediseñosdeformarápida.

Losproyectospuedenserindependientesoestarincrustadosenlosdibujos.Estaopciónofrecealosdesarrolladoresunagranflexibilidadparaladistribucióndesusaplicaciones.

Nota MicrosoftnosecomprometeaproporcionarbibliotecasSDKdeVBAde64

bits(.dll).Posteriormente,AutoCADde64bitsyanopodráejecutarVBAcomocomponenteduranteelproceso;loscomponentesdeVBAseejecutanahoracomocomponentesCOMfueradeprocesode32bitsyproporcionaunaorganizacióntemporalparalosusuariosdeVBAconAutoCADde64bitsPuedequeestaorganizaciónrequieraalgunoscambiosenelcódigodeVBAexistente.EstaprevisióntemporalnosetendráencuentaenfuturasversionesdeAutoCADyseaconsejaalosusuariosquecambiensucódigoVBAexistenteaunoVB.NET.

CómoestáintegradoVBAenAutoCAD

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>PresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)>

CómoestáintegradoVBAenAutoCAD

VBAenvíamensajesaAutoCADmediantelainterfazdeActiveXAutomationdeAutoCAD.VBAdeAutoCADpermitelaejecuciónsimultáneadeAutoCADyelentornoVBA,yproporcionauncontrolporprogramacióndeAutoCADmediantelainterfazdeActiveXAutomation.EstacooperaciónentreAutoCAD,ActiveXAutomationyVBAconstituyeunainterfazmuyavanzada,nosóloparamanipularobjetosdeAutoCADsinotambiénparaenviarorecuperardatosdeotrasaplicaciones.

ExistentreselementosfundamentalesquedefinenlaprogramaciónActiveXyVBAenAutoCAD.ElprimeroeselpropioAutoCAD,queincluyeunamplioconjuntodeobjetosqueenglobaentidades,datosycomandosdeAutoCAD.PuestoqueAutoCADestádiseñadocomounaaplicacióndearquitecturaabierta,conmultituddenivelesdeinterfaz,elusoeficazdeVBArequiereunciertogradodefamiliaridadconlaprogramaciónenAutoCAD.SitieneexperienciaenelusodeAutoLISPparaelcontrolmedianteprogramacióndeAutoCAD,yaposeeconocimientossuficientesdelasfuncionesdeAutoCAD.Noobstante,elplanteamientodeVBA,basadoenobjetos,esmuydiferentedeldeAutoLISP.

ElsegundoelementoeslainterfazActiveXAutomationdeAutoCAD,queestablecemensajes(comunicación)conlosobjetosdeAutoCAD.LaprogramaciónenVBArequiereunconocimientofundamentaldeActiveXAutomation.PuedeencontrarunadescripcióndelainterfazdeActiveXAutomationdeAutoCADenActiveXandVBAReference.InclusolosprogramadoresavanzadosdeVBencontraránenActiveXAutomationdeAutoCADunainterfazdevalorincalculableparaconocerydesarrollaraplicacionesAutoCADVBA.

EltercerelementoeselentornodeprogramaciónVBA,quecuentaconsupropioconjuntodeobjetos,palabrasclave,constantes,etc.,loscualesfacilitanelflujodelosprogramasysucontrol,depuraciónyejecución.LapropiaAyudade

MicrosoftparaVBAestáincluidaenlaAyudadeAutoCADVBAypuedeaccederseaelladesdeelIDEdeVBAconunodelossiguientesmétodos:

PulsandolateclaF1

EligiendoAyudaenlabarrademenúsdelIDEdeVBA.

HaciendoclicenelsignodeinterrogacióndelabarradeherramientasdelIDEdeVBA.UsodeMicrosoft.NETFrameworkRequisitosyrestricciones

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>PresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)>CómoestáintegradoVBAenAutoCAD>

UsodeMicrosoft.NETFramework

ParatenerunaccesocompletoalosobjetosdeautomatizacióndeAutoCADdesdeMicrosoftVisualStudio®.NET,creereferenciasalossiguientesarchivos:

LabibliotecadetiposdeAutoCAD2008,acax17enu.tlb,ubicadaenc:\Archivosdeprograma\Archivoscomunes\AutodeskShared.

LabibliotecadetiposdeAutoCAD/ObjectDBXCommon17.0,axdb17enu.tlb,ubicadaenc:\Archivosdeprograma\Archivoscomunes\AutodeskShared.

Estasreferenciaslepermitirántenerdisponibleslossiguientesconjuntosprimariosdeinteroperabilidad:Autodesk.AutoCAD.Interop.dll(paratiposespecíficosdeAutoCAD),yAutodesk.AutoCAD.Interop.Common.dll(paratiposcompartidosmediantelasaplicacioneshuespedObjectDBXTM).Losensamblajesdeinteroperabilidadseencuentranenlacachédelensamblajeglobalyasignanobjetosdeautomatizaciónahomólogosde.NET.

Despuésdecrearlasreferenciasalasbibliotecasdetipos,puededeclararvariablesbasadasenAutoCADenMicrosoftVisualStudio.NET,comoenlosejemplossiguientes:

DimobjAcadAsAutodesk.AutoCAD.Interop.AcadApplication

DimobjLineAsAutodesk.AutoCAD.Interop.Common.AcadLine

Puedecargarunaaplicación.NETutilizandoelcomandoNETLOADdeAutoCAD.

Haydisponibleinformaciónadicionalsobreelusodeunaaplicación.NETconAutoCADenlasecciónDeveloperCenterdelsitioWebdeAutodesk

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>PresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)>CómoestáintegradoVBAenAutoCAD>

Requisitosyrestricciones

Siinstala,reinstala,odesinstalaMicrosoftOfficeuotrasaplicacionesVBAdespuésdeinstalarAutoCAD,reinstaleAutoCADyreinicieelsistema.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>

UsocombinadodeActiveXyVBAenAutoCAD

LainterfazdeActiveX/VBAdeAutoCADpresentavariasventajassobreotrosentornosAPIdeAutoCAD:

Velocidad.CuandoserealizaunaejecuciónenprocesoconVBA,lasaplicacionesdeActiveXsonmásrápidasquelasdeAutoLISP.

Facilidaddeuso.EllenguajedeprogramaciónyelentornodedesarrollosonfácilesdeusaryvieneninstaladosconAutoCAD.

FuncionamientoconjuntoconWindows.ActiveXyVBAestándiseñadosparasuusoconotrasaplicacionesdeWindowsyconstituyenunaexcelentevíaparalacomunicacióndeinformaciónentredistintasaplicaciones.

Rápidacreacióndeprototipos.LacapacidaddeVBAparaunrápidodesarrollodeinterfacesofreceunentornoóptimoparalacreacióndeaplicacionesprototipo,inclusosidichasaplicacionesenúltimainstanciadeberánserdesarrolladasenotrolenguaje.

Baseparaprogramadores.LatecnologíaVBAyActiveXdeAutoCADproporcionaalosprogramadoresdeVisualBasic6lacapacidaddepersonalizarAutoCADydedesarrollaraplicacionescompatibles.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>

Organizacióndeestemanual

EnestemanualseofreceinformaciónrelativaaldesarrollodeaplicacionesdeActiveXyVBAparausoconAutoCAD.En“ParaempezarconVBA”y“DesarrollodeaplicacionesconVBA”seofreceinformaciónespecíficasobreeldesarrollodeaplicacionesconVBA.LosprogramadoresqueutilicenActiveXenunentornodedesarrolloquenoseaVBApuedenomitirestosdoscapítulos.Noobstante,hayquetenerencuentaqueelcódigodelosejemplosdeestemanualestáescritoenVBA.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>

Paraobtenermásinformación

EnestemanualsesuponequesetienenconocimientosparatrabajarconellenguajedeprogramaciónVisualBasic6.NoseintentaduplicaroremplazarlaabundantedocumentacióndisponiblesobreVisualBasic6.SinecesitamásinformaciónacercadelusodelentornodedesarrollooellenguajeVisualBasic6,consulteelarchivodeAyudadeVisualBasicparaAplicacionesdesarrolladoporMicrosoft,disponibleenelmenúAyudadelentornodedesarrollointeractivo(IDE).

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>

Códigodeejemplo

EstemanualyActiveXandVBAReferencejuntoscontienenmásde800subrutinasdeejemplodeVBAqueconstituyenunademostracióndelusodelosmétodos,propiedadesyeventosdeActiveX.

AutoCADtambiénproporcionamultituddeaplicacionesdeejemploeneldirectorioSampledeAutoCAD.Estasaplicacionesdemuestranelcometidodeunaampliavariedaddefunciones,desdelaextraccióndedatosdedibujosdeAutoCADahojasdecálculoMicrosoftExcel,hastaeldibujoyelanálisisdetensionesenunatorreeléctricadetransmisiones.

EstosejemplostambiénlepermitiránaprenderacombinarlaflexibilidaddelentornodeprogramaciónVisualBasicforApplicationsconlaavanzadainterfazdeActiveXdeAutoCADparacrearaplicacionespersonalizadas.

Demaneraadicional,elcódigodeejemplodelManualdeldesarrolladordeActiveXyVBAyActiveXandVBAReferencesepuedecopiardesdelosarchivosdeayuda,pegarladespuésenelentornoVBAdeAutoCAD,yejecutarlaconunacondición:eldibujoactualactivoenAutoCADdebeserundibujovacíoabiertoalespaciomodelo.

ParaejecutarlosejemplosdelosarchivosdeAyuda

1. CopieelejemplodesdeelarchivodeAyudaaunmódulodecódigodeVBAvacío.

2. VerifiquequeAutoCADtieneabiertoundibujoenblancoenelespaciomodelo.

3. AbraelcuadrodediálogoMacros,ejecutandoelcomandoVBARUN.

4. ElijalamacroquedeseeypulseEjecutar.HaymásinformaciónacercadelaejecucióndemacrosyelcuadrodediálogoMacrosdisponibleeneltema“Ejecutarunamacro”.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>

Migracióndeproyectosdeautomatización

PuedeutilizarlasfuncionesdeAutoCADmediantelosobjetosymétodosañadidosalainterfazdeActiveXAutomation.EnestasecciónseincluyenloscambiosqueseaplicanalosproyectosdeautomatizacióncreadosconVisualBasicparaAplicaciones(VBA),VisualBasic6(VB)yotrosentornoscompatiblesconlaautomatización.

ParaobtenermásinformaciónacercadelusodefuncionesenAutoCAD,véase“UtilizacióndelasfuncionesdeAutoCAD”.

ObjetosnuevosElementosmodificadosCómomigrarproyectos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>Migracióndeproyectosdeautomatización>

Objetosnuevos

LossiguientesobjetossonnuevosenAutoCAD2008.Paraobtenermásinformaciónsobreestosobjetos,véaseActiveXandVBAReferenceyelExaminadordeobjetosenelIDEdeVBA.

SortentsTable.Contieneymanipulalainformacióndeordenacióndelosobjetos.

Table.Añadeymodificatablasenundibujo.

TableStyle.Añadeymodificaformatoenlastablas,comovisibilidadderejilla,grosordelíneaycolor.

Además,AutoCAD2008contieneobjetosparalaautomatizacióndelAdministradordeconjuntosdeplanos.Paraobtenerinformaciónsobreestosobjetos,véaseReferenciaaobjetosdeconjuntodeplanos.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>Migracióndeproyectosdeautomatización>

Elementosmodificados

Enestasecciónsedescribenloselementosexistentesquehancambiado.

Elementosmodificados

AutoCAD2004item

AutoCAD2008item

Descripcióndelcambio

BeginClose(evento)

BeginDocClose(evento)

PuedeutilizareleventoBeginDocCloseparaimpedirqueundibujosecierre.

Layer(objeto) Layer(objeto) AdicióndelapropiedadDescriptionylapropiedadUsed.

Coleccióndecapas

Coleccióndecapas

AdicióndelmétodoGenerateUsageData.

ColeccióndeespaciomodeloColeccióndeespaciopapelBlock(objeto)

ColeccióndeespaciomodeloColeccióndeespaciopapelBlock(objeto)

AdicióndelmétodoAddTableatodaslascoleccionesyalobjeto;adicióndelapropiedadPathalobjetoBlock

MText(objeto),Text(objeto)

MText(objeto),Text(objeto)

AdicióndelapropiedadBackgroundFillalobjetoMText;adicióndelmétodoFieldCodeal

objetoMTextyalobjetoText.

Plot(objeto) Plot(objeto) LapropiedadBatchPlotProgressylapropiedadStartBatchModehanquedadoobsoletas.SerecomiendaelusodeaplicacionesMicrosoft.NETparaeltrazadoporlotes.ElmétodoDisplayPlotPreviewyanoadmitelavistapreliminarparcial.

PreferencesFiles(objeto)

PreferencesFiles(objeto)

AdicióndelapropiedadPlotLogFilePath,lapropiedadPageSetupOverridesTemplateFileylapropiedadQNewTemplateFile.

PreferencesOutput(objeto)

PreferencesOutput(objeto)

AdicióndelapropiedadAutomaticPlotLog,lapropiedadDefaultPlotToFilePathylapropiedadContinuousPlotLog.

Viewport(objeto) Viewport(objeto) AdicióndelapropiedadModelView,lapropiedadSheetView,lapropiedadLabelBlockId,lapropiedadHasSheetViewyelmétodoSyncModelView.

View(objeto) View(objeto) AdicióndelapropiedadCategoryName,lapropiedadLayoutId,lapropiedadLayerStateylapropiedadHasVpAssociation.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Introducción>Migracióndeproyectosdeautomatización>

Cómomigrarproyectos

Engeneral,unproyectodeautomatizacióndeAutoCADcreadoenelIDEdeVBAoconVisualBasic6deberíafuncionarconAutoCAD2008.

LosproyectosdeautomatizacióndeAutoCAD2008utilizanlamismabibliotecadetipos(acax17enu.tlb)quelosproyectosdeautomatizacióndeAutoCAD.LabibliotecadetiposseencuentraenC:\Archivosdeprograma\Archivoscomunes\AutodeskShared.

LosproyectosdeautomatizacióndeAutoCAD2008tambiénutilizanelmismoProgIDdependientedelaversiónparalosmétodosCreateObject,GetObjectyGetInterfaceObject.Porejemplo,siutilizalafunciónCreateObjectenunproyectodeautomatizacióndeAutoCAD,puedeusarCreateObject("AutoCAD.Application.17").SiunproyectodeautomatizaciónutilizaProgIDindependientesdelaversión,cambieelproyectoparautilizarProgIDdependientesdelaversión.

¿Comentarios?

<$nopage>propiedades.<$nopage>objetos:

ManualdeldesarrolladordeActiveXyVBA>

ParaempezarconVBA

EnestecapítulosepresentanlosproyectosVisualBasicparaAplicaciones(VBA)deAutoCADyelentornodedesarrollointeractivo(IDE)deVBA.AunquelamayoríadelosentornosdeVBAtienenuncomportamientosemejante,elIDEdeVBAdeAutoCADposeealgunascaracterísticasexclusivas.PuedenutilizarsealgunoscomandosdeAutoCADparacargaryejecutarproyectosoabrirelIDEdeVBA.EnestecapítulosedescribeelusodeproyectosycomandosdeVBA,asícomodelentornoIDEdeVBAengeneral.

DescripcióndelosproyectosVBAglobaleseincrustadosOrganizacióndelosproyectosconelAdministradordeVBAGestióndemacrosEdicióndeproyectosconelIDEdeVBARealizacióndeunejerciciopreliminarObtencióndemásinformaciónTérminosparaproyectosVBAdeAutoCADComandosVBAdeAutoCAD

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

DescripcióndelosproyectosVBAglobaleseincrustados

UnproyectoVBAdeAutoCAD®consisteenunconjuntodemódulosdecódigo,módulosdeclaseyformulariosquesecombinanpararealizarunafuncióndeterminada.LosproyectospuedenalmacenarseenundibujodeAutoCADoenunarchivoindependiente.

LosproyectosincrustadossealmacenandentrodeundibujodeAutoCAD.EstosproyectossecarganautomáticamentealabrirenAutoCADeldibujoqueloscontiene,locualfacilitaextraordinariamenteladistribucióndelosproyectos.LosproyectosincrustadosestánlimitadosynopuedenabrirnicerrardibujosdeAutoCADyaquesólofuncionaneneldocumentodonderesiden.Losusuariosdeproyectosincrustadosyanotienenquebuscarycargarlosarchivosdeproyectoantesdeejecutarunprograma.Unejemplodeproyectoincrustadoenundibujoloconstituyeunregistrodetiempoqueseactivaalabrireldibujo.Estamacropermitealosusuariosiniciarunasesiónyregistrareltiempoquehantrabajadoeneldibujo.Elusuariononecesitaacordarsedecargarelproyectoantesdeabrireldibujo,yaqueestosehacedeformaautomática.

Losproyectosglobalessealmacenanenarchivosindependientesysonmásversátiles,yaquepermitenabrirycerrarcualquierdibujodeAutoCAD,asícomotrabajarconél,peronosecargandeformaautomáticacuandoseabreeldibujo.Parapoderejecutarlamacroquenecesitan,losusuariosdebensaberenquéarchivodeproyectoseencuentraycargaresearchivo.Noobstante,losproyectosglobalessonmuchomásfácilesdecompartirconotrosusuarios,ygeneranbibliotecasestupendasdemacroscomunes.Unejemplodeproyectoquepuedealmacenarseenunarchivodeproyectoloconstituyeunamacroquerecopilaunalistadeelementosapartirdevariosdibujos.Lamacropuedeserejecutadaporunadministradoralterminarelciclodetrabajo,afindereunirinformacióndediversosdibujos.

Encualquiermomento,losusuariospuedentenercargadosensusesióndeAutoCADtantoproyectosincrustadoscomoglobales.

&LosproyectosVBAdeAutoCADnosoncompatiblesenformatobinarioconlosproyectosdeVisualBasic6independientes.Noobstante,esposibleintercambiarformularios,módulosyclasesentreproyectosmedianteloscomandosIMPORTARyEXPORTARVBAdelIDEdeVBA.ParaobtenermásinformaciónacercadelIDEdeVBA,véaseEdicióndeproyectosconelIDEdeVBA.

SeadmiteelusodeVisualStudio.NETparadirigirypersonalizarAutoCADmedianteCOMAutomation.

¿Comentarios?

<$nopage>propiedades.<$nopage>objetos:

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

OrganizacióndelosproyectosconelAdministradordeVBA

PuedeutilizarelAdministradordeVBAparavertodoslosproyectosVBAqueesténcargadosenlasesiónactualdeAutoCAD.ElAdministradordeVBAesunaherramientadeAutoCADquepermitecargar,descargar,guardar,crear,incrustaryextraerproyectosVBA.

ParaabrirelAdministradordeVBA

PuedeabrirelAdministradordeVBAdesdeelmenúHerr.o,enAutoCAD,ejecutandoelcomandoVBAMAN.

CargadeunproyectoexistenteDescargadeunproyectoIncrustacióndeunproyectoenundibujoExtraccióndeunproyectodeundibujoCreacióndeunproyectoGuardadodelproyecto

¿Comentarios?

<$nopage>propiedades.<$nopage>objetos:

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Cargadeunproyectoexistente

CuandosecargaunproyectoenAutoCAD,todaslassubrutinaspúblicas,tambiéndenominadasmacros,quedanhabilitadas.Losproyectosincrustadosenundibujosecargansiemprequeeldibujoesabierto.LosproyectosguardadosenarchivosDVBdebencargarsedeformaexplícita.

Enelmomentodecargarunproyecto,todoslosproyectosalosquehagareferenciasecargandeformaautomática.Demaneraadicional,AutoCADcargaautomáticamenteduranteeliniciocualquierarchivodeproyectocuyonombreseaacad.dvb.

ParacargarelarchivodeunproyectoVBAexistente

1. EnelAdministradordeVBA,elijalaopciónCargarparaabrirelcuadrodediálogoAbrirproyectoVBA.

2. EnelcuadrodediálogoAbrir,seleccioneelarchivodeproyectoquedeseeutilizar.EnelcuadrodediálogoAbrirproyectoVBAsólopuedenabrirsearchivosDVBválidos.Siintentaabrirunarchivodeotrotipo,recibiráunmensajedeerror.

3. ElijaAbrir.

Tambiénpuedecargarunarchivodeproyectomedianteunodelosmétodossiguientes:

IntroduzcaelcomandoVBALOAD,queabreelcuadrodediálogoAbrirproyectoVBA.

ArrastreunarchivoDVBdesdeelExploradordeWindowsycolóqueloenundibujoabiertoenlaventanadeAutoCAD.

Alertadevirus

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>Cargadeunproyectoexistente>

Alertadevirus

Cadavezquesecargaunproyecto,sepuedeactivarodesactivarsucódigointernocomoproteccióncontravirus.Siactivaelcódigo,losvirusqueéstepuedacontenercomienzanaejecutarse.Sidesactivaelcódigo,elproyectosecargaperotodosucódigoquedasinejecutar.LaalertadeprotecciónantivirusnoestávisiblecuandoelproyectosecargaarrastrandounarchivoDVBdesdeelExploradordeWindowsycolocándoloenundibujoabiertoenlaventanadeAutoCAD.

Paraobtenermásinformaciónacercadelaalertacontravirus,véasedeopcionesdeproyectos.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Descargadeunproyecto

Aldescargarunproyectoseaumentalamemoriadisponibleyseagilizalautilizacióndelalistadeproyectoscargadospuessereducesulongitud.

Noesposibledescargarproyectosincrustadosoproyectosalosquehacenreferenciaotrosproyectoscargados.

ParadescargarunproyectoVBA

PuededescargarunproyectoVBAseleccionándoloyeligiendoDescargar,obienmedianteelcomandoVBAUNLOAD,elcualsolicitaelproyectoquesedeseadescargar.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Incrustacióndeunproyectoenundibujo

Cuandoseincrustaunproyectoseintroduceunacopiadelmismoenlabasededatosdedibujos.Elproyectoestarácargadoodescargadosegúnestéabiertoocerradoeldibujoquelocontiene.

Undibujopuedecontenersólounproyectoincrustado.Siundibujotieneyaunproyectoincrustado,debeextraerloantesdepoderincrustarotroproyecto.

ParaincrustarunproyectoenundibujodeAutoCAD

1. AbraelAdministradordeVBAyseleccioneelproyectoquedeseeincrustar.

2. ElijaIncluir.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Extraccióndeunproyectodeundibujo

Cuandoseextraeunproyecto,éstequedaeliminadodelabasededatosdedibujos.Tienelaposibilidaddeguardarloenunarchivodeproyectoexterno;sinolohace,losdatosdelproyectoseborrarán.

ParaextraerunproyectodeundibujodeAutoCAD

1. AbraelAdministradordeVBAyseleccioneeldibujodelquedeseeextraerelproyecto.

2. ElijaExtraer.

3. Sideseaguardarlainformacióndelproyectoenunarchivodeproyectoexterno,seleccioneSíenlasolicitud“¿DeseaexportarelproyectoVBAantesdeeliminarlo?”SemostraráelcuadrodediálogoGuardarcomo,enelquepodráguardarelarchivo.Sinodeseaguardarlainformacióndelproyectoenunarchivoexterno,respondaNoalasolicitud“¿DeseaexportarelproyectoVBAantesdeeliminarlo?”Lainformacióndelproyectoseeliminarádeldibujoynoseguardará.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Creacióndeunproyecto

Losproyectosnuevossecreancomoproyectosglobalesnoguardados.Unavezcreado,puedeincrustarelproyectoenundibujooguardarloenunarchivodeproyecto.

ParacrearunproyectoVBA

1. AbraelAdministradordeVBA.

2. ElijaNuevo.SecreaunproyectonuevoconelnombrepordefectoACADProject.Sideseacambiarelnombredelproyecto,debeentrarenelIDEdeVBA.ParaobtenermásinformaciónacercadelaasignacióndenombreaproyectosenelIDEdeVBA,véasedenombrealproyecto.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Guardadodelproyecto

Losproyectosincrustadosseguardansiemprequeseguardaeldibujo.LosproyectosglobalesdebenguardarsedesdeelAdministradordeVBAodesdeelIDEdeVBA

ParaguardarunproyectoconelAdministradordeVBA

1. AbraelAdministradordeVBAyseleccioneelproyectoquedeseeguardar.

2. PulseGuardar.SeabriráelcuadrodediálogoGuardarcomo.

3. Seleccioneelnombredearchivoparaelproyectoquedeseeguardar.

4. PulseGuardar.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

Gestióndemacros

Unamacroesunasubrutina(ejecutable)pública.Porlogeneral,cadaproyectocontienealmenosunamacro.

UsodelcuadrodediálogoMacrosEjecucióndeunamacroEdicióndeunamacroRevisióndeunamacropasoapasodeopcionesdeproyectos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>

UsodelcuadrodediálogoMacros

EnelcuadrodediálogoMacrospuedeejecutar,modificar,suprimirycrearmacros,asícomodefiniropcionesdeproyectosVBA.EnelmenúHerr.deAutoCAD,elijaMacro Macros,oescribaVBARUNenlasolicituddecomandodeAutoCAD.

Losnombresdetodaslasmacrosdentrodelrangoválidosemuestranenestecuadrodediálogo.PuedecambiarelrangoválidoenlalistadesplegableMacrosen:Enestalistaseespecificanlosproyectosodibujosdelasmacrosmostradas.Tambiénpuedeelegirquesemuestrenlasmacrosde:

Todoslosdibujosyproyectos

Todoslosdibujos

Todoslosproyectos

CualquierdibujoqueactualmenteseencuentreabiertoenAutoCAD

CualquierproyectoqueactualmenteseencuentrecargadoenAutoCAD

Allimitarelrangoválidosepuedecontrolarcuantosnombresdemacroaparecenenlalista.Estoleayudaráenloscasosenlosquemuchasmacrosesténdisponiblesenlosdibujosyproyectoscargados.

Paracrearunanuevamacro

1. AbraelcuadrodediálogoMacroseintroduzcaelnombredelanuevamacro.

2. EnlalistadesplegableMacrosen:,seleccioneelproyectodondedeseecrearlamacro.

3. ElijaCrear.

Siyaexisteunamacroconelnombrequehaespecificado,selepreguntarásideseareemplazarlamacroexistente.

SiseleccionaSí,seborraelcódigodelamacroexistenteysecreaunanuevamacrovacíaconelnombreindicado.

SiseleccionaNo,seaccedealcuadrodediálogoMacrosdondedebeindicarunnuevonombreparalamacro.

SiseleccionaCancelar,secierraelcuadrodediálogoMacrosynosecreaningunamacronueva.

Paraborrarunamacro

1. AbraelcuadrodediálogoMacrosyseleccionelamacroquedeseeborrar.

2. ElijaBorrar.Selesolicitaráqueconfirmelasupresión.

3. Enlasolicitud,elijaSíparasuprimirlaoNoparacancelarlaoperación.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>

Ejecucióndeunamacro

Cuandoseactivaunamacro,seejecutaelcódigodelamacrodentrodelcontextodelasesiónactualdeAutoCAD.Eldibujoqueestéactivoenelmomentodeejecutarlamacroseconsideraeldibujoabiertoenelquesedebendesarrollarlasaccionesdelamacro.TodaslasreferenciasdeVBAalobjetoThisDrawing(estedibujo)serefierenaldibujoactivocuandosetratademacrosdeproyectosglobales.Enelcasodelasmacrosdeproyectosincrustados,elobjetoThisDrawingsiempreserefierealdibujoenelqueestéincrustadalamacro

ParaejecutarunamacrodesdeelcuadrodediálogoMacros

1. AbraelcuadrodediálogoMacrosyseleccionelamacroquedeseeejecutar.

2. ElijaEjecutar.

ParaejecutarunamacrodesdeelIDEdeVBA

EnelmenúEjecutar,utilicelaopcióndemenúEjecutarmacro.Sinohayningunamacroniningúnformularioactivos,apareceuncuadrodediálogodondesepuedeelegirlamacroquesedeseaejecutar.Siyahayunamacroactiva(elcursorestáenunprocedimiento),seejecutaesamacro.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>

Edicióndeunamacro

AleditarunamacroseabreelIDEdeVBAconlamacroelegidaabiertaenlaventanadelcódigo.ParaobtenermásinformaciónacercadecómoeditarmacrosenelIDEdeVBA,véaseEdicióndeproyectosconelIDEdeVBA.

Paraeditarunamacro

1. AbraelcuadrodediálogoMacrosyseleccionelamacroquedeseeeditar.

2. PulseEditar.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>

Revisióndeunamacropasoapaso

Estemétodoinicialaejecucióndelamacroyladetieneenlaprimeralíneadecódigo.ElIDEdeVBAseabreconlamacroelegidaabiertaenlaventanadelcódigo,enlalíneadeejecución.

Pararevisarunamacropasoapaso

1. EnelcuadrodediálogoMacros,seleccionelamacroquedeseerevisar.

2. ElijaEntrar.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>

deopcionesdeproyectos

HaytresopcionesquepuedendefinirseparalosproyectosVBAdeAutoCAD:

ActivacióndeIncrustaciónautomática

ActivacióndeInterrupciónenerror

Activacióndelaproteccióncontravirusdemacro

ActivacióndeIncrustaciónautomática

LafuncióndeincrustaciónautomáticacreaunproyectoVBAincrustadoparatodoslosdibujoscuandoseabren.

ActivacióndeInterrupciónenerror

EstaopciónpermitequeseactiveelmododeinterrupcióndeVBAcuandoseencuentreunerror.Elmododeinterrupciónsuponeunasuspensióntemporaldelaejecucióndelprogramaenelentornodedesarrollointeractivo.Enelmododeinterrupciónesposibleexaminar,depurar,restablecer,irpasoapasoocontinuarlaejecucióndelprograma.

Cuandoestaopciónestáactivada,loserroresnogestionadosqueseencuentrandurantelaejecucióndelamacrodeVBAprovocanquesesuspendalaejecucióndelamacroyquemuestreelIDEdeVBAenelpuntodeerrordelamacro.

Cuandoestaopciónestádesactivada,loserroresnolocalizadosqueseencuentrandurantelaejecucióndelamacrodeVBAgeneranunmensajedeavisodelerroryfinalizanlaejecucióndelamacro.

Activacióndelaproteccióncontravirusdemacro

Elmecanismodeprotecciónantivirusmuestraunmensajedeadvertenciaintegradosiemprequeseabreundibujoquepuedatenervirusdemacros.

ParadefinirlasopcionesdeunproyectoVBAdeAutoCAD

1. EnelmenúHerr.,elijaMacro Macrosparaaccederalcuadrodediálogocorrespondiente.

2. EnelcuadrodediálogoMacros,elijaOpcionesparaabrirelcuadrodediálogocorrespondiente.

3. EnelcuadrodediálogoOpciones,seleccionelasopcionesquedeseaactivar.

4. PulseAceptar.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

EdicióndeproyectosconelIDEdeVBA

UnavezcargadounproyectoenAutoCAD,esposibleeditarelcódigo,losformulariosylasreferenciascorrespondientesmedianteelentornodedesarrollointeractivodeVBA.DesdeelIDEdeVBAtambiénsepuedendepuraryejecutarproyectos.Unavezabierto,elIDEdeVBApermiteaccederatodoslosproyectoscargados.

ParaabrirelIDEdeVBAencualquiermomento

ElIDEdeVBApuedeabrirsedesdelalíneadecomandoodesdelabarrademenús.

IntroduzcaVBAIDEenlalíneadecomando,oelija,desdeelmenúHerr.,Macro EditordeVisualBasic.VisualizacióndeinformaciónsobreproyectosDefinicióndecomponentesdeunproyectoImportacióndecomponentesexistentesEdicióndecomponentesdenombrealproyectoGuardadodelproyectoReferenciasaotrosproyectosVBADefinicióndeopcionesdelIDEdeVBA

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

Visualizacióndeinformaciónsobreproyectos

ElIDEdeVBAcontieneunaventana,llamadaventanadeproyecto,quepresentaunalistadetodoslosproyectosVBAcargados.Tambiénpresentalosmódulosdecódigo,clasesyformulariosqueestánincluidosenelproyecto,eldocumentoquetieneasociado,todoslosproyectosalosquehacereferenciaylaubicaciónfísicadelproyecto.

Laventanadeproyectotienesupropiabarradeherramientas,quepuedeutilizarparaabrirdiversoscomponentesdelproyectoyeditarlos.PuedeabrirelcódigodeunmóduloseleccionadopulsandoelbotónVercódigo.Estebotónpermitemostrarobjetosconcretoscomoformularios,porejemplo.

Laventanadeproyectoestávisiblepordefecto.Sinoloestá,elijaExploradordeproyectosenelmenúVeropulseCTRL+R.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

Definicióndecomponentesdeunproyecto

Cadaproyectopuedeincluircomponentesmuydistintos.Puedensercomponentesdeproyectoslosobjetos,losformularios,losmódulosestándar,losmódulosdeclasesylasreferencias.

ObjetosFormulariosMódulosestándarMódulosdeclaseReferenciasAdicióndecomponentesnuevos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>

Objetos

Elcomponenteobjetorepresentaeltipodeobjeto,odocumento,alqueaccederáelcódigodeVBA.EnlosproyectosVBAdeAutoCAD,esteobjetorepresentaeldibujoactualdeAutoCAD.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>

Formularios

Elcomponenteformulariocontieneloscuadrosdediálogopersonalizadosquesehayancreadoparautilizarconelproyecto.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>

Módulosestándar

Elcomponentemódulodecódigocontienelosprocedimientosyfuncionesgenéricos.Losmódulosestándartambiénsedenominanmódulosdecódigo,osimplementemódulos.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>

Módulosdeclase

Elcomponentemódulodeclasecontienetodoslosobjetosdelusuario,queestándefinidoscomoclases.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>

Referencias

Elcomponentereferenciacontienetodaslasreferenciasaotrosproyectosobibliotecas.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>

Adicióndecomponentesnuevos

Laadicióndenuevoscomponentescreauncomponentevacíoenelproyecto.Puedeañadirnuevosmódulos,formulariosymódulosdeclasesalproyecto.Elpropiousuariodebeactualizartodaslaspropiedadesdelcomponente(comoelnombre,porejemplo)yrellenarelcódigoapropiado.Cuandoasigneunnombreauncomponentenuevo,tengaencuentaquepodríanutilizarlootrosprogramadoresensusaplicaciones.Sigalasconvencionesdenomenclaturaadoptadasensuequipodeprogramación.

Paraañadiruncomponentenuevoalproyecto

1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoalquedeseeañadirelcomponente.

2. EnelmenúInsertar,elijaUserForm,MódulooMódulodeclaseparaañadirelnuevocomponentealproyecto.Elcomponentenuevoseañadealproyectoysemuestraenlaventanadeproyecto.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

Importacióndecomponentesexistentes

Laimportaciónpermiteañadiralproyectocomponentesqueyaexisten.Puedeimportarformularios,módulosomódulosdeclases.LosformulariosseimportancomoarchivosFRM,losmóduloscomoarchivosBASylosmódulosdeclasescomoarchivosCLS.

Cuandoseimportaunarchivodecomponentes,seañadealproyectounacopiadelarchivo.Elarchivooriginalquedaintacto.Loscambiosquerealiceenloscomponentesimportadosnoafectaránalarchivooriginal.

Siseimportauncomponenteconelmismonombrequeunoyaexistente,alarchivoqueseañadealproyectoseleasignaunsufijonumérico.

Elcomponenteimportadoseañadealproyectoysemuestraenlaventanadeproyecto.Paramodificarlaspropiedadesdelcomponente,seleccióneloenlaventanadeproyecto.Laspropiedadesdelcomponenteseleccionadosemuestranenunalistaypuedenmodificarseenlaventanadepropiedades.

Paraimportaruncomponenteexistentealproyecto

1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoalquedeseeañadirelcomponente.

2. EnelmenúArchivo,elijaImportararchivoparaabrirelcuadrodediálogocorrespondiente.

3. Enestecuadrodediálogo,seleccioneelarchivoquedeseeimportaryhagaclicenAbrir.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

Edicióndecomponentes

EnelIDEdeVBApuedenmodificarselosmódulosestándar,losmódulosdeclaseylosformularios.Losmódulosestándarydeclaseseeditanenunaventanadecódigo.LosformulariossemodificanenlaventanaUserFormmedianteuncuadrodeherramientasespecial.

Puedeabrirtantasventanasdecódigocomomódulostenga;deestaformapodráverelcódigodevariosformulariosomódulos,ycopiarypegardatosentreellos.

Paraeditaruncomponentedelproyecto

1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelcomponentequedeseeeditar.

2. AbraunaventanadecódigopulsandoelbotónVercódigodelaventanadeproyecto.

3. AbraunaventanaUserform,conelcuadrodeherramientascorrespondiente,pulsandoelbotónVerobjetodelaventanadeproyecto.

Paraaccederalcódigoasociadoaunformulario

Paraaccederalcódigoasociadoauncontrol,hagadobleclicencualquiercontroldelaventanadeformulario.Elcódigoasociadoseabreenunaventanadecódigo.UsodelaventanadecódigoUsodelaventanaUserform

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Edicióndecomponentes>

Usodelaventanadecódigo

Laventanadecódigocontienedoslistasdesplegables,unabarradedivisión,unabarraindicadorademargenylosiconosVermódulocompletoyVerprocedimiento.

Lasdoslistasdesplegablesdelapartesuperiordelaventanadecódigomuestranelobjetoyelprocedimientoactuales.Puededesplazarseporelproyectosicambiaelobjetooelprocedimientoenestaslistas.

Labarradedivisiónsituadaaladerechadelaventanadecódigopermitedividirlaventanaensentidohorizontal.Sólotienequearrastrarlabarrahaciaabajoparacrearotropaneldeventana.Estafunciónpermiteversimultáneamentedospartesdelcódigodelmismomódulo.Paracerrarelpanel,arrastrelabarradedivisiónhastasuposicióninicial.

Labarraindicadorademargenseencuentraenlaparteizquierdainferiordelaventanadecódigo.Puedeutilizarlaparaverlosindicadoresdemargenqueseutilizandurantelamodificaciónydepuracióndelcódigo.

LosiconosVermódulocompletoyVerprocedimientoseencuentranenlaesquinainferiorizquierdadelaventanadecódigoysirvenparacambiarlavisualizacióndeformaquesemuestreunprocedimientocadavezoelmódulocompleto.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Edicióndecomponentes>

UsodelaventanaUserform

EnlaventanaUserformpuedecrearcuadrosdediálogopersonalizadosparaunproyecto.

Paraañadiruncontrol,bastaconarrastrarlodesdeelcuadrodeherramientasycolocarloenelformulario.EsposiblealinearloscontrolesconlarejilladelformulariodesdelafichaGeneraldelcuadrodediálogoOpciones.PuedeverlarejilladeformularioydeterminareltamañodelaslíneasdelarejillaenlafichaGeneraldelcuadrodediálogoOpciones.(VéaseDefinicióndeopcionesdelIDEdeVBAparamásinformaciónsobreelcuadrodediálogoOpciones.)

CadaformularioquesediseñaincluyelosbotonesMaximizar,MinimizaryCerrardeformaautomática.Estosbotonesyaestánimplementados.

Paraañadiruncódigoalcontrol,bastaconhacerdobleclicenélcuandosehayacolocadoenelformulario.Deestaformaseabrelaventanadecódigodelcontrol.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

denombrealproyecto

Elnombredelproyectoyelnombredelarchivo.dvbdondeseguardaelproyectosondistintos.Elnombredelarchivo.dvbseasignaalguardarelproyecto.ElnombredelproyectosedefineenlaventanadepropiedadesdelIDEdeVBA.

Sinodesignaunnombredeproyectoyunnombredearchivo,AutoCADproporcionalossiguientesnombrespordefecto:

Nombredelproyecto:ACADProject

Nombredelarchivo:Project.dvb

Paracambiarelnombredeunproyecto

1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoquedeseecambiar.

2. Enlaventanadepropiedades,cambielapropiedadNombredelproyecto.

Paracambiarelnombredearchivodeunproyecto

1. EnelIDEdeVBA,elijalaopciónGuardardelmenúArchivo.

2. EnelcuadrodediálogoGuardarcomo,escribaelnuevonombreylaubicacióndelarchivodeproyecto.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

Guardadodelproyecto

AutoCADnotieneuncomandoGUARDARespecíficoparalosproyectosVBA.Enlugardeello,elcomandoGUARDARestáincluidoenelmenúArchivodelIDEyenelAdministradordeVBA.CuandoserealicencambiosenunproyectoVBAseabriráelcuadrodediálogoGuardarproyectoVBAsiseproduceunadeestassituaciones:

HaseleccionadoelcomandoGUARDARenelIDEdeVBA.

HaelegidolaopciónGuardarcomoenelAdministradordeVBA.

LasesióndeAutoCADvaaterminaroacerrarse,peronosehaguardadoelproyectoVBA.

Nota Antesdeguardarunproyecto,seleasignaelnombredearchivopordefectoproject.dvb.Esimportantequeasigneotronombrealproyectocuandologuarde.Siloguardaconelnombredearchivoproject.dvb,yanopodrácrearproyectosnuevosvacíos:cadavezquecreeunproyectonuevo,secargaráelproyectoproject.dvbguardado.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

ReferenciasaotrosproyectosVBA

LasreferenciasaunproyectoVBAdesdeotrofacilitanalosprogramadoreselusocompartidodelcódigo.Losprogramadorespuedencrearbibliotecasconlasmacrosdeusomásfrecuenteyhacerreferenciaalasbibliotecascuandolasnecesiten.Estopermitequeelcódigocompartidoestécentralizadoyrevisadoyquepuedaserutilizadoporungrannúmerodeprogramadores.

Cuandohayarealizadoconéxitounareferenciaaotroproyecto,observaráquesecreaunacarpetaenlaventanadeproyectodelIDEdeVBA.EstanuevacarpetasellamaReferenciasycontieneelnombredelproyectoalquesehacereferencia.

Unavezcreadalareferenciaaunproyecto,puedeutilizarcualquiercomponentedecódigoodeformulariopúblicoeneseproyecto.

CuandosecargaenAutoCADunproyectoqueutilizareferenciasaotroproyecto,ésteúltimotambiénsecargaenAutoCADdeformaautomática.Elproyectodereferencianopuedecerrarsehastaquenoestécerradoelproyectoprincipal.

Nopuedenestablecersereferenciascirculares.Esdecir,nosepuedehacerreferenciaaunproyectoqueasuveztengaunareferenciaalprimerproyecto.Sisecreaunareferenciacircularporerror,VBAlocomunica.

LautilizacióndereferenciasaproyectosesunafunciónestándardeMicrosoftVBA.EnAutoCADseutilizatalcual,noseharealizadoningunaacciónparaampliarla.Paraobtenermásinformaciónacercadelautilizacióndereferenciasaproyectos,véaselaAyudadeMicrosoftVBA.LaAyudadeMicrosoftVBAsepuedeabrirdesdeelmenúAyudadelIDEdeVBA.

Nota NopuedencrearsereferenciasaproyectosincrustadosniaproyectosVBAdeotrasaplicaciones.

ParacrearunareferenciaaotroproyectoVBA

1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoalquedeseeañadirlareferencia.

2. EnelmenúHerramientas,elijalaopciónReferenciasparaabrirelcuadrodediálogocorrespondiente.

3. Enestecuadrodediálogo,hagaclicenExaminarparaabrirelcuadrodediálogoAgregarreferencias.

4. Enelcuadrodediálogo,seleccioneelarchivodeproyectoalquedeseehacerreferenciayhagaclicenelbotónAbrir.

5. Enestecuadrodediálogo,seleccioneelarchivodeproyectoalquedeseehacerreferenciayhagaclicenelbotónAbrir.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

DefinicióndeopcionesdelIDEdeVBA

EsposiblecambiarlascaracterísticasdelIDEdeVBAenelcuadrodediálogoOpciones.Paraabrirestecuadrodediálogo,enelmenúHerramientas,elijaOpciones.

ElcuadrodediálogoOpcionesincluyecuatropestañas:Editor,Formatodeleditor,GeneralyAcoplar.

EditorFormatodeleditorGeneralAcoplar

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>DefinicióndeopcionesdelIDEdeVBA>

Editor

LafichaEditorpermitedefinirlosparámetrosdelasventanasdecódigoydeproyecto.

Entrelosparámetrosdecódigoseincluyen:

Comprobacióndesintaxisautomática

Declaracióndevariablerequerida:

Listademiembrosautomática

Informaciónrápidaautomática

Sugerenciasdedatosautomáticas

Sangríaautomática

Anchodetabulación

Entrelosparámetrosdeventanaseincluyen:

Arrastrarycolocareneleditor

Vistacompletapredeterminadadelmódulo

Separadordeprocedimientos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>DefinicióndeopcionesdelIDEdeVBA>

Formatodeleditor

LafichaFormatodeleditordeterminaelaspectodelcódigo.

Esposible:

Cambiarelcolordelcódigo

Designarloselementosdelalistadetexto

Cambiarelprimerplano

Cambiarelfondo

Cambiarlosindicadoresdemargen

Cambiareltipodeletradeltextoysutamaño

Mostraruocultarelindicadordemargen

Mostraruocultareltextodeejemplodelosparámetros

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>DefinicióndeopcionesdelIDEdeVBA>

General

LafichaGeneralprecisalosvalores,ladetecciónyrecuperacióndeerroresylosparámetrosdecompilacióndelproyectoVBAactual.

Esposible:

Cambiarlosparámetrosdelarejilladelformulario

Mostraruocultarinformacionessobreherramientas

Definirlaocultaciónautomáticadelasventanas

Elegirlarecepcióndenotificacionesdepérdidadeestado

Determinarelmétododegestióndeerrores

Definirelproyectodeformaquesecompilecuandoelusuariolosoliciteoserealicencompilacionesensegundoplano

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>DefinicióndeopcionesdelIDEdeVBA>

Acoplar

Estafichapermiteelegirlasventanasquepuedenacoplarse.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

Realizacióndeunejerciciopreliminar

AhoraqueyahaconocelosaspectosbásicosdelaprogramaciónenVBAdeAutoCAD,vamosacrearunsencilloejerciciodenominado“Holaatodos”.EnesteejerciciovaacrearundibujodeAutoCADnuevo,vaaañadirleunalíneadetextoyvaaguardarlo,todoellodesdeVBA.

Paracrearelobjetodetexto“Holaatodos”

1. AbraelIDEdeVBAejecutandoelsiguientecomandodesdelalíneadecomandodeAutoCAD:Comando:VBAIDE

2. AbralaventanadecódigoseleccionandolaopciónCódigodelmenúVerenelIDEdeVBA.

3. CreeunprocedimientonuevoenelproyectoseleccionandolaopciónProcedimientoenelmenúInsertarenelIDEdeVBA.

4. Cuandoselesolicitelainformacióndelprocedimiento,escribaunnombre,porejemplo,HolaATodos.AsegúresedequeesténseleccionadoseltipoProcedimientoyelámbitoPúblico.

5. PulseAceptar.

6. Escribaelcódigosiguiente(queabreundibujonuevo)entrelaslíneasPublicSubHolaatodos()yEndSub.

ThisDrawing.Application.Documents.Add

7. Escribaelcódigosiguiente(quecrealacadenadetextoydefineelpuntodondeseinserta)inmediatamentedespuésdelcódigointroducidoenelpaso6.

DiminsPoint(0To2)AsDouble'Declareinsertionpoint

DimtextHeightAsDouble'Declaretextheight

DimtextStrAsString'Declaretextstring

DimtextObjAsAcadText'Declaretextobject

insPoint(0)=2'Setinsertionpointxcoordinate

insPoint(1)=4'Setinsertionpointycoordinate

insPoint(2)=0'Setinsertionpointzcoordinate

textHeight=1'Settextheightto1.0

textString="Hello,World."'Setthetextstring

'CreatetheTextobject

SettextObj=ThisDrawing.ModelSpace.AddText_

(textStr,insPoint,textHeight)

8. Escribaelsiguientecódigo(queguardaeldibujo)inmediatamentedespuésdelcódigointroducidoenelpaso7.

ThisDrawing.SaveAs("Hello.dwg")

9. EjecuteelprogramaseleccionandolaopciónEjecutarSub/UserFormenelmenúEjecutardelIDEdeVBA.Cuandoterminelaejecucióndelprograma,traigalaaplicaciónAutoCADalprimerplano.Deberíavereltexto“Holaatodos”eneldibujo.ElnombredeldibujodebeserHello.dwg.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

Obtencióndemásinformación

PuedeobtenermásinformaciónacercadelIDEdeVBAydellenguajedeprogramaciónVBAenlosarchivosdeAyudaqueproporcionaMicrosoft.ParaabrirlosarchivosdeAyudadeMicrosoftVisualBasic,elijaAyudadeMicrosoftVisualBasicenelmenúAyudadelIDEdeVBA.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

TérminosparaproyectosVBAdeAutoCAD

Proyectoglobal

ProyectoVBAguardadoenunarchivo.dvb.

Proyectoincrustado

ProyectodeVBAalmacenadoenundibujodeAutoCAD.

Documentonormal

DibujodeAutoCADquenocontieneproyectosVBAincrustados.

Documentoinformativo

DibujodeAutoCADquecontieneunoomásproyectosVBAincrustados.

Proyectoactual

ProyectoqueseencuentraseleccionadoenelIDEdeVBA

ThisDrawing

TérminodeprogramacióndeVBAutilizadopararepresentareldibujoactual.Enlosproyectosglobales,ThisDrawingsiemprehacereferenciaaldocumentoqueestáactivoenAutoCAD.Enlosproyectosincrustados,ThisDrawingsiemprehacereferenciaaldocumentoquecontieneelproyecto.

IDEdeVBA

EntornodedesarrollointeractivodeVBA.Estaaplicaciónpermiteeditarelcódigoylosformulariosdelproyectoactivo,ocopiarcódigoyformulariodeotrosproyectos.Tambiénpermiteestablecerreferenciasaotrosmodelosdeobjetosdeaplicación.

AdministradordeVBA

ElAdministradordeVBApermitegestionarlosproyectos.Esposiblecrear,borrar,incrustaroextraerproyectos.Tambiénpermiteverlosproyectos

incrustadosenundibujoabiertosiloshay.

CuadrodediálogoMacros

EnelcuadrodediálogoMacrospuedeejecutar,suprimirycrearmacros,asícomoaccederalasopcionesdeproyectosVBA.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

ComandosVBAdeAutoCAD

VBAIDE

AbreelIDEdeVBA.ElIDEdeVBApermiteeditar,ejecutarydepurarprogramasdeformainteractiva.AunquesólosepuedeactivarelIDEdeVBAmientrasseejecutaAutoCAD,esposibleminimizarlo,abrirloycerrarloconindependenciadelaventanadeaplicacióndeAutoCAD.

VBALOAD

CargaunproyectoVBAenlasesiónactualdeAutoCAD.

VBARUN

EjecutaunamacrodeVBAdesdeelcuadrodediálogoMacrosodesdelalíneadecomandodeAutoCAD.

VBADESCARGAR

DescargaunproyectoVBAdelasesióndeAutoCADactual.SielproyectoVBAsehamodificadoperonosehaguardado,sepreguntaalusuariosideseaguardarlomedianteelcuadrodediálogoGuardarproyecto(omedianteelequivalentedelalíneadecomando).

VBAMAN

MuestraelAdministradordeVBA,dondepuedever,crear,cargar,cerrar,incrustaryextraerproyectos.

VBAENUN

EjecutaunasecuenciaVBAdesdelalíneadecomandodeAutoCAD.

¿Comentarios?

<$nopage>datosex.<$nopage>raíz(objeto):

ManualdeldesarrolladordeActiveXyVBA>

ConceptosbásicosdeActiveXAutomation

ParahacerunusoeficazdeActiveXAutomationdeAutoCAD,debeestarfamiliarizadoconlosobjetos,entidadesyfuncionesdeAutoCADrelativosaltipodeaplicaciónqueestédesarrollando.Cuantomásconocimientosetengadelaspropiedadesgráficasynográficasdeunobjeto,másfácilserámanipularlosobjetosenActiveXAutomationdeAutoCAD.

SideseaconsultarunarchivodeayudadeActiveXAutomationdeAutoCAD,pulseF1.Sitienealgúnproblemaconunobjeto,métodoopropiedadconcretos,resalteelelementoencuestiónenelIDEdeVBAypulseF1.

ModelodeobjetosdeAutoCADAccesoalajerarquíadeobjetosLosobjetosdecolecciónConceptosbásicossobrepropiedadesymétodosDefinicióndeobjetosanteriores(padre)LocalizacióndelabibliotecadetiposUsodevariantesenmétodosypropiedadesOtroslenguajesdeprogramación

¿Comentarios?

<$nopage>datosex.

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

ModelodeobjetosdeAutoCAD

LosobjetosconstituyenelbloqueconstructorprincipaldelainterfazdeActiveX®deAutoCAD®.CadaobjetoexpuestorepresentauncomponenteconcretodeAutoCAD.ExistenmultituddetiposdeobjetosdiferentesenlainterfazdeActiveXdeAutoCAD.Porejemplo:

Loselementosgráficoscomolaslíneas,losarcos,eltextoylascotassonobjetos.

Losparámetrosdeestilocomoeltipodelíneayelestilodecotasonobjetos.

Lasestructurasdeorganizacióncomolascapas,losgruposylosbloquessonobjetos.

Lostiposdevisualizacióndedibujoscomolasvistasylasventanasgráficassonobjetos.

SeconsideranobjetosinclusoeldibujoylaaplicaciónAutoCAD.

Losobjetosseestructurandeformajerárquica,siendolaraízelobjetoApplication.AlapresentacióndeestaestructurajerárquicaseledenominaModelodeobjetos.ElModelodeobjetospermiteverelobjetoqueproporcionaaccesoalsiguienteniveldeobjetos.

ElobjetoApplicationElobjetoDocumentObjetosdecolecciónObjetosgráficosynográficosObjetosPreferences,PlotyUtilityUsodelasfuncionesdeAutoCADnuevas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>

ElobjetoApplication

ElobjetoApplicationeslaraízdelModelodeobjetosdeActiveXAutomationdeAutoCAD.Desdeélpuedeobteneraccesoacualquieradelosdemásobjetosoalosmétodosypropiedadesquetenganasignados.

Porejemplo,elobjetoApplicationtieneunapropiedadPreferencesquedevuelveelobjetoPreferences.EstosobjetosjuntosproporcionanaccesoatodaslasopcionesalmacenadasenelregistromedianteelcuadrodediálogoOpciones.(LosparámetrosalmacenadoseneldibujoestáncontenidosenelobjetoDatabasePreferencesquesedescribemásadelante.)OtraspropiedadesdelobjetoApplicationofrecenaccesoadatosespecíficosdelaaplicación,comosunombreyversión,asícomoeltamaño,ubicaciónyvisibilidaddeAutoCAD.LosmétodosdelobjetoApplicationpermitenrealizaraccionesespecíficasdelaaplicación,comoenumeración,cargaydescargadeaplicacionesADSyARX,asícomosalirdeAutoCAD.

ElobjetoApplicationtambiénproporcionavínculosconlosdibujosdeAutoCADatravésdelacolecciónDocuments,conlosmenúsylasbarrasdeherramientasdeAutoCADatravésdelascoleccionesMenuBaryMenuGroups,yconelIDEdeVBAatravésdeunapropiedadllamadaVBE.

ElobjetoApplicationtambiéneselobjetoglobaldelainterfazdeActiveX.Esdecir,todoslosmétodosypropiedadesdelobjetoApplicationestándisponibles

enelespaciodenombresglobal.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>

ElobjetoDocument

ElobjetoDocument,queenrealidadesundibujodeAutoCAD,seencuentraenlacolecciónDocumentsyproporcionaaccesoatodoslosobjetosdeAutoCADgráficosyalamayoríadelosquenosongráficos.Elaccesoalosobjetosgráficos(líneas,círculos,arcos,etc.)serealizaatravésdelascoleccionesModelSpaceyPaperSpace,mientrasqueelaccesoalosobjetosnográficos(capas,tiposdelínea,estilosdetexto,etc.)serealizaatravésdecoleccionesdelmismonombre,comoasLayers,LinetypesyTextStyles.ElobjetoDocumenttambiénproporcionaaccesoalosobjetosPlotyUtility.

Paraaccederalaspropiedadesdeldibujo,utilicelapropiedadSummaryInfodelobjetoDocument.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>

Objetosdecolección

AutoCADagrupalamayoríadelosobjetosencolecciones.Aunqueéstascontienentiposdedatosdistintos,puedenprocesarseaplicandotécnicassimilares.Cadacoleccióntienesumétododeincorporacióndenuevosobjetos.LamayoríautilizaelmétodoAdd.Noobstante,losobjetosentidadnormalmenteseañadenmedianteunmétodollamadoAdd<nombre_entidad>.Porejemplo,paraagregarunalíneaseutilizaríaelmétodoAddLine.

Lascoleccionestambiéncompartenalgunosotrosmétodosypropiedades.PuedeutilizarselapropiedadCountparaobtenereltotalapartirdecerodelosobjetosdeunacolección.ConelmétodoItempuedeobtenersecualquierobjetodeunacolección.

¿Comentarios?

<$nopage>datosex.

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>

Objetosgráficosynográficos

Losobjetosgráficos,tambiénconocidoscomoentidades,sonlosobjetosvisibles(líneas,círculos,imágenesráster,etc.)quecomponenundibujo.Paracrearlos,seutilizaelmétodoAdd<Entidad>apropiado.Paramodificaroconsultarestosobjetos,apliquelosmétodosopropiedadesdelpropioobjeto.LosobjetosgráficostienenmétodosquepermitenqueunaaplicaciónejecutelamayoríadeloscomandosdeedicióndeAutoCADcomoCopiar,Borrar,Desplazar,Simetría,etc.Estosobjetostambiéntienenmétodosparalaconfiguraciónyrecuperacióndedatosextendidos(datosex),elresaltadoylaactualización,ylarecuperacióndelcuadrodelimitadordelobjeto.LosobjetosgráficostienenpropiedadesbásicascomoLayer,Linetype,ColoryHandle.Tambiéntienenpropiedadesespecíficasquedependendeltipodeobjeto,comoCenter,RadiusyArea.

Losobjetosnográficossonlosobjetosinvisibles(informativos)queformanpartedeundibujo,comoLayers,Linetypes,DimStyles,SelectionSets,etc.Paracrearestosobjetos,apliqueelmétodoAdddelobjetoCollectionsuperior.Paramodificaroconsultarestosobjetos,apliquelosmétodosopropiedadesdelpropioobjeto.Losobjetosnográficostienenmétodosypropiedadesespecíficosasupropósito;todoscuentanconmétodosquepermitenestableceryrecuperardatosextendidos(datosex)ysuprimirseasímismos.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>

ObjetosPreferences,PlotyUtility

BajoelobjetoPreferencesexisteunconjuntodeobjetos,cadaunodeloscualescorrespondeaunafichadelcuadrodediálogoOpciones.EstosobjetosjuntosproporcionanaccesoatodaslasopcionesalmacenadasenelregistromedianteelcuadrodediálogoOpciones.LosparámetrosalmacenadoseneldibujoestáncontenidosenelobjetoDatabasePreferences.Lasopciones(ylasvariablesdesistemaquenoformenpartedelcuadrodediálogoOpciones)tambiénpuedenestablecerseymodificarseconlosmétodosSetVariableyGetVariable.Paraobtenermásinformaciónacercadecómodefiniropciones,véaseDefinicióndepreferenciasdeAutoCAD.

ElobjetoPlotproporcionaaccesoalosparámetrosdelcuadrodediálogoImprimirydotaaunaaplicacióndelacapacidaddetrazareldibujocondiversosmétodos.Paraobtenermásinformaciónacercadeltrazado,véaseImpresióndedibujos.

ElobjetoUtilityproporcionaalusuariofuncionesdeentradayconversióndedatos.Lasfuncionesdeentradadelusuariosonmétodosquesolicitanalusuariolaintroduccióndedistintostiposdedatoscomocadenas,enteros,reales,puntosyotros,enlalíneadecomandodeAutoCAD.LasfuncionesdeconversiónsonmétodosqueutilizandeterminadostiposdedatosdeAutoCAD,comolospuntosyángulos,ademásdegestionarcadenasynúmeros.Paraobtenermás

informaciónacercadelasfuncionesdeentrada,véaseSolicituddedatosdeusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>

UsodelasfuncionesdeAutoCADnuevas

SielproyectodeautomatizaciónutilizaunafunciónquenoseencontrabaenunaversiónanteriordeAutoCAD,debedeclararsedeformaexplícitalainterfazdeAutoCADqueseutilizaenelproyecto.

SiunproyectodeautomatizacióncontienedeclaracionesexplícitasdelasinterfacesnuevasdeunadeterminadaversióndeAutoCAD,noutiliceeseproyectoconversionesanterioresdeAutoCAD.

¿Comentarios?

<$nopage>raíz(objeto):

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Accesoalajerarquíadeobjetos

EsfácilaccederalajerarquíadeobjetosdesdeVBA.ElaccesoalajerarquíadeobjetosesmuysencillodesdeVBA,yaqueVBAseejecutaconlasesiónactualdeAutoCADencursoynoesprecisoportantorealizarningúnpasoadicionalparaconectarconlaaplicación.

VBAproporcionaunvínculoaldibujoactivoenlasesiónactualdeAutoCADatravésdelobjetoThisDrawing.LautilizacióndeThisDrawingpermiteelaccesoinmediatoalobjetoDocumentactualyatodossusmétodosypropiedades,asícomoatodoslosdemásobjetosdelajerarquía.

Cuandoseutilizaenunproyectoglobal,ThisDrawingsiemprehacereferenciaaldocumentoqueestáactivoenAutoCAD.Enlosproyectosincrustados,sinembargo,ThisDrawingsiemprehacereferenciaaldocumentoquecontieneelproyecto.Porejemplo,lasiguientelíneadecódigodeunproyectoglobalguardaeldibujoqueseencuentreactivoenAutoCAD,seacualsea:

ThisDrawing.Save

ReferenciasaobjetosdelajerarquíadeobjetosAccesoalobjetoApplication

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Accesoalajerarquíadeobjetos>

Referenciasaobjetosdelajerarquíadeobjetos

Sepuedehacerreferenciaalosobjetosdirectamenteoatravésdeunavariabledefinidaporelusuario.Parautilizarunareferenciadirectaaunobjeto,inclúyaloenlajerarquíadelallamada.Porejemplo,lasiguienteinstrucciónañadeunalíneaenelespaciomodelo.ObservequelajerarquíacomienzaconThisDrawing,vaalobjetoModelSpaceyacontinuaciónllamaalmétodoAddLine:

DimstartPoint(0To2)AsDouble,endPoint(0To2)AsDouble

DimLineObjasAcadLine

startPoint(0)=0:startPoint(1)=0:startPoint(2)=0

endPoint(0)=30:endPoint(1)=20:endPoint(2)=0

SetLineObj=ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)

Parahacerreferenciaalosobjetosmedianteunavariabledefinidaporelusuario,definalavariableconeltipodeseadoy,acontinuación,establézcalacomoelobjetoadecuado.Porejemplo,elcódigosiguientedefineunavariable(moSpace)detipoAcadModelSpaceylaestablececomoigualalespaciomodeloactual:

DimmoSpaceAsAcadModelSpace

SetmoSpace=ThisDrawing.ModelSpace

Lasiguienteinstrucciónagregaunalíneaalespaciomodelomediantelavariabledefinidaporelusuario:

DimstartPoint(0To2)AsDouble,endPoint(0To2)AsDouble

DimLineObjasAcadLine

startPoint(0)=0:startPoint(1)=0:startPoint(2)=0

endPoint(0)=30:endPoint(1)=20:endPoint(2)=0

SetLineObj=moSpace.AddLine(startPoint,endPoint)

Recuperacióndelprimerobjetoentidaddelespaciomodelo

Elejemplosiguientedevuelveelprimerobjetoentidaddelespaciomodelo.Estecódigotendríaelmismoefectoenentidadesdelespaciopapel.TengaencuentaquetodoslosobjetosdeldibujosepuedendefinircomoobjetosAcadEntity:

SubCh2_FindFirstEntity()

'Thisexamplereturnsthefirstentityinmodelspace

OnErrorResumeNext

DimentityAsAcadEntity

IfThisDrawing.ModelSpace.count<>0Then

Setentity=ThisDrawing.ModelSpace.Item(0)

MsgBoxentity.ObjectName+_

"isthefirstentityinmodelspace."

Else

MsgBox"Therearenoobjectsinmodelspace."

EndIf

EndSub

¿Comentarios?

<$nopage>raíz(objeto):

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Accesoalajerarquíadeobjetos>

AccesoalobjetoApplication

LapropiedadApplicationdelobjetoDocumentproporcionaaccesoalobjetoApplication.ElobjetoApplicationestáporencimadelobjetoDocumentenlajerarquíadeobjetos.

ElobjetoThisDrawingproporcionaaccesoalobjetoDocument.Porejemplo,lasiguientelíneadecódigoactualizalaaplicación:

ThisDrawing.Application.Update

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Losobjetosdecolección

Unobjetodecolecciónesunobjetopredefinidoquecontiene(esunobjetopropietariode)todaslasinstanciasdeunobjetosimilar.Acontinuaciónsemuestraunalistadeobjetosdecolección:

Colección

ContienetodoslosdocumentosabiertosenlasesiónactualdeAutoCAD.

Coleccióndeespaciomodelo

Contienetodoslosobjetosgráficos(entidades)delespaciomodelo.

Coleccióndeespaciopapel

Contienetodoslosobjetosgráficos(entidades)deladisposiciónactivadelespaciopapel.

Objetodebloque

Contienetodaslasentidadesdeunadefinicióndebloqueconcreta.

Coleccióndebloques

Contienetodoslosbloquesdeldibujo.

Coleccióndediccionarios

Contienetodoslosdiccionariosdeldibujo.

Coleccióndeestilosdecotas

Contienetodoslosestilosdeacotacióndeldibujo.

Coleccióndedependenciasdearchivos

Contienetodosloselementosenlalistadedependenciasdearchivos.

Coleccióndegrupos

Contienetodoslosgruposdeldibujo.

Coleccióndehipervínculos

Contienetodosloshipervínculosdeunaentidaddada.

Coleccióndecapas

Contienetodaslascapasdeldibujo.

Coleccióndepresentaciones

Contienetodaslasdisposicionesdeldibujo.

Coleccióndetiposdelínea

Contienetodoslostiposdelíneadeldibujo.

Coleccióndebarrasdemenús

ContienetodoslosmenúsqueactualmentesemuestranenAutoCAD.

Coleccióndegruposdemenús

ContienetodoslosmenúsybarrasdeherramientasqueactualmenteestáncargadosenAutoCAD.

Coleccióndeconfiguracionesdetrazado

Contieneparámetrosdetrazadoguardadoseneldibujo.

Coleccióndeaplicacionesregistradas

Contienetodaslasaplicacionesregistradasdeldibujo.

Coleccióndeconjuntosdeselección

Contienetodoslosconjuntosdeseleccióndeldibujo.

Coleccióndeestilosdetexto

Contienetodoslosestilosdetextodeldibujo.

ColeccióndecoordenadasSCP

Contienetodoslossistemasdecoordenadaspersonales(SCP)deldibujo.

Coleccióndevistas

Contienetodaslasvistasdeldibujo.

Coleccióndeventanasgráficas

Contienetodaslasventanasgráficasdeldibujo.

AccesoaunacolecciónAdicióndemiembrosaunacolecciónIteraciónenunobjetodecolecciónSupresióndemiembrosdeunobjetodecolección

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Losobjetosdecolección>

Accesoaunacolección

PuedeaccederalamayoríadelosobjetosdecoleccionesatravésdelobjetoDocument.DichoobjetocontieneunapropiedadporcadaunodelosobjetosCollection.Porejemplo,elcódigosiguientedefineunavariableyladefinecomolacolecciónLayersdeldibujoactual:

DimlayerCollectionasAcadLayers

SetlayerCollection=ThisDrawing.Layers

PuedeaccederalascoleccionesDocuments,MenuBaryMenuGroupsatravésdelobjetoApplication.Dichoobjetocontieneunapropiedadporcadaunadeestascolecciones.Porejemplo,elcódigosiguientedefineunavariableyladefinecomolacolecciónMenuGroupsdelaaplicación:

DimMenuGroupsCollectionasAcadMenuGroups

SetMenuGroupsCollection=ThisDrawing.Application.MenuGroups

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Losobjetosdecolección>

Adicióndemiembrosaunacolección

Paraagregarunmiembronuevoalacolección,utiliceelmétodoAdd.Porejemplo,elsiguientecódigocreaunacapanuevaylaañadealacoleccióndecapas(Layers).

DimnewLayerasAcadLayer

SetnewLayer=ThisDrawing.Layers.Add("MyNewLayer")

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Losobjetosdecolección>

Iteraciónenunobjetodecolección

UtiliceelmétodoItemparaseleccionarunmiembroconcretodeunobjetodecolección.Dichométodorequiereunidentificadorcomonúmerodeíndicequeespecifiquelaubicacióndelelementoenlacolecciónobiencomounacadenaquerepresentealnombredelelemento.

Itemeselmétodopredeterminadopordefectoparalascolecciones:cuandoelusuarionoindicaunnombredemétodoalmencionarunacolección,seutilizaelmétodoItem.Lassiguientesinstruccionessonequivalentes:

ThisDrawing.Layers.Item("ABC")

ThisDrawing.Layers("ABC")

Nota Noutilicelosmétodosdeedicióndelaentidad(Copy,Array,Mirror,etc.)enunobjetoalavezqueiteraenunacolecciónempleandoelmecanismoForEach.Terminelaiteraciónantesdeintentareditarunobjetodelacolecciónobiencreeunamatriztemporalydefínalacomoigualalacolección.Acontinuaciónpuedeiterarenlamatrizcopiadayefectuarcambios.

Iterarenlacoleccióndecapas

Elejemplosiguienteefectúaiteracionesenunacolecciónypresentalosnombresdetodaslascapasdelacolección:

SubCh2_IterateLayer()

'Iteratethroughthecollection

OnErrorResumeNext

DimIAsInteger

DimmsgAsString

msg=""

ForI=0ToThisDrawing.Layers.count-1

msg=msg+ThisDrawing.Layers.Item(I).Name+vbCrLf

Next

MsgBoxmsg

EndSub

Búsquedadelacapa"MiCapa"

Elsiguienteejemploserefiereaunacapadenominada"MiCapa"ypresentaunmensajesilacapanoexiste:

SubCh2_FindLayer()

'UsetheItemmethodtofindalayernamed"MiCapa"

OnErrorResumeNext

DimABCLayerAsAcadLayer

SetABCLayer=ThisDrawing.Layers("MiCapa")

IfErr<>0Then

MsgBox"Thelayer'MiCapa'doesnotexist."

EndIf

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Losobjetosdecolección>

Supresióndemiembrosdeunobjetodecolección

Parasuprimirunestilodecotaconcreto,utiliceelmétodoDeletequeseencuentraenelobjetomiembro.Porejemplo,lasiguientelíneadecódigosuprimelacapaABC:

DimABCLayerasAcadLayer

SetABCLayer=ThisDrawing.Layers.Item("ABC")

ABCLayer.Delete

Unavezquesesuprimeunobjeto,novuelvaaintentaraccederaélalolargodelprograma.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Conceptosbásicossobrepropiedadesymétodos

Cadaobjetollevaasociadossuspropiosmétodosypropiedades.Laspropiedadesdescribenaspectosindividualesdelobjeto;losmétodossonaccionesquepuedenrealizarseconelobjetoconcreto.Unavezcreadoelobjeto,lopuedeconsultarymodificaratravésdesuspropiedadesymétodos.

Porejemplo,unobjetoCircletienelapropiedadCenter.Estapropiedadrepresentalascoordenadas3DdelSCUenelcentrodelcírculo.Paracambiarelcentrodelcírculo,solotienequedefinirestapropiedadconunasnuevascoordenadas.ElobjetoCircletambiéntieneunmétododenominadoOffset.Estemétodocreaunobjetonuevoaunadistanciadedesfaseespecificadaconrespectoalcírculooriginal.ParaverunalistadetodoslosmétodosypropiedadesdelobjetoCircle,véaseelobjetoCircleenActiveXandVBAReferencedeAutoCAD.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Definicióndeobjetosanteriores(padre)

Todoslosobjetostienenunobjetoanterioralqueestánvinculadospermanentemente.Todoslosobjetostienencomoorigenunmismoobjetoanteriorllamadoobjetoraíz.Puedeaccederatodoslosobjetosdelainterfazsiguiendolosvínculosqueunenalobjetoraízconlosobjetossubordinados.Asimismo,losobjetostienenunapropiedadllamadaApplicationquelosunedirectamenteconelobjetoraíz.

ElobjetoraízdelainterfazdeAutoCADeslaaplicaciónAutoCAD.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Localizacióndelabibliotecadetipos

Losobjetos,métodosypropiedadesexpuestosporobjetosdeautomatizaciónestánincluidosenunabibliotecadetipos.Unabibliotecadetiposesunarchivoopartedeunarchivoquedescribeeltipodeunoomásobjetos.

Lasbibliotecasdetiposnoalmacenanobjetos,sinoinformación.Elaccesoaunabibliotecadetipospermiteaaplicacionesyexploradoresdeterminarcaracterísticasdeunobjetotalescomolasinterfacesqueadmiteolosnombresydireccionesdelosmiembrosdecadainterfaz.

Parapoderutilizarelobjetodeautomatizaciónexpuestoporunaaplicación,debehacerreferenciaasubibliotecadetipos.LareferenciasedefineautomáticamenteenelIDEdeVBA.Enotrosentornosdedesarrollointeractivo,elusuariodebecrearunareferenciaalarchivodebibliotecadetiposdeAutoCAD,acax17enu.tlb,queseencuentraenc:\Archivosdeprograma\Archivoscomunes\AutodeskShared.ParaaccederaobjetosdelAdministradordeconjuntosdeplanosenelIDEdeVBAoenotrosentornos,elusuariodebecrearunareferenciaalarchivodebibliotecadetiposdeAcSmComponents171.0,AcSmComponents17.tlb,queseencuentraenc:\Archivosdeprograma\Archivoscomunes\AutodeskShared.

Puedeutilizarlosobjetosdeunaaplicaciónsinhacerreferenciaalabibliotecadetiposdelamisma.Noobstante,espreferibleañadirlareferenciaalabibliotecadetipos,porlossiguientesmotivos:

Elaccesoalasfuncionesdisponiblesglobalmenteesdirecto,sinnecesidaddecalificación.

Durantelacompilaciónpuedecomprobarsesilaactivacióndefunciones,propiedadesymétodosescorrectay,porlotanto,laejecuciónesmásrápidaentiempodeejecución.

Puedendeclararsevariablesdelostiposdefinidosenlabiblioteca,y

aumentarlafiabilidadylegibilidadentiempodeejecución.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Usodevariantesenmétodosypropiedades

ActiveXAutomationutilizavariantesparatransferirmatricesdedatos.Aunqueestopuedeserconfusoparaunusuariosinexperiencia,esmuyfácilunavezaprendidoslosconceptosbásicos.ActiveXAutomationdeAutoCADtambiénproporcionautilidadesparafacilitarlaconversióndelostiposdedatos.

¿QuéesunVariant?UsodeVariant(variantes)enmatricesdedatosConversióndematricesenvariantesInterpretacióndematricesdevariantes

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>

¿QuéesunVariant?

UnVariant(variante)esuntipodedatosespecialquepuedecontenercualquierclasededatosexceptocadenasdelongitudfijaytiposdefinidosporelusuario.UnvariantetambiénpuedecontenerlosvaloresespecialesEmpty,Error,NothingyNULL.EsposibledeterminareltratamientoqueseaplicaalosdatosdeunvarianteutilizandolasfuncionesVarTypeoTypeNamedeVBA.

EltipodedatosVariantsepuedeutilizarensustitucióndelamayoríadetiposdedatos,loqueaportagranflexibilidad.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>

UsodeVariant(variantes)enmatricesdedatos

LasvariantesseutilizanparalaentradaysalidadematricesdedatosdeActiveXAutomationdeAutoCAD.Lamatriz,portanto,debeserunavarianteaceptadaporlosmétodosypropiedadesdeActiveXAutomationdeAutoCAD.Asimismo,lasalidadelosdatosmatricialesdeActiveXAutomationdeAutoCADdebetratarsecomounVariant.

Nota EnAutoCAD,lasmatricesdeentradadeVBAseconviertenenvariantesdeformaautomática.Esdecir,quenoesnecesarioproporcionarunamatrizdevariantescomoentradaalosmétodosypropiedadesdeActiveXAutomationsiseestánutilizandodesdeVBA.Noobstante,todaslasmatricesdesalidaestaránenformadevariantes,porloquenodebeolvidartratarlascomocorresponde.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>

Conversióndematricesenvariantes

AutoCADActiveXAutomationproporcionaunmétodoparaconvertirunamatrizdedatosenunvariante.EstemétodosellamaCreateTypedArrayycreaunvariantequecontieneunamatrizdeenteros,númerosflotantes,dobles,etc.PuedetransferirelvarianteresultanteacualquiermétodoopropiedaddeAutoCADqueaceptecomovarianteunamatrizdenúmeros.

ElmétodoCreateTypedArrayutilizacomoentradaseltipodevaloresqueestánenlamatriz,ylamatrizdedatosquedebeconvertirse.Devuelvecomovariantelamatrizdevalores.

CreacióndeunacurvasplineconelmétodoCreateTypedArray

ElsiguientecódigoconviertetresmatricesmedianteCreateTypedArray:coordenadasdelospuntosdeajustedelaspline,ylatangenteinicialyfinaldelaspline.AcontinuacióntransfierelavariantealmétodoAddSplineparacrearlaspline.

SubCh2_CreateSplineUsingTypedArray()

'Thisexamplecreatesasplineobjectinmodelspace

'usingtheCreateTypedArraymethod.

DimsplineObjAsAcadSpline

DimstartTanAsVariant

DimendTanAsVariant

DimfitPointsAsVariant

DimutilObjAsObject'latebindtheUtilityobject

SetutilObj=ThisDrawing.Utility

'DefinetheSplineObject

utilObj.CreateTypedArray_

startTan,vbDouble,0.5,0.5,0

utilObj.CreateTypedArray_

endTan,vbDouble,0.5,0.5,0

utilObj.CreateTypedArray_

fitPoints,vbDouble,0,0,0,5,5,0,10,0,0

SetsplineObj=ThisDrawing.ModelSpace.AddSpline_

(fitPoints,startTan,endTan)

'Zoominonthenewlycreatedspline

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>

Interpretacióndematricesdevariantes

LainformaciónmatricialsetransfieredevueltadesdeActiveXAutomationdeAutoCADcomovariante.Siconoceeltipodedatosdelamatriz,puedeaccederalavariantecomoaunamatriz.Sinoconoceeltipodedatosquecontienelavariante,utilicelasfuncionesVarTypeoTypenamedeVBA.Estasfuncionesdevuelveneltipodedatosdelvariante.Sinecesitaiterarenlamatriz,puedeutilizarladeclaracióndeVBAForEach.

Cálculodeladistanciaentredospuntos

Elcódigosiguientemuestraelmétododecálculodeladistanciaentredospuntosespecificadosporelusuario.Enesteejemplo,eltipodedatosseconoceporquetodaslascoordenadassondobles.Lascoordenadas3Dconsistenenunamatrizdetreselementosdenúmerosdobles,ylascoordenadas2Denunamatrizdedoselementosdenúmerosdobles.

SubCh2_CalculateDistance()

Dimpoint1AsVariant

Dimpoint2AsVariant

'Getthepointsfromtheuser

point1=ThisDrawing.Utility.GetPoint_

(,vbCrLf&"Firstpoint:")

point2=ThisDrawing.Utility.GetPoint_

(point1,vbCrLf&"Secondpoint:")

'Calculatethedistancebetweenpoint1andpoint2

DimxAsDouble,yAsDouble,zAsDouble

DimdistAsDouble

x=point1(0)-point2(0)

y=point1(1)-point2(1)

z=point1(2)-point2(2)

dist=Sqr((Sqr((x^2)+(y^2))^2)+(z^2))

'Displaytheresultingdistance

MsgBox"Thedistancebetweenthepointsis:"_

&dist,,"CalculateDistance"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Otroslenguajesdeprogramación

EstemanualseharedactadoparaellenguajedeprogramaciónVBA.LosejemplosdeprogramaciónylasaplicacionesdeejemploestánescritasenVBA.Parapoderutilizarestecódigoenotrosentornosdeprogramacióndebeactualizarseparadichoentorno.

Paraobtenermásinformaciónacercadelaconversióndelcódigodelosejemplos,véaseladocumentacióndelentornodedesarrollo.

Nota LaclavederegistroparaelaccesoalaaplicaciónCOMdeAutoCAD2008esAutoCAD.Application.17.

ConversióndelcódigoVBAaVB

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Otroslenguajesdeprogramación>

ConversióndelcódigoVBAaVB

ParaactualizarunejemplodecódigoyutilizarloconVB,primerohayquehacerreferenciaalabibliotecadetiposdeAutoCAD.SideseahacerloenVB,elijalaopciónReferenciasenelmenúProyectoparaabrirelcuadrodediálogocorrespondiente.EnelcuadrodediálogoReferencias,elijalabibliotecadetiposdeAutoCADyhagaclicenAceptar.

Acontinuación,enelejemplodecódigo,reemplacetodaslasreferenciasaThisDrawingconunavariabledefinidaporelusuarioquehagareferenciaaldocumentoactivo.Conestepropósito,definaunavariableparalaaplicacióndeAutoCAD(acadApp)yparaeldocumentoactual(acadDoc).Acontinuación,establezcacomovariabledeaplicaciónlaaplicaciónactualdeAutoCAD.

SiseestáejecutandoAutoCAD,lafunciónGetObjectdeVBrecuperaelobjetoApplicationdeAutoCADcuandoustedespecificaelnúmerodeversióndeAutoCAD.SinoseestáejecutandoAutoCAD,ocurreunerrorque(enelejemplo)sedetectaydespuéssedespeja.Acontinuación,lafunciónCreateObjectintentacrearunobjetoApplicationdeAutoCAD.Siloconsigue,seiniciaAutoCAD;encasocontrario,semuestrauncuadrodemensaje,conunadescripcióndelerror.

DurantelaejecucióndevariassesionessimultáneasdeAutoCAD,lafunciónGetObjectdevuelvelaprimerainstanciadeAutoCADenlatabladeobjetosenejecuciónenWindows.ParaobtenermásinformaciónacercadelaverificacióndelasesióndevueltaporGetObject,consulteladocumentacióndeMicrosoftVBArelativaalatabladeobjetosenejecución(ROT)yalafunciónGetObject.

ParaqueaparezcalaventanadedibujodeAutoCADdebeestablecerenTRUElapropiedadVisibledelaaplicaciónAutoCAD.

SiGetObjectcreaunasesiónnuevadeAutoCAD(esdecir,AutoCADaúnnoestabaejecutándosecuandoseemitióGetObject),alnopoderasignarTRUEa

VisiblelaaplicaciónAutoCADseráinvisibleynisiquieraapareceráenlabarradetareasdeWindows.

Nota UtiliceProgIDsdependientesdelaversión.SiunafunciónCreateObjectoGetObjectutilizaunProgIDdependientedelaversión,cambielafunciónparaqueutiliceunProgIDdependientedelaversión.Porejemplo,siutilizaCreateObject,sustituyaCreateObject("AutoCAD.Application")porCreateObject("AutoCAD.Application.17").Además,siunmétodoGetInterfaceObjectusaunProgIDindependientedelaversión,elmétododebecambiarseparaqueutiliceunProgIDdependientedelaversión.

ConexiónconAutoCADdesdeVisualBasic6

ElsiguienteejemplodecódigoutilizalaspropiedadesClearyDescriptiondeErr.Sielentornodeprogramaciónnoadmiteestaspropiedades,deberámodificarelejemploenconsecuencia:

SubCh2_ConnectToAcad()

DimacadAppAsAcadApplication

OnErrorResumeNext

SetacadApp=GetObject(,"AutoCAD.Application.17")

IfErrThen

Err.Clear

SetacadApp=CreateObject("AutoCAD.Application.17")

IfErrThen

MsgBoxErr.Description

ExitSub

EndIf

EndIf

MsgBox"Nowrunning"+acadApp.Name+_

"version"+acadApp.Version

EndSub

Acontinuación,definalavariabledeldocumentocomoelobjetoDocumentdelaaplicacióndeAutoCAD.DichoobjetoeselquedevuelvelapropiedadActiveDocumentdelobjetoApplication.

DimacadDocasAcadDocument

SetacadDoc=acadApp.ActiveDocument

Enadelante,utilicelavariableacadDocparahacerreferenciaaldibujoactualdeAutoCAD.

EjemplodecódigocomparadoentreVBAyVB

ElsiguientecódigodelejemplomuestracómosecreaunalíneaenVBAyenVB:

CreacióndeunalíneaconVBA:

SubCh2_AddLineVBA()

'Thisexampleaddsaline

'inmodelspace

DimlineObjAsAcadLine

DimstartPoint(0To2)AsDouble

DimendPoint(0To2)AsDouble

'Definethestartandend

'pointsfortheline

startPoint(0)=1

startPoint(1)=1

startPoint(2)=0

endPoint(0)=5

endPoint(1)=5

endPoint(2)=0

'Createthelineinmodelspace

SetlineObj=ThisDrawing._

ModelSpace.AddLine_

(startPoint,endPoint)

'Zoominonthenewlycreatedline

ZoomAll

EndSub

CreacióndeunalíneaconVB:

SubCh2_AddLineVB()

OnErrorResumeNext

'ConnecttotheAutoCADapplication

DimacadAppAsAcadApplication

SetacadApp=GetObject_

(,"AutoCAD.Application.17")

IfErrThen

Err.Clear

SetacadApp=CreateObject_

("AutoCAD.Application.17")

IfErrThen

MsgBoxErr.Description

ExitSub

EndIf

EndIf

'ConnecttotheAutoCADdrawing

DimacadDocAsAcadDocument

SetacadDoc=acadApp.ActiveDocument

'Establishtheendpointsoftheline

DimlineObjAsAcadLine

DimstartPoint(0To2)AsDouble

DimendPoint(0To2)AsDouble

startPoint(0)=1

startPoint(1)=1

startPoint(2)=0

endPoint(0)=5

endPoint(1)=5

endPoint(2)=0

'CreateaLineobjectinmodelspace

SetlineObj=acadDoc.ModelSpace.AddLine_

(startPoint,endPoint)

ZoomAll

acadApp.visible=True

EndSub

¿Comentarios?

<$nopage>métodos.

ManualdeldesarrolladordeActiveXyVBA>

ControldelentornodeAutoCAD

EnestecapítulosedescribenlosconceptosbásicosnecesariosparadesarrollaraplicacionesenAutoCAD.TambiénseexplicacómocontrolarelentornodeAutoCADycómotrabajareficazmenteendichoentorno.

Apertura,guardadoycierrededibujosDefinicióndepreferenciasdeAutoCADControldelaventanadelaaplicaciónControldelasventanasdeldibujoRestablecimientodeobjetosactivosDefiniciónydevolucióndevariablesdesistemaDibujoconprecisiónSolicituddedatosdeusuarioAccesoalalíneadecomandodeAutoCADTrabajosindocumentosabiertosImportacióndeotrosformatosdearchivoExportaciónaotrosformatosdearchivo

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Apertura,guardadoycierrededibujos

LacolecciónDocumentsyelobjetoDocumentproporcionanaccesoalasfuncionesdearchivosdeAutoCAD®.

Paracrearunnuevodibujooabrirunoyaexistente,utilicelosmétodosdelacolecciónDocuments.ElmétodoAddcreaundibujonuevoyloañadealacolecciónDocuments.ElmétodoOpenabreundibujoexistente.LacoleccióndedocumentostambiéncuentaconunmétodoClosequecierratodoslosdibujosabiertosenlasesióndeAutoCAD.

Paraguardarlosdibujos,utilicecualquieradelosmétodosSaveoSaveAsOcasionalmentedesearácomprobarsieldibujoactivotienecambiossinguardar.EsconvenientehacerestoantesdesalirdelasesióndeAutoCADocomenzarunnuevodibujo.UtilicelapropiedadSavedparaasegurarsedequeeldibujoactualnocontienecambiossinguardar.

Paraimportaryexportardibujos,utilicelosmétodosImportyExportdelobjetoDocument.

Aperturadeundibujoexistente

EnesteejemploseutilizaelmétodoOpenparaabrirundibujoexistente.SeusalafunciónDirdeVBAparacomprobarsiexisteelarchivoantesdeintentarabrirlo.CambieelnombredelarchivodedibujoosurutadeaccesoparaespecificarunarchivodedibujodeAutoCADexistenteenelsistema.

SubCh3_OpenDrawing()

DimdwgNameAsString

dwgName="c:\campus.dwg"

IfDir(dwgName)<>""Then

ThisDrawing.Application.Documents.OpendwgName

Else

MsgBox"File"&dwgName&"doesnotexist."

EndIf

EndSub

Creacióndeundibujonuevo

EnesteejemploseutilizaelmétodoAddparacrearundibujobasadoenlaplantillapordefecto.

SubCh3_NewDrawing()

DimdocObjAsAcadDocument

SetdocObj=ThisDrawing.Application.Documents.Add

EndSub

Guardadodeldibujoactivo

Enesteejemploseguardaeldibujoactivoconelnombreactualyunasegundavezconotronombre.

SubCh3_SaveActiveDrawing()

'Savetheactivedrawingunderthecurrentname

ThisDrawing.Save

'Savetheactivedrawingunderanewname

ThisDrawing.SaveAs"MyDrawing.dwg"

EndSub

Comprobacióndeposiblescambiossinguardarenundibujo

Enesteejemplosecompruebasieldibujocontienecambiospendientesdeguardarysepreguntaalusuariosideseaguardarlos(silarespuestaesnegativa,omitaestospasoshastaelfinal).Silarespuestaesafirmativa,utiliceelmétodoSaveparaguardareldibujoactual,comosemuestraacontinuación:

SubCh3_TestIfSaved()

IfNot(ThisDrawing.Saved)Then

IfMsgBox("Doyouwishtosavethisdrawing?",_

vbYesNo)=vbYesThen

ThisDrawing.Save

EndIf

EndIf

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

DefinicióndepreferenciasdeAutoCAD

Haynueveobjetosrelacionadosconlasopciones,cadaunodeellosrepresentadoenunafichadelcuadrodediálogoOpciones.EstosobjetosproporcionanaccesoatodaslasopcionesalmacenadasenelregistromedianteelcuadrodediálogoOpciones.MuchosdelosparámetrosdeAutoCADpuedenadaptarseanecesidadespersonalesatravésdelaspropiedadesdeestosobjetos,quesonlossiguientes:

PreferencesDisplay

PreferencesDrafting

PreferencesFiles

PreferencesOpenSave

PreferencesOutput

PreferencesProfiles

PreferencesSelection

PreferencesSystem

PreferencesUser

PuedeaccederaestosobjetosatravésdelobjetoPreferencesParaaccederalobjetoPreferences,utilicelapropiedadPreferencedelobjetoApplication:

DimacadPrefasAcadPreferences

SetacadPref=ThisDrawing.Application.Preferences

PuedeaccederacualquieradelosobjetosPreferencesmediantelaspropiedadesDisplay,Drafting,Files,OpenSave,Output,Profile,Selection,SystemyUser.

Configuracióndelcursorencruzparapantallacompleta

SubCh2_PrefsSetCursor()

'ThisexamplesetsthecrosshairsoftheAutoCADdrawingcursor

'tofullscreen.

'AccessthePreferencesobject

DimacadPrefAsAcadPreferences

SetacadPref=ThisDrawing.Application.Preferences

'UsetheCursorSizepropertytosetthesizeofthecrosshairs

acadPref.Display.CursorSize=100

EndSub

Visualizacióndelmenúdepantallaylasbarrasdedesplazamiento

SubCh2_PrefsSetCursor()

'Thisexampleenablesthescreenmenuanddisablesthescroll

'barswiththeDisplayScreenMenuandDisplayScrollBars

'properties.

'AccessthePreferencesobject

DimacadPrefAsAcadPreferences

SetacadPref=ThisDrawing.Application.Preferences

'Displaythescreenmenuanddisablescrollbars

acadPref.Display.DisplayScreenMenu=True

acadPref.Display.DisplayScrollBars=False

EndSub

Preferenciasdebasesdedatos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>DefinicióndepreferenciasdeAutoCAD>

Preferenciasdebasesdedatos

Ademásdelosnueveobjetosdepreferencias,existeunobjetollamadoDatabasePreferencesquecontienetodaslasopcionesguardadaseneldibujo.EsteotroobjetosehaideadoparaponerlasopcionesalmacenadasenlosdibujosadisposicióndelasaplicacionesqueaccedanalosdibujosdeAutoCADsininiciaranteselprograma(aplicacionesObjectDBX).

ElobjetoDatabasePreferencesseencuentrabajolajerarquíadelobjetoDocument.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Controldelaventanadelaaplicación

Lacapacidadparacontrolarlaventanadelaaplicaciónofrecealosprogramadoreslaflexibilidadquenecesitanparacrearaplicacioneseficaceseinteligentes.Aveces,porejemplomientrasseestáprocesandocódigoenotraaplicacióncomoExcel,convieneminimizarlaventanadeAutoCAD.Además,podríasernecesarioverificarelestadodelaventanadeAutoCADantesderealizartareascomosolicitarinformaciónalusuario.

Losmétodosylaspropiedadesdelobjetodeaplicaciónpermitencambiarlaposición,eltamañoylavisibilidaddelaventanadelaaplicación.TambiénpuedeutilizarlapropiedadWindowStateparaminimizar,maximizarycomprobarelestadoactualdelaventanadelaaplicación.

Colocaciónyajustedetamañodelaventanadelaaplicación

EnesteejemploseutilizanlaspropiedadesWindowTop,WindowLeft,WidthyHeightparasituarlaventanadelaaplicaciónAutoCADenlaesquinasuperiorizquierdadelapantallayfijarsutamañoen400píxelesdeanchopor400dealto.

SubCh3_PositionApplicationWindow()

ThisDrawing.Application.WindowTop=0

ThisDrawing.Application.WindowLeft=0

ThisDrawing.Application.width=400

ThisDrawing.Application.height=400

EndSub

Paramaximizarlaventanadelaaplicación

SubCh3_MaximizeApplicationWindow()

ThisDrawing.Application.WindowState=acMax

EndSub

Paraminimizarlaventanadelaaplicación

SubCh3_PositionApplicationWindow()

ThisDrawing.Application.WindowState=acMin

EndSub

ParaconocerelestadoactualdelaventanadeAutoCAD

Esteejemploconsultaelestadodelaventanadeaplicaciónylopresentaenuncuadrodemensaje.

SubCh3_CurrentWindowState()

DimCurrWindowStateAsInteger

DimmsgAsString

CurrWindowState=ThisDrawing.Application.WindowState

msg=Choose(CurrWindowState,"normal",_

"minimized","maximized")

MsgBox"Theapplicationwindowis"+msg

EndSub

Paraocultarlaventanadelaaplicación

ElcódigosiguienteutilizalapropiedadVisibleparaocultarlaaplicaciónAutoCADalusuariofinal.

SubCh3_HideWindowState()

ThisDrawing.Application.Visible=False

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Controldelasventanasdeldibujo

ComoenlaventanadelaaplicacióndeAutoCAD,lasventanasdedocumentotambiénsepuedenminimizar,maximizar,cambiardeposiciónycomprobarsuestado.Perotambiénesposiblecambiarlapresentacióndeundibujoenunaventanamediantevistas,ventanasgráficasyajustesdezoom.

ActiveXdeAutoCADofrecevariosmodosparamostrardistintasvistasdeldibujo.Esposiblecontrolarlapresentaciónenpantalladeldibujoydesplazarserápidamenteasusdiferentesáreasaltiempoquesesupervisaelefectogeneraldeloscambios.Puedeutilizarelzoomparacambiarlaampliaciónoelencuadreyvolveracolocarlavistaeneláreagráfica,guardarunavistayrecuperarlacuandonecesitetrazarlaoconsultardetallesconcretos,obien,visualizarvariasvistasalavezdividiendolapantallaenventanasenmosaico.

ColocaciónyajustedetamañodelaventanadeldocumentoUtilizacióndezoomVistasguardadasVentanasenmosaicoActualizacióndelageometríaenlaventanadedocumento

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>

Colocaciónyajustedetamañodelaventanadeldocumento

UtiliceelobjetoDocumentparamodificarlaposiciónyeltamañodecualquierventanadedocumento.LaventanadedocumentosepuedeminimizaromaximizaratravésdelapropiedadWindowState,quetambiénpermiteconocersuestadoactual..

Colocacióndeunaventanadedocumento

EnesteejemploseutilizanlaspropiedadesWidthyHeightparadefinirlaventanadeldocumentoactivoconunaanchurayalturade400x400píxeles.

SubCh3_SizeDocumentWindow()

ThisDrawing.Width=400

ThisDrawing.Height=400

EndSub

Paramaximizarlaventanadeldocumentoactivo

SubCh3_MaximizeDocumentWindow()

ThisDrawing.WindowState=acMax

EndSub

Paraminimizarlaventanadeldocumentoactivo

SubCh3_MinimizeDocumentWindow()

ThisDrawing.WindowState=acMin

EndSub

Paraconocerelestadoactualdelaventanadeldocumentoactivo

SubCh3_CurrentWindowState()

DimCurrWindowStateAsInteger

DimmsgAsString

CurrWindowState=ThisDrawing.WindowState

msg=Choose(CurrWindowState,"normal",_

"minimized","maximized")

MsgBox"Thedocumentwindowis"+msg

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>

Utilizacióndezoom

Unavistaesunaampliación,posiciónyorientaciónespecíficadeundibujo.AutoCADponeasudisposiciónnumerosasopcionesdeZoomqueaumentanoreduceneltamañodelaimagenqueapareceeneláreagráfica.ParaobtenermásinformaciónacercadeampliarelzoomenAutoCAD,véase“Ampliacióndeunavista(hacerzoom)”enelManualdelusuario.

DefinicióndeunaventanadezoomAtribucióndeescalaaunavistaCentradodeobjetosVisualizacióndelímitesyextensionesdeldibujo

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Utilizacióndezoom>

Definicióndeunaventanadezoom

Sepuedeampliarconsumarapidezunáreaespecificandosusesquinas.Paraampliarunáreaespecificandosucontorno,utiliceunodelosmétodosZoomWindowoZoomPickWindowElprimeropermitedefinirmedianteprogramacióndospuntosquerepresentanlaventanazoom.ElmétodoZoomPickWindowrequierequeelusuariodesignedospuntos.Estosdospuntosdedesignaciónconformanlaventanadezoom.

Ampliacióndeldibujoactivoaltamañodeunaventanadefinidapordospuntos

SubCh3_ZoomWindow()

'ZoomWindow

MsgBox"PerformaZoomWindowwith:"&vbCrLf&_

"1.3,7.8,0"&vbCrLf&_

"13.7,-2.6,0",,"ZoomWindow"

Dimpoint1(0To2)AsDouble

Dimpoint2(0To2)AsDouble

point1(0)=1.3:point1(1)=7.8:point1(2)=0

point2(0)=13.7:point2(1)=-2.6:point2(2)=0

ThisDrawing.Application.ZoomWindowpoint1,point2

'ZoomPickWindow

MsgBox"PerformaZoomPickWindow",,"ZoomPickWindow"

ThisDrawing.Application.ZoomPickWindow

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Utilizacióndezoom>

Atribucióndeescalaaunavista

Cuandodeseeaumentaroreducirlaampliaciónenpantalladeunaimagenconformeaunaescaladeterminada,puedeindicarlaescaladetresformasdistintas:

Enrelaciónconloslímitesdeldibujo

Enrelaciónconlavistaactual

Enrelaciónconlasunidadesdelespaciopapel

Paraampliaroreducirunavista,utiliceelmétodoZoomScaledEstemétodoesperadosparámetrosdeentrada:laescalayeltipodeescala.Laescalaessimplementeunnúmero.LainterpretacióndeestenúmeroporpartedeAutoCADdependedeltipodeescalaelegida.

Eltipodelaescaladeterminasisuvalorsecreaconrespectoaloslímitesdeldibujo,alavistaactualoalasunidadesdelespaciopapel.Paraasignarunaescalarelativaaloslímitesdeldibujo,uselaconstanteacZoomScaledAbsolute.Paraajustarlaescaladeunavistaenrelaciónconlavistaactual,uselaconstanteacZoomScaledAbsolute.Paraasignarunaescalarelativaalasunidadesdelespaciopapel,uselaconstanteacZoomScaledRelativePSpace.

Ampliacióndeldibujoactivoaunaescalaespecífica

SubCh3_ZoomScaled()

MsgBox"PerformaZoomScaledusing:"&vbCrLf&_

"ScaleType:acZoomScaledRelative"&vbCrLf&_

"ScaleFactor:2",,"ZoomScaled"

DimscalefactorAsDouble

DimscaletypeAsInteger

scalefactor=2

scaletype=acZoomScaledRelative

ThisDrawing.Application.ZoomScaledscalefactor,scaletype

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Utilizacióndezoom>

Centradodeobjetos

AmpliacióndeldibujoactivoauncentroespecificoPuedemoverunpuntoespecíficodesudibujoparacentrarloeneláreagráfica.ElmétodoZoomCenterresultaespecialmenteútilalahoradereajustareltamañodeunobjetoysituarloenelcentrodelaventanagráfica.ZoomCenterpermiteespecificarlaescalamedianteunaampliaciónrelativaalavistaactual

Ampliacióndeldibujoactivoauncentroespecífico

ElsiguienteejemploilustraelefectodelmétodoZoomCentercuandoseaplicaparamostrarunavistaensutamañorealoaldobledesutamaño:

SubCh3_ZoomCenter()

MsgBox"PerformaZoomCenterusing:"&vbCrLf&_

"Center3,3,0"&vbCrLf&_

"Magnification:10",,"ZoomCenter"

DimCenter(0To2)AsDouble

DimmagnificationAsDouble

Center(0)=3:Center(1)=3:Center(2)=0

magnification=10

ThisDrawing.Application.ZoomCenterCenter,magnification

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Utilizacióndezoom>

Visualizacióndelímitesyextensionesdeldibujo

LosmétodosZoomAll,ZoomExtentsoZoomPreviouspermitenlapresentaciónenpantalladeunavistaenfuncióndeloscontornosodelaextensióndelosobjetosdeldibujo.

ZoomAllmuestraeldibujocompleto.Silosobjetosseextiendenmásalládeloslímites,ZoomAllmuestralaextensióndelosobjetos.Silosobjetosestándibujadosdentrodeloslímites,ZoomAllmuestraloslímites.

ZoomExtenscalculaelfactordeampliacióntomandocomoreferencialaextensióndelaventanagráficaactual,nodelavistaactual.Porlogeneral,laventanagráficaactivaestácompletamentevisible,porloqueelresultadoesobvioyprevisible.Porlogeneral,laventanagráficaactivaestácompletamentevisible,porloqueelresultadoesobvioyprevisible.Sinembargo,cuandoseutilizanlosmétodosZoomenelespaciomodelomientrassetrabajaenunaventanagráficaenelespaciopapel,siseamplíasobrepasandoloscontornosdelaventanagráficaenelespaciopapel,puedequenoseveapartedeláreaampliada.

ZoomExtentscambialavistaparaajustarlasextensionesdeentidadeneldibujoactual.Enalgunoscasos(tantoparaZoomAllcomoparaZoomExtents),estopuedeprovocarlaregeneración.Laregeneraciónnotendrálugarencapasinutilizadasodesactivadas.Sieldibujonocontieneobjetos,ZoomExtentsmuestraloslímitesdeldibujo.

Enlasvistas3D,ZoomAllyZoomExtentstienenelmismoresultado.Laslíneasauxiliaresinfinitas(líneasx)ylosrayosnoinfluyenenningunadelasopciones.

ZoomPreviousamplíalaventanagráficahastalaextensiónanterior.

Paraobtenermásinformaciónacercadelfuncionamientodelzoom,véase“Ampliacióndeunavista(hacerzoom)”enelManualdelusuario.

Ampliacióndeldibujoactivoatodoelcontenidoyalaextensióndeldibujo

SubCh3_ZoomAll()

'ZoomAll

MsgBox"PerformaZoomAll",,"ZoomAll"

ThisDrawing.Application.ZoomAll

'ZoomExtents

MsgBox"PerformaZoomExtents",,"ZoomExtents"

ThisDrawing.Application.ZoomExtents

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>

Vistasguardadas

Esposibleasignarunnombreyguardarcadavistaquedeseevolverautilizar.Cuandoyanolanecesite,puedesuprimirla.

Sideseacrearunavistanueva,utiliceelmétodoAddparaañadirunanuevavistaalacolecciónViewsAlguardareldibujo,seguardatambiénlaposiciónylaescaladelavista.

Elnombredelavistaseleasignaalcrearla.Puedeconstardeuntotalde255caracteresycontenerletras,dígitosyloscaracteresespecialesdólar($),guión(-)ysubrayado(_).

Parasuprimirunavistaguardada,utiliceelmétodoDelete.ElmétodoDeletedelobjetoViewseencuentraendichoobjeto,noenelsuperior.

Adicióndeunobjetodevista

Enelejemplosiguienteseañadeunobjetodevista(viewObj).

SubCh3_AddView()

'Addanamedviewtotheviewscollection

DimviewObjAsAcadView

SetviewObj=ThisDrawing.Views.Add("View1")

EndSub

Supresióndeunobjetodevista

Enelejemplosiguienteseborraunobjetodevista(objetoviewObj).

SubCh3_DeleteView()

DimviewObjAsAcadView

SetviewObj=ThisDrawing.Views("View1")

'Deletetheview

viewObj.Delete

EndSub

Eliminacióndeunavistadelacoleccióndevistas

EnesteejemploseborraunavistaguardadadelacolecciónViews.

SubCh3_DeleteViewFromCollection()

ThisDrawing.Views("View1").Delete

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>

Ventanasenmosaico

AutoCADsueleiniciarcadanuevodibujoenunasolaventanagráficaqueocupatodaeláreagráfica.Silodesea,puededividireláreadedibujoparamostrarvariasventanasdeformasimultánea.Porejemplo,simantienevisiblestantolasvistascompletascomolasdetalladas,resultarámásfácilapreciarlosefectosdeloscambiossutilesintroducidosentodoeldibujo.Lasventanasenmosaicoofrecenlassiguientesposibilidades:

ampliar,reducir,activarlosmodosForzcursor,RejillayelmododeiconoSCP,asícomorestituirvistasguardadaenventanasgráficasindividuales

dibujarenunaventanagráficaydesplazarseaotradurantelaejecucióndeuncomando

asignarnombreaunadisposicióndeventanasdeterminadaparapoderlautilizarenelfuturo.

Esposiblemostrarventanasenmosaicoenvariasdisposiciones.Laformademostrarlasventanasdependeengranmedidadelnúmeroydeltamañodelasvistasquedeseeutilizar.

Paraobtenermásinformacióneilustracionesdelasventanasgráficas,véase“Definicióndelasventanasgráficasdelespaciomodelo”enelManualdelusuario.

DivisióndelaventanagráficaactivaActivacióndeunaventanaenmosaico

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Ventanasenmosaico>

Divisióndelaventanagráficaactiva

LaventanagráficaactivasedivideconelmétodoSplitEstemétodoutilizaunparámetro,eltipodeconfiguración,paraestablecercómosedeseadividirlaventanagráfica.Paraespecificarlaconfiguracióndelaventana,utiliceunadelassiguientesconstantesquecorrespondenalasconfiguracionespordefectoanteriormentemostradas:acViewport2Horizontal,acViewport2Vertical,acViewport3Left,acViewport3Right,acViewport3Horizontal,acViewport3Vertical,acViewport3Above,acViewport3Below,oacViewport4.

Paraobtenermásinformaciónacercadelamodificacióndelaconfiguracióndelasventanasgráficas,véase“Definicióndelasventanasgráficasdelespaciomodelo”enelManualdelusuario.

Divisióndeunaventanagráficaendosventanashorizontales

Enelejemplosiguientesecreaunaventanagráficanuevaque,acontinuación,sedivideendosventanashorizontales.

SubCh3_SplitAViewport()

'Createanewviewport

DimvportObjAsAcadViewport

SetvportObj=ThisDrawing.Viewports.Add("TEST_VIEWPORT")

'SplitvportObjinto2horizontalwindows

vportObj.SplitacViewport2Horizontal

'NowsetvportObjtobetheactiveviewport

ThisDrawing.ActiveViewport=vportObj

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Ventanasenmosaico>

Activacióndeunaventanaenmosaico

Enlaventanagráficaactivaseintroducenpuntosyseseleccionanobjetos.Paraconvertirunaventanagráficaenlaventanaactual,utilicelapropiedadActiveViewport

Puederepetirlaoperaciónenlasventanasgráficasexistenteshastaencontrarlaquebusca.Paraello,primerodebeidentificarelnombredeladisposicióndeventanasalaquepertenecelaventanaquedeseautilizar,mediantelapropiedadName.Porotraparte,sisetratadeunadisposicióndeventanasdividida,lasventanasindividualespuedenidentificarsemediantelaspropiedadesLowerLeftCorneryUpperRightCorner

LaspropiedadesLowerLeftCorneryUpperRightCornerrepresentanlaubicacióngráficadelaventanaenlapantalla.Estaspropiedadessedefinensegúnseindicaacontinuación(conunadivisióndecuatroventanasamododeejemplo):

Equivalenciasdelejemplo:

Ventana1-LowerLeftCorner=(0,.5),UpperRightCorner=(.5,1)

Ventana2-LowerLeftCorner=(.5,.5),UpperRightCorner=(1,1)

Ventana3-LowerLeftCorner=(.5,0),UpperRightCorner=(1,.5)

Ventana4-LowerLeftCorner=(.5,0),UpperRightCorner=(1,.5)

Divisióndeunaventanagráficaeiteraciónentodaslasventanas

Enesteejemplosedivideunaventanagráficaencuatroventanas.Acontinuaciónseefectúaniteracionesentodaslasventanasgráficasdeldibujoysepresentaelnombredelaventanaylasesquinasinferiorizquierdaysuperiorderechadecadauna.

SubCh3_IteratingViewportWindows()

'Createanewviewportandmakeitactive

DimvportObjAsAcadViewport

SetvportObj=ThisDrawing.Viewports.Add("TEST_VIEWPORT")

ThisDrawing.ActiveViewport=vportObj

'Splitvportinto4windows

vportObj.SplitacViewport4

'Iteratethroughtheviewports,

'highlightingeachviewportanddisplaying

'theupperrightandlowerleftcorners

'foreach.

DimvportAsAcadViewport

DimLLCornerAsVariant

DimURCornerAsVariant

ForEachvportInThisDrawing.Viewports

ThisDrawing.ActiveViewport=vport

LLCorner=vport.LowerLeftCorner

URCorner=vport.UpperRightCorner

MsgBox"Viewport:"&vport.Name&"isnowactive."&_

vbCrLf&"Lowerleftcorner:"&_

LLCorner(0)&","&LLCorner(1)&vbCrLf&_

"Esquinasuperiorderecha:"&_

URCorner(0)&","&URCorner(1)

Nextvport

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>

Actualizacióndelageometríaenlaventanadedocumento

MuchasdelasaccionesquellevaacaboatravésdeAutoCADActiveXAutomationmodificanloquesemuestraeneldibujoAutoCAD.Notodasestasaccionesactualizaninmediatamentelavisualizacióndeldibujo.Deestaformaesposibleefectuarvarioscambioseneldibujosintenerqueesperaraqueseactualicelapantalladespuésdecadaacción.Ensulugar,puedeefectuarvarioscambiosconsecutivosy,cuandotermine,realizarunasolallamadaparaactualizarlapantalla.

LosmétodosqueactualizanlapantallasonUpdateyRegen.

ElmétodoUpdateactualizalapresentaciónenpantalladeunsoloobjeto.ElmétodoRegenactualizatodoeldibujoyvuelveacalcularlascoordenadasdepantalladetodoslosobjetos.Tambiénregeneraelíndicedelabasededatosdedibujoparamejorarlavisualizaciónyladesignacióndeobjetos.

Actualizacióndelapresentaciónenpantalladeunsoloobjeto

Esteejemplocreauncírculo.Acontinuación,actualizaelcírculoconelmétodoUpdateparaqueseavisibleenAutoCAD.

SubCh3_UpdateDisplay()

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=1:center(1)=1:center(2)=0

radius=1

'Createthecircle

SetcircleObj=ThisDrawing.ModelSpace.AddCircle(center,radius)

'Updatethecircle

circleObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Restablecimientodeobjetosactivos

Loscambiosqueserealizanenlamayoríadelosobjetosactivos,comolacapaactivaoeltipodelíneaactivo,sevenenpantalladeinmediato.Sinembargo,hayalgunosobjetosactivosquesedebenrestablecerparareflejarloscambiosrealizadosenellos.Setratadelosobjetoscorrespondientesalestilodetextoactivo,alsistemadecoordenadaspersonales(SCP)activoyalaventanagráficaactiva.Siserealizancambiosenalgunodeestosobjetos,esprecisorestablecerelobjetoencuestiónyllamaralmétodoRegenparaqueloscambiosseanvisibles.

Pararestablecerlosobjetos,sóloesnecesariodefinirlapropiedadActiveTextStyle,ActiveUCSoActiveViewportutilizandoelobjetoactualizado.

Restablecimientodelaventanagráficaactiva

Enelejemplosiguientesecambialapresentacióndelarejillaenlaventanagráficaactivaydespuésserestablececomoventanagráficaactivaparamostrarelcambio.

SubCh3_ResetActiveViewport()

'Togglethesettingofthegriddisplay

'fortheactiveviewport

ThisDrawing.ActiveViewport.GridOn=_

Not(ThisDrawing.ActiveViewport.GridOn)

'Resettheactiveviewport

ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Definiciónydevolucióndevariablesdesistema

ElobjetoDocumentproporcionalosmétodosSetVariableyGetVariableparalaconfiguraciónyrecuperacióndevariablesdesistemadeAutoCAD.Porejemplo,paraasignarunenteroalavariabledesistemaMAXSORT,utiliceelsiguientecódigo:

ThisDrawing.SetVariable"MAXSORT",100

¿Comentarios?

<$nopage>métodos.

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Dibujoconprecisión

ConAutoCADpuedecrearsusdibujosconunageometríaprecisasinrealizarlargoscálculos.Amenudosepuedenindicarpuntosconcretossinconocerlascoordenadas.Tambiénsepuedenrealizarcálculossobreeldibujoypresentarenpantallavariostiposdeinformacióndeestadosinsalirdelapantalladedibujo.

Enlaactualidad,ActiveXAutomationdeAutoCADnodisponedemétodospararealizarlassiguientesfuncionesdeAutoCAD:

Definicióndereferenciasaobjetos

Especificacióndeintervalosgraduadosenobjetosodivisióndeobjetosensegmentos.AlineacióndelaresoluciónylarejillaUtilizacióndelmodoOrtoTrazadodelíneasauxiliaresCálculodepuntosyvaloresCálculodeáreas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>

Alineacióndelaresoluciónylarejilla

PuedeutilizarlarejillacomoguíavisualyactivarelmodoForzcursorparalimitarelmovimientodelcursor.Ademásdedeterminarelintervalo,puedeajustarlaalineacióndelarejillaylamalla.Puedegirarlaalineaciónobiendefinirlaparasuutilizacióncondibujosisométricos

Siesnecesariodibujarconunaalineaciónespecíficaoenunciertoángulo,sepuederotarelángulodelamalla.Elpuntocentralderotacióndelángulodelamallaeselpuntobasedelamalla.Sinecesitaalinearunpatróndesombreado,puedecambiarestepunto,quehabitualmentesedefinecomo0,0.

Pararotarelángulodelamalla,utilicelapropiedadSnapRotationAngleSinecesitacambiarelpuntobasederotacióndelángulodelamalla,utilicelapropiedadSnapBasePoint

Nota AmbaspropiedadesrequierenunallamadaalmétodoUpdateparaactualizarlapantalladeAutoCAD.

Paraobtenermásinformaciónacercadelusoyestablecimientodemallasyrejillas,véase“Ajustedelarejillaylareferenciarejilla”enelManualdelusuario.

Modificacióndelpuntobasedelamalladeresoluciónydelánguloderotación

Enesteejemplosecambiaelpuntobasedelamalladeresolucióna(1,1)yelánguloderotacióndelamallaa30grados.Larejillaseactivaparaqueloscambiosseanvisibles.

SubCh3_ChangeSnapBasePoint()

'Turnonthegridfortheactiveviewport

ThisDrawing.ActiveViewport.GridOn=True

'Changethesnapbasepointto1,1

DimnewBasePoint(0To1)AsDouble

newBasePoint(0)=1:newBasePoint(1)=1

ThisDrawing.ActiveViewport.SnapBasePoint=newBasePoint

'Changethesnaprotationangleto30degrees(0.575radians)

DimrotationAngleAsDouble

rotationAngle=0.575

ThisDrawing.ActiveViewport.SnapRotationAngle=rotationAngle

'resettheviewport

ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>

UtilizacióndelmodoOrto

Cuandodibujalíneasomueveobjetos,puedeutilizarelmodoOrtopararestringirelcursoralejehorizontalovertical.LaalineaciónortogonaldependedelángulodeforzadodelcursorodelSCP.ElmodoOrthofuncionaconactividadesquerequierenqueseespecifiqueunsegundopunto.NosólosepuedeutilizarelmodoOrthoparaestablecerlaalineaciónverticaluhorizontal,sinotambiénparaasegurarelparalelismooparacreardesfasesregulares.

AlpermitiraAutoCADimponerlimitacionesortogonales,seconsiguedibujarconmayorrapidez.Porejemplo,puedecrearunaseriedelíneasperpendicularessiactivaelmodoOrtoantesdeempezaradibujar.Dadoquelaslíneasselimitaránalosplanoshorizontalyvertical,sepuedendibujarmásrápidoconlaseguridaddequeseránperfectamenteperpendiculares.

Amedidaquedesplazaelcursor,unalíneaelásticaquedeterminaeldesplazamientoveráforzadasutrayectoriaalejehorizontaloalvertical,dependiendodecuálestémáspróximoalcursor.ElmodoOrtonotienevalidezenlasvistasenperspectivaenAutoCAD,cuandoseintroducencoordenadasenlalíneadecomandoocuandoseespecificaunareferenciaaunobjeto.

ParaactivarodesactivarelmodoOrto,utilicelapropiedadOrthoOnEstapropiedadnecesitaunaentradaBooleana.DefínalacomoTRUEparaactivarelmodoOrtoycomoFALSEparadesactivarlo.Porejemplo,lasiguienteinstrucciónactivaelmodoOrtoenlaventanagráficaactiva:

ThisDrawing.ActiveViewport.OrthoOn=True

¿Comentarios?

<$nopage>métodos.

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>

Trazadodelíneasauxiliares

Puedecrearlíneasauxiliaresqueseprolonguenhastaelinfinitoenunaoambasdirecciones:laslíneasauxiliaresqueseextiendenenunadirecciónseconocencomorayos.LaslíneasauxiliaresqueseextiendenenambasdireccionesseconocentambiéncomolíneasX.Estaslíneasauxiliarespuedenutilizarsecomoreferenciaparacrearotrosobjetos.Porejemplo,puedeutilizarlíneasauxiliaresparaencontrarelcentrodeuntriángulo,prepararvistasmúltiplesdelmismoelemento,ocrearinterseccionestemporalesquepuedenutilizarseparalasreferenciasaobjetos.

CreacióndelíneasauxiliaresConsultadelíneasauxiliaresCreaciónderayosConsultaderayos

¿Comentarios?

<$nopage>métodos.

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Trazadodelíneasauxiliares>

Creacióndelíneasauxiliares

Lalíneasauxiliaressepuedencolocarencualquierlugardelespacio3Dyseextiendenhastaelinfinitoenambasdirecciones.Paracrearunalíneaauxiliar,utiliceelmétodoAddXLineConestemétodoseutilizalatécnicadedospuntosparaprecisarlalínea:elusuariointroduceodesignadospuntosparadefinirlaorientación.Elprimerpunto,elpuntoraíz,seconsiderarácomoelpuntomediodelalíneaauxiliar.

Adicióndeunalíneaauxiliar

ElsiguientecódigodelejemplocreaunobjetoXLinemediantelosdospuntos(5,0,0)y(1,1,0).

SubCh3_AddXLine()

DimxlineObjAsAcadXline

DimbasePoint(0To2)AsDouble

DimdirectionVec(0To2)AsDouble

'Definethexline

basePoint(0)=2#:basePoint(1)=2#:basePoint(2)=0#

directionVec(0)=1#:directionVec(1)=1#:directionVec(2)=0#

'Createthexlineinmodelspace

SetxlineObj=ThisDrawing.ModelSpace.AddXLine_

(basePoint,directionVec)

ThisDrawing.Application.ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Trazadodelíneasauxiliares>

Consultadelíneasauxiliares

Unavezcreadaunalíneaauxiliar,puedeutilizarlapropiedadBasePointparaconsultarsuprimerpunto.Elsegundopuntoutilizadoenlacreacióndelalíneaauxiliarnosealmacenaconelobjeto.Ensulugar,utilicelapropiedadDirectionVectorparaobtenerelvectordedireccióndelalíneaauxiliar.

Consultadeunalíneaauxiliar

EnesteejemplosebuscanelpuntodebaseyelvectordedireccióndelalíneaauxiliarcreadaenAdicióndeunalíneaauxiliar

DimBPointAsVariant

DimVectorAsVariant

BPoint=xlineObj.basePoint

Vector=xlineObj.DirectionVector

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Trazadodelíneasauxiliares>

Creaciónderayos

Unrayoesunalíneaenespacio3Dquecomienzaenunpuntodadoyseextiendehastaelinfinito.AdiferenciadelaslíneasauxiliaresX,queseextiendenendosdirecciones,losrayossóloseextiendenenunadirección.Enconsecuencia,losrayosayudanareducirlaconfusiónvisualqueseproducecuandohaymuchaslíneasauxiliares.

Aligualqueocurreconlaslíneasauxiliares,loscomandosquemuestranlaextensióndeldibujonotienenencuentalosrayos.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Trazadodelíneasauxiliares>

Consultaderayos

Unavezcreadoelrayo,puedeutilizarlapropiedadBasePointparaconsultarsuprimerpunto.Elsegundopuntoutilizadoenlacreacióndelrayonosealmacenaconelobjeto.Ensulugar,utilicelapropiedadDirectionVectorparaobtenerelvectordedireccióndelrayo.

Adición,consultayedicióndeunobjetoRay

ElcódigodelejemplosiguientecreaunobjetoRayutilizandolospuntos(5,0,0)y(1,1,0).Acontinuación,consultaelpuntobaseyelvectordedirecciónactivosypresentalosresultadosenuncuadrodemensajes.Porúltimo,cambiaelvectordedirecciónyconsultaymuestraenpantallaelnuevovectoryelpuntodebase.

SubCh3_EditRay()

DimrayObjAsAcadRay

DimbasePoint(0To2)AsDouble

DimsecondPoint(0To2)AsDouble

'Definetheray

basePoint(0)=3#:basePoint(1)=3#:basePoint(2)=0#

secondPoint(0)=4#:secondPoint(1)=4#:secondPoint(2)=0#

'CreatesaRayobjectinmodelspace

SetrayObj=ThisDrawing.ModelSpace.AddRay_

(basePoint,secondPoint)

ThisDrawing.Application.ZoomAll

'FindthecurrentstatusoftheRay

MsgBox"Thebasepointoftherayis:"&_

rayObj.basePoint(0)&","&_

rayObj.basePoint(1)&","&_

rayObj.basePoint(2)&vbCrLf&_

"Thedirectionalvectorfortherayis:"&_

rayObj.DirectionVector(0)&","&_

rayObj.DirectionVector(1)&","&_

rayObj.DirectionVector(2),,"EditRay"

'Changethedirectionalvectorfortheray

DimnewVector(0To2)AsDouble

newVector(0)=-1

newVector(1)=1

newVector(2)=0

rayObj.DirectionVector=newVector

ThisDrawing.RegenFalse

MsgBox"Thebasepointoftherayis:"&_

rayObj.basePoint(0)&","&_

rayObj.basePoint(1)&","&_

rayObj.basePoint(2)&vbCrLf&_

"Thedirectionalvectorfortherayis:"&_

rayObj.DirectionVector(0)&","&_

rayObj.DirectionVector(1)&","&_

rayObj.DirectionVector(2),,"EditRay"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>

Cálculodepuntosyvalores

LosmétodosqueproporcionaelobjetoUtilitypermitenresolverrápidamenteunproblemamatemáticoolocalizarpuntoseneldibujo.ConlosmétodosdelobjetoUtilitypuederealizarlosiguiente:

calcularelánguloqueformaunalíneaconelejeX,medianteelmétodoAngleFromXAxis

convertirunánguloenformadecadenaenunvalorreal(doble),medianteelmétodoAngleToReal

convertirunánguloenformadevalorreal(doble)enunacadena,medianteelmétodoAngleToString

convertirunadistanciaenformadecadenaenunvalorreal(doble),medianteelmétodoDistanceToReal

crearunvariantequecontieneunamatrizdeenteros,númerosflotantes,dobles,etc.conelmétodoCreateTypedArray

calcularelpuntosituadoenunánguloyaunadistanciaconcretosdeunpuntodeterminado,conelmétodoPolarPoint

convertirunpuntodeunsistemadecoordenadasaotro,medianteelmétodoTranslateCoordinates

calcularladistanciaentredospuntosespecificadosporelusuario,conelmétodoGetDistance

CálculodeladistanciaentredospuntosconelmétodoGetDistance

EnesteejemploseutilizaelmétodoGetDistanceparaobtenerlascoordenadasdelpuntoylafunciónMsgBoxparamostrarladistanciacalculada.

SubCh3_GetDistanceBetweenTwoPoints()

DimreturnDistAsDouble

'Returnthevalueenteredbyuser.Apromptisprovided.

returnDist=ThisDrawing.Utility.GetDistance_

(,"Picktwopoints.")

MsgBox"Thedistancebetweenthetwopointsis:"&returnDist

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>

Cálculodeáreas

CálculodeláreadefinidaporlospuntosintroducidosporelusuarioPuedeconocereláreadeunarco,círculo,elipse,polilíneaoptimizada,polilínea,regiónocurvassplineplanas-cerradasmediantelapropiedadÁrea.

Sinecesitacalculareláreacombinadademásdeunobjeto,puedemanteneruntotalcuandoañadeousaelmétodoBooleanenunaseriederegionesparaobtenerunasolaregiónquerepresenteeláreadeseada.DesdeestaúnicaregiónpuedeutilizarlapropiedadAreaparaobtenersuárea.

Eláreadelcálculovaríaenfuncióndeltipodeobjetodesignado.Paraobtenerinformaciónacercadecómosecalculaeláreadecadatipodeobjeto,véase“Obtencióndeinformacióndeárea”enelManualdelusuario.

Cálculodeunáreadefinida

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Cálculodeáreas>

Cálculodeunáreadefinida

CálculodeláreadefinidaporlospuntosintroducidosporelusuarioObtieneeláreaespecificadaporlospuntosintroducidosporelusuario.Puedemedirunaregióncerradaarbitrariadelimitadaporlospuntos2Do3Despecificadosporelusuario.Lospuntosdebensercoplanares.

Paraobtenereláreadesignadaporpuntosdelusuario

1. UtiliceelmétodoGetPointenunbucleparaobtenerlospuntosdelusuario.

2. Creeunapolilíneaoptimizadaapartirdelospuntosfacilitadosporelusuario.UtiliceelmétodoAddLightweightPolylineparacrearlapolilínea.

3. UtilicelapropiedadAreaparaobtenereláreadelapolilíneareciéncreada.

4. BorrelapolilíneaconelmétodoErase.

Cálculodeláreadefinidaporlospuntosintroducidosporelusuario

Enesteejemplo,sepidealusuarioquedesignecincopuntos.Despuéssecreaunapolilíneaapartirdelospuntos.Lapolilíneaescerradaysuáreasemuestraenuncuadrodemensaje.

SubCh3_CalculateDefinedArea()

Dimp1AsVariant

Dimp2AsVariant

Dimp3AsVariant

Dimp4AsVariant

Dimp5AsVariant

'Getthepointsfromtheuser

p1=ThisDrawing.Utility.GetPoint(,vbCrLf&"Firstpoint:")

p2=ThisDrawing.Utility.GetPoint(p1,vbCrLf&"Secondpoint:")

p3=ThisDrawing.Utility.GetPoint(p2,vbCrLf&"Thirdpoint:")

p4=ThisDrawing.Utility.GetPoint(p3,vbCrLf&"Fourthpoint:")

p5=ThisDrawing.Utility.GetPoint(p4,vbCrLf&"Fifthpoint:")

'Createthe2Dpolylinefromthepoints

DimpolyObjAsAcadLWPolyline

Dimvertices(0To9)AsDouble

vertices(0)=p1(0):vertices(1)=p1(1)

vertices(2)=p2(0):vertices(3)=p2(1)

vertices(4)=p3(0):vertices(5)=p3(1)

vertices(6)=p4(0):vertices(7)=p4(1)

vertices(8)=p5(0):vertices(9)=p5(1)

SetpolyObj=ThisDrawing.ModelSpace.AddLightWeightPolyline_

(vertices)

polyObj.Closed=True

ThisDrawing.Application.ZoomAll

'Displaytheareaforthepolyline

MsgBox"Theareadefinedbythepointsis"&_

polyObj.Area,,"CalculateDefinedArea"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Solicituddedatosdeusuario

ElobjetoUtility,unsubordinadodelobjetoDocument,definelosmétodosdeentradadeinformaciónporpartedelusuario.DichosmétodospresentanunasolicitudenlalíneadecomandodeAutoCADypidenentradasdediversostipos.Estetipodeentradadelusuarioesmuyútilparalaintroduccióninteractivadecoordenadasdepantalla,seleccióndeentidadesyvaloresdecadenacortaonuméricos.Siunaaplicaciónrequierelaintroduccióndevariosvaloresuopciones,puedesermásprácticoproporcionaruncuadrodediálogoquepresentarsolicitudesindividuales.

CadamétodopresentaunasolicitudenlalíneadecomandodeAutoCADydacomoresultadounvalorespecíficodeltipodeentradasolicitada.Porejemplo,GetStringdevuelveunacadena,GetPointdevuelveunavariante(quecontieneunamatrizdedoblesdetreselementos)yGetIntegerdevuelveunvalorentero.TambiénpuedecontrolarlaentradadelusuarioconelmétodoInitializeUserInputPorejemplo,estemétodopermitecontrolarlaentradaNULL(pulsandolateclaINTRO),laintroduccióndeceroonúmerosnegativosyladevaloresdetextoarbitrarios.

Sideseaquelasolicitudsemuestreenunalíneaaparte,incluyalaconstantederetornodecarro/saltodelínea(vbCrLf)alprincipiodelacadenadelasolicitud.

MétodoGetStringMétodoGetPointMétodoGetKeywordControldeentradasdelusuario

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Solicituddedatosdeusuario>

MétodoGetString

ElmétodoGetStringpidealusuariolaintroduccióndeunacadenaenlasolicituddecomandodeAutoCAD.Estemétodoadmitedosparámetros.Elprimerparámetrocontrolalainsercióndeespaciosenlacadenadeentrada.Siseestableceen0,losespaciosnosepermiten(BARRAESPACIADORAterminalaentrada);siseledaelvalor1,lacadenapuedecontenerespacios(debepulsarseINTROparaterminarlaentrada).Elsegundoparámetroeslacadenadelasolicitud.

ObtencióndelvalordeunacadenadelusuarioenlalíneadecomandodeAutoCAD

EnelejemplosiguientesemuestralasolicitudEnterYourNameyseindicaalusuarioquepulseENTERparaterminarlaentrada(lacadenadeentradaadmitelainclusióndeespacios).ElvalordelacadenaseguardaenlavariableretValysemuestraenuncuadrodemensaje.

SubCh3_GetStringFromUser()

DimretValAsString

retVal=ThisDrawing.Utility.GetString_

(1,vbCrLf&"Enteryourname:")

MsgBox"ThenameenteredWad:"&retal

EndSub

ElmétodoGetStringnorespetaunallamadaanterioralmétodoInitializeUserInput

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Solicituddedatosdeusuario>

MétodoGetPoint

ElmétodoGetStringsolititaalusuarioquedesigneunpuntoenlasolicituddecomandodeAutoCAD.Estemétodoadmitedosparámetros,unpuntoFromopcionalylacadenadesolicitud.SiseproporcionaelpuntoFrom,AutoCADtrazaunalíneaelásticadesdedichopunto.Paracontrolarlaentradadelusuario,puedeanteponerseaestemétodounallamadaalmétodoInitializeUserInput

Obtencióndeunpuntoelegidoporelusuario

Enelejemplosiguientesesolicitaalusuariolaseleccióndedospuntos,inicialyfinal,paradibujarunalíneaentreellos.

SubCh3_GetPointsFromUser()

DimstartPntAsVariant

DimendPntAsVariant

Dimprompt1AsString

Dimprompt2AsString

prompt1=vbCrLf&"Enterthestartpointoftheline:"

prompt2=vbCrLf&"Entertheendpointoftheline:"

'Getthefirstpointwithoutenteringabasepoint

startPnt=ThisDrawing.Utility.GetPoint(,prompt1)

'Usethepointenteredaboveasthebasepoint

endPnt=ThisDrawing.Utility.GetPoint(startPnt,prompt2)

'Createalineusingthetwopointsentered

ThisDrawing.ModelSpace.AddLinestartPnt,endPnt

ThisDrawing.Application.ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Solicituddedatosdeusuario>

MétodoGetKeyword

ElmétodoGetKeywordpidealusuariolaintroduccióndeunapalabraclaveenlasolicituddecomandodeAutoCAD.Estemétodoadmitesólounparámetro:lacadenadelasolicitud.LaspalabrasclaveylosparámetrosdeentradasedefinenconunallamadaalmétodoInitializeUserInput

ObtencióndeunapalabraclaveintroducidaporelusuarioenlalíneadecomandodeAutoCAD

Enelejemplosiguienteseinstaalusuarioaescribirunapalabraclave,estableciendoelprimerparámetrodeInitializeUserInputen1,loquedesactivalaentradaNULL(alpulsarINTRO).Elsegundoparámetroestablecelalistadepalabrasclaveválidas.

SubCh3_KeyWord()

DimkeyWordAsString

ThisDrawing.Utility.InitializeUserInput1,"LineCircleArc"

keyWord=ThisDrawing.Utility.GetKeyword_

(vbCrLf&"Enteranoption(Line/Circle/Arc):")

MsgBoxkeyWord,,"GetKeywordExample"

EndSub

UnasolicituddepalabraclavemássencillaparalosusuariosproporcionaunvalorpordefectocuandoelusuariopulseINTRO(entradaNULL).Observelaspequeñasmodificacionesrealizadasenelsiguienteejemplo:

SubCh3_KeyWord2()

DimkeyWordAsString

ThisDrawing.Utility.InitializeUserInput0,"LineCircleArc"

keyWord=ThisDrawing.Utility.GetKeyword_

(vbCrLf&"Enteranoption(Line/Circle/<Arc>):")

IfkeyWord=""ThenkeyWord="Arc"

MsgBoxkeyWord,,"GetKeywordExample"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Solicituddedatosdeusuario>

Controldeentradasdelusuario

PuedeutilizarelmétodoInitializeUserInputparadefinirpalabrasclaveorestringireltipodeentradasenelmétododeintroduccióndeinformaciónporpartedelusuario.ElusoylosvaloresdelosparámetrossonsimilaresalafuncióndeAutoLISPinitget.InitializeUserInputpuedeutilizarseconlossiguientesmétodos:GetAngle,GetCorner,GetDistance,GetInteger,GetKeyword,GetOrientation,GetPoint,yGetReal.InitializeUserInputnopuedeutilizarseconelmétodoGetString.UtiliceelmétodoGetInputpararecuperarelvalordecadena(palabraclaveoentradaalazar)cuandoelmétododeentradasdelusuarionodevuelvaunvalordecadena.

ElmétodoInitializeUserInputadmitedosparámetros.Elprimerparámetroesunvalorentero,expresadoenbits,quedeterminalasopcionesdeentradadelmétododeintroduccióndeinformaciónporpartedelusuario.Elsegundoparámetroesunacadenaquedefinelaspalabrasclaveválidas.

ObtencióndeunvalorenteroodeunapalabraclaveenlalíneadecomandodeAutoCAD

Enelejemplosiguientesesolicitaalusuarioladesignacióndeunvalorenteropositivoounapalabraclave:

SubCh3_UserInput()

'ThefirstparameterofInitializeUserInput(6)

'restrictsinputtopositiveandnon-negative

'values.Thesecondparameteristhelistof

'validkeywords.

ThisDrawing.Utility.InitializeUserInput6,"BigSmallRegular"

'Setthepromptstringvariable

DimpromptStrAsString

promptStr=vbCrLf&"Enterthesizeor(Big/Small/<Regular>):"

'AttheGetIntegerprompt,enteringakeywordorpressing

'ENTERwithoutenteringavalueresultsinanerror.Toallow

'yourapplicationtocontinueandcheckfortheerror

'description,youmustsettheerrorhandlertoresumeonerror.

OnErrorResumeNext

'Getthevalueenteredbytheuser

DimreturnIntegerAsInteger

returnInteger=ThisDrawing.Utility.GetInteger(promptStr)

'Checkforanerror.Iftheerrornumbermatchesthe

'oneshownbelow,thenuseGetInputtogetthereturned

'string;otherwise,usethevalueofreturnInteger.

IfErr.Number=-2145320928Then

DimreturnStringAsString

Debug.PrintErr.Description

returnString=ThisDrawing.Utility.GetInput()

IfreturnString=""Then'ENTERreturnsnullstring

returnString="Regular"'Settodefault

EndIf

Err.Clear

Else'Otherwise,

returnString=returnInteger'Usethevalueentered

EndIf

'Displaytheresult

MsgBoxreturnString,,"InitializeUserInputExample"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

AccesoalalíneadecomandodeAutoCAD

ElmétodoSendCommandpermiteenviarcomandosdirectamentealalíneadecomandodeAutoCAD.Estemétodoenvíaunacadenasimplealalíneadecomando.Esnecesarioquelosargumentosdelcomandoenlacadenaesténenelordenqueesperalasecuenciadesolicituddelcomandoejecutado.UnespacioenblancooelequivalenteASCIIdeunretornodecarroenlacadenaequivaleapulsarlateclaINTRO.AdiferenciadelentornoAutoLISP,aquínosepuedellamaralmétodoSendCommandsinargumentos.

EnvíodeuncomandoalalíneadecomandodeAutoCAD

Enelejemplosiguientesecreauncírculoderadio4concentroen(2,2,0).Despuésseaplicaelzoomatodalageometríadeldibujo.ObserveelespacioalfinaldelacadenaquerepresentaelINTROfinalparainiciarlaejecucióndelcomando.

SubCh3_SendACommandToAutoCAD()

ThisDrawing.SendCommand"_Circle2,2,04"

ThisDrawing.SendCommand"_zooma"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Trabajosindocumentosabiertos

AutoCADsiemprearrancaconundocumentonuevoounoexistenteabiertos.Durantelasesión,noobstante,sepuedencerrartodoslosdocumentos.

SicierratodoslosdocumentosenlainterfazdelusuariodeAutoCADobservaráalgunoscambiosenlaventanadelaaplicación.LosmenúsdisponiblesquedanreducidosaArchivo,Ver,VentanayAyuda.Lasopcionesdeestosmenústambiénvenreducidosunúmero.Asimismo,lalíneadecomandodesaparece.

Deformasimilar,cuandonohaydocumentosabiertoslainterfazdeActiveXsólopermitelasaccionessiguientes:

abrirundocumento.

crearundocumento.

importarundocumento.

salirdeAutoCAD.

TodasestasaccionesseencuentrandisponiblesenlacolecciónDocuments.LosmétodosylaspropiedadesdelacolecciónDocuments,juntoconunconjuntolimitadodemétodosypropiedadesdelobjetoApplication,constituyenlaúnicainterfazválidacuandonohaydocumentosabiertos.Siserealizacualquierotraacción,porejemplo,intentaraccederaopcionesdelusuario,elresultadoseráfallido.

UtilicelapropiedadCountdelacolecciónDocumentsparadeterminarsiAutoCADestáenunestadodecerodocumentos.SiDocuments.Count=0,significaqueAutoCADtieneunestadodecerodocumentos.SiDocuments.Count>0,indicaquehayundocumentoabiertocomomínimo.

TambiénesimportantetenerencuentaqueenVBAelobjetoThisDrawingno

sedefinecuandoAutoCADestáenestadodedocumentocero.Estoeslógico,puestoqueThisDrawingserefieregeneralmentealdibujoactivoyenestadodedocumentoceronohaydocumentosabiertos.SiseintentaejecutarunamacroqueutilizaThisDrawingelresultadoseráunerrorentiempodeejecución.PuedeevitaresteerrorsiutilizalafunciónGetObjectdeVBAyespecificalaversióndeAutoCADparaconectarseconAutoCADcuandonohaydocumentosabiertos.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Importacióndeotrosformatosdearchivo

Sepuedenempleardibujosoimágenesdeotrasaplicacionesabriéndolosenformatosespecíficos.AutoCADescapazderealizarciertaconversiónparaarchivosDXFTMdeintercambiodedibujos,SATyWMF.Independientementedelaversiónqueestéempleando,puedeimportarelarchivoutilizandoelmétodoImport.Estemétodorequieretresvaloresdeentrada:elnombredelarchivoquesedebeimportar,elpuntodeinsercióneneldibujodondesecolocaráelarchivoyelfactordeescalaquedebeemplearsealcolocareldibujoimportado.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Exportaciónaotrosformatosdearchivo

SideseautilizarundibujodeAutoCADenotraaplicación,puedeconvertirloaunformatoespecíficopormediodelmétodoExport.EstemétodopermiteexportarlosdibujosdeAutoCADalformatoWMF,SAT,EPS,DXFoBMP.ElmétodoExportrequieretresvaloresdeentrada:elnombredelarchivoquesecreará,laextensióndelnuevoarchivoyelconjuntodeseleccióndeobjetosparaexportar.

CuandorealiceunaexportaciónaformatosWMF,SAToBMP,debeproporcionarunconjuntodeselecciónquenoestévacío.Elconjuntodeseleccióndesignalosobjetosdeldibujoquesedeseaexportar.Sinoseprecisaunconjuntodeselecciónnoseexportanada,yelresultadoesunerrorinterceptabledeargumentonoválido.

CuandoseexportaalosformatosEPSoDXF,Exportnoconsidera,aunquelorequiere,elargumentodelconjuntodeselección.Seexportaautomáticamentetodoeldibujo.

ParaexportarundibujocomoarchivoDXFyvolverloaimportar

Enesteejemplosecreauncírculoeneldibujoactual.DespuésseexportaeldibujoaunarchivollamadoDXFExprt.DXF.Acontinuación,seabreundibujonuevoyseimportaelarchivo.TengapresentequeaExportseleproporcionacomoargumentounconjuntodeselecciónvacío.AunqueelmétodoExportomitelainformacióndelconjuntodeselecciónalexportarunarchivoDXF,produciríaunerrorsinoseincluyeraelargumento.

SubCh3_ImportingAndExporting()

'Createthecircleforvisualrepresentation

DimcircleObjAsAcadCircle

DimcenterPt(0To2)AsDouble

DimradiusAsDouble

centerPt(0)=2:centerPt(1)=2:centerPt(2)=0

radius=1

SetcircleObj=ThisDrawing.ModelSpace.AddCircle_

(centerPt,radius)

ThisDrawing.Application.ZoomAll

'Createanemptyselectionset

DimssetAsAcadSelectionSet

Setsset=ThisDrawing.SelectionSets.Add("NEWSSET")

'ExportthecurrentdrawingtoaDXFfileinthe

'AutoCADtemporaryfiledirectory

DimtempPathAsString

DimexportFileAsString

ConstdxfnameAsString="DXFExprt"

tempPath=_

ThisDrawing.Application.preferences.Files.TempFilePath

exportFile=tempPath&dxfname

ThisDrawing.ExportexportFile,"DXF",sset

'Deletetheemptyselectionset

ThisDrawing.SelectionSets.Item("NEWSSET").Delete

'Openanewdrawing

ThisDrawing.Application.Documents.Add"acad.dwt"

'Definetheimport

DimimportFileAsString

DiminsertPoint(0To2)AsDouble

DimscalefactorAsDouble

importFile=tempPath&dxfname&".dxf"

insertPoint(0)=0:insertPoint(1)=0:insertPoint(2)=0

scalefactor=2#

'Importthefile

ThisDrawing.ImportimportFile,insertPoint,scalefactor

ThisDrawing.Application.ZoomAll

EndSub

¿Comentarios?

<$nopage>rellenosólido(áreas):<$startrange>conjuntosdeselección:filtros(listas),<$startrange>filtros(listas),<$startrange>filtrar:conjuntosdeselección,DXF(códigos),ytiposdefiltros(tabla),filtros(tipos),ycódigosDXF(tabla),<$startrange>filtros(listas):códigodeejemplo,SelectionSet(objeto):códigodeejemplo,filtrar:códigodeejemplo,<$endrange>conjuntosdeselección:filtros(listas),<$endrange>filtros(listas),<$endrange>filtrar:conjuntosdeselección,<$endrange>filtros(listas):códigodeejemplo,conjuntosdeselección:eliminarobjetos,objetos:eliminardeconjuntosdeselección,RemoveItems(método):enconjuntosdeselección,Clear(método):enconjuntosdeselección,Erase(método):enconjuntosdeselección,Delete(método):enconjuntosdeselección,objetos:existentes(modificar),Update(método):volveradibujarobjetos,objetos2D:editar,editar:objetos2D,nográficos(objetos),editar,editar:objetosnográficos,objetosguardados:especificar,objetos:guardados(especificar),objetosguardados:limpiar,limpiar(objetosguardados),PurgeAll(método):códigodeejemplo,objetosguardados:cambiarnombre,objetosguardados:longituddecaracteres,Name(propiedad):códigodeejemplo,Add(método):capas,códigodeejemplo,Layer(objeto):códigodeejemplo,copiar:desfasar,copiar:reflejar,copiar:usarmatrices,desfasar,objetos,reflejar:objetos,disponerenmatrices,patrones,Copy(método),copiar:objetoúnico,CopyObjects(método),copiar:variosobjetos,copiar:deundibujoaotro,copiar:objetosaotrosdibujos,CopyObjects(método):códigodeejemplo,Circle(objeto):códigodeejemplo,CopyObjects(método):códigodeejemplo,copiar:deundibujoaotro,copiar:objetosaotrosdibujos,objetos:desfasar,Offset(método),AddLightweightPolyline(método):códigodeejemplo,LightweightPolyline(objeto):códigodeejemplo,Offset(método):códigodeejemplo,Offset(método):códigodeejemplo,Mirror(método),reflejar:condoscoordenadas,Mirror(método):ilustración,Erase(método),MIRRTEXT(variabledesistema),Text(objeto):reflejartexto,reflejar:objetosText,reflejar:códigodeejemplo,LightweightPolyline(objeto):códigodeejemplo,Mirror(método):códigodeejemplo,matrices:matricespolares,matrices:matricesrectangulares,ArrayPolar(método):crearmatrices,matricespolares:crear,matricespolares:puntocentral(especificar),matricespolares:referencia(puntos),referencia(puntosenmatricespolares),matricespolares:códigodeejemplo,ArrayRectangular(método),matrices:rectangulares,matricesrectangulares,ánguloderotaciónderesolución:matricesrectangulares,matricesrectangulares:ánguloderotaciónderesolución,SnapRotationAngle(propiedad),matricesrectangulares:códigodeejemplo,vectores:desplazarobjetos,objetos:desplazaralolargodeunvector,Move(método):vectores,vectordedesplazamiento,Move(objeto):ilustración,Move(objeto):códigodeejemplo,girarobjetos:ilustración,puntobase,girar

objetos,Rotate(método),girarobjetos,Rotate(método):códigodeejemplo,Delete(método):colecciones,aplicarescala:objetos,objetos:aplicarescala,ScaleEntity(método),factordeescala:dimensionesdeobjeto,objetos:factordeescala,factordeescala:ilustración,ScaleEntity(método):códigodeejemplo,TransformBy(método),objetos:transformar,<$nopage>matriz:<$nopage>capa(propiedades),guardar.<$endrange>capa(parámetros):almacenar,capa(parámetros):guardar:códigodeejemplo,capa(parámetros):cambiarnombreaparámetrosguardados:códigodeejemplo,capa(parámetros):suprimirparámetrosguardados:códigodeejemplo,capa(parámetros):restablecerparámetrosguardados,capa(parámetros):restablecerparámetrosguardados:códigodeejemplo,capa(parámetros):exportarparámetrosguardados,capa(parámetros):importarparámetrosguardados,Export(método):paraparámetrosdecapaguardados,Import(método):paraparámetrosdecapaguardados,capa(parámetros):exportarparámetrosguardados:códigodeejemplo,capa(parámetros):importarparámetrosguardados:códigodeejemplo,Text(objeto):utilizadoendibujos,Text(objeto):textodeunalínea,Text(objeto):textoM,textoM:endibujos,dibujos:texto(estilos),texto(estilos):propiedades(tabla),texto(estilos):actual,texto(estilos):pordefecto,texto(estilos):crear,Add(método):texto(estilos),TextStyles(colección),TextStyle(objeto),TextStyle(objeto):propiedades(lista),FontFile(propiedad),BigFontFile(propiedad):TextStyle(objeto),Height(propiedad),Width(propiedad),ObliqueAngle(propiedad),TextGenerationFlag(propiedad),texto(estilos):cambiarpropiedades,Regen(método):paraestilosdetexto,Update(método):paraestilosdetexto,tiposdeletra:asignarendibujos,TextGenerationFlag(propiedad),GetFont(método):códigodeejemplo,SetFont(método):códigodeejemplo,tiposdeletra:TrueType,(fuentes):SHX(tiposdeletra),tiposdeletra:exportarendibujos,tiposdeletra:TEXTFILL(variabledesistema),TrueType(tiposdeletra),SHX(tiposdeletra),TEXTFILL(variabledesistema),tiposdeletra:Unicode,tiposdeletraUnicode,tiposdeletra:archivosdetiposdeletragrandes,archivosdetiposdeletragrandes,FontFile(propiedad),BigFontFile(propiedad):códigodeejemplo,FontFile(propiedad):códigodeejemplo,TextStyle(objeto):códigodeejemplo,Text(objeto):parámetrosdealtura,TrueType(tiposdeletra):parámetrosdealtura,Height(propiedad),Height(propiedad):códigodeejemplo,Text(objeto):códigodeejemplo,AddText(método):códigodeejemplo,Text(objeto):ángulos,parámetros,ángulosderotación,ángulosdeoblicuidad,entexto:ilustración,ObliqueAngle(propiedad),Text(objeto):ObliqueAngle(propiedad),TextGenerationFlag(propiedad):códigodeejemplo,Text(objeto):indicadordegeneracióndetexto,Text(objeto):mostrarhacialaizquierda,Text(objeto):mostrarbocaabajo,TextGenerationFlag

(propiedad),TextGenerationFlag(propiedad):códigodeejemplo,Text(objeto):códigodeejemplo,Text(objeto):textodeunalínea(crear),Text(objeto):aplicarformato,StyleName(propiedad),Text(objeto):propiedades(lista),Alignment(propiedad),InsertionPoint(propiedad),ObliqueAngle(propiedad),Rotation(propiedad),ScaleFactor(propiedad),TextAlignmentPoint(propiedad),TextGenerationFlag(propiedad),TextString(propiedad),Update(método):Text(objeto),Alignment(propiedad):entexto,Text(objeto):alinearendibujos(ilustración),Text(objeto):códigodeejemplo,SetVariable(método):códigodeejemplo,Alignment(propiedad):códigodeejemplo,TextAlignmentPoint(propiedad):códigodeejemplo,Text(objeto):modificar,MIRRTEXT(variabledesistema),Text(objeto):métodos(lista),ArrayPolar(método):Text(objeto),ArrayRectangular(método):Text(objeto),Copy(método),Erase(método),Mirror(método),Move(método),Rotate(método),textoM:usos,textoM:modificar,<$nopage>textodelíneasmúltiples.

ManualdeldesarrolladordeActiveXyVBA>

CreaciónyedicióndeentidadesdeAutoCAD

ConAutoCADpodrácrearunaampliavariedaddeobjetos,desdelíneasycírculoshastacurvasspline,elipsesyáreasdesombreadoasociativo.Porlogeneral,seañadenobjetosalespaciomodeloutilizandounodelosmétodosAdd.Tambiénsepuedencrearobjetosenespaciopapeloenunbloque.

Unavezcreadounobjeto,sepuedecambiarlacapa,elcoloryeltipodelíneadelmismo.Tambiénsepuedeañadirtextoparaincluirnotaseneldibujo.

CreacióndeobjetosTrabajoconconjuntosdeselecciónModificacióndeobjetosUsodecapas,coloresytiposdelíneaAlmacenamientoyrestablecimientodeparámetrosdecapasAdicióndetextoadibujos

¿Comentarios?

<$nopage>rellenosólido(áreas):

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>

Creacióndeobjetos

AunqueexistendiferentesformasdecrearelmismoobjetográficoenAutoCAD®,ActiveXAutomationsóloofreceunmétododecreaciónparacadaobjeto.Porejemplo,existenenAutoCADcuatromanerasdiferentesdecrearuncírculo:(1)especificandoelpuntocentralyelradio,(2)mediantedospuntosquedefineneldiámetro,(3)mediantetrespuntosquedefinanlacircunferencia,o(4)mediantedostangentesyelradio.Sinembargo,enActiveXAutomationsólosecreancírculosconelmétodoqueutilizaelcentroyelradio.

Nota LosmétodosdecreacióndeobjetosdeVByVBAqueutilizanCreateObjectoDimconlapalabraclaveNewsólopermitencrearelobjetoApplicationdeAutoCAD.TodoslosdemásobjetosdeAutoCADdebencrearsemediantelosmétodosAddoAdd<nombreobjeto>queproporcionalainterfazdeAutoCAD.

DetermineDeterminacióndelobjetocontenedorCreacióndelíneasCreacióndeobjetoscurvosCreacióndeobjetosPointCreacióndeáreasconrellenosólidoTrabajoconregionesCreacióndesombreados

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>

DetermineDeterminacióndelobjetocontenedor

LosobjetosgráficossecreanenlascoleccionesModelSpaceyPaperSpace,yenlosobjetosBlock.

LacolecciónModelSpaceladevuelvelapropiedadModelSpace,mientrasquelapropiedadPaperSpacedevuelvelacolecciónPaperSpace.

Lareferenciaaestosobjetossepuederealizardirectamenteoatravésdeunavariabledefinidaporelusuario.Parautilizarunareferenciadirectaaunobjeto,inclúyaloenlajerarquíadelallamada.Porejemplo,lasiguienteinstrucciónagregaunalíneaalespaciomodelo:

SetlineObj=ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)

Parahacerreferenciaalosobjetosmedianteunavariabledefinidaporelusuario,asignealavariableeltipoAcadModelSpaceoAcadPaperSpaceydespuésdefínalacomolapropiedadapropiadadeldocumentoactivo.Enelsiguienteejemplosedefinendosvariables,queseestablecenigualquelosespaciosmodeloypapelactivos,respectivamente:

DimmoSpaceAsAcadModelSpace

DimpaSpaceAsAcadPaperSpace

SetmoSpace=ThisDrawing.ModelSpace

SetpaSpace=ThisDrawing.PaperSpace

Lasiguienteinstrucciónagregaunalíneaalespaciomodelomediantelavariabledefinidaporelusuario:

SetlineObj=moSpace.AddLine(startPoint,endPoint)

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>

Creacióndelíneas

LalíneaeselobjetomássencillodeAutoCAD.Puedencrearsediversaslíneas,líneasindividualesyvariossegmentosdelíneaconosinarcos.Engeneral,laslíneassedibujandesignandopuntosdecoordenadas.EltipodelíneapordefectoesCONTINUOUS(líneacontinua),perohayvariostiposdelíneaposiblesqueutilizanpuntosyrayas.

Paracrearunalínea,utiliceunodelosmétodossiguientes:

AddLine

Creaunalíneaquepasapordospuntos.

AddLightweightPolyline

Creaunapolilíneaoptimizada2Dapartirdeunalistadevértices.

AddMLine

Creaunalíneamúltiple.

AddPolyline

Creaunapolilínea2Do3D.

LaslíneasestándarylaspolilíneassecreanenelplanoXYdelsistemadecoordenadasuniversales.LaspolilíneasylaspolilíneasoptimizadassecreanenelSistemadecoordenadasdeobjeto(SCO).ParaobtenerinformaciónacercadelaconversióndecoordenadasSCO,véaseConversióndecoordenadas.

CreacióndeunobjetoPolyline

EsteejemploaplicaelmétodoAddLightweightPolylineparacrearunapolilíneasencilladedossegmentosutilizandolascoordenadas2D(2,4),(4,2)y(6,4).

SubCh4_AddLightWeightPolyline()

DimplineObjAsAcadLWPolyline

Dimpoints(0To5)AsDouble

'Definethe2Dpolylinepoints

points(0)=2:points(1)=4

points(2)=4:points(3)=2

points(4)=6:points(5)=4

'CreatealightweightPolylineobjectinmodelspace

SetplineObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

ThisDrawing.Application.ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>

Creacióndeobjetoscurvos

ConAutoCADpodrácrearunaampliavariedaddeobjetoscurvos,incluidoscírculos,arcos,elipsesycurvasspline.TodaslascurvassecreanenelplanoXYdelSCUactual.

Paracrearunacurva,utiliceunodelosmétodossiguientes:

AddArc

Creaunarcocontandoconelcentro,elradioylosángulosinicialyfinal.

AddCircle

Creauncírculoconelradioycentrodados.

AddEllipse

Creaunaelipsecontandoconelpuntocentral,unpuntoenelejemayorylaproporcióndelradio.

AddSpline

CreaunacurvaNURBS(B-splineracionalnouniforme)cuadráticaocúbica.

CreacióndeunobjetoSpline

Enesteejemplosecreaunacurvasplineenespaciomodeloapartirdetrespuntos(0,0,0),(5,5,0)y(10,0,0).Lacurvatienelastangentesinicialyfinalde(0,5,0,5,0,0).

SubCh4_CreateSpline()

'Thisexamplecreatesasplineobjectinmodelspace.

'Declarethevariablesneeded

DimsplineObjAsAcadSpline

DimstartTan(0To2)AsDouble

DimendTan(0To2)AsDouble

DimfitPoints(0To8)AsDouble

'Definethevariables

startTan(0)=0.5:startTan(1)=0.5:startTan(2)=0

endTan(0)=0.5:endTan(1)=0.5:endTan(2)=0

fitPoints(0)=1:fitPoints(1)=1:fitPoints(2)=0

fitPoints(3)=5:fitPoints(4)=5:fitPoints(5)=0

fitPoints(6)=10:fitPoints(7)=0:fitPoints(8)=0

'Createthespline

SetsplineObj=ThisDrawing.ModelSpace.AddSpline_

(fitPoints,startTan,endTan)

ZoomAll

EndSub

Paraobtenermásinformaciónacercadelascurvasspline,véaseladocumentacióndelobjetoSplineyelmétodoAddSplineenActiveXandVBAReferencedeAutoCAD.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>

CreacióndeobjetosPoint

Losobjetosdepuntopuedenserdemuchautilidad,porejemplo,comopuntosdereferenciaodenodohacialoscualespodráforzarelcursorodesfasarlosobjetos.Silodesea,podráespecificarelestilodelpunto,asícomosutamaño,enrelaciónconlapantallaoenunidadesabsolutas.

LasvariablesdesistemaPDMODEyPDSIZEcontrolanelaspectodelosobjetosdepunto.Losvalores0,2,3y4dePDMODEseleccionanunafiguraquedebedibujarseatravésdelpunto.Elvalor1establecequenosevisualicenada.

Añada32,64o96alvaloranteriorparaseleccionarunaformaquedebedibujarsealrededordelpuntoademásdelaquesedibujaparaatravesarlo:

PDSIZEcontrolaeltamañodelasfigurasdepunto,salvoenlosvalores0y1dePDMODE.AlestablecerPDSIZEen0segeneraelpuntoal5%delaalturadeláreagráfica.UnvalorpositivodePDSIZEespecificauntamañoabsolutoparalasfigurasdepunto.Unvalornegativoseinterpretacomounporcentajedeltamañodelaventanagráfica.Eltamañodetodoslospuntosvuelveacalcularsealregenerareldibujo.

DespuésdecambiarPDMODEyPDSIZE,lapróximavezqueseregenereeldibujocambiaráelaspectodelospuntosexistentes.

ParadefinirPDMODEyPDSIZE,utiliceelmétodoSetVariable.

CreacióndeunobjetoPointymodificacióndesuaspecto

ElcódigosiguientecreaunobjetoPointenlascoordenadas(5,5,0)delespaciomodelo.DespuésseactualizanlasvariablesdesistemaPDMODEyPDSIZE.

SubCh4_CreatePoint()

DimpointObjAsAcadPoint

Dimlocation(0To2)AsDouble

'Definethelocationofthepoint

location(0)=5#:location(1)=5#:location(2)=0#

'Createthepoint

SetpointObj=ThisDrawing.ModelSpace.AddPoint(location)

ThisDrawing.SetVariable"PDMODE",34

ThisDrawing.SetVariable"PDSIZE",1

ZoomAll

EndSub

¿Comentarios?

<$nopage>rellenosólido(áreas):

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>

Creacióndeáreasconrellenosólido

Esposiblecrearáreastriangularesycuadriláterasrellenasdeuncolor.Paraobtenerresultadosmásrápidos,estasáreasdebencrearseconlavariabledesistemaFILLMODEdesactivada,yactivardenuevoFILLMODEpararellenareláreaterminada.

Cuandosecreaunáreaderellenosólidocuadrangular,lasecuenciadelospuntosterceroycuartodeterminasuforma.Comparelasfigurassiguientes:

Losdosprimerospuntosdefinenunladodelpolígono.Eltercerpuntosedefinediagonalmentecontrarioalsegundo.Sielcuartopuntosedefineigualqueeltercero,secreauntriángulorelleno.

Paracrearunáreaderellenosólido,utiliceelmétodoAddSolid.

Paraobtenermásinformaciónacercadelrellenodesólidos,véase“Creacióndeáreasderellenosólido”enelManualdelusuario.

Creacióndeunobjetoconrellenosólido

Elcódigodelejemplosiguientecreauncuadriláterosólidoenlascoordenadas(0,0,0),(5,0,0),(5,8,0)y(8,8,0)delespaciomodelo.

SubCh4_CreateSolid()

DimsolidObjAsAcadSolid

Dimpoint1(0To2)AsDouble

Dimpoint2(0To2)AsDouble

Dimpoint3(0To2)AsDouble

Dimpoint4(0To2)AsDouble

'Definethesolid

point1(0)=0#:point1(1)=0#:point1(2)=0#

point2(0)=5#:point2(1)=0#:point2(2)=0#

point3(0)=5#:point3(1)=8#:point3(2)=0#

point4(0)=0#:point4(1)=8#:point4(2)=0#

'Createthesolidobjectinmodelspace

SetsolidObj=ThisDrawing.ModelSpace.AddSolid_

(point1,point2,point3,point4)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>

Trabajoconregiones

Lasregionessonáreascerradasdedosdimensionesqueelusuariocreaapartirdeformascerradasobucles.Unbucleesunacurvaounasecuenciadecurvasconectadasquedefineunáreadeunplanoconuncontornoquenointersectaconsigomismo.Losbuclespuedenestarconstituidosporunacombinacióndelíneas,polilíneasoptimizadas,círculos,arcos,elipses,arcoselípticos,splines,caras3D,trazosysólidos.Losobjetosqueconformanlosbuclesdebenserobjetoscerradosoformaráreascerradascuyospuntosfinalescompartanconotrosobjetos.Losobjetoshandeserademáscoplanarios(situadosenelmismoplano).Losbuclesqueconformanunaregiónhandeestardefinidoscomomatrizdeobjetos.

Paraobtenermásinformaciónacercadelasregiones,véase“Creaciónycombinacióndeáreas(regiones)”enelManualdelusuario.

CreaciónderegionesCreaciónderegionescompuestasUniónderegionesCálculodelainterseccióndedosregiones

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Trabajoconregiones>

Creaciónderegiones

Paracrearunaregión,utiliceelmétodoAddRegionEstemétodocreaunaregiónapartirdetodoslosbuclescerradosformadosconlamatrizdeentradadecurvas.AutoCADconviertelaspolilíneas2Dcerradasylas3Dplanasenregionesdistintasy,acontinuación,conviertelaspolilíneas,líneasycurvasqueformanbuclesplanoscerrados.Simásdedoscurvascompartenunpuntofinal,puedequelaregiónresultanteseaarbitraria.Porestarazón,esposiblequealgunasregionesenrealidadsecreencuandoseutiliceelmétodoAddRegion.Utiliceunavariantequecontengalareciéncreadamatrizderegiones.

PuedecalculareltotaldeobjetosderegióncreadosmediantelasfuncionesUBoundyLBounddeVBA,comoilustraelsiguienteejemplo:

UBound(objRegions)-LBound(objRegions)+1

dondeobjRegionsesunvariantequecontieneelvalorderetornodeAddRegion.Estainstruccióncalculaelnúmerototalderegionescreadas.

Creacióndeunaregiónsimple

Elcódigodelejemplosiguientecreaunaregiónapartirdeuncírculo.

SubCh4_CreateRegion()

'Defineanarraytoholdthe

'boundariesoftheregion.

Dimcurves(0To0)AsAcadCircle

'Createacircletobecomea

'boundaryfortheregion.

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2

center(1)=2

center(2)=0

radius=5#

Setcurves(0)=ThisDrawing.ModelSpace.AddCircle_

(center,radius)

'Createtheregion

DimregionObjAsVariant

regionObj=ThisDrawing.ModelSpace.AddRegion(curves)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Trabajoconregiones>

Creaciónderegionescompuestas

Sepuedencrearregionescompuestasmediantelasustracción,combinaciónolocalizacióndelaintersecciónderegionesosólidos3D.Acontinuación,sepuedenextruirogirarlasregionescompuestasparacrearsólidoscomplejos.Paracrearunaregióncompuesta,utiliceelmétodoBoolean.

Cuandosesustraeunaregióndeotra,sellamaalmétodoBooleandesdelaregiónprimera.Estaeslaregióndelaquedeberealizarlasustracción.Porejemplo,sideseacalcularlosmetrosdealfombradoquenecesitaparaunsuelo,llamealmétodoBooleandesdeelcontornoexteriordelsueloyutilicelaszonasquenoiráncubiertasconmoqueta,comoeselcasodelespacioqueocupanlascolumnasolosmostradores,comoobjetodelalistadeparámetrosdeBoolean.

Creacióndeunaregióncompuesta

SubCh4_CreateCompositeRegions()

'Createtwocircles,onerepresentingaroom,

'theotherapillarinthecenteroftheroom

DimRoomObjects(0To1)AsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=4

center(1)=4

center(2)=0

radius=2#

SetRoomObjects(0)=ThisDrawing.ModelSpace._

AddCircle(center,radius)

radius=1#

SetRoomObjects(1)=ThisDrawing.ModelSpace._

AddCircle(center,radius)

'Createaregionfromthetwocircles

DimregionsAsVariant

regions=ThisDrawing.ModelSpace.AddRegion(RoomObjects)

'Copytheregionsintotheregionvariablesforeaseofuse

DimRoundRoomObjAsAcadRegion

DimPillarObjAsAcadRegion

Ifregions(0).Area>regions(1).AreaThen

'Thefirstregionistheroom

SetRoundRoomObj=regions(0)

SetPillarObj=regions(1)

Else

'Thefirstregionisthepillar

SetPillarObj=regions(0)

SetRoundRoomObj=regions(1)

EndIf

'Subtractthepillarspacefromthefloorspaceto

'getaregionthatrepresentsthetotalcarpetarea.

RoundRoomObj.BooleanacSubtraction,PillarObj

'UsetheAreapropertytodeterminethetotalcarpetarea

MsgBox"Thecarpetareais:"&RoundRoomObj.Area

EndSub

CalculeeláreadelaregiónresultanteconlapropiedadArea.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Trabajoconregiones>

Uniónderegiones

Paraunificarregiones,llamealmétodoBooleaneintroduzcaenlaoperaciónlaconstanteacUnionenlugardeacSubtraction.Puedecombinarencualquierordenlasregionesquedeseeunir.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Trabajoconregiones>

Cálculodelainterseccióndedosregiones

Paralocalizarlainterseccióndedosregiones,seutilizalaconstanteacIntersection.Puedecombinarencualquierordenlasregionesquedeseeintersectar.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>

Creacióndesombreados

Elsombreadorellenaunáreaprecisadeundibujoconunpatrón.

Alcrearunsombreado,eláreaquedeberellenarsenoseespecificaalprincipio.PrimerodebecrearelobjetoHatch(desombreado).Unavezhechoesto,puedeespecificarelbucleexterior,queeselcontornomásexternodelsombreado.Puedecontinuarespecificandocualquierbucleinternoqueexistaenelsombreado.

Paraobtenermásinformaciónacercadelossombreados,véase“Introducciónalospatronesdesombreadoylosrellenos”enelManualdelusuario.

CreacióndeobjetosHatchAsociacióndesombreadosAsignacióndenombreytipodelpatróndesombreadoDefinicióndecontornosdesombreado

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Creacióndesombreados>

CreacióndeobjetosHatch

CuandocreeunobjetoHatch,especifiqueeltipodelpatróndesombreado,elnombredelpatróndesombreadoylaasociatividad.UnavezcreadoelobjetoHatch,nopodrácambiarsuasociatividad.

ParacrearunobjetoHatch,utiliceelmétodoAddHatch.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Creacióndesombreados>

Asociacióndesombreados

Sepuedencrearsombreadosasociativosynoasociativos.Lossombreadosasociativossevinculanasuscontornosyseactualizanalmodificaréstos.Lossombreadosnoasociativossonindependientesdesuscontornos.

Laasociatividadsólopuedeestablecersealcrearelsombreado.Unavezcreadoelsombreado,suasociatividadpuederomperse,peronopuedevolverseaasociar.

Parahacerqueunsombreadoseaasociativo,definaelparámetroAssociativitydelmétodoAddHatchcomoTRUE.Paraquenoseaasociativo,definaelparámetroAssociativitydelmétodoAddHatchcomoFALSE.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Creacióndesombreados>

Asignacióndenombreytipodelpatróndesombreado

AutoCADproporcionaunrellenosólidoymásdecincuentapatronesdesombreadoestándar.Lospatronesdesombreadoresaltanunacaracterísticaparticularounáreadeterminadadeldibujo.Lospatronespueden,porejemplo,ayudaradiferenciarloscomponentesdeunobjeto3Dorepresentarlosmaterialesdelosqueestáhecho.

PuedeaplicarunpatrónsuministradoporAutoCADotomarunodeunabibliotecaexternadepatrones.ParaverunatabladelospatronesdesombreadosuministradosconAutoCAD,véaselaListadecomandosdeAutoCAD

Paraespecificarunpatrónconcreto,alcrearelobjetoHatchindiqueuntipoyunnombredepatrón.Eltipodepatrónindicadóndelocalizarelnombredelpatrón.Cuandointroduzcaeltipodepatrón,utiliceunadelassiguientesconstantes:

acHatchPatternTypePredefined

Seleccionaelnombredelpatrónentrelosdefinidosenelarchivoacad.pat.

acHatchPatternTypeUserDefined

Defineunpatróndelíneasqueutilizaeltipodelíneaactual.

acHatchPatternTypeCustomDefined

SeleccionaelnombredelpatrónenunarchivoPATquenoesacad.pat.

Cuandoindiqueelnombredelpatrón,utiliceunnombreválidoparaelarchivoespecificadoporeltipodepatrón.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Creacióndesombreados>

Definicióndecontornosdesombreado

UnavezcreadoelobjetoHatch,puedeañadirleloscontornos.Uncontornopuedesercualquiercombinacióndelíneas,arcos,círculos,polilíneas2D,elipses,splinesyregiones.

Elprimercontornoañadidodebeserelexterior,quedefineloslímitesexternosqueserellenaránconelsombreado.Paraagregarelcontornoexterior,utiliceelmétodoAppendOuterLoop.

Unavezdefinidoelcontornoexterior,puedeañadirlosinteriores.AgreguecontornosinterioresconelmétodoAppendInnerLoop.

Loscontornosinterioresdefinenislasdentrodelsombreado,queelobjetoHatchmanejasegúnlosparámetrosdelapropiedadHatchStyle.LapropiedadHatchStylepuededefinirseconunadelassiguientescondiciones:

Definicionesdeestilosdesombreado

HatchStyle Condición Descripción

Normal Especificaelestiloestándaronormal.Estaopciónsombreaelinteriordesdeelcontornodeláreamásexterior.SiAutoCADencuentrauncontornointerno,desactivaelsombreadohastaqueencuentraotrocontorno.Esteeselvalor

pordefectodelapropiedadHatchStyle.

Exterior Rellenasolamentelasáreasmásexternas.Esteestilosombreatambiénelinteriordesdeelcontornodelárea,perodesactivaelsombreadosiencuentrauncontornointernoynolovuelveaactivar.

Ignorar Ignoralaestructurainterna.Estaopciónsombreatodoslosobjetosinternos.

Unavezterminadaladefinicióndelsombreado,debeevaluarseantesdequepuedaverse.UtiliceparaelloelmétodoEvaluate.

CreacióndeunobjetoHatch

Esteejemplocreaunsombreadoasociadoenespaciomodelo.Unavezcreado,puedecambiareltamañodelcírculoconelqueestáasociadoelsombreado.Elsombreadocambiaparaadaptarsealtamañodelcírculoactual.

SubCh4_CreateHatch()

DimhatchObjAsAcadHatch

DimpatternNameAsString

DimPatternTypeAsLong

DimbAssociativityAsBoolean

'Definethehatch

patternName="ANSI31"

PatternType=0

bAssociativity=True

'CreatetheassociativeHatchobject

SethatchObj=ThisDrawing.ModelSpace.AddHatch_

(PatternType,patternName,bAssociativity)

'Createtheouterboundaryforthehatch.(acircle)

DimouterLoop(0To0)AsAcadEntity

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=3:center(1)=3:center(2)=0

radius=1

SetouterLoop(0)=ThisDrawing.ModelSpace._

AddCircle(center,radius)

'Appendtheouterboundarytothehatch

'object,anddisplaythehatch

hatchObj.AppendOuterLoop(outerLoop)

hatchObj.Evaluate

ThisDrawing.RegenTrue

EndSub

¿Comentarios?

<$startrange>conjuntosdeselección:filtros(listas),<$startrange>filtros(listas),<$startrange>filtrar:conjuntosdeselección,DXF(códigos),ytiposdefiltros(tabla),filtros(tipos),ycódigosDXF(tabla),<$startrange>filtros(listas):códigodeejemplo,SelectionSet(objeto):códigodeejemplo,filtrar:códigodeejemplo,<$endrange>conjuntosdeselección:filtros(listas),<$endrange>filtros(listas),<$endrange>filtrar:conjuntosdeselección,<$endrange>filtros(listas):códigodeejemplo,conjuntosdeselección:eliminarobjetos,objetos:eliminardeconjuntosdeselección,RemoveItems(método):enconjuntosdeselección,Clear(método):enconjuntosdeselección,Erase(método):enconjuntosdeselección,Delete(método):enconjuntosdeselección,">

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>

Trabajoconconjuntosdeselección

Unconjuntodeselecciónpuedeserunúnicoobjeto,opuedecontenerunagrupamientocomplejo:porejemplo,elconjuntodeobjetosdeunacapadeterminada.

Elprocesodedefinicióndeunconjuntodeselecciónconstadedospasos.Enprimerlugar,debecrearunconjuntodeselecciónnuevoyañadirloalacolecciónSelectionSets.Acontinuación,debellenarelconjuntodeselecciónconlosobjetosquedeseeprocesar

CreacióndeconjuntosdeselecciónAdicióndeobjetosaconjuntosdeselecciónDefinicióndenormasparaconjuntosdeselecciónPresentacióndeinformaciónsobreunconjuntodeselecciónEliminacióndeobjetosdeunconjuntodeselección

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>

Creacióndeconjuntosdeselección

Paracrearunconjuntodeselecciónconnombre,utiliceelmétodoAdd.Estemétodorequierelaentradadeunsoloparámetro:elnombredelconjuntodeselección.

Siyaexisteunconjuntodeseleccióndelmismonombre,AutoCADpresentaunmensajedeerror.Esunabuenaprácticadeprogramaciónborrarlosconjuntosdeselecciónencuantodejendesernecesarios.UtiliceelmétodoDelete,comoenelsiguienteejemplo,paraborrarlos:

ThisDrawing.SelectionSets.Item("NewSelectionSet").Delete

Creacióndeunconjuntodeselecciónvacío

Esteejemplocreaunconjuntodeselecciónnuevo.

SubCh4_CreateSelectionSet()

DimselectionSet1AsAcadSelectionSet

SetselectionSet1=ThisDrawing.SelectionSets._

Add("NewSelectionSet")

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>

Adicióndeobjetosaconjuntosdeselección

Sepuedenañadirobjetosalconjuntodeselecciónactivomedianteunodelossiguientesmétodos:

AddItems

Añadeunoomásobjetosalconjuntodeselecciónindicado.

Select

Seleccionaobjetosyloscolocaenelconjuntodeselecciónactivo.Sepuedenseleccionartodoslosobjetos,losobjetosincluidosoqueatraviesanunárearectangularopoligonal,todoslosobjetosqueatraviesanunbordedeselección,elobjetocreadoenúltimolugar,losobjetosdelconjuntodeselecciónmásreciente,losobjetosdeunaventanaolosqueestánincluidosenunpolígonodeventana.

SelectAtPoint

Seleccionalosobjetosquepasanmásalládeunpuntodeterminadoyloscolocaenelconjuntodeselecciónactivo.

SelectByPolygon

Seleccionalosobjetosqueencierraunbordeylosincluyeenelconjuntodeselecciónactivo.

SelectOnScreen

Solicitaalusuarioquedesigneobjetosdelapantallaylosañadaalconjuntodeselecciónactivo.

Adicióndeobjetosdesignadosaunconjuntodeselección

Esteejemplosolicitaalusuarioqueseleccioneobjetos,paradespuésañadirlosal

conjuntodeselección.

SubCh4_AddToASelectionSet()

'Createanewselectionset

DimssetAsAcadSelectionSet

Setsset=ThisDrawing.SelectionSets.Add("SS1")

'Prompttheusertoselectobjects

'andaddthemtotheselectionset.

'Tofinishselecting,pressINTRO.

sset.SelectOnScreen

EndSub

¿Comentarios?

<$startrange>conjuntosdeselección:filtros(listas),<$startrange>filtros(listas),<$startrange>filtrar:conjuntosdeselección,DXF(códigos),ytiposdefiltros(tabla),filtros(tipos),ycódigosDXF(tabla),<$startrange>filtros(listas):códigodeejemplo,SelectionSet(objeto):códigodeejemplo,filtrar:códigodeejemplo,<$endrange>conjuntosdeselección:filtros(listas),<$endrange>filtros(listas),<$endrange>filtrar:conjuntosdeselección,<$endrange>filtros(listas):códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>

Definicióndenormasparaconjuntosdeselección

Puedelimitarlosconjuntosdeselecciónporpropiedadoportipodeobjetoutilizandolistasdefiltros.Porejemplo,puedecopiarsolamentelosobjetosazulesenundibujodeunaplacadecircuitos,osolamentelosobjetosdeunacapadeterminada.Tambiénpuedecombinarloscriteriosdeseleccióndeunalistadefiltros.Porejemplo,puedeindicaraAutoCADqueincluyaunobjetoenunaselecciónsolosisetratadeuncírculoazulenunacapaespecífica.SepuedenespecificarlistasdefiltrosparalosmétodosSelect,SelectAtPoint,SelectByPolygon,ySelectOnScreen.

Nota Elprocesodefiltradoidentificatansólolostiposdelíneaquehayansidoasignadosexplícitamenteaobjetos,noaquéllosquehayansidoheredadosporlacapa.

UsodelistasdefiltrosparadefinirnormasdeconjuntosdeselecciónEspecificacióndevarioscriteriosenunalistadefiltrosdeunconjuntodeselecciónAdicióndecondicionesalalistadefiltrosUsodepatronescomodínenloscriteriosdefiltrosdeconjuntosdeselecciónFiltroparadatosextendidos

¿Comentarios?

<$startrange>filtros(listas):códigodeejemplo,SelectionSet(objeto):códigodeejemplo,filtrar:códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>

Usodelistasdefiltrosparadefinirnormasdeconjuntosdeselección

Laslistasdefiltrossecomponendeparejasdeargumentos.Elprimerargumentorepresentaeltipodefiltro(unobjeto,porejemplo),yelsegundoargumentoespecificaelvalorqueseestáfiltrando(círculos,porejemplo).EltipodefiltroconsisteenuncódigodegrupoDXFqueindicaeltipodefiltroqueseaplicará.Acontinuaciónsepresentanlostiposdefiltroquemásseutilizan.

CódigosDXFparafiltroscomunes

CódigoDXF Tipodefiltro

0 Tipodeobjeto(cadena)Como“Line,”“Circle,”“Arc”etc.

2 Nombredeobjeto(cadena)Elnombredetabla(asignado)deunobjetoguardado.

8 Nombredecapa(cadena)Como“Layer0.”.

60 Visibilidaddelobjeto(entero)

Use0=visible,1=invisible.

62 Númerodecolor(entero)Valoresdeíndicenuméricosdesdeel0al256.CeroindicaBAYBLOCK.256indicaBALAYER.Unvalornegativoindicaquelacapaestádesactivada.

67 Indicadordeespaciomodelo/papel(entero)0uomisión=espaciomodelo,1=espaciopapel.

ParaobtenerunalistacompletadeloscódigosdegrupoDXF,véaseTiposdevaloresdecódigosdegrupoenelDXFReference.

Losargumentosdelosfiltrossedeclarancomomatrices.Eltipodefiltrosedeclaracomoenteroyelvalordefiltroesunavariante.Cadatipodefiltrodebeteneremparejadounvalordefiltro.Porejemplo:

FilterType(0)=0'Indicatesfilterreferstoanobjecttype

FilterData(0)="Circle"'Indicatestheobjecttypeis"Circle"

Especificacióndeunsolocriteriodeselecciónparaunconjuntodeselección

Elsiguientecódigosolicitaalusuarioqueseleccionelosobjetosquedebeincluirunconjuntodeselección,perosólolosañadesisetratadeunobjetoCircle:

SubCh4_FilterMtext()

DimsstextAsAcadSelectionSet

DimFilterType(0)AsInteger

DimFilterData(0)AsVariant

Setsstext=ThisDrawing.SelectionSets.Add("SS2")

FilterType(0)=0

FilterData(0)="Circle"

sstext.SelectOnScreenFilterType,FilterData

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>

Especificacióndevarioscriteriosenunalistadefiltrosdeunconjuntodeselección

Paraespecificarvarioscriteriosdeselección,declareunamatrizquecontengaelementossuficientespararepresentarcadacriterio,yasigneuncriterioacadaelemento.

Seleccióndeobjetosquecumplentrescriterios

Elcódigosiguienteespecificadoscriterios:elobjetodebeseruncírculo,ydeberesidirenlacapa0.ElcódigodeclaraFilterTypeyFilterDatacomomatricesdedoselementosyasignacadacriterioaunelemento:

SubCh4_FilterBlueCircleOnLayer0()

DimsstextAsAcadSelectionSet

DimFilterType(1)AsInteger

DimFilterData(1)AsVariant

Setsstext=ThisDrawing.SelectionSets.Add("SS4")

FilterType(0)=0

FilterData(0)="Circle"

FilterType(1)=8

FilterData(1)="0"

sstext.SelectOnScreenFilterType,FilterData

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>

Adicióndecondicionesalalistadefiltros

Cuandoseespecificanvarioscriteriosdeselección,AutoCADsuponequeelobjetoseleccionadodebecumplirtodosellos.Loscriterios,noobstante,puedencalificarsedeotrasformas.Encuantoaloselementosnuméricos,sepuedenespecificaroperacionesrelacionales(porejemplo,queelradiodeuncírculoseamayoroigualque5.0).Paratodosloselementos,sepuedenespecificaroperacioneslógicas(porejemplo,TextoMtext).

Paraindicarunoperadorrelacionalenladefinicióndelfiltro,utiliceuncódigoDXFde-4.Especifiqueeloperadorcomocadena.Enlasiguientetablasemuestranlosoperadoresrelacionalesquepuedenutilizarse.

Operadoresrelacionalesparalaslistasdefiltrosdeconjuntosdeselección

Operador Descripción

"*" Comodíngenérico(siempreverdadero)

"=" Iguala

"!=" Distintode

"/=" Distintode

"<>" Distintode

"<" Menorque

"<=" Menoroigualque

">" Mayorque

">=" Mayoroigualque

"&" ANDbinario(sologruposdeenteros)

"&=" Iguala,conmáscarabinaria(sologruposdeenteros)

Losoperadoreslógicosdelaslistasdefiltrostambiénseindicanconuncódigodegrupo–4ydebenserunacadena,perotienenqueestaremparejados.Eloperadordeaperturavaprecedidodeunsímbolodemenorque(<),yeldecierredeunsímbolodemayorque(>).Enlasiguientetablasemuestranlosoperadoreslógicosquepuedenutilizarse.

Operadoresdeagrupamientológicosparalaslistasdefiltrosdeconjuntosdeselección

Operadorinicial

operadorEncierra

Ending

operador

"<AND" Unoomásoperandos

"AND>"

"<OR" Unoomásoperandos

"OR>"

"<XOR" Dosoperandos "XOR>"

"<NOT" Unoperando "NOT>"

Seleccióndeuncírculocuyoradioseamayoroigualque5.0.

Elsiguientecódigoindicaqueelobjetoseleccionadodebeseruncírculocuyoradioseamayoroigualque5.0:

SubCh4_FilterRelational()

DimsstextAsAcadSelectionSet

DimFilterType(2)AsInteger

DimFilterData(2)AsVariant

Setsstext=ThisDrawing.SelectionSets.Add("SS5")

FilterType(0)=0

FilterData(0)="Circle"

FilterType(1)=-4

FilterData(1)=">="

FilterType(2)=40

FilterData(2)=5#

sstext.SelectOnScreenFilterType,FilterData

EndSub

SeleccióndeTextoMtext

EnelsiguienteejemploseespecificaquesepuedanseleccionarobjetosTextoMtext:

SubCh4_FilterOrTest()

DimsstextAsAcadSelectionSet

DimFilterType(3)AsInteger

DimFilterData(3)AsVariant

Setsstext=ThisDrawing.SelectionSets.Add("SS6")

FilterType(0)=-4

FilterData(0)="<or"

FilterType(1)=0

FilterData(1)="TEXT"

FilterType(2)=0

FilterData(2)="MTEXT"

FilterType(3)=-4

FilterData(3)="or>"

sstext.SelectOnScreenFilterType,FilterData

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>

Usodepatronescomodínenloscriteriosdefiltrosdeconjuntosdeselección

Losnombresdesímbolosycadenasdelaslistasdefiltrospuedenincluirpatronescomodín.

EnlasiguientetablaseincluyenloscaracterescomodínquereconoceAutoCADysufunciónenelcontextodeunacadena:

Caracterescomodín

Carácter Descripción

#

(almohadilla)Equivaleacualquiernúmerodeunasolacifra.

@(arroba) Equivaleacualquiercarácteralfabético(solouno).

.(punto) Equivaleacualquiercarácternoalfanumérico.

*(asterisco) Equivaleacualquiersecuenciadecaracteres,incluidaslassecuenciasvacías,ypuedeutilizarseencualquierlugardelpatróndebúsqueda:alprincipio,medioofinal

?(signodeinterrogación)

Equivaleacualquiercarácter(solouno).

~(tilde) Cuandoeselprimercarácterdelpatrón,equivaleacualquiercarácterdistintodelpatrón.

[...] Equivaleacualquieradeloscaracteresincluidos.

[~...] Equivaleacualquiercarácternoincluido(unosolo).

-(guión) Seutilizaentreparéntesisparaespecificarunrangodeunsolocarácter.

,(coma) Separadospatrones.

`(comillainversa)

Omiteloscaracteresespeciales(leeelcaráctersiguiente).

Utilicelacomillasimple(`)paraindicarqueuncarácternosedebetratarcomocomodín,sinocomocarácterliteral.Porejemplo,paraestablecerqueelconjuntodeselecciónsoloincluyaunbloqueanónimodenominado“*U2”,utilicelossiguientesargumentosdefiltro:

FilterType(0)=2

FilterData(0)="`*U2"

SeleccióndeMtextdondeaparezcaunapalabraespecíficaeneltexto

ElsiguientecódigodefineloscriteriosdeseleccióncomocualquierMtextcuyacadenadetextocontengalapalabra“La”.EnesteejemplosemuestratambiénelusodelmétododeselecciónSelectByPolygon:

SubCh4_FilterPolygonWildcard()

DimsstextAsAcadSelectionSet

DimFilterType(1)AsInteger

DimFilterData(1)AsVariant

DimpointsArray(0To11)AsDouble

DimmodeAsInteger

mode=acSelectionSetWindowPolygon

pointsArray(0)=-12#:pointsArray(1)=-7#:pointsArray(2)=0

pointsArray(3)=-12#:pointsArray(4)=10#:pointsArray(5)=0

pointsArray(6)=10#:pointsArray(7)=10#:pointsArray(8)=0

pointsArray(9)=10#:pointsArray(10)=-7#:pointsArray(11)=0

Setsstext=ThisDrawing.SelectionSets.Add("SS10")

FilterType(0)=0

FilterData(0)="MTEXT"

FilterType(1)=1

FilterData(1)="*La*"

sstext.SelectByPolygonmode,pointsArray,FilterType,FilterData

EndSub

¿Comentarios?

<$endrange>conjuntosdeselección:filtros(listas),<$endrange>filtros(listas),<$endrange>filtrar:conjuntosdeselección,<$endrange>filtros(listas):códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>

Filtroparadatosextendidos

Sepuedenutilizaraplicacionesexternasparaasociardatostalescomocadenasdetexto,valoresnuméricos,puntos3D,distanciasynombresdecapaaobjetosdeAutoCAD.EstossonlosdenominadosdatosextendidosodatoseX.Sepuedencrearfiltrosdeentidadesquecontengandatosextendidosdeunaaplicaciónespecífica.

Paraobtenermásinformaciónacercadelosdatosextendidos,véaseFiltroparadatosextendidos.

Seleccióndecírculosquecontienendatosextendidos

Enelsiguienteejemplo,sefiltranloscírculosquecontienendatosextendidosprocedentesdelaaplicación“MI_APL”.

SubCh4_FilterXdata()

DimsstextAsAcadSelectionSet

DimmodeAsInteger

DimpointsArray(0To11)AsDouble

mode=acSelectionSetWindowPolygon

pointsArray(0)=-12#:pointsArray(1)=-7#:pointsArray(2)=0

pointsArray(3)=-12#:pointsArray(4)=10#:pointsArray(5)=0

pointsArray(6)=10#:pointsArray(7)=10#:pointsArray(8)=0

pointsArray(9)=10#:pointsArray(10)=-7#:pointsArray(11)=0

DimFilterType(1)AsInteger

DimFilterData(1)AsVariant

Setsstext=ThisDrawing.SelectionSets.Add("SS9")

FilterType(0)=0

FilterData(0)="Circle"

FilterType(1)=1001

FilterData(1)="MI_APL"

sstext.SelectByPolygonmode,pointsArray,FilterType,FilterData

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>

Presentacióndeinformaciónsobreunconjuntodeselección

Sideseareferirseaunconjuntodeseleccióncuyonombreconoce,utilicesunombre.Enelsiguienteejemplo,sehacereferenciaaunconjuntodeseleccióndenominado“SS10”:

SubGetObjInSet()

DimselsetAsAcadSelectionSet

Setselset=ThisDrawing.SelectionSets("SS10")

MsgBox("Selectionset"&selset.Name&"contains"&_

selset.Count&"items")

EndSub

LosconjuntosdeseleccióndeundibujosonmiembrosdelacolecciónSelectionSets.SepuedeutilizarlainstrucciónForEachparaiterarentodalacolecciónSelectionSetsdeundibujoyrecogerinformaciónacercadecadaconjunto.

Presentacióndelnombredelosconjuntosdeseleccióndeundibujo

Elsiguientecódigomuestraelnombredetodoslosconjuntosdeseleccióndeundibujo,juntoconeltipodelosobjetosincluidosencadauno.

SubListSelectionSets()

DimselsetCollectionAsAcadSelectionSets

DimselsetAsAcadSelectionSet

DimentAsObject

Dimi,jAsInteger

SetselsetCollection=ThisDrawing.SelectionSets

'Findeachselectionsetinthedrawing

i=0

ForEachselsetInselsetCollection

MsgBox"Selectionset"&CStr(i)&"is:"&selset.Name

'Nowfindeachobjectintheselectionset,andsaywhatitis

j=0

ForEachentInselset

MsgBox"Item"&CStr(j+1)&"in"&selset.Name_

&"is:"&ent.EntityName

j=j+1

Next

i=i+1

Next

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>

Eliminacióndeobjetosdeunconjuntodeselección

Unavezcreadounconjuntodeselección,puedeoptarporeliminaralgunosdelosobjetosdelconjuntootodoslosquelocomponen.Porejemplo,puedeseleccionarungrupocompletodeobjetostorpementeagrupadosyeliminaralgunosobjetosconcretosdelgrupo,dejandosóloaquéllosquedeseaqueformenpartedelconjunto.

Paraeliminarelementosdelconjuntodeselección,utilicelossiguientesmétodos:

RemoveItems

ElmétodoRemoveItemseliminaunoomáselementosdelconjuntodeselección.Loselementoseliminadossiguenexistiendo,aunqueyanoresidanenelconjuntodeselección.

Clear

ElmétodoClearvacíaelconjuntodeselección.Elconjuntodeselecciónsigueexistiendo,perosinelementos.Loselementosqueresidíanenelconjuntodeselecciónsiguenexistiendo,peroyanoresidenenél.

Erase

ElmétodoEraseborratodosloselementosdeunconjuntodeselección.Elconjuntodeselecciónsigueexistiendo,perosinelementos.Loselementosqueresidíanenelconjuntodeselecciónyanoexisten.

Delete

ElmétodoDeletesuprimeunconjuntodeselecciónytodosloselementosquelocomponen.TrasunallamadaalmétodoDelete,tantoelconjuntodeseleccióncomoloselementosqueincluíadejandeexistir.

¿Comentarios?

<$nopage>matriz:

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>

Modificacióndeobjetos

Paramodificarunobjetoexistente,puedeutilizarlosmétodosylaspropiedadesquetieneasociados.Simodificaunapropiedadvisibledeunobjetográfico,utiliceelmétodoUpdateparavolveradibujarloenlapantalla.

Enestasecciónsedescribecómoeditarobjetos2D.ObjetosguardadosCopiadeobjetosDesfasedeobjetosReflexiónensimetríadeobjetosDisposicióndeobjetosenmatricesDesplazamientodeobjetosRotacióndeobjetosSupresióndeobjetosAplicarunaescalaalosobjetosTransformacióndeobjetosAlargamientoyrecortedeobjetosDescomposicióndeobjetosEdicióndepolilíneasModificacióndesplinesEdicióndesombreados

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Objetosguardados

AdemásdelosobjetosgráficosqueutilizaAutoCAD,enlosarchivosdedibujosealmacenantambiénotrostiposdeobjetosnográficos.Estosobjetostienendesignacionesdescriptivasasociadas,comosonlosbloques,capas,gruposyestilosdecotas.Enlamayoríadeloscasos,alosobjetosselesasignaunnombrecuandosecrean,yselescambiamásadelante.Losnombressealmacenanentablasdesímbolos.Cuandoseespecificaunobjetoguardado,sehacereferenciaalnombreyalosdatosasociadosdelobjetoquefiguraenlatabladesímbolos.

LimpiezadeobjetosguardadosCambiodenombredelosobjetos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Objetosguardados>

Limpiezadeobjetosguardados

Puedelimpiareldibujodeobjetosnoutilizadosnireferenciadosencualquiermomentodeunasesióndeedición.Lalimpiezareduceeltamañodeldibujo.Ahorabien,noesposiblelimpiarlosobjetosalosquesehacereferenciadesdeotrosobjetos.Porejemplo,unarchivodetiposdeletrapuedeserreferenciadoporunestilodetexto.Alascapashacenreferenciasuspropiosobjetos.

Paralimpiarundibujo,utiliceelmétodoPurgeAll,comoseindicaacontinuación:

ThisDrawing.PurgeAll

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Objetosguardados>

Cambiodenombredelosobjetos

Amedidaquelosdibujossehacenmáscomplicados,esaconsejablecambiarelnombredelosobjetosparafacilitarsuidentificaciónyevitarconflictosconlosnombresutilizadosendibujosinsertados.

SepuedecambiarelnombredecualquierobjetoguardadoexceptodeaquellosqueAutoCADdenominapordefecto,comolacapa0oeltipodelíneaCONTINUOUS.

Losnombrespuedentenerunalongituddehasta255caracteres.Ademásdeletrasynúmeros,puedencontenerespacios(aunqueAutoCADeliminalosespaciosalprincipioyalfinaldelosnombres)ycualquiercarácterespecialquenoseutiliceenMicrosoftWindowsoAutoCADparaotrosfines.Entreloscaracteresespecialesquenopuedenutilizarseseincluyenlossímbolosdemayorymenorque(<>),barrasoblicuasycontrabarras(/\),comillas("),signosdedospuntos(:),signosdepuntoycoma(;),signosdeinterrogación(?),comas(,),asteriscos(*),barrasverticales(|),signosdeigual(=)ycomillassimples(').TampocopuedenutilizarsecaracteresespecialescreadoscontiposdeletraUnicode.

Paracambiardenombreunobjeto,utilicelapropiedadNamedelobjeto.

Cambiodenombredecapas

Enesteejemplosecreaunacapadenominada“NewLayer”yacontinuaciónsecambiasunombrea“MyLayer”.

SubCh4_RenamingLayer()

'Createalayer

DimlayerObjAsAcadLayer

SetlayerObj=ThisDrawing.Layers.Add("NewLayer")

'Changethenameofthelayer

layerObj.Name="MyLayer"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Copiadeobjetos

Sepuedecopiarunoovariosobjetosdentrodeldibujoactivo.Aldesfasarobjetossecreanotrosnuevosaunadistanciaespecíficarespectoalosobjetosdesignadosoatravésdeunpuntoespecífico.Lafuncióndesimetríacreaunaimagensimétricadelosobjetosenunejedesimetríadefinido.Ladisposicióndelosobjetoscopiadosenformadematrizcreaconjuntosdecopiasenunpatróncircularorectangular.

Paraobtenerinformaciónacercadelacopiadeobjetos,véase“Copia,desfaseyreflejodeobjetos”enelManualdelusuario.

Nota Losmétodosdecopianosepuedenutilizarmientrasserealizaunaiteraciónenunacolección.Unaiteraciónabreelespaciodetrabajoparaunaoperacióndesólolecturaalavezqueestosmétodosintentanrealizarunaoperacióndelectura/escritura.Terminecualquieriteracióndeunacolecciónantesdellamaraestosmétodos.

CopiadeobjetosenlamismaubicaciónCopiadevariosobjetos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Copiadeobjetos>

Copiadeobjetosenlamismaubicación

Paracopiarunobjeto,utiliceelmétodoCopydelmismoobjeto.Estemétodocreaunobjetonuevoqueseráunduplicadodeloriginal.Elobjetonuevosesitúaenlamismaposiciónqueeloriginalyeselresultadodelmétodo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Copiadeobjetos>

Copiadevariosobjetos

Paracopiarvariosobjetos,utiliceelmétodoCopyObjectsobiencreeunamatrizdeobjetosparautilizarlaconelmétodoCopy.(paracopiarlosobjetosdeunconjuntodeselección,itereenelconjuntodeselecciónyguardelosobjetosenunamatriz).Itereenlamatriz,copiandocadaobjetoporseparado,yreúnaenunasegundamatrizlosobjetosreciéncreados.

Paracopiarvariosobjetosenundibujodistinto,utiliceelmétodoCopyObjectsyajusteelparámetroOwnerenelespaciomodelodeldibujo.

Copiadedosobjetoscirculares

Enesteejemplo,secreandosobjetosdecírculoyseutilizaelmétodoCopyObjectsparacrearunacopiadelosmismos.

SubCh4_CopyCircleObjects()

DimDOC1AsAcadDocument

DimcircleObj1AsAcadCircle

DimcircleObj2AsAcadCircle

DimcircleObj1CopyAsAcadCircle

DimcircleObj2CopyAsAcadCircle

DimcenterPoint(0To2)AsDouble

Dimradius1AsDouble

Dimradius2AsDouble

Dimradius1CopyAsDouble

Dimradius2CopyAsDouble

DimobjCollection(0To1)AsObject

DimretObjectsAsVariant

'DefinetheCircleobject

centerPoint(0)=0:centerPoint(1)=0:centerPoint(2)=0

radius1=5#:radius2=7#

radius1Copy=1#:radius2Copy=2#

'Createanewdrawing

SetDOC1=ThisDrawing.Application.Documents.Add

'Addtwocirclestothedrawing

SetcircleObj1=DOC1.ModelSpace.AddCircle_

(centerPoint,radius1)

SetcircleObj2=DOC1.ModelSpace.AddCircle_

(centerPoint,radius2)

ZoomAll

'Puttheobjectstobecopiedintoaform

'compatiblewithCopyObjects

SetobjCollection(0)=circleObj1

SetobjCollection(1)=circleObj2

'Copyobjectandgetbackacollectionof

'thenewobjects(copies)

retObjects=DOC1.CopyObjects(objCollection)

'Getnewlycreatedobjectandapply

'newpropertiestothecopies

SetcircleObj1Copy=retObjects(0)

SetcircleObj2Copy=retObjects(1)

circleObj1Copy.radius=radius1Copy

circleObj1Copy.Color=acRed

circleObj2Copy.radius=radius2Copy

circleObj2Copy.Color=acRed

ZoomAll

EndSub

Copiadeobjetosenundibujodistinto

EsteejemplocreaobjetosCircleydespuésutilizaelmétodoCopyObjectsparacopiarloscírculosenundibujonuevo.

SubCh4_Copy_to_New_Drawing()

DimDOC0AsAcadDocument

DimcircleObj1AsAcadCircle,circleObj2AsAcadCircle

DimcenterPoint(0To2)AsDouble

Dimradius1AsDouble,radius2AsDouble

Dimradius1CopyAsDouble,radius2CopyAsDouble

DimobjCollection(0To1)AsObject

DimretObjectsAsVariant

'DefinetheCircleobject

centerPoint(0)=0:centerPoint(1)=0:centerPoint(2)=0

radius1=5#:radius2=7#

radius1Copy=1#:radius2Copy=2#

'Addtwocirclestothecurrentdrawing

SetcircleObj1=ThisDrawing.ModelSpace.AddCircle_

(centerPoint,radius1)

SetcircleObj2=ThisDrawing.ModelSpace.AddCircle_

(centerPoint,radius2)

ThisDrawing.Application.ZoomAll

'Savepointertothecurrentdrawing

SetDOC0=ThisDrawing.Application.ActiveDocument

'Copyobjects

'

'Firstputtheobjectstobecopiedintoaformcompatible

'withCopyObjects

SetobjCollection(0)=circleObj1

SetobjCollection(1)=circleObj2

'Createanewdrawingandpointtoitsmodelspace

DimDoc1MSpaceAsAcadModelSpace

DimDOC1AsAcadDocument

SetDOC1=Documents.Add

SetDoc1MSpace=DOC1.ModelSpace

'Copytheobjectsintothemodelspaceofthenewdrawing.A

'collectionofthenew(copied)objectsisreturned.

retObjects=DOC0.CopyObjects(objCollection,Doc1MSpace)

DimcircleObj1CopyAsAcadCircle,circleObj2CopyAsAcadCircle

'Getthenewlycreatedobjectcollectionandapplynew

'propertiestothecopies.

SetcircleObj1Copy=retObjects(0)

SetcircleObj2Copy=retObjects(1)

circleObj1Copy.radius=radius1Copy

circleObj1Copy.Color=acRed

circleObj2Copy.radius=radius2Copy

circleObj2Copy.Color=acRed

ThisDrawing.Application.ZoomAll

MsgBox"Circlescopied."

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Desfasedeobjetos

Eldesfasedeunobjetocreaunonuevoaunadistanciadedesfaseespecificadaconrespectoaloriginal.Sepuedendesfasararcos,círculos,elipses,líneas,polilíneas,polilíneasoptimizadas,splinesylíneasauxiliares.

Paradesfasarunobjeto,utiliceelmétodoOffsetdelobjeto.Laúnicaentradaquerequiereestemétodoesladistanciaalaquesedeseadesplazarelobjeto.Sielvalordeladistanciaesnegativo,AutoCADsuponequesepretendecrearunacurva“máspequeña”;unarco,porejemplo,sedesplazaríahastaunradiomenor(queseríaladistanciaproporcionada)queelradiodelacurvainicial.Si“máspequeña”notienesentido,AutoCADaplicaundesfaseenladireccióndelascoordenadasSCUX,Y,Zmáspequeñas.Siladistanciadedesfasenoesválida,devuelveunerror.

Enmuchosobjetos,estaoperacióntendrácomoresultadounanuevacurvasencilla(quepuedenoserdelmismotipoquelacurvaoriginal).Porejemplo,aldesfasarunaelipseseobtieneunasplineyaqueelresultadoseajustaalaecuacióndeunaelipse.Avecespuedesernecesarioqueelresultadodeldesfaseseanvariascurvas.Porestarazón,elmétododevuelveelnuevoobjeto,omatrizdeobjetos,comovariante.

Paraobtenerinformaciónacercadeldesfasedeobjetos,véase“Copia,desfaseyreflejodeobjetos”enelManualdelusuario.

Desfasedeunapolilínea

Esteejemplocreaunapolilíneaoptimizadaydespuésladesfasa.

SubCh4_OffsetPolyline()

'Createthepolyline

DimplineObjAsAcadLWPolyline

Dimpoints(0To11)AsDouble

points(0)=1:points(1)=1

points(2)=1:points(3)=2

points(4)=2:points(5)=2

points(6)=3:points(7)=2

points(8)=4:points(9)=4

points(10)=4:points(11)=1

SetplineObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

plineObj.Closed=True

ZoomAll

'Offsetthepolyline

DimoffsetObjAsVariant

offsetObj=plineObj.Offset(0.25)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Reflexiónensimetríadeobjetos

Elreflejodeobjetoscreaunacopiaqueeslaimagenreflejadadeunobjetoconrespectoaunejeolíneadesimetría.Sepuedenreflejartodoslosobjetosdedibujo.

Parareflejarunobjeto,utiliceelmétodoMirror.Estemétodorequierelaentradadedoscoordenadas.Lasdoscoordenadasespecificadasseconviertenenpuntosfinalesdelalíneadesimetríaalrededordelacualsereflejaelobjetodebase.En3D,estalíneaorientaunplanodesimetríaperpendicularalplanoXYdelSCPquecontieneunejedesimetríaespecificado.

AdiferenciadelcomandodesimetríadeAutoCAD,estemétodositúaeneldibujolaimagenreflejadaymantieneelobjetooriginal.Sideseaeliminarelobjetooriginal,utiliceelmétodoErase.

Paracontrolarlaspropiedadesdesimetríadeobjetosdetexto,utilicelavariabledesistemaMIRRTEXT.ElvalorpordefectodeMIRRTEXTesactivada(1),conelquelasimetríadelosobjetosdetextoseobtienecomoladelosdemásobjetos.CuandoMIRRTEXTestádesactivada(0),nosegeneranimágenessimétricasdetexto.UtilicelosmétodosGetVariableySetVariableparaconsultaryestablecerelparámetroMIRRTEXT.

Puedeobtenerunaimagensimétricadeunobjetodeventanagráficaenespacio

papel,aunqueellonoafectaalavistadelosobjetosenelespaciomodelonialosobjetosdedichoespacio.

Paraobtenerinformaciónacercadelreflejodeobjetos,véase“Copia,desfaseyreflejodeobjetos”enelManualdelusuario.

Reflexióndeunapolilíneaconrespectoauneje

Esteejemplocreaunapolilíneaoptimizadaylareflejaconrespectoaunejedesimetría.Lanuevapolilíneaesdecolorazul.

SubCh4_MirrorPolyline()

'Createthepolyline

DimplineObjAsAcadLWPolyline

Dimpoints(0To11)AsDouble

points(0)=1:points(1)=1

points(2)=1:points(3)=2

points(4)=2:points(5)=2

points(6)=3:points(7)=2

points(8)=4:points(9)=4

points(10)=4:points(11)=1

SetplineObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

plineObj.Closed=True

ZoomAll

'Definethemirroraxis

Dimpoint1(0To2)AsDouble

Dimpoint2(0To2)AsDouble

point1(0)=0:point1(1)=4.25:point1(2)=0

point2(0)=4:point2(1)=4.25:point2(2)=0

'Mirrorthepolyline

DimmirrorObjAsAcadLWPolyline

SetmirrorObj=plineObj.Mirror(point1,point2)

DimcolAsNewAcadAcCmColor

Callcol.SetRGB(125,175,235)

mirrorObj.TrueColor=col

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Disposicióndeobjetosenmatrices

ConAutoCADesposiblecopiarunobjetodispuestoenmatricespolaresorectangulares.Enelcasodelasmatricespolares,puedecontrolarelnúmerodecopiasdelobjetoyelánguloderellenodelamatriz.Encuantoalasmatricesrectangulares,puededeterminarelnúmerodefilasycolumnasyladistanciaquedebeexistirentreellas.

Paraobtenermásinformaciónacercadelasmatrices,“Creacióndeunamatrizdeobjetos”enelManualdelusuario.

CreacióndematricespolaresCreacióndematricesrectangulares

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Disposicióndeobjetosenmatrices>

Creacióndematricespolares

Sepuedendisponerenunamatriztodoslosobjetosdedibujo.Paracrearunamatrizpolar,utiliceelmétodoArrayPolardelobjeto.Estemétodorequierelaentradadelnúmerodeobjetosquesedeseancrear,losgradosdelánguloyelpuntocentraldelamatriz.Elnúmerodeobjetosdebeserunenteropositivomayorque1,yelánguloarellenardebecompletarseenradianes.Unvalorpositivoprecisaunarotaciónensentidocontrarioalasagujasdelreloj.Unvalornegativoprecisaunarotaciónenelsentidodelasagujasdelreloj.Unánguloiguala0devuelveunerror.Elcentroesunamatrizdevariantesquecontienetresdobles.Estosdoblesrepresentanlascoordenadas3DdelSCUqueindicanelcentrodelamatrizpolar

AutoCADdeterminaladistanciaentreelcentrodelamatrizyunpuntodereferenciadelobjetooriginal.Elpuntodereferenciautilizadodependedeltipodeobjeto.AutoCADutilizaelcentrodeuncírculooarco,elpuntodeinsercióndeunbloqueoforma,elpuntoinicialdeltextoyunpuntofinaldeunalíneaotrazo.

EstemétodonoadmitelaopciónGirarobjetosamedidaquesecopiandelcomandoMATRIZdeAutoCAD.

Creacióndeunamatrizpolar

Esteejemplocreauncírculoydespuéscreaunamatrizpolardelcírculo.Deestaformasecreancuatrocírculosquerellenan180gradosalrededordeunpuntobasede(4,4,0).

SubCh4_ArrayingACircle()

'Createthecircle

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2#:center(1)=2#:center(2)=0#

radius=1

SetcircleObj=ThisDrawing.ModelSpace._

AddCircle(center,radius)

ZoomAll

'Definethepolararray

DimnoOfObjectsAsInteger

DimangleToFillAsDouble

DimbasePnt(0To2)AsDouble

noOfObjects=4

angleToFill=3.14'180degrees

basePnt(0)=4#:basePnt(1)=4#:basePnt(2)=0#

'Thefollowingexamplewillcreate4copies

'ofanobjectbyrotatingandcopyingitabout

'thepoint(3,3,0).

DimretObjAsVariant

retObj=circleObj.ArrayPolar_

(noOfObjects,angleToFill,basePnt)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Disposicióndeobjetosenmatrices>

Creacióndematricesrectangulares

Paracrearunamatrizrectangular2Do3D,utiliceelmétodoArrayRectangulardelobjeto.Estemétodorequierequeseespecifiqueelnúmerodefilasycolumnas,ladistanciaentrefilasyladistanciaentrecolumnas.Alcrearunamatriz3Dtambiénhayqueprecisarelnúmerodenivelesyladistanciaentreellos.

Lasmatricesrectangularesseconstruyenreproduciendoelobjetodelconjuntodeselecciónelnúmerodevecesnecesario.Ladefinicióndeunafilaimplicalaespecificacióndemásdeunacolumna,yviceversa.

Sesuponequeelobjetooriginalseencuentraenlaesquinainferiorizquierda,porloquelamatrizsegeneraarribayaladerecha.Cuandoladistanciaentrefilasesunnúmeronegativo,lasfilasseañadenhaciaabajo.Siladistanciaentrecolumnasesunnúmeronegativo,lascolumnasseañadenhacialaizquierda.

AutoCADconstruyelamatrizrectangularalolargodelalíneabasedefinidaporelánguloderotaciónderesoluciónactual.Pordefecto,dichoángulovienedefinidoconelvalor0,loquesuponequelasfilasycolumnasdeunamatrizrectangularseanortogonalesconrespectoalosejesXeYdeldibujo.PuedecambiaresteánguloycrearunamatrizrotadasidefineelánguloderotacióndeForzcursorconunvalordistintodecero.Paraello,utilicelapropiedadSnapRotationAngle.

Creacióndeunamatrizrectangular

Enesteejemplosecreauncírculoy,acontinuación,unamatrizrectangulardelcírculoconcincofilasycincocolumnasdecírculos.

SubCh4_ArrayRectangularExample()

'Createthecircle

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2#:center(1)=2#:center(2)=0#

radius=0.5

SetcircleObj=ThisDrawing.ModelSpace._

AddCircle(center,radius)

ZoomAll

'Definetherectangulararray

DimnumberOfRowsAsLong

DimnumberOfColumnsAsLong

DimnumberOfLevelsAsLong

DimdistanceBwtnRowsAsDouble

DimdistanceBwtnColumnsAsDouble

DimdistanceBwtnLevelsAsDouble

numberOfRows=5

numberOfColumns=5

numberOfLevels=2

distanceBwtnRows=1

distanceBwtnColumns=1

distanceBwtnLevels=1

'Createthearrayofobjects

DimretObjAsVariant

retObj=circleObj.ArrayRectangular_

(numberOfRows,numberOfColumns,numberOfLevels,_

distanceBwtnRows,distanceBwtnColumns,distanceBwtnLevels)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Desplazamientodeobjetos

Sepuededesplazarobjetosalolargodeunvectorsinmodificarsuorientaciónnisutamaño.Tambiénsepuedegirarobjetosentornoaunpuntobase.

Paraobtenermásinformaciónacercadeldesplazamientodeobjetos,véase“Desplazamientodeobjetos”enelManualdelusuario.

Desplazamientodeobjetosalolargodeunvector

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Desplazamientodeobjetos>

Desplazamientodeobjetosalolargodeunvector

Todoslosobjetosdedibujoylosobjetosdereferenciadeatributospuedendesplazarseporunvectordefinido.

Paradesplazarunobjeto,utiliceelmétodoMovedelobjeto.Estemétodorequierelaentradadedoscoordenadas.Estascoordenadasdefinenunvectordedesplazamientoqueindicaladistanciaalaquedebetrasladarseelobjetoyenquédirección.

Desplazamientodeuncírculoalolargodeunvector

Enesteejemplosecreauncírculoy,acontinuación,sedesplazadosunidadesalolargodelejeX.

SubCh4_MoveCircle()

'Createthecircle

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2#:center(1)=2#:center(2)=0#

radius=0.5

SetcircleObj=ThisDrawing.ModelSpace._

AddCircle(center,radius)

ZoomAll

'Definethepointsthatmakeupthemovevector.

'Themovevectorwillmovethecircle2units

'alongthexaxis.

Dimpoint1(0To2)AsDouble

Dimpoint2(0To2)AsDouble

point1(0)=0:point1(1)=4.25:point1(2)=0

point2(0)=2:point2(1)=4.25:point2(2)=0

'Movethecircle

circleObj.Movepoint1,point2

circleObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Rotacióndeobjetos

Puederotartodoslosobjetosdedibujoytodoslosobjetosdereferenciadeatributos.

Pararotarunobjeto,utiliceelmétodoRotatedelobjeto.Estemétodorequierelaentradadeunpuntobaseydeunánguloderotación.Elpuntobaseesunamatrizdevariantescontresdobles.Estosdoblesrepresentanlascoordenadas3DdelSCUqueindicanelpuntosobreelqueestádefinidoelejederotación.Elánguloderotaciónsedesignaenradianesydeterminacuántorotaunobjetoalrededordelpuntobaserespectodesuposiciónactual.

Paraobtenermásinformaciónacercadelarotacióndeobjetos,véase“Rotacióndeobjetos”enelManualdelusuario.

Rotacióndeunapolilíneaconrespectoaunpuntobase

Esteejemplocreaunapolilíneaoptimizadacerradaydespuéslagira45gradosconrespectoalpuntobase(4,4.25,0).

SubCh4_RotatePolyline()

'Createthepolyline

DimplineObjAsAcadLWPolyline

Dimpoints(0To11)AsDouble

points(0)=1:points(1)=2

points(2)=1:points(3)=3

points(4)=2:points(5)=3

points(6)=3:points(7)=3

points(8)=4:points(9)=4

points(10)=4:points(11)=2

SetplineObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

plineObj.Closed=True

ZoomAll

'Definetherotationof45degreesabouta

'basepointof(4,4.25,0)

DimbasePoint(0To2)AsDouble

DimrotationAngleAsDouble

basePoint(0)=4:basePoint(1)=4.25:basePoint(2)=0

rotationAngle=0.7853981'45degrees

'Rotatethepolyline

plineObj.RotatebasePoint,rotationAngle

plineObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Supresióndeobjetos

LosobjetosindividualessesuprimenconelmétodoDelete.

Nota LosobjetosCollectiondeActiveXAutomationtienenunmétodoDeletedebidoalmodoenqueestosobjetosestándefinidosenlabibliotecadetipos.Noobstante,losobjetosCollectioncomocoleccionesModelSpace,LayersyDictionariesnodebensuprimirsenunca.Siseintentasuprimirunacolección,seproduceunerror.

Creaciónysupresióndeunapolilínea

Esteejemplocreaunapolilíneaoptimizadaydespuéslaborra.

SubCh4_DeletePolyline()

'Createthepolyline

DimlwpolyObjAsAcadLWPolyline

Dimvertices(0To5)AsDouble

vertices(0)=2:vertices(1)=4

vertices(2)=4:vertices(3)=2

vertices(4)=6:vertices(5)=4

SetlwpolyObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(vertices)

ZoomAll

'Erasethepolyline

lwpolyObj.Delete

ThisDrawing.RegenacActiveViewport

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Aplicarunaescalaalosobjetos

Sepuedeatribuirunaescalaaunobjetosiseindicanunpuntobaseyunalongitud,queseutilizarácomofactordeescalaenfuncióndelasunidadesdedibujoactuales.Puedeajustarlaescaladetodoslosobjetosdedibujo,asícomoladetodoslosobjetosdereferenciadeatributos.

Paraajustarelfactordeescaladeunobjeto,utiliceelmétodoScaleEntitydelobjeto.EstemétodoajustalamismaescalaparaelobjetoenlasdireccionesX,YyZ.Aceptacomoentradaelpuntobasedelaescalayunfactordeescala.Elpuntobaseesunamatrizdevariantescontresdobles.Estosdoblesrepresentanlascoordenadas3DdelSCUqueindicanelpuntodondecomienzalaescala.Elfactordeescalaeselvalorsobreelqueseajustalaescaladelobjeto.Lascotasdelobjetosemultiplicanporelfactordeescala.Unfactordeescalasuperioralvalor1amplíaelobjeto.Unfactordeescalaentre0y1reduceelobjeto.

Paraobtenermásinformaciónacercadelaaplicacióndeescala,véase“Ajustedeltamañoolaformadelosobjetos”enelManualdelusuario.

Cambiodelaescaladeunapolilínea

Esteejemplocreaunapolilíneaoptimizadacerradaydespuésajustasuescalaconunfactor0.5.

SubCh4_ScalePolyline()

'Createthepolyline

DimplineObjAsAcadLWPolyline

Dimpoints(0To11)AsDouble

points(0)=1:points(1)=2

points(2)=1:points(3)=3

points(4)=2:points(5)=3

points(6)=3:points(7)=3

points(8)=4:points(9)=4

points(10)=4:points(11)=2

SetplineObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

plineObj.Closed=True

ZoomAll

'Definethescale

DimbasePoint(0To2)AsDouble

DimscalefactorAsDouble

basePoint(0)=4:basePoint(1)=4.25:basePoint(2)=0

scalefactor=0.5

'Scalethepolyline

plineObj.ScaleEntitybasePoint,scalefactor

plineObj.Update

EndSub

¿Comentarios?

<$nopage>matriz:

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Transformacióndeobjetos

Unobjetosepuededesplazar,cambiardeescalaorotarconunamatrizdetransformaciónde4por4utilizandoelmétodoTransformBy.

Enlatablasiguientesemuestralaconfiguracióndelamatrizdetransformación,dondeR=rotaciónyT=transformación.

Configuracióndelamatrizdetransformación

R00 R01 R02 T0

R10 R11 R12 T1

R20 R21 R22 T2

0 0 0 1

Paratransformarunobjeto,esnecesarioinicializaranteslamatrizdetransformación.Enelsiguienteejemplosemuestraunamatrizdetransformación,asignadaalavariabletMatrix,querotaunaentidad90gradosalrededordelpunto(0,0,0):

tMatrix(0,0)=0.0

tMatrix(0,1)=-1.0

tMatrix(0,2)=0.0

tMatrix(0,3)=0.0

tMatrix(1,0)=1.0

tMatrix(1,1)=0.0

tMatrix(1,2)=0.0

tMatrix(1,3)=0.0

tMatrix(2,0)=0.0

tMatrix(2,1)=0.0

tMatrix(2,2)=1.0

tMatrix(2,3)=0.0

tMatrix(3,0)=0.0

tMatrix(3,1)=0.0

tMatrix(3,2)=0.0

tMatrix(3,3)=1.0

Unavezterminadalamatrizdetransformación,debeaplicarsealobjetoconelmétodoTransformBy.Lasiguientelíneadecódigoesunademostracióndecómoseaplicaunamatriz(tMatrix)aunobjeto(anObj):

anObj.TransformBytMatrix

Rotacióndeunalíneamedianteunamatrizdetransformación

Esteejemplocreaunalíneaylagira90gradosaplicandounamatrizdetransformación.

SubCh4_TransformBy()

'Createaline

DimlineObjAsAcadLine

DimstartPt(0To2)AsDouble

DimendPt(0To2)AsDouble

startPt(2)=0

startPt(1)=1

startPt(2)=0

endPt(0)=5

endPt(1)=1

endPt(2)=0

SetlineObj=ThisDrawing.ModelSpace._

AddLine(startPt,endPt)

ZoomAll

'InitializethetransMatvariablewitha

'transformationmatrixthatwillrotate

'anobjectby90degreesaboutthepoint(0,0,0)

DimtransMat(0To3,0To3)AsDouble

transMat(0,0)=0#:transMat(0,1)=-1#

transMat(0,2)=0#:transMat(0,3)=0#

transMat(1,0)=1#:transMat(1,1)=0#

transMat(1,2)=0#:transMat(1,3)=0#

transMat(2,0)=0#:transMat(2,1)=0#

transMat(2,2)=1#:transMat(2,3)=0#

transMat(3,0)=0#:transMat(3,1)=0#

transMat(3,2)=0#:transMat(3,3)=1#

'Transformthelineusingthedefinedtransformationmatrix

lineObj.TransformBytransMat

lineObj.Update

EndSub

Acontinuaciónsepresentanotrosejemplosdematricesdetransformación:

Matrizderotación:90gradosalrededordelpunto(0,0,0)

0.0 -1.0 0.0 0.0

1.0 0.0 0.0 0.0

0.0 0.0 1.0 0.0

0.0 0.0 0.0 1,0

Matrizderotación:45gradosalrededordelpunto(5,5,0)

0.707107 -0.707107 0.0 5.0

0.707107 0.707107 0.0 -2.071068

0.0 0.0 1.0 0.0

0.0 0.0 0.0 1.0

Matrizdetraslación:mueveunaentidaden(10,10,0)

1.0 0.0 0.0 10.0

0.0 1.0 0.0 10.0

0.0 0.0 1.0 0.0

0.0 0.0 0.0 1.0

Matrizdeajustedeescala:ajustedeescalade10,10enelpunto(0,0,0)

10.0 0.0 0.0 0.0

0.0 10.0 0.0 0.0

0.0 0.0 10.0 0.0

0.0 0.0 0.0 1.0

Matrizdeajustedeescala:ajustedeescalade10,10enelpunto(2,2,0)

10.0 0.0 0.0 -18.0

0.0 10.0 0.0 -18.0

0.0 0.0 10.0 0.0

0.0 0.0 0.0 1.0

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Alargamientoyrecortedeobjetos

Sepuedecambiarelángulodelosarcosylalongituddelaslíneasabiertas,arcos,polilíneasabiertas,arcoselípticosysplinesabiertas.Seobtieneunresultadomuyparecidoaldelalargamientoyrecortedeobjetos.

Losobjetossepuedenalargaryrecortarsisemodificansuspropiedades.Porejemplo,paraalargarunalínea,cambielascoordenadasdelaspropiedadesStartPointoEndPoint.Paracambiarelángulodeunarco,modifiquelaspropiedadesStartAngleoEndAngledelarco.Despuésdemodificarpropiedadesdeunobjeto,debeutilizarseelmétodoUpdateparaverloscambioseneldibujo.

Paraobtenermásinformaciónacercadelalargamientoyrecortedeobjetos,véase“Ajustedeltamañoolaformadelosobjetos”enelManualdelusuario.

Alargarunalínea

Enesteejemplosecreaunalíneaysecambiasupuntofinal,conloqueaumentasulongitud.

SubCh4_LengthenLine()

'Defineandcreatetheline

DimlineObjAsAcadLine

DimstartPoint(0To2)AsDouble

DimendPoint(0To2)AsDouble

startPoint(0)=0

startPoint(1)=0

startPoint(2)=0

endPoint(0)=1

endPoint(1)=1

endPoint(2)=1

SetlineObj=ThisDrawing.ModelSpace._

AddLine(startPoint,endPoint)

lineObj.Update

'Lengthenthelinebychangingthe

'endpointto4,4,4

endPoint(0)=4

endPoint(1)=4

endPoint(2)=4

lineObj.endPoint=endPoint

lineObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Descomposicióndeobjetos

Ladescomposicióndeobjetosfragmentalosobjetosindividualesensuspartesconstitutivas,perosusefectosnosonvisiblesenlapantalla.Porejemplo,ladescomposicióndeformasdelugaralíneasyarcosapartirdepolígonos3D,polilíneas,mallaspoligonalesyregiones.Sustituyeunareferenciaabloqueconcopiasdelosobjetossimplesquecomponenelbloque.

Paraobtenerinformaciónacercadeladescomposicióndeobjetos,véase“Disociacióndeobjetoscompuestos(Descomponer)”enelManualdelusuario.

Descomposicióndeunapolilínea

Esteejemplocreaunobjetodepolilíneaoptimizada.Despuésladescomponeenvariosobjetos.Elejemplorealizaunbucleenlosobjetosresultantesymuestrauncuadrodemensajequecontieneelnombredetodoslosobjetosysuíndiceenlalistadeobjetosdescompuestos.

SubCh4_ExplodePolyline()

DimplineObjAsAcadLWPolyline

Dimpoints(0To11)AsDouble

'Definethe2Dpolylinepoints

points(0)=1:points(1)=1

points(2)=1:points(3)=2

points(4)=2:points(5)=2

points(6)=3:points(7)=2

points(8)=4:points(9)=4

points(10)=4:points(11)=1

'CreatealightweightPolylineobject

SetplineObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

'Setthebulgeononesegmenttovarythe

'typeofobjectsinthepolyline

plineObj.SetBulge3,-0.5

plineObj.Update

'Explodethepolyline

DimexplodedObjectsAsVariant

explodedObjects=plineObj.Explode

'Loopthroughtheexplodedobjects

'anddisplayamessageboxwith

'thetypeofeachobject

DimIAsInteger

ForI=0ToUBound(explodedObjects)

explodedObjects(I).Update

MsgBox"ExplodedObject"&I&":"&_

explodedObjects(I).ObjectName

explodedObjects(I).Update

Next

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Edicióndepolilíneas

Laspolilíneas2Dy3D,losrectángulos,lospolígonosylasmallaspoligonales3Dsonvariantesdepolilíneasyseeditandelamismamaneraqueellas.

AutoCADreconocetantolaspolilíneasajustadascomolaspolilíneasajustadasenformadesplines.Unapolilíneaajustadaenformadesplineutilizaunajustedecurva,similaraunaB-spline.Existendostiposdepolilíneasajustadasenformadespline:cuadráticasycúbicas.LasdospolilíneasestáncontroladasporlavariabledesistemaSPLINETYPE.Unapolilíneaajustadautilizacurvasestándarparaelajustedecurvasycualquierdireccióntangentedefinidaenunvérticedeterminado.

Paramodificarunapolilínea,utilicelaspropiedadesylosmétodosdelosobjetosLightweightPolylineoPolyline.Paraabrirocerrarunapolilínea,cambiarlascoordenadasdeunvérticedepolilíneaoagregarunvértice,utilicelossiguientesmétodosypropiedades:

Closed(propiedad)

Abreocierralapolilínea.

Coordinates(propiedad)

Especificalascoordenadasdecadavérticedelapolilínea.

AddVertex(método)

Añadeunvérticeaunapolilíneaoptimizada.

Utilicelossiguientesmétodosparaactualizarlacurvaturaolaanchuradeunapolilínea:

SetBulge

Definelacurvaturadeunapolilínea,dadoelíndicedesegmentos.

SetWidth

Definelasanchurasinicialyfinaldeunapolilínea,dadoelíndicedesegmentos.

Paraobtenermásinformaciónacercadelamodificacióndepolilíneas,véase“Modificaciónounióndepolilíneas”enelManualdelusuario.

Modificacióndeunapolilínea

Esteejemplocreaunapolilíneaoptimizada.Despuésañadeunacurvaturaaltercersegmentodelapolilínea,añadeunvértice,cambialaanchuradelúltimosegmentoy,porúltimo,lacierra.

SubCh4_EditPolyline()

DimplineObjAsAcadLWPolyline

Dimpoints(0To9)AsDouble

'Definethe2Dpolylinepoints

points(0)=1:points(1)=1

points(2)=1:points(3)=2

points(4)=2:points(5)=2

points(6)=3:points(7)=2

points(8)=4:points(9)=4

'CreatealightweightPolylineobject

SetplineObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

'Addabulgetosegment3

plineObj.SetBulge3,-0.5

'Definethenewvertex

DimnewVertex(0To1)AsDouble

newVertex(0)=4:newVertex(1)=1

'Addthevertextothepolyline

plineObj.AddVertex5,newVertex

'Setthewidthofthenewsegment

plineObj.SetWidth4,0.1,0.5

'Closethepolyline

plineObj.Closed=True

plineObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Modificacióndesplines

Utilicelassiguientespropiedadesmodificablesparacambiarcurvasspline:

ControlPoints

Especificalospuntosdeapoyodelaspline.

EndTangent

Establecelatangentefinaldelasplinecomovectordedirección.

FitPoints

Especificatodoslospuntosdeajustedelaspline.

FitTolerance

VuelveaajustarlacurvaSplinealospuntosexistentesconlosvaloresdetolerancianuevos.

Knots

Especificaelvectornodaldelaspline.

StartTangent

Especificalatangenteinicialdelaspline.

Tambiénpuedeutilizarestosmétodosparaeditarsplines:

AddFitPoint

Agregaunpuntodeajustealasplineenelíndiceindicado.

DeleteFitPoint

Suprimeelpuntodeajustedeunasplineenelíndiceindicado.

ElevateOrder

Elevaelordendelasplinehastaelordenindicado.

GetFitPoint

Defineelpuntodeajusteenelíndiceindicado(sólounpuntodeajuste.(Sólounpuntodeajuste.Paraconsultartodoslospuntosdeajustedelaspline,utilicelapropiedadFitPoints).

Invertir

Invierteladireccióndelaspline.

SetControlPoint

Defineelpuntodeapoyodelasplineenelíndiceindicado.

SetFitPoint

Defineelpuntodeajusteenelíndiceindicado.(Sólounpuntodeajuste.Paraconsultartodoslospuntosdeajustedelaspline,utilicelapropiedadFitPoints).

SetWeight

Defineelgrosordelpuntodeapoyoenuníndicedado.

Utilicelassiguientespropiedadesdesólolecturaparaconsultarsplines:

Area

Obtieneeláreacerradadeunaspline.

Closed

Indicasilasplineestáabiertaocerrada.

Degree

Obtieneelgradodelarepresentaciónpolinómicadelaspline.

IsPeriodic

Especificasilasplinedadaesperiódica.

IsPlanar

Especificasilasplinedadaesplana.

IsRational

Especificasilasplinedadaesracional.

NumberOfControlPoints

Obtieneelnúmerodepuntosdeapoyodelaspline.

NumberOfFitPoints

Obtieneelnúmerodepuntosdeajustedelaspline.

Paraobtenermásinformaciónacercadelamodificacióndecurvasspline,véase“Modificacióndesplines”enelManualdelusuario.

Modificacióndeunpuntodeapoyoenunacurvaspline

Esteejemplocreaunacurvasplineycambiasuprimerpuntodeapoyo.

SubCh4_ChangeSplineControlPoint()

'Createthespline

DimsplineObjAsAcadSpline

DimstartTan(0To2)AsDouble

DimendTan(0To2)AsDouble

DimfitPoints(0To8)AsDouble

startTan(0)=0.5:startTan(1)=0.5:startTan(2)=0

endTan(0)=0.5:endTan(1)=0.5:endTan(2)=0

fitPoints(0)=1:fitPoints(1)=1:fitPoints(2)=0

fitPoints(3)=5:fitPoints(4)=5:fitPoints(5)=0

fitPoints(6)=10:fitPoints(7)=0:fitPoints(8)=0

SetsplineObj=ThisDrawing.ModelSpace._

AddSpline(fitPoints,startTan,endTan)

splineObj.Update

'Changethecoordinateofthefirstfitpoint

DimcontrolPoint(0To2)AsDouble

controlPoint(0)=0

controlPoint(1)=3

controlPoint(2)=0

splineObj.SetControlPoint0,controlPoint

splineObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>

Edicióndesombreados

Sepuedeneditartantoloscontornoscomolospatronesdesombreado.Sisemodificaelcontornodeunsombreadoasociativo,elpatrónseactualizarásiempreycuandoelprocesodeedicióndécomoresultadouncontornoválido.Lossombreadosasociativosseactualizaninclusosifiguranencapasinutilizadas.AutoCADpermitemodificarlospatronesdesombreadooelegirpatronesnuevosparalossombreadosexistentes,perolaasociatividadsólopuededefinirseunavezqueelobjetoestécreado.PuedeutilizarlapropiedadAssociativeHatchparaverificarsiunobjetoHatchestáasociado.(paraobtenermásinformaciónacercadelacreacióndeunsombreado,véaseelmétodo)AddHatch.

Paraverloscambiosdesombreadoefectuados,sedebevolveraevaluarelsombreadoconelmétodoEvaluate.

Paraobtenermásinformaciónsobrelamodificacióndesombreados,véase“Modificacióndesombreadosyáreasderellenosólido”enelManualdelusuario.

ModificacióndecontornosdesombreadoEdicióndepatronesdesombreado

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Edicióndesombreados>

Modificacióndecontornosdesombreado

Sepuedenagregaroinsertarbuclesenloscontornosdelsombreado.Lossombreadosasociativosseactualizanparaigualarsealoscambiosefectuadosensuscontornos.Lossombreadosnoasociativosnoseactualizan.

Paraeditaruncontornodesombreado,utiliceunodelosmétodossiguientes:

AppendInnerLoop

Añadeunbucleinterioralsombreado.

AppendOuterLoop

Añadeunbucleexterioralsombreado.

InsertLoopAt

Insertaunbucleenuníndicedadodeunsombreado.

Adicióndeunbucleinterioraunsombreado.

Esteejemplocreaunsombreadoasociativo.Despuéscreauncírculoyloañadecomobucleinternodelsombreado.

SubCh4_AppendInnerLoopToHatch()

DimhatchObjAsAcadHatch

DimpatternNameAsString

DimPatternTypeAsLong

DimbAssociativityAsBoolean

'Defineandcreatethehatch

patternName="ANSI31"

PatternType=0

bAssociativity=True

SethatchObj=ThisDrawing.ModelSpace._

AddHatch(PatternType,patternName,bAssociativity)

'Createtheouterloopforthehatch.

DimouterLoop(0To1)AsAcadEntity

Dimcenter(0To2)AsDouble

DimradiusAsDouble

DimstartAngleAsDouble

DimendAngleAsDouble

center(0)=5:center(1)=3:center(2)=0

radius=3

startAngle=0

endAngle=3.141592

SetouterLoop(0)=ThisDrawing.ModelSpace._

AddArc(center,radius,startAngle,endAngle)

SetouterLoop(1)=ThisDrawing.ModelSpace._

AddLine(outerLoop(0).startPoint,outerLoop(0).endPoint)

'Appendtheouterlooptothehatchobject

hatchObj.AppendOuterLoop(outerLoop)

'Createacircleastheinnerloopforthehatch.

DiminnerLoop(0)AsAcadEntity

center(0)=5:center(1)=4,5:center(2)=0

radius=1

SetinnerLoop(0)=ThisDrawing.ModelSpace._

AddCircle(center,radius)

'Appendthecircleasaninnerlooptothehatch

hatchObj.AppendInnerLoop(innerLoop)

'Evaluateanddisplaythehatch

hatchObj.Evaluate

ThisDrawing.RegenTrue

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Edicióndesombreados>

Edicióndepatronesdesombreado

PuedemodificarelánguloyelespaciadodeunpatróndesombreadoexistenteosustituirloporunrellenosólidooporunodelospatronespredefinidosprovistosporAutoCAD.LaopciónPatróndelcuadrodediálogoSombreadopermiteverunalistadelospatrones.Parareducireltamañodelarchivo,elsombreadosedefineeneldibujocomounsoloobjetográfico.

Utilicelossiguientesmétodosypropiedadesparamodificarlospatronesdesombreado:

PatternAngle

Determinaelángulodelpatróndesombreado.

PatternDouble

Indicasielsombreadodefinidoporelusuarioesunsombreadodoble.

PatternName

Especificaelnombredelpatróndesombreado(nocambiaeltipodelpatrón).

PatternScale

Determinalaescaladelospatronesdesombreado.

PatternSpace

Especificaelespaciadodelpatróndesombreadodefinidoporelusuario.

SetPattern

Defineelnombreyeltipodelpatróndesombreado.

Modificacióndelintervalodelpatróndeunsombreado

Esteejemplocreaunsombreado.Despuésañadedosalespaciadodelpatrónactualdelsombreado.

SubCh4_ChangeHatchPatternSpace()

DimhatchObjAsAcadHatch

DimpatternNameAsString

DimPatternTypeAsLong

DimbAssociativityAsBoolean

'Definethehatch

patternName="ANSI31"

PatternType=0

bAssociativity=True

'CreatetheassociativeHatchobject

SethatchObj=ThisDrawing.ModelSpace._

AddHatch(PatternType,patternName,bAssociativity)

'Createtheouterloopforthehatch.

DimouterLoop(0To0)AsAcadEntity

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=5

center(1)=3

center(2)=0

radius=3

SetouterLoop(0)=ThisDrawing.ModelSpace._

AddCircle(center,radius)

hatchObj.AppendOuterLoop(outerLoop)

hatchObj.Evaluate

'Changethespacingofthehatchpatternby

'adding2tothecurrentspacing

hatchObj.patternSpace=hatchObj.patternSpace+2

hatchObj.Evaluate

ThisDrawing.RegenTrue

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>

Usodecapas,coloresytiposdelínea

Lascapassonsuperposicionestransparentesenlascualesseorganizanyseagrupandistintostiposdedatosdeldibujo.Losobjetosquesecreantienenpropiedadescomunescomocapas,coloresytiposdelínea.Elcolorcontribuyeaestablecerlasdiferenciasoportunasentreelementossimilaresquecomponeneldibujo,ylostiposdelíneasirvenparadistinguirfácilmentelosdistintoselementosdeldibujo,comolaslíneasdecentroolaslíneasocultas.Laorganizaciónencapasdelascapasylosobjetosfacilitaelmanejodelainformacióndelosdibujos.

Paraobtenermásinformaciónacercadeestetema,véase“Controldelaspropiedadesdelosobjetos”enelManualdelusuario.

TrabajarconcapasTrabajoconcoloresTrabajocontiposdelíneaAsignacióndecapas,coloresytiposdelíneaaobjetos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>

Trabajarconcapas

Siempresedibujaenunacapa.Puedeserlacapapordefectoounacapaquehayacreadoelusuarioyalaquehayaasignadounnombre.Cadacapatieneuncoloryuntipodelíneaasociados.Porejemplo,sepuedecrearunacapaparadibujarsololíneasdecentro,yasignarleacontinuaciónelcolorazulyeltipodelíneaCENTER.Apartirdeentonces,siemprequevayaadibujarunalíneadecentropuedepasaralacapadelíneasdecentroycomenzaradibujar.

Todoslostiposdelíneaylascapaspermanecenenlosobjetosdesuscoleccionessuperiores.LascapassemantienenenlacolecciónLayers,mientrasquelostiposdelíneaestánenlacolecciónLinetypes.

Paraobtenermásinformaciónacercadelascapas,véase“Utilizacióndecapas“enelManualdelusuario.

OrdenacióndecapasytiposdelíneaCreaciónydenominacióndecapasConversióndeunacapaenactivaActivaciónydesactivacióndecapasInutilizaciónyreutilizacióndecapasBloqueoydesbloqueodecapasAsignacióndecoloraunacapaAsignacióndeuntipodelíneaaunacapaSupresióndecapas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Ordenacióndecapasytiposdelínea

SepuedeiterarenlascoleccionesLayersyLinetypesparaencontrartodaslascapasytiposdelíneadeldibujo.

Iteraciónenlacoleccióndecapas

ElsiguientecódigoefectúaiteracionesenlacolecciónLayersparaobtenerlosnombresdetodaslascapasdeldibujo.Losnombressemuestranenuncuadrodemensajes.

SubCh4_IteratingLayers()

DimlayerNamesAsString

DimentryAsAcadLayer

layerNames=""

ForEachentryInThisDrawing.Layers

layerNames=layerNames+entry.Name+vbCrLf

Next

MsgBox"Thelayersinthisdrawingare:"+_

vbCrLf+layerNames

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Creaciónydenominacióndecapas

Sepuedecrearcapasnuevasyasignarlespropiedadesdecolorytipodelínea.TodaslascapasindividualesformanpartedelacolecciónLayers.Paracrearuncapanuevayañadirlaalacoleccióndecapas,utiliceelmétodoAdd.

Elnombredelascapasselesasignaalcrearlas.Sidespuésdecrearunacapadeseacambiarsunombre,utilicelapropiedadName.Losnombresdecapapuedenconstardeuntotalde31caracteresycontenerletras,númerosylossignosespecialesdedólar($),guión(–)ysubrayado(_),peronopuedencontenerespaciosenblanco.

Paraobtenermásinformaciónacercadelacreacióndecapas,véase“Creaciónydenominacióndecapas”enelManualdelusuario.

Paracrearunacapanueva,asignarleelcolorrojoyagregarleunobjeto

Elcódigodelejemplosiguientecreauncírculoyunacapanueva.Seasignaelcolorrojoalanuevacapa.Elcírculoseasignaalacapaysucolorcambiaenconsecuencia.

SubCh4_NewLayer()

'Createacircle

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2:center(1)=2:center(2)=0

radius=1

SetcircleObj=ThisDrawing.ModelSpace._

AddCircle(center,radius)

'Createacolorobject

DimcolAsNewAcadAcCmColor

col.ColorMethod=AutoCAD.acColorMethodForeground

'Setthelayertothecolor

DimlayColorAsAcadAcCmColor

SetlayColor=

AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")

CalllayColor.SetRGB(122,199,25)

ThisDrawing.ActiveLayer.TrueColor=layColor

col.ColorMethod=AutoCAD.acColorMethodByLayer

'Assignthecirclethecolor"ByLayer"so

'thatthecirclewillautomaticallypick

'upthecolorofthelayeronwhichitresides

circleObj.Color=acByLayer

circleObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Conversióndeunacapaenactiva

Eldibujosiempreserealizaenlacapaactiva.Cuandounacapaseactiva,sepuedencrearobjetosnuevosenella.Siseactivaunacapadistinta,losnuevosobjetossecrearánenlanuevacapaactivayutilizaránsucolorytipodelínea.Lascapasinutilizadasnopuedenactivarse.

Paraconvertirunacapaenactiva,utilicelapropiedadActiveLayer.Estapropiedadsedefineeneldibujoactivo.Porejemplo:

DimnewlayerAsAcadLayer

Setnewlayer=ThisDrawing.Layers.Add("LAYER1")

ThisDrawing.ActiveLayer=newlayer

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Activaciónydesactivacióndecapas

Lascapasdesactivadasseregeneranconeldibujo,peronosevisualizannitrazan.Aldesactivarlas,seevitatenerqueregenerareldibujocadavezquesereutilizaunacapa.Alactivarunacapaquesehadesactivado,AutoCADvuelveadibujarlosobjetosdeesacapa.

Paraactivarydesactivarcapas,utilicelapropiedadLayerOn.SileasignaelvalorTRUE,lacapaseactiva.SileasignaelvalorFALSE,lacapasedesactiva.

Desactivacióndeunacapa

Esteejemplocreaunacapanueva,leañadeuncírculoyladesactivaparaqueelcírculonoestévisible.

SubCh4_LayerInvisible()

'Createacircle

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2:center(1)=2:center(2)=0

radius=1

SetcircleObj=ThisDrawing.ModelSpace._

AddCircle(center,radius)

'Createanewlayercalled"ABC"

DimlayerObjAsAcadLayer

SetlayerObj=ThisDrawing.Layers.Add("ABC")

'Assignthecircletothe"ABC"layer

circleObj.Layer="ABC"

circleObj.Update

'Turnofflayer"ABC"

layerObj.LayerOn=False

ThisDrawing.RegenacActiveViewport

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Inutilizaciónyreutilizacióndecapas

Puedeinutilizarcapasparaaumentarlavelocidaddeloscambiosenpantalla,mejorarelrendimientodeladesignacióndeobjetosyreducireltiempoderegeneracióndedibujoscomplejos.AutoCADnomuestra,regeneranitrazaobjetosenlascapasinutilizadas.Inutilicelascapasquequieraqueseaninvisiblesdurantelargosperiodosdetiempo.Al“reutilizar”unacapainutilizada,AutoCADregeneraymuestralosobjetosdedichacapa.

Parainutilizaroreutilizarunacapa,utilicelapropiedadFreeze.SiintroduceunvalordeTRUEenestapropiedad,lacapaseinutiliza.SileasignaelvalorFALSE,lacapasereutiliza.

Inutilizacióndeunacapa

Enesteejemplosecreaunanuevacapallamada“ABC”y,acontinuación,seinutiliza.

SubCh4_LayerFreeze()

'Createanewlayercalled"ABC"

DimlayerObjAsAcadLayer

SetlayerObj=ThisDrawing.Layers.Add("ABC")

'Freezelayer"ABC"

layerObj.Freeze=True

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Bloqueoydesbloqueodecapas

Losobjetosdispuestosenunacapabloqueadanopuedeneditarse,peropermanecenvisiblessilacapaestáactivadaynoestáinutilizada.Tambiénesposibleconvertirenactualunacapabloqueadayañadirleobjetos.Sepuedeinutilizarydesactivarcapasbloqueadasasícomocambiarsuspropiedadesasociadasdecolorytiposdelínea.

Parabloquearodesbloquearunacapa,utilicelapropiedadLock.SiintroduceunvalordeTRUEenestapropiedad,lacapasebloquea.SileasignaelvalorFALSE,lacapasedesbloquea.

Bloqueodeunacapa

Enesteejemplosecreaunanuevacapallamada“ABC”y,acontinuación,sebloquea.

SubCh4_LayerLock()

'Createanewlayercalled"ABC"

DimlayerObjAsAcadLayer

SetlayerObj=ThisDrawing.Layers.Add("ABC")

'Locklayer"ABC"

layerObj.Lock=True

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Asignacióndecoloraunacapa

Sepuedeasignarcoloraunacapa.LoscoloresseidentificanmedianteelobjetoAcCmColor.EsteobjetopuedecontenerunvalorRGB,unnúmeroACI(unenterocomprendidoentre1y255)ouncolorguardado.

Paraasignarcoloraunacapa,utilicelapropiedadTrueColor.

SehanproporcionadolasconstantesparalossietecoloresestándarylasdesignacionesBYBLOCKyBYLAYER.

SiutilizaacByBlock,AutoCADdibujalosobjetosnuevosconelcolorpordefecto(blancoonegro,segúnlaconfiguración)hastaquequedanagrupadosenunbloque.Alinsertarestebloqueeneldibujo,losobjetosadoptanelparámetroactual.

SiseleccionaacByLayer,losobjetosnuevosadoptanelcolordelacapasobrelaquesehandibujado.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Asignacióndeuntipodelíneaaunacapa

Cuandosedefinencapas,lostiposdelíneaconstituyenotramaneradeofrecerinformaciónvisual.Untipodelíneaesunpatrónrepetidodetrazos,puntosyespaciosenblancoquesirveparadiferenciarlafinalidaddecadalínea.

Elnombreyladefinicióndeltipodelíneadescribenlasecuenciaparticulartrazo-puntoylaslongitudesrelativasdelostrazos,espaciosenblancoylascaracterísticasdecualquiertextooformaincluido.

Paraasignaruntipodelíneaaunacapa,utilicelapropiedadLinetype.Estapropiedadutilizacomoentradaelnombredeltipodelínea.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>

Supresióndecapas

Parasuprimirunacapa,utiliceelmétodoDelete.

Puedesuprimirunacapaencualquiermomentodelasesióndedibujo.Nosepuedensuprimirlacapaactual,lacapa0niunacapaquedependadeunareferenciaexternaoquecontengaobjetos.

Nota TampocosepuedensuprimirlascapasalasqueserefierendefinicionesdebloquenilacapaespecialllamadaDEFPOINTS,aunquenocontenganobjetosvisibles.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>

Trabajoconcolores

SepuedenasignarcoloresverdaderosaobjetosindividualesdeundibujomedianteelAcCmColor.SiseutilizaunvalorRGBenelobjetoAcCmColor,podráelegirentremillonesdecoloresparadefinirelcolordelaslíneas,deloscírculosydeotrosobjetosindividuales.ElobjetoAcCmColortambiéncontienemétodosypropiedadesparaespecificarnombresdecolores,librosdecolores,índicesdecolores,valoresdecoloresymétodosdecolores.

Tambiénsepuedenasignarcoloresacapas.CadacolorpuedeestaridentificadoporunnombreounnúmerodelÍndicedecoloresdeAutoCAD(ACI),unenteroentre1y255.Nohaylímiteparaelnúmerodeobjetosycapasquepuedenutilizarelmismonúmerodecolor.Sepuedeutilizarelmismonúmerodecolorentodoslosobjetosycapasqueseanecesario.

Cuandoseespecificauncolor,sepuedeintroducirsunombreosunúmeroACI.ElíndiceACIproporciona255númerosdecolores.Sólolossieteprimeroscolorestienenunnombreestándar.

Coloresdel1al7

Númerodecolor

Nombredecolor

1 Rojo

2 Amarillo

3 Verde

4 Cián

5 Azul

6 Magenta

7 Negro/Blanco

Loscoloresdel8al255debenasignarsepornúmerososeleccionandoelcolorenelcuadrodediálogo.Elcolorpordefecto(7)puedeserblancoonegro,segúnelcolordefondo.

Paraobtenermásinformaciónacercadelusodeloscolores,véase“Utilizacióndecolores”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>

Trabajocontiposdelínea

Untipodelíneaesunpatróndetrazos,puntosyespaciosenblancoqueserepite.Untipodelíneacomplejoesunapatrónrepetidodesímbolos.Parautilizaruntipodelíneaesindispensablecargarloprimeroeneldibujo.Estoquieredecirqueladefinicióndedichotipodelíneadebeestarincluidaenelarchivodebiblioteca.LINparapodercargarloeneldibujo.Paracargaruntipodelíneaeneldibujo,utiliceelmétodoLoad

Paraobtenermásinformaciónacercadelusodelostiposdelíneas,véase“Introducciónalostiposdelíneas”enelManualdelusuario.

Nota LostiposdelíneautilizadosinternamenteporAutoCADnodebenconfundirseconlostiposdelíneadeimpresoraproporcionadosporalgunostrazadores.Losdostiposdelíneaatrazosproducenresultadossimilares.Sinembargo,nodebenutilizarselosdostiposalmismotiempo,yaquelosresultadospuedenserimprevisibles.

CargadetiposdelíneaenAutoCAD

Enesteejemploseintentacargareltipodelínea“CENTER”delarchivoacad.lin.Siestetipodelíneayaexiste,osielarchivonoexiste,semuestraunmensaje.

SubCh4_LoadLinetype()

OnErrorGoToERRORHANDLER

DimlinetypeNameAsString

linetypeName="CENTER"

'Cargaeltipodelínea"CENTER"desdeelarchivoacad.lin

ThisDrawing.Linetypes.LoadlinetypeName,"acad.lin"

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

ConversióndeuntipodelíneaenactivoCambiodenombredetiposdelíneaSupresióndetiposdelíneaCambiodedescripcionesdetiposdelíneaDesignacióndelaescaladeltipodelínea

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>

Conversióndeuntipodelíneaenactivo

Sideseautilizaruntipodelíneaparadibujarenlacapaactual,debeactivarlo.Todoslosobjetosreciéncreadossetrazanconeltipodelíneaactivo.

Nota Lostiposdelíneaquedependendereferenciasexternasnopuedenconvertirseenactivos.

Paraconvertiruntipodelíneaenactivo,utilicelapropiedadActiveLinetypeEstapropiedadsedefineeneldibujoactivo.Porejemplo:

ThisDrawing.ActiveLinetype=ThisDrawing._

Linetypes.Item("CONTINUOUS")

Paraobtenermásinformaciónacercadelaactivacióndeuntipodelínea,véase“Definicióndeltipodelíneaactual”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>

Cambiodenombredetiposdelínea

Paracambiardenombreuntipodelínea,utilicelapropiedadName.Alcambiardenombreuntipodelínea,sólosecambiaelnombredeladefinicióndeltipodelíneadeldibujo.ElnombrecontenidoenelarchivodebibliotecaLINnoseactualizaparareflejarelnuevonombre.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>

Supresióndetiposdelínea

Parasuprimiruntipodelínea,utiliceelmétodoDelete.Elusuariopuedesuprimiruntipodelíneacuandolodeseeduranteunasesióndedibujo;noobstante,entrelostiposdelíneaquenopuedensuprimirseseincluyenBALAYER,BAYBLOCK,CONTINUOUS,eltipodelíneaactualylostiposdelíneaquedependendereferenciasexternas.Asimismo,lostiposdelíneareferenciadospordefinicionesdebloquenosepuedensuprimiraunquenolosestéutilizandoningúnobjeto.

Paraobtenermásinformaciónacercadelaeliminacióndeuntipodelínea,véase“Definicióndeltipodelíneaactual”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>

Cambiodedescripcionesdetiposdelínea

Lostiposdelíneapuedentenerunadescripciónasociada.LadescripciónproporcionaunarepresentaciónASCIIdeltipodelínea.SepuedeasignarocambiarladescripcióndelostiposdelíneaconlapropiedadDescription.

Ladescripcióndeuntipodelíneapuedetenerunalongitudmáximade47caracteres.Puedeseruncomentarioounaseriedecaracteresdesubrayado,puntos,trazosyespaciosquesirvacomounamerarepresentacióndelpatróndeltipodelínea.Porejemplo:

ThisDrawing.ActiveLinetype.Description="ExteriorWall"

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>

Designacióndelaescaladeltipodelínea

Sepuedeespecificarlaescaladeltipodelíneaparalosobjetosquesecreen.Cuantomenoreslaescala,másserepetiráelpatróndeltipodelíneaporunidaddedibujo.Pordefecto,AutoCADaplicaunaescalaglobalde1.0,queequivaleaunaunidaddedibujo.Sepuedecambiarlaescaladeltipodelíneadetodoslosobjetosdedibujo,lasreferenciasdeatributosylosgrupos.

Paracambiarlaescaladeltipodelínea,utilicelapropiedadLinetypeScale.

LavariabledesistemaCELTSCALEestablecelaescaladeltipodelíneaparalosobjetosdenuevacreación.Sideseamodificarglobalmentelaescaladeltipodelíneadeobjetosexistentes,utiliceLTSCALE.ParacambiarlosvaloresdevariablesdesistemaconActiveXAutomationdeAutoCAD,utiliceelmétodoSetVariable.

Paraobtenermásinformaciónacercadelasescalasdeltipodelínea,véase“Controldelaescaladeltipodelínea“enelManualdelusuario.

Modificacióndelaescaladeltipodelíneadeuncírculo

SubCh4_ChangeLinetypeScale()

'Savethecurrentlinetype

SetcurrLineType=ThisDrawing.ActiveLinetype

'ChangetheactivelinetypetoBorder,sothescalechangewill

'bevisible.

'FirstseeiftheBorderlinetypeisalreadyloaded

OnErrorResumeNext'Turnonerrortrapping

ThisDrawing.ActiveLinetype=ThisDrawing.Linetypes.Item("BORDER")

IfErr.Number=-2145386476Then

'Errorindicateslinetypeisnotcurrentlyloaded,soloadit.

ThisDrawing.Linetypes.Load"BORDER","acad.lin"

ThisDrawing.ActiveLinetype=_

ThisDrawing.Linetypes.Item("BORDER")

EndIf

OnErrorGoTo0'Turnofferrortrapping

'Createacircleobjectinmodelspace

Dimcenter(0To2)AsDouble

DimradiusAsDouble

DimcircleObjAsAcadCircle

center(0)=2

center(1)=2

center(2)=0

radius=4

SetcircleObj=ThisDrawing.ModelSpace.AddCircle(center,radius)

circleObj.Update

MsgBox("Hereisthecirclewiththeoriginallinetype")

'Setthelinetypescaleofacircleto3

circleObj.LinetypeScale=3#

circleObj.Update

MsgBox("Hereisthecirclewiththenewlinetype")

'Restoreoriginalactivelinetype

ThisDrawing.ActiveLinetype=currLineType

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>

Asignacióndecapas,coloresytiposdelíneaaobjetos

Despuésdedefinircapas,coloresytiposdelínea,puedenasignarseaobjetosdeldibujo.Laasignacióndeobjetosacapaspermiteagruparloscomponentesasociadosdeundibujo.Secontrolalavisibilidad,elcoloryeltipodelíneadelacapayseespecificasilosobjetosdeunacapapuedeneditarse.Sepuedendesplazarobjetosdeunacapaaotraycambiarelnombredelacapa.

Elnúmerodecapasdeundibujoyelnúmerodeobjetosporcadacapasonprácticamenteilimitados.Sepuedeasignarunnombreacadacapayseleccionarlavisualizacióndecualquiercombinacióndecapas.

Losbloquessedefinenapartirdeobjetosdibujadosoriginalmenteendiferentescapascondistintoscoloresytiposdelínea.Sepuedeconservarlainformaciónsobrelacapa,elcoloryeltipodelíneadeunbloque.Estopermitequecadavezqueseinserteelbloque,losobjetosdelmismosedibujenensucapaoriginalconsucolorytipodelíneaoriginales.

CambiodelacapadeunobjetoCambiodelcolordeunobjetoCambiodeltipodelíneadeunobjeto

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Asignacióndecapas,coloresytiposdelíneaaobjetos>

Cambiodelacapadeunobjeto

Alcrearunobjetoyasignarlepropiedadesdecapa,colorytipodelínea,puedecambiarlacapadelobjeto.Estecambioresultaútilsisehacreadoporerrorunobjetoenunacapaequivocadaosimástardesedecidecambiarlaorganizacióndecapas.

Paracambiarlacapadeunobjeto,utilicelapropiedadLayerdelobjeto.Estapropiedadutilizacomoentradaelnombredelacapa.

Trasladodeunobjetoaotracapa

Enesteejemplosecreauncírculoenlacapaactivay,acontinuación,secreaunacapanuevallamada“ABC”.Acontinuación,desplazaelcírculoalanuevacapa.

SubCh4_MoveObjectNewLayer()

'Createacircle

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2:center(1)=2:center(2)=0

radius=1

SetcircleObj=ThisDrawing.ModelSpace._

AddCircle(center,radius)

'Createanewlayercalled"ABC"

DimlayerObjAsAcadLayer

SetlayerObj=ThisDrawing.Layers.Add("ABC")

'Assignthecircletothe"ABC"layer

circleObj.Layer="ABC"

circleObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Asignacióndecapas,coloresytiposdelíneaaobjetos>

Cambiodelcolordeunobjeto

Paracambiarelcolordeunobjeto,utilicelapropiedadTrueColordelobjeto.Sepuedenasignarcoloresaobjetosconcretosdeundibujo.CadacolorestáidentificadoporunobjetoAcCmColor.EsteobjetopuedecontenerunvalorRGB,unnúmeroACI(unenterocomprendidoentre1y255)ouncolorguardado.MediantelosvaloresRGBsepuedeelegirentremillonesdecolores.

Alasignaruncoloralobjetoseignoraelcoloractualdelacapaenlaqueresideelobjeto.Sisedeseaconservarunobjetoenunadeterminadacapaperosinquecompartaelcolordelamisma,sepuedecambiarelcolorconcretodelobjeto.

Cambiodelcolordeuncírculo

Esteejemplocreauncírculoydespuésleasignaelcolorazul.

SubCh4_ColorCircle()

DimcolorAsAcadAcCmColor

Setcolor=_

AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")

Callcolor.SetRGB(80,100,244)

DimcircleObjAsAcadCircle

DimcenterPoint(0To2)AsDouble

DimradiusAsDouble

centerPoint(0)=0#:centerPoint(1)=0#:centerPoint(2)=0#

radius=5#

SetcircleObj=_

ThisDrawing.ModelSpace.AddCircle(centerPoint,radius)

circleObj.TrueColor=color

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Asignacióndecapas,coloresytiposdelíneaaobjetos>

Cambiodeltipodelíneadeunobjeto

Pordefecto,losobjetosutilizaneltipodelíneadelacapaenlaquesecrean.Paracambiareltipodelíneadeunobjeto,utilicelapropiedadLinetypedelobjeto.Estapropiedadutilizacomoentradaelnombredeltipodelíneaquesedeseaasignaralobjeto.

Nota Parapoderasignaruntipodelíneaaunobjeto,eltipodelíneadebeencontrarsecargadoeneldibujoactual.Paracargaruntipodelíneaeneldibujo,utiliceelmétodoLoad.

Paraobtenermásinformaciónacercadelostiposdelínea,véase“Introducciónalostiposdelíneas”enelManualdelusuario.

Cambiodeltipodelíneadeuncírculo

Esteejemplocreauncírculo.Acontinuación,seintentacargareltipodelínea“CENTER”delarchivoacad.lin.Siestetipodelíneayaexiste,osielarchivonoexiste,semuestraunmensaje.Porúltimo,seestableceeltipodelíneadelcírculoen“CENTER.”.

SubCh4_ChangeCircleLinetype()

OnErrorResumeNext

'Createacircle

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2:center(1)=2:center(2)=0

radius=1

SetcircleObj=ThisDrawing.ModelSpace._

AddCircle(center,radius)

DimlinetypeNameAsString

linetypeName="CENTER"

'Cargaeltipodelínea"CENTER"desdeelarchivoacad.lin

ThisDrawing.Linetypes.LoadlinetypeName,"acad.lin"

IfErr.Description<>""ThenMsgBoxErr.Description

'Assignthecirclethelinetype"CENTER"

circleObj.Linetype="CENTER"

circleObj.Update

EndSub

¿Comentarios?

<$nopage>capa(propiedades),guardar.<$endrange>capa(parámetros):almacenar,capa(parámetros):guardar:códigodeejemplo,capa(parámetros):cambiarnombreaparámetrosguardados:códigodeejemplo,capa(parámetros):suprimirparámetrosguardados:códigodeejemplo,capa(parámetros):restablecerparámetrosguardados,capa(parámetros):restablecerparámetrosguardados:códigodeejemplo,capa(parámetros):exportarparámetrosguardados,capa(parámetros):importarparámetrosguardados,Export(método):paraparámetrosdecapaguardados,Import(método):paraparámetrosdecapaguardados,capa(parámetros):exportarparámetrosguardados:códigodeejemplo,capa(parámetros):importarparámetrosguardados:códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>

Almacenamientoyrestablecimientodeparámetrosdecapas

Sepuedenguardarlosparámetrosdelascapas,yrestablecerloscuandoseanecesario.Deestaforma,sepuedenrestituirlosparámetrosgeneralesdefinidosparalascapasenlasdiversasetapasderealizacióndeldibujoodesuimpresióneneltrazador.

Losparámetrosdecapaindicansilacapaestáonoactivada,inutilizada,bloqueada,impresaeneltrazadoroinutilizadaautomáticamenteenlasventanasnuevas;tambiéndeterminanelcolor,eltipodelínea,elgrosordelíneayelestilodetrazadodelacapa.Sepuedenespecificarlosparámetrosquesedeseanalmacenardeundibujo,einclusoguardarlosengrupos.

UnobjetoespecialdenominadoLayerStateManagerproporcionafuncionesparatrabajarconlosparámetrosdecapaenActiveX.

Paraobtenermásinformaciónacercadelalmacenamientodeparámetrosdecapas,véase“Guardadoyrestablecimientodeparámetrosdecapas“enelManualdelusuario.

Conceptosbásicosdelalmacenamientodeparámetrosdecapasen

AutoCADUsodeLayerStateManagerparagestionarparámetrosdecapa

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>

ConceptosbásicosdelalmacenamientodeparámetrosdecapasenAutoCAD

AutoCADguardalosparámetrosdecapasenundiccionariodeextensionesdelacolecciónLayersdeundibujo.Cuandoseguardanparámetrosdecapadeundibujoporprimeravez,AutoCADprocedecomoseindicaacontinuación:

Creaundiccionariodeextensionesenlacoleccióndecapas.

CreaunobjetoDictionarydenominadoACAD_LAYERSTATEeneldirectoriodeextensiones.

AlmacenalaspropiedadesdetodaslascapasdeldibujoenunobjetoXRecorddeldiccionarioACAD_LAYERSTATE.AutoCADalmacenatodoslosparámetrosdecapasincluidosenXRecord,peroidentificaaquellosparámetrosqueelusuarioeligióguardar.Cuandoserestablecenlosparámetrosdelascapas,AutoCADrestituyesólolosqueelusuarioeligióguardar.

Cadavezqueseguardaotroparámetrodecapaeneldibujo,AutoCADcreaotroobjetoXRecordconladescripcióndelosparámetrosguardadosyalmacenaXRecordeneldiccionarioACAD_LAYERSTATE.Elsiguientediagramailustraesteproceso.

Noesnecesario(ytampocodebeintentarse)interpretarlosobjetosXrecordcuandosetrabajaconparámetrosdecapaenActiveX.UtilicelasfuncionesdelobjetoLayerStateManagerparaaccederalosparámetrosdecapaguardados.

Listadodelosparámetrosdecapaguardadosenundibujo

Siseguardaronlosparámetrosdecapaeneldibujoactual,elsiguientecódigoextraeunalistaconlosnombresdetodoslosparámetrosdecapaguardados:

SubCh4_ListStates()

OnErrorResumeNext

DimoLSMDictAsAcadDictionary

DimXRecAsObject

DimlayerstateNamesAsString

layerstateNames=""

'GettheACAD_LAYERSTATESdictionary,whichisinthe

'extensiondictionaryintheLayersobject.

SetoLSMDict=ThisDrawing.Layers._

GetExtensionDictionary.Item("ACAD_LAYERSTATES")

'Listthenameofeachsavedlayersetting.Settingsare

'storedasXRecordsinthedictionary.

ForEachXRecInoLSMDict

layerstateNames=layerstateNames+XRec.Name+vbCrLf

NextXRec

MsgBox"Thesavedlayersettingsinthisdrawingare:"+_

vbCrLf+layerstateNames

EndSub

¿Comentarios?

<$endrange>capa(parámetros):almacenar,capa(parámetros):guardar:códigodeejemplo,capa(parámetros):cambiarnombreaparámetrosguardados:códigodeejemplo,capa(parámetros):suprimirparámetrosguardados:códigodeejemplo,capa(parámetros):restablecerparámetrosguardados,capa(parámetros):restablecerparámetrosguardados:códigodeejemplo,capa(parámetros):exportarparámetrosguardados,capa(parámetros):importarparámetrosguardados,Export(método):paraparámetrosdecapaguardados,Import(método):paraparámetrosdecapaguardados,capa(parámetros):exportarparámetrosguardados:códigodeejemplo,capa(parámetros):importarparámetrosguardados:códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>

UsodeLayerStateManagerparagestionarparámetrosdecapa

ElobjetoLayerStateManager,aligualqueelobjetoUtilitydeAutoCAD,proporcionaunconjuntodefuncionesdemanipulacióndedatos.Estasfuncionessonmétodosparatrabajarconparámetrosdecapaguardados.UselossiguientesmétodosLayerStateManagerparatrabajarconparámetrosdecapaguardados:

Delete

Suprimeunparámetrodecapaguardado.

Export

Exportaaunarchivoelparámetrodecapaguardadoquesehayaindicado.

Import

Importaunparámetrodecapaguardadodesdeelarchivoindicado.

Rename

Cambiaelnombredeunparámetrodecapaguardado.

Restore

Restableceeneldibujoactualelparámetrodecapaindicado.

Save

Guardalosestadosypropiedadesdelacapaindicada.

SetDataBase

AsociaunabasededatosdeAutoCADalobjetoLayerStateManager.

ParaaccederalobjetoLayerStateManager,utiliceelmétodoGetInterfaceObject.

DimoLSMAsAcadLayerStateManager

SetoLSM=ThisDrawing.Application._

GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")

UnavezrecuperadoelobjetoLayerStateManager,sehadeasociaraunabasededatosparateneraccesoasusmétodos.UtiliceelmétodoSetDatabaseparaasociarunabasededatosalobjetoLayerStateManager.

oLSM.SetDatabaseThisDrawing.Database

GuardadodeparámetrosdecapasRestitucióndeparámetrosdecapaExportacióneimportacióndeparámetrosdecapaguardados

¿Comentarios?

<$endrange>capa(parámetros):almacenar,capa(parámetros):guardar:códigodeejemplo,capa(parámetros):cambiarnombreaparámetrosguardados:códigodeejemplo,capa(parámetros):suprimirparámetrosguardados:códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>UsodeLayerStateManagerparagestionarparámetrosdecapa>

Guardadodeparámetrosdecapas

UtiliceelmétodoSaveparaguardarunconjuntodeparámetrosdecapadeundibujo.ElmétodoSaveaceptadosparámetros.Elprimerparámetroconsisteenunacadenaconelnombredelosparámetrosdecapaquesedebenguardar.Elsegundoparámetroidentificalaspropiedadesdecapaquedeseanutilizarse.Utilicelasconstantesdelasiguientetablaparaidentificarpropiedadesdecapa.

Constantesdepropiedadesdecapa

Nombredeconstante Layer(propiedad)

acLsAll Todoslosparámetrosdecapa

acLsColor Color

acLsFrozen Inutilizadaoreutilizada

acLsLineType Linetype

acLsLineWeight Grosordelínea

acLsLocked Bloqueadaodesbloqueada

acLsNewViewport Capasinutilizadasoreutilizadasenventanasnuevas

acLsNone Ninguna

acLsOn Activadaodesactivada

acLsPlot Trazadoactivadoodesactivado

acLsPlotStyle Estilodetrazado

Lasconstantespuedenañadirsejuntasparaprecisarvariaspropiedades.

Siintentaguardarparámetrosdecapaconunnombrequeyaexiste,apareceunerror.Parapoderreutilizarunnombre,esnecesariosuprimirocambiardenombrelosparámetrosdecapaguardadosyaexistentes.

Guardadodelosparámetrosdecolorytipodelíneadeunacapa

ElsiguientecódigoguardalosparámetrosdecolorytipodelíneadelacapaactualbajoelnombreColorLinetype.

SubCh4_SaveLayerColorAndLinetype()

DimoLSMAsAcadLayerStateManager

'AccesstheLayerStateManagerobject

SetoLSM=ThisDrawing.Application._

GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")

'AssociatethecurrentdrawingdatabasewithLayerStateManager

oLSM.SetDatabaseThisDrawing.Database

oLSM.Save"ColorLinetype",acLsColor+acLsLineType

EndSub

Cambiodenombredeunparámetrodecapaguardado

ElsiguientecódigocambiaelnombredelosparámetrosdecapaColorLinetypeporelnombreOldColorLinetype.

SubCh4_RenameLayerSettings()

DimoLSMAsAcadLayerStateManager

SetoLSM=ThisDrawing.Application._

GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")

oLSM.SetDatabaseThisDrawing.Database

oLSM.Rename"ColorLinetype","OldColorLinetype"

EndSub

Supresióndeunparámetrodecapaguardado

ElsiguientecódigosuprimelosparámetrosdecapaqueseguardaronbajoelnombreColorLinetype.

SubCh4_DeleteColorAndLinetype()

DimoLSMAsAcadLayerStateManager

SetoLSM=ThisDrawing.Application._

GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")

oLSM.SetDatabaseThisDrawing.Database

oLSM.Delete"ColorLinetype"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>UsodeLayerStateManagerparagestionarparámetrosdecapa>

Restitucióndeparámetrosdecapa

ElmétodoRestorerestablecelosvaloresqueseguardaronconanterioridadentodoslosparámetrosdecapadeldibujoactual.Porejemplo,siguardalosparámetrosdecolorydetipodelíneaconelnombre“ColorLinetype”yposteriormentecambialosparámetros,alrestablecer“ColorLinetype”serestituyenloscoloresylostiposdelíneaqueteníanlascapasalguardar“ColorLinetype”.Lascapasnuevasqueseagreguenaldibujodespuésdeguardar“ColorLinetype”nosevenafectadasporlarestituciónde“ColorLinetype.”.

Restitucióndelosparámetrosdecolorytipodelíneadelascapasdeundibujo

Elsiguientecódigodeejemplo,quepresuponequelosparámetrosdecolorytipodelíneadelascapasdeldibujoactualseguardaronconelnombre“ColorLinetype,”,restablecelosparámetrosdecolorytipodelíneadetodaslascapasdeldibujoconelvalorqueteníancuandoseguardó“ColorLinetype,”.

SubCh4_RestoreLayerSettings()

DimoLSMAsAcadLayerStateManager

SetoLSM=ThisDrawing.Application._

GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")

oLSM.SetDatabaseThisDrawing.Database

oLSM.Restore"ColorLinetype"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>UsodeLayerStateManagerparagestionarparámetrosdecapa>

Exportacióneimportacióndeparámetrosdecapaguardados

Sepuedenexportareimportarparámetrosdecapaguardadosparautilizarlosenotrosdibujos.ConelmétodoExportdelobjetoLayerStateManager,losparámetrosdecapaseguardanenunarchivo;conelmétodoImport,seimportanaundibujo.

Nota Laimportacióndeparámetrosdecapanoimplicasurestitución;esnecesarioutilizarelmétodoRestoreparaquelascapasdeldibujoadquieranlosparámetrosimportados.

ElmétodoExportadmitedosparámetros.Elprimerparámetroconsisteenunacadenaidentificativadelosparámetrosdecapaquesedeseenexportar.Elsegundoparámetroeselnombredelarchivoalquesedeseenexportar.Sinoseindicaunaruta,elarchivoseguardaeneldirectoriodeinstalacióndeAutoCAD.Siyaexisteunarchivoconelnombreespecificado,elnuevonombresustituyealanterior.Alguardarlosarchivos,utilicelaextensión.las;estaextensiónpermiteaAutoCADreconocerlosarchivosdeparámetrosdecapaexportados.

ElmétodoImportaceptaunparámetro:unacadenaqueseñaleelnombredelarchivoquecontienelosparámetrosdecapaquesedeseaimportar.

Durantelaimportacióndeparámetrosdecapa,puedeproducirseunacondicióndeerrorsilaspropiedadesalasquerefierenlosparámetrosguardadosnoestándisponibleseneldibujodestinodelaimportación.Laimportacióntermina,noobstante,yseutilizanlaspropiedadespordefecto.Porejemplo,cuandoenunacapaexportadaseestableceuntipodelíneaquenoestácargadoeneldibujodestinodelaimportación,seproduceunacondicióndeerroryeltipodelíneapordefectodeldibujoquedareemplazado.Elcódigoqueseescribadebetenerencuentaestacondicióndeerrorycontinuarconelprocesosiseproduce.

Sielarchivoimportadodefineparámetrosdecapasquenoexisteneneldibujoactual,secreandichascapas.CuandoseutilizaelmétodoRestore,laspropiedadesqueseespecificaronalguardarlosparámetrosseasignanalascapasnuevas;todaslasdemáspropiedadesdelascapasnuevasadquierenlosparámetrosestablecidospordefecto.

Exportacióndeparámetrosdecapaguardados

ElsiguientecódigoexportalosparámetrosdecapaguardadosaunarchivodenominadoColortype.las.

SubCh4_ExportLayerSettings()

DimoLSMAsAcadLayerStateManager

SetoLSM=ThisDrawing.Application._

GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")

oLSM.SetDatabaseThisDrawing.Database

oLSM.Export"ColorLinetype","c:\mydocuments\ColorLType.las"

EndSub

Importacióndeparámetrosdecapaguardados

ElsiguientecódigoimportalosparámetrosdecapaguardadosdesdeunarchivodenominadoColortype.las.

SubCh4_ImportLayerSettings()

DimoLSMAsAcadLayerStateManager

SetoLSM=ThisDrawing.Application._

GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")

oLSM.SetDatabaseThisDrawing.Database

'Ifthedrawingyou'reimportingtodoesnotcontain

'allthelinetypesreferencedinthesavedsettings,

'anerrorisreturned.Theimportiscompleted,though,

'andthedefaultlinetypeisused.

OnErrorResumeNext

oLSM.Import"c:\mydocuments\ColorLType.las"

IfErr.Number=-2145386359Then

'Errorindicatesalinetypeisnotdefined

MsgBox("Oneormorelinetypesspecifiedintheimported"+_

"settingsisnotdefinedinyourdrawing")

EndIf

OnErrorGoTo0

EndSub

¿Comentarios?

<$nopage>textodelíneasmúltiples.

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>

Adicióndetextoadibujos

Eltextodelosdibujosproporcionaalusuarioinformaciónderelevancia.Así,puedeempleartextoparaloscuadrosdetítulosparaasignaretiquetasaldibujo,indicarcaracterísticasoincluiranotaciones.

AutoCADponeasudisposicióndistintastécnicasparacreartexto.Paraentradasbrevesysencillas,utilicetextodeunalínea.Sideseaescribirtextodeproporcionesmayoresconformato,utilicetextodelíneasmúltiples(textoM).Aunquetodotextoqueseintroduzcausaelestilodetextoactual,queestableceeltipodeletraylosparámetrosdeformatopordefecto,esposibleutilizarvariosmétodosparapersonalizarsuaspecto.

Paraobtenermásinformaciónacercadelusodetexto,véase“Creacióndetexto”enelManualdelusuario.

UtilizacióndelosestilosdetextoUsodeltextoenunalínea(Text)Usodeltextodelíneasmúltiples(Mtext)UsodecaracteresUnicode,códigosdecontrolycaracteresespecialesSustitucióndetiposdeletraCorrecciónortográfica

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>

Utilizacióndelosestilosdetexto

EltextodelosdibujosdeAutoCADtieneunestiloasociado.Alescribirtexto,AutoCADempleaelestilodetextoactual,quedeterminaeltipodeletra,eltamaño,elángulo,laorientaciónyotrascaracterísticasdeltexto.Puedeutilizaromodificarelestilopordefectoocrearycargarunnuevoestilo.Unavezquehayacreadounestilopuedemodificarsusatributosoborrarlocuandoyanolonecesite.

CreaciónymodificacióndeestilosdetextoAsignacióndetiposdeletraTiposdeletraTrueTypeTiposdeletraUnicodeyGrandesAjustedealturadeltextoAjustedelángulodeoblicuidadEstablecimientodeindicadoresdegeneracióndetexto

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>

Creaciónymodificacióndeestilosdetexto

Cuandosecreauntexto,AutoCADasumelaspropiedadesdelestilodetextoactual,entrelasqueseincluyelaaltura,larelaciónanchura/altura,elángulodeoblicuidadylaspropiedadesdegeneracióndetexto.Sideseacrearunestilodetexto,utiliceelmétodoAddparacrearunobjetoTextStylenuevoyañadirloalacolecciónTextStyles.ElmétodoAddutilizacomoentradaunnombredeTextStyle.Unavezcreado,elnombredelosestilosdetextonosepuedecambiarconActiveXAutomationdeAutoCAD.

Losnombresdeestilopuedencontenerletras,númerosyloscaracteresespecialesdelsignodedólar($),subrayado(_)yguión(–).AutoCADpasaloscaracteresamayúsculas.Sinoseespecificaunnombredeestilo,AutoCADleasignaautomáticamenteelnombreEstilon,dondenesunnúmeroqueempiezaen1.Cadanuevoestilopresentaunincrementode1.

LosestilosexistentessepuedenmodificarsisecambianlaspropiedadesdelobjetoTextStyle.Tambiénpuedeactualizartextoexistentedeesetipodeestiloparaqueloscambiosquedenreflejados.ParamodificarunobjetoTextStyle,utilicelassiguientespropiedades:

FontFile

Especificaelarchivoasociadoauntipodeletra(estilodecarácter).

BigFontFile

EspecificaelarchivodedefinicióndeformasespecialesempleadoenconjuntosdecaracteresnoASCII.

Height

Especificalaalturadeloscaracteres.

Width

Especificalaexpansiónocompresióndeloscaracteres.

ObliqueAngle

Especificalainclinacióndeloscaracteres.

TextGenerationFlag

Especificasieltextodebegenerarsehacialaizquierda,bocaabajooenambossentidos.

Almodificareltipodeletraolaorientacióndeunestiloexistente,todoeltextoqueempleedichoestilocambiaparareflejareltipodeletraolaorientaciónnuevos.Alcambiarlaalturadeltexto,larelaciónanchura/alturaoelángulodeoblicuidadnosemodificaeltextoexistente,perosíafectaalosobjetosdetextoquesecreenposteriormente.

Nota LlameaunodelosmétodosRegenoUpdateparaverloscambiosefectuadosenlaspropiedadesanteriores.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>

Asignacióndetiposdeletra

Lostiposdeletradefinenlasformasdeloscaracteresdetextoqueconstituyenlosjuegosdecaracteres.Untipodeletrapuedeserutilizadoenmásdeunestilo.Paraasignaruntipodeletraaunestilodetexto,utilicelapropiedadFontFiledelobjetoTextStyle.Puedeasignaruntipodeletracompilado(SHX)propiodeAutoCADalestilodetexto,especificandoelarchivodetipodeletraquelocontenga.

Establecimientodelostiposdeletradeltexto

Enesteejemploseobtienenlosvaloresdetipodeletradelestilodetextoactivoysecambiaalafamiliadetipos“PlayBill.”DespuésestableceelnuevotipodeletramedianteelmétodoSetFont.Paravercómoafectaelcambiodetipodeletraaltexto,añadaunobjetoMtextoTextaldibujoactualantesdeejecutarelejemplo.Recuerdeque,sielsistemanodisponedeltipodeletraPlayBill,debesustituirloporalgúntipoquetengainstaladosusistema;delocontrario,elcódigodeejemplonofuncionará.

SubCh4_UpdateTextFont()

MsgBox("Lookatthetextnow...")

DimtypeFaceAsString

DimSavetypeFaceAsString

DimBoldAsBoolean

DimItalicAsBoolean

DimcharSetAsLong

DimPitchandFamilyAsLong

'Getthecurrentsettingstofillinthe

'defaultvaluesfortheSetFontmethod

ThisDrawing.ActiveTextStyle.GetFonttypeFace,_

Bold,Italic,charSet,PitchandFamily

'Changethetypefaceforthefont

SavetypeFace=typeFace

typeFace="PlayBill"

ThisDrawing.ActiveTextStyle.SetFonttypeFace,_

Bold,Italic,charSet,PitchandFamily

ThisDrawing.RegenacActiveViewport

MsgBox("Nowseehowitlooksafterchangingthefont...")

'Restoretheoriginaltypeface

ThisDrawing.ActiveTextStyle.SetFontSavetypeFace,_

Bold,Italic,charSet,PitchandFamily

ThisDrawing.RegenacActiveViewport

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>

TiposdeletraTrueType

LostiposdeletraTrueTypeaparecensiemprerellenosenlosdibujos;sinembargo,cuandosetraza,lavariabledesistemaTEXTFILLcontrolasilostiposdeletraserellenanono.Pordefecto,elvalordeTEXTFILLes1,paratrazartiposdeletrarellenos.SiexportaeldibujoalformatoPostScript®conelmétodoExportyloimprimeenundispositivoPostScript,eltipodeletrasetrazarátalcomosehayadiseñado.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>

TiposdeletraUnicodeyGrandes

AutoCADadmiteelestándardecodificacióndecaracteresUnicode.UntipodeletraUnicodepuedecontener65.535caracteres,conformasparamuchosidiomas.TodoslostiposdeletradeAutoCADconlaextensión.SHXseconsiderantiposdeletraUnicode.

LosarchivosdetextodealgunosalfabetoscontienenmilesdecaracteresquenosonASCII.Parapermitirdichotexto,AutoCADadmiteuntipoespecialdedefinicióndeformaconocidocomoarchivoBigFont.PuededefinirunestiloparausartantoarchivosnormalescomoBigFont.EspecifiquefuentesnormalesutilizandolapropiedadFontFile.EspecifiqueBigFontsutilizandolapropiedadBigFontFile.

Nota Elnombredelosarchivosdetiposdeletranodebeincluircomas.

AutoCADponeasudisposiciónlosmétodosnecesariosparallevaracabolasustitucióndeuntipodeletraporotrooladefinicióndeuntipodeletrapordefecto.Paraobtenermásinformación,véaseSustitucióndetiposdeletra.

Cambiodelosarchivosdetiposdeletra

EsteejemplocambialaspropiedadesFontFileyBigFontFile.Debereemplazarlainformaciónderutadeaccesodeesteejemploconlosnombresdearchivoyrutaapropiadosensusistema.

SubCh4_ChangeFontFiles()

ThisDrawing.ActiveTextStyle.BigFontFile=_

"C:/AutoCAD/Fonts/bigfont.shx"

ThisDrawing.ActiveTextStyle.fontFile=_

"C:/AutoCAD/Fonts/italic.shx"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>

Ajustedealturadeltexto

Laalturadeltextodeterminaeltamañodeloscaracteresdeltipodeletrautilizadoenunidadesdedibujo.Elvalorsuelerepresentareltamañodelasletrasmayúsculas,exceptuandolostiposdeletraTrueType.

EnelcasodelostiposdeletraTrueType,esposiblequeelvalordelaalturadeltextonorepresentelaalturadelasletrasmayúsculas.Laalturaespecificadarepresentalaalturadelasletrasmayúsculasmásunáreadeacentosreservadaparatildesyotrasmarcasutilizadasenidiomasquenosoninglés.Lapartedeáreaproporcionalasignadaalasletrasmayúsculasyaloscaracteresacentuadosestádeterminadaporeldiseñadordeltipodeletraenelmomentodecrearloyvaríadeuntipoaotro.

Ademásdelaalturadelasletrasmayúsculasydeláreaascendentequeincluyelaalturaespecificadaporelusuario,lostiposdeletraTrueTypetienenunáreadescendenteparaaquellaspartesdeloscaracteresquesobrepasenpordebajolalíneadeinsercióndetexto.Algunosejemplosdeestoscaracteressony,j,p,g,q.

LaalturadeltextoseprecisamediantelapropiedadHeight.Estapropiedadsóloadmitenúmerospositivos.

ModificacióndelaalturadeunobjetoText

Esteejemplocreaunalíneadetextoydespuéscambialaalturadeltexto.

SubCh4_ChangeTextHeight()

DimtextObjAsAcadText

DimtextStringAsString

DiminsertionPoint(0To2)AsDouble

DimheightAsDouble

'Definethetextobject

textString="Hello,World."

insertionPoint(0)=3

insertionPoint(1)=3

insertionPoint(2)=0

height=0,5

'Createthetextobjectinmodelspace

SettextObj=ThisDrawing.ModelSpace._

AddText(textString,insertionPoint,height)

'ChangethevalueoftheHeightto1

textObj.height=1

textObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>

Ajustedelángulodeoblicuidad

Elángulodeoblicuidaddeterminaelgradodeinclinacióndeltexto.Elángulorepresentaeldesfasedesdeelejevertical(90grados).Paraestablecerelángulodeoblicuidad,utilicelapropiedadObliqueAngle.Elánguloseespecificaenradianes.Unángulopositivodenotaunainclinaciónhacialaderechayalosvaloresnegativosselessuma2*PIparaconvertirlosensuequivalentepositivo.

Creacióndetextooblicuo

EsteejemplocreaunobjetoTextyleaplicaunángulodeoblicuidadde45grados.

SubCh4_ObliqueText()

DimtextObjAsAcadText

DimtextStringAsString

DiminsertionPoint(0To2)AsDouble

DimheightAsDouble

'Definethetextobject

textString="Hello,World."

insertionPoint(0)=3

insertionPoint(1)=3

insertionPoint(2)=0

height=0,5

'Createthetextobjectinmodelspace

SettextObj=ThisDrawing.ModelSpace._

AddText(textString,insertionPoint,height)

'ChangethevalueoftheObliqueAngle

'to45degrees(.707radians)

textObj.ObliqueAngle=0.707

textObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>

Establecimientodeindicadoresdegeneracióndetexto

Elindicadordegeneracióndetextodeterminasieltextosemuestrareflejadohacialaizquierdaobocaabajo.Paraestablecerelindicadordegeneracióndetexto,utilicelapropiedadTextGenerationFlag.IntroduzcaacTextFlagBackwardenlapropiedadsideseaqueeltextosegenerehacialaizquierda,oacTextFlagUpsideDownparaquesereflejehaciaabajo.Paraqueeltextosemuestrereflejadohacialaizquierdaybocaabajo,añadalasdosconstantesalavez,especificandoacTextFlagBackward+acTextFlagUpsidedowncomovalordeestapropiedad.

Presentacióndeltextoreflejadohacialaizquierda

Enesteejemplosecreaunalíneadetextoy,mediantelapropiedadTextGenerationFlag,seestablecequesemuestrehacialaizquierda.

SubCh4_ChangingTextGenerationFlag()

DimtextObjAsAcadText

DimtextStringAsString

DiminsertionPoint(0To2)AsDouble

DimheightAsDouble

'Createthetextobject

textString="Hello,World."

insertionPoint(0)=3

insertionPoint(1)=3

insertionPoint(2)=0

height=0,5

SettextObj=ThisDrawing.ModelSpace._

AddText(textString,insertionPoint,height)

'ChangethevalueoftheTextGenerationFlag

textObj.TextGenerationFlag=acTextFlagBackward

textObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>

Usodeltextoenunalínea(Text)

Eltextoqueseañadealosdibujosincluyeunagranvariedaddeinformación.Puedetratarsedeunaespecificacióndetallada,uncuadroderotulación,unaetiquetaoinclusounapartedeundibujo.Paralasentradasbrevesquenorequieranvariostiposdeletraovariaslíneas,creeeltextodelalíneamedianteelobjetoText.Eltextoenunalíneaesmásadecuadoparalasetiquetas.

CreacióndelíneasdetextoFormatodeltextoenlíneaAlineacióndeltextodeunalíneaModificacióndeltextodeunalínea

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextoenunalínea(Text)>

Creacióndelíneasdetexto

Cuandoseutilizaestafuncióndetexto,cadalíneadetextoesunobjetoindependiente.LosobjetosdetextoenunalíneasecreanconelmétodoAddText.Estemétodorequieretresvaloresdeentrada:lacadenadetexto,elpuntodeinserción,ylaalturadeltexto.

Lacadenadetextoeseltextorealquesedeseamostrar.SepuedeutilizarUnicode,códigodecontrolycaracteresespeciales.Elpuntodeinserciónesunamatrizdevariantescontresdoblesqueindicanlascoordenadas3DdelSCUdeldibujodondeseincluiráeltexto.Laalturadeltextoesunnúmeropositivoquerepresentalaalturadeloscaracteresenmayúscula.Laalturaseindicaenlaunidaddemedidaactiva.

Creacióndelíneasdetexto

Elcódigosiguientecreaunalíneadetextoenespaciomodelo,enlascoordenadas(2,2,0).

SubCh4_CreateText()

DimtextObjAsAcadText

DimtextStringAsString

DiminsertionPoint(0To2)AsDouble

DimheightAsDouble

'Createthetextobject

textString="Hello,World."

insertionPoint(0)=2

insertionPoint(1)=2

insertionPoint(2)=0

height=0,5

SettextObj=ThisDrawing.ModelSpace._

AddText(textString,insertionPoint,height)

textObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextoenunalínea(Text)>

Formatodeltextoenlínea

LosobjetosTextquesecreanutilizanelestilodetextoactivo.PuedecambiarelformatodelobjetoTextmodificandoelestilodetextoquetengaasociadoobieneditandolaspropiedadesdelobjetoText.Nosepuedenaplicarformatosapalabrasocaracteresindividuales.

ParacambiarelestilodetextoasociadoaunobjetoTextconcreto,definalapropiedadStyleNameconunestilodetextonuevo.Unavezcambiadoelestilo,utiliceelmétodoUpdatedelobjetoTextparaverloscambioseneldibujo.

EntrelaspropiedadesquepuedencambiarseenunobjetoTextseincluyen,ademásdelaspropiedadesestándarmodificablesdelasentidades(color,capa,tipodelínea,etc.):

Alignment

Determinalaalineaciónhorizontalyverticaldeltexto.

InsertionPoint

Determinaelpuntodeinsercióndeltexto.

ObliqueAngle

DeterminaelángulodeoblicuidaddelobjetoTextindividual.

Rotation

Determinaelánguloderotacióndeltexto,enradianes.

ScaleFactor

Determinaelfactordeescaladeltexto.

TextAlignmentPoint

Determinaelpuntodealineacióndeltexto.

TextGenerationFlag

Especificasieltextosemuestrareflejadohacialaizquierda,bocaabajoolasdoscosasalavez.

TextString

Especificalacadenadetextoquemostrarálapantalla.

Siemprequesemodificaunapropiedad,debeutilizarseelmétodoUpdateparaverloscambioseneldibujo.

Nota Paraobtenerunalistacompletadelosmétodosypropiedades,véaseladocumentacióndelobjetoTextenAutoCADActiveXandVBAReference.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextoenunalínea(Text)>

Alineacióndeltextodeunalínea

Puedejustificartextodelíneahorizontalyverticalmente.Laalineaciónpordefectoeslaizquierda.Paraestablecerlasopcionesdealineaciónhorizontalyvertical,utilicelapropiedadAlignment.

Modificacióndelaalineacióndeltexto

EsteejemplocreaunobjetoTextyunobjetoPoint.ElobjetoPointseestablececomoelpuntodealineacióndeltextoysecambiaporuncursorencruzrojoparaqueestévisible.Secambialaalineacióndeltextoysemuestrauncuadrodemensajeparaindicarquelaejecucióndelamacroestádetenida.Estopermiteverquéocurrealcambiarlaalineacióndeltexto.

SubCh4_TextAlignment()

DimtextObjAsAcadText

DimtextStringAsString

DiminsertionPoint(0To2)AsDouble

DimheightAsDouble

'DefinethenewTextobject

textString="Hello,World."

insertionPoint(0)=3

insertionPoint(1)=3

insertionPoint(2)=0

height=0,5

'CreatetheTextobjectinmodelspace

SettextObj=ThisDrawing.ModelSpace._

AddText(textString,insertionPoint,height)

'Createapointoverthetextalignmentpoint,

'sowecanbettervisualizethealignmentprocess

DimpointObjAsAcadPoint

DimalignmentPoint(0To2)AsDouble

alignmentPoint(0)=3

alignmentPoint(1)=3

alignmentPoint(2)=0

SetpointObj=ThisDrawing.ModelSpace._

AddPoint(alignmentPoint)

pointObj.Color=acRed

'Setthepointstyletocrosshair

ThisDrawing.SetVariable"PDMODE",2

'AlignthetexttotheLeft

textObj.Alignment=acAlignmentLeft

ThisDrawing.RegenacActiveViewport

MsgBox"TheTextobjectisnowalignedleft"

'AlignthetexttotheCenter

textObj.Alignment=acAlignmentCenter

'Alignthetexttothepoint(necessaryfor

'allbutleftalignedtext.)

textObj.TextAlignmentPoint=alignmentPoint

ThisDrawing.RegenacActiveViewport

MsgBox"TheTextobjectisnowcentered"

'AlignthetexttotheRight

textObj.Alignment=acAlignmentRight

ThisDrawing.RegenacActiveViewport

MsgBox"TheTextobjectisnowalignedright"

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextoenunalínea(Text)>

Modificacióndeltextodeunalínea

Comocualquierotroobjeto,losobjetosTextsepuedendesplazar,girar,borrarycopiar.Tambiénsepuedecrearsimetríadetexto.Sinodeseaqueeltextofiguredeformainversaalreflejarloensimetría,asigneelvalor0alavariableMIRRTEXT.

EnlalistasiguientefiguranalgunosdelosmétodosdelosquedisponenlosobjetosTextparalaedición.Paraobtenerunalistacompleta,véaseladocumentaciónsobreobjetosTextenlaActiveXandVBAReferencedeAutoCAD.

ArrayPolar

Creaunamatrizpolar.

ArrayRectangular

Creaunamatrizrectangular.

Copy

CopiaelobjetoText.

Erase

BorraelobjetoText.

Mirror

ReflejaelobjetoTextensimetría.

Move

DesplazaelobjetoText.

Rotate

GiraelobjetoText.

¿Comentarios?

<$nopage>textodelíneasmúltiples.

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>

Usodeltextodelíneasmúltiples(Mtext)

Paraentradaslargasycomplejas,creeuntextodelíneasmúltiples(textoM).Eltextodelíneasmúltiplesseajustaaunaanchuradeterminada,sibienverticalmentesulongitudpuedeextenderseindefinidamente.DentrodeunobjetotextoMsepuedeasignarformatoporpalabrasoporcaracteres.

ParacreartextodelíneasmúltiplesFormatodeltextodelíneasmúltiples

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextodelíneasmúltiples(Mtext)>

Paracreartextodelíneasmúltiples

Puedecrearunobjetodetextodevariaslíneas(objetotextoM)conelmétodoAddMText.Estemétodorequieretresvaloresdeentrada:lacadenadetexto,elpuntodeinsercióndeldibujoenelquecolocareltexto,ylaanchuradelprismadecontorno.

Lacadenadetextoeseltextorealquesedeseamostrar.SepuedeutilizarUnicode,códigodecontrolycaracteresespeciales.Elpuntodeinserciónesunamatrizdevariantescontresdoblesqueindicanlascoordenadas3DdelSCUdeldibujodondeseincluiráeltexto.Laanchuradeltextoesunnúmeropositivoquerepresentalaanchuradelacajaquecontieneeltexto.Laanchurasemideenlaunidaddemedidaactual.

UnavezcreadoelobjetoTextdelíneasmúltiples,puedeaplicarlelaalturadeltexto,lajustificación,elánguloderotaciónyelestiloobienaplicarunformatoacaracteresindividuales.

ParaobtenerunalistadelosmétodosylaspropiedadesrelacionadosconelobjetoMText,véaselaentradasobreMTextdelaActiveXandVBAReference.

Paracreartextodelíneasmúltiples

ElcódigosiguientecreaunobjetoMtextenlascoordenadas(2,2,0)delespaciomodelo.

SubCh4_CreateMText()

DimmtextObjAsAcadMText

DiminsertPoint(0To2)AsDouble

DimwidthAsDouble

DimtextStringAsString

insertPoint(0)=2

insertPoint(1)=2

insertPoint(2)=0

width=4

textString="Thisisatextstringforthemtextobject."

'CreateatextObjectinmodelspace

SetmtextObj=ThisDrawing.ModelSpace._

AddMText(insertPoint,width,textString)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextodelíneasmúltiples(Mtext)>

Formatodeltextodelíneasmúltiples

Eltextonuevoadquieredeformaautomáticaelestilodetextoactivo.ElestilodetextopordefectoesESTANDAR.PuedeignorarelestilodetextopordefectoaplicandoelementosdeformatoacaracteresindividualesyaplicandopropiedadesalobjetoText.Tambiénsepuedenindicarelformatoocaracteresespecialesconlosmétodosdescritosenestasección.

Lasopcionesdeorientacióncomoelestilo,lajustificación,laanchuraylarotaciónafectanatodoeltextoincluidoenelcontornodeuntextodelíneasmúltiples,ynosóloaunaspalabrasocaracteresdeterminados.UtilicelapropiedadAttachmentPointparacambiarlajustificacióndelobjetoMTextylapropiedadRotationparadeterminarelánguloderotacióndelcontornodeltexto.

LapropiedadStyleNameestablecelostiposdeletraylosaspectosdeformatopordefectodelnuevotexto.Conformesecreatexto,sepuedeseleccionarelestiloquedeseautilizarseenlalistadeestilosexistentes.CuandosecambiaelestilodeunobjetoTextdelíneasmúltiplesconatributosdeformatodecaracteresasignadosacualquierpartedeltexto,elestiloseaplicaatodoelobjetoyesposiblequenoseconservetodoelformatodeloscaracteres.Porejemplo,cambiarunestiloTrueTypeporunestiloqueutilizauntipodeletraSHXuotrotipoTrueTypeconllevalasustitucióndeltipodeletraentodoelobjetodetextoylapérdidadelformatoparticularquepuedantenerasignadoalgunoscaracteres.

Lasopcionesdeformatocomoelsubrayado,eltextoapiladooeltipodeletrapuedenaplicarsedeformaindividualaloscaracteresopalabrasqueconformanunpárrafo.Tambiénpuedecambiarelcolor,eltipodeletraylaalturadeltexto.Puedemodificarelespacioentreloscaracteresdetextooaumentarlaanchuradeloscaracteres.

Utilicellaves({})paraidentificareltextoalquedeseeaplicarelcambiode

formato.Lasllavespuedenanidarsehastaalcanzar8niveles.

TambiénsepuedeintroducirelequivalenteASCIIdecódigosdecontrolenlaslíneasolospárrafosparaindicarcaracteresdeformatooespeciales,comosímbolosdetoleranciaydeacotación.

Puedeutilizarloscaracteresdecontrolsiguientesparacreareltextodelailustración.(PuedeverelequivalenteASCIIdeestacadenaenelejemploquesigue).

{{\H1.5x;Bigtext}\A2;overtext\A1;/\A0;undertext}

Paraobtenermásinformaciónacercadedarformatoalíneasmúltiples,véase“Aplicacióndeformatoaloscaracteresdetextodelíneasmúltiples”enelManualdelusuario.

Utilizacióndecaracteresdecontrolparadarformatoaltexto

Enesteejemplosecreaunobjetodelíneasmúltiplesyseleasignaformato.

SubCh4_FormatMText()

DimmtextObjAsAcadMText

DiminsertPoint(0To2)AsDouble

DimwidthAsDouble

DimtextStringAsString

insertPoint(0)=2

insertPoint(1)=2

insertPoint(2)=0

width=4

'DefinetheASCIIcharactersforthecontrolcharacters

DimOBAsLong'OpenBracket{

DimCBAsLong'CloseBracket}

DimBSAsLong'BackSlash\

DimFSAsLong'ForwardSlash/

DimSCAsLong'Semicolon;

OB=Asc("{")

CB=Asc("}")

BS=Asc("\")

FS=Asc("/")

SC=Asc(";")

'Assignthetextstringthefollowinglineofcontrol

'charactersandtextcharacters:

'{{\H1.5x;Bigtext}\A2;overtext\A1;/\A0;undertext}

textString=Chr(OB)+Chr(OB)+Chr(BS)+"H1.5x"_

+Chr(SC)+"Bigtext"+Chr(CB)+Chr(BS)+"A2"_

+Chr(SC)+"overtext"+Chr(BS)+"A1"+Chr(SC)_

+Chr(FS)+Chr(BS)+"A0"+Chr(SC)+"undertext"_

+Chr(CB)

'CreateatextObjectinmodelspace

SetmtextObj=ThisDrawing.ModelSpace._

AddMText(insertPoint,width,textString)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>

UsodecaracteresUnicode,códigosdecontrolycaracteresespeciales

PuederepresentarsímbolosenlascadenasdetextomediantecaracteresUnicode,códigosdecontrolycaracteresespeciales.(TodosloscaracteresquenoseantextodebenespecificarsemediantesuequivalenteASCII).

Paracrearcaracteresespeciales,sepuedeintroducirlassiguientescadenasdecaracteresUnicode:

DescripcióndeloscaracteresUnicode

CarácterUnicode Descripción

\U+00B0 Símbolodegrado

\U+00B1 Símbolodetoleranciamás/menos

\U+2205 Símbolodecotadediámetro

Loscaracteresespecialessepuedenespecificar,ademásdeconcaracteresUnicode,incluyendoinformacióndecontrolenlacadenadetexto.Utiliceunpardesignosdeporcentaje(%%)delantedecadasecuenciadecontrol.Porejemplo,elsiguientecódigodecontrolutilizauntextodeAutoCADestándarytiposde

letraPostScriptparadibujarelnúmerodecarácternnn:

%%nnn

EnunacadenadetextodeVBoVBA,elejemploanteriorseescribiríacomo:

DimpercentasLong

percent=ASC("%")

TextString=chr(percent)+chr(percent)+"nnn"

EstoscódigosdecontrolsólofuncionanconlostiposdeletradetextoestándardeAutoCAD:

Descripcióndeloscódigosdecontrol

Códigodecontrol Descripción

%%o Activaydesactivaelmododesuprarrayado.

%%u Activaydesactivaelmododesubrayado.

%%d Dibujaelsímbolodegrados.

%%p Dibujaunsímbolodetoleranciamás/menos.

%%c Dibujaelsímbolodecotadediámetro.

%%% Dibujaelsignodeporcentaje(unosolo).

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>

Sustitucióndetiposdeletra

PuededesignartiposdeletraparaqueseansustituidosporotrosoparaquesirvancomotiposdeletrapordefectocuandoAutoCADnopuedaencontraruntipodeletraespecificadoenundibujo.

SiAutoCADnopuedelocalizaruntipodeletraespecificadoenundibujo,sepuedendesignarquétiposdeletrasdeterminadossesustituyenporotrosoporlostipospordefecto.

Lostiposdeletraempleadoseneltextodelosdibujosestándeterminadosporelestilodeltextoy,enelcasodetextodelíneasmúltiples,porlosformatosdetiposdeletraindividualesaplicadosadeterminadaspartesdeltexto.Sepuedenutilizartablasdeasignacióndetiposdeletraparaasegurarsedequeeldibujosóloempleadeterminadostiposdeletra,oparaconvertirlostiposdeletraempleadosenuntipodeletradistinto.AutoCADincorporaunatabladeasignacióndetiposdeletrapordefecto.EstearchivopuedeeditarseutilizandouneditordetextoASCII.SepuedenespecificarotrastablasdeasignacióndetiposmediantelapropiedadFontFileMapdelobjetoPreferences.

Paraobtenermásinformaciónacercadelastablasdeasignacióndetiposdeletraylasustitucióndetipos,véase“Tiposdeletraalternativos”enelManualdelusuario.

Definicióndeuntipodeletraalternativopordefecto

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Sustitucióndetiposdeletra>

Definicióndeuntipodeletraalternativopordefecto

Sieldibujoespecificauntipodeletraquenofiguraenelsistema,AutoCADprocedeasusustituciónporeltipodesignadoatalefecto.AutoCADutilizapordefectoelarchivosimplex.shx.Noobstante,silonecesita,puedeindicarotrotipodeletra.UtilicelapropiedadAltFontFiledelobjetoPreferencescuandodeseedefinirelnombredelarchivodetiposdeletraalternativos.

Siutilizaunaestilodetextoqueempleauntipodeletragrande,puedeasignarloaotrotipodeletraconlapropiedadAltFontFile.Estavariabledesistemautilizadosarchivosdetiposdeletrapordefecto,txt.shxybigfont.shx.

SiAutoCADnopuedeabrirunarchivodefuentealabrirundibujo,aplicaunconjuntopordefectodereglasdesustitución.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>

Correcciónortográfica

Durantelacomprobaciónortográfica,AutoCADestablececorrespondenciasentrepalabrasdeldibujoylasdeldiccionarioprincipaldeesemomento.Laspalabrasqueañadasealmacenaráneneldiccionariopersonalizadoqueseencuentreenusoenelmomentodelaverificaciónortográfica.Porejemplo,puedeañadirnombrespropiosparaqueAutoCADlosreconozca.

Sideseacomprobarlaortografíadeuntextoredactadoenotroidioma,utiliceeldiccionarioprincipalcorrespondiente.

ActiveXAutomationdeAutoCADnodisponedeningúnmétododerevisiónortografía.Noobstante,sepuedeespecificarundiccionarioprincipaldistintoconlapropiedadMainDictionary,uotrodiccionariopersonalizadomediantelapropiedadCustomDictionarydelobjetoPreferences.

Paraobtenermásinformaciónacercadelacomprobaciónortográfica,véase“Correcciónortográfica”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>

Cotasytolerancias

Lascotasagreganmedidasalosdibujos.Lastoleranciasestablecenlavariaciónposibledeunacota.MedianteActiveXAutomationsepuedengestionarcotasconestilosymodificacionesdecota.

ConceptossobrecotasCreacióndecotasEdicióndecotasTrabajoconestilosdecotaAcotaciónenespaciomodeloyenespaciopapelCreacióndedirectricesyanotacionesUsodetoleranciasgeométricas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>

Conceptossobrecotas

Lascotasindicanlasmedidasgeométricasdeobjetos,lasdistanciasoángulosentreobjetosolascoordenadasXyYdeunacaracterística.AutoCAD®ofrecetrestiposbásicosdeacotación:lineal,radialyangular.Lascotaslinealesincluyencotasalineadas,rotadasydecoordenadas.

Sepuedenacotarlíneas,líneasmúltiples,arcos,círculosysegmentosdepolilínea,obiencrearcotasindependientes.

AutoCADdibujalascotasenlacapaactiva.Todaslascotastienenunestiloasociado,quepuedeserelestablecidopordefectoounodefinidoporelusuario.Elestilocontrolaaspectoscomoelcolor,elestilodetextoylaescaladetiposdelínea.Losdatosdealturadelobjetonoseconsideran.Lafamiliadeestilospermiterealizarligerasmodificacionesenlosdiferentestiposdecotasapartirdeunestilobase.Lassustituciones,porsuparte,permitenmodificarelestilodecotasdeterminadas.

Paraobtenermásinformaciónsobrecotas,véase“Modificacióndeobjetosexistentes”enelManualdelusuario.

PartesdeunacotaDefinicióndevariablesdesistemaparalaacotación.Definicióndeestilosdeltextodecota

ConceptosbásicosdelaslíneasdirectricesConceptosbásicosdelascotasasociativas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>

Partesdeunacota

Estaseccióndescribebrevementelaspartesdeunacota

Unalíneadecotaconsisteenunalíneaqueindicaladirecciónylaextensióndeunacota.Enlascotasangulares,lalíneadecotaesunarco.Laslíneasdereferencia,tambiénllamadaslíneasdeextensiónodeproyección,seextiendendesdelacaracterísticaqueseestáacotandohastalalíneadecota.Losextremosdecota,tambiénllamadossímbolosdeterminaciónofinalización,seañadenencadaextremodelalíneadecota.Eltextodecotaesunacadenadetextoquenormalmenteindicalamedidaactual.Untextotambiénpuedeincluirprefijos,sufijosytolerancias.Unadirectrizesunalíneacontinuaqueuneunaanotaciónylacaracterísticaalaquehacereferencia.Unamarcadecentroesunapequeñacruzqueindicaelcentrodeuncírculoodeunarco.Laslíneasdecentrosonlíneasdiscontinuasqueindicanelcentrodeuncírculoodeunarco.

Paraobtenermásinformaciónacercadelaspartesdeunacota,véase“Partesdeunacota”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>

Definicióndevariablesdesistemaparalaacotación.

Lasvariablesdelsistemacontrolanlaaparienciadelascotas.LasvariablesdelsistemadecotasincluyenDIMAUNIT,DIMUPT,DIMTOFL,DIMFIT,DIMTIH,DIMTOH,DIMJUST,yDIMTAD.PuededefinirestasvariablesutilizandoelmétodoSetVariablePorejemplo,lasiguientelíneadecódigoestablecelavariabledesistemaDIMAUNIT(elformatodelasunidadesdelascotasangulares)enradianes(3):

ThisDrawing.SetVariable"ACOUNANG",3

Paraobtenerinformaciónacercadelasvariablesdesistemaparalaacotación,véase“Utilizacióndeestilosdecotas”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>

Definicióndeestilosdeltextodecota

Eltextodecotaesunacadenadecaracteresasociadaaunacota,quepuedeincluirmedidas,tolerancias(lateralesygeométricas),prefijos,sufijosynotasdetextoenunalíneaoenunpárrafo.EltextodecotapuedeincluirlamedidaqueAutoCADcalculapordefectoocualquiertextoqueproporcioneelusuario;tambiénsepuedesuprimirtodoeltextodecota.Eltextodecotapuedeutilizarseparaagregarinformación,yaseanprocedimientosespecialesdefabricaciónoindicacionesdeensamblaje.

EltextodecotaenunalíneautilizaelestilodetextoactivoquedesignalapropiedadActiveTextStyleLospárrafosdetextoutilizanelestilodetextoactivocontodaslasmodificacionesqueserealicenenlacadenadetexto.

Paraobtenermásinformaciónacercadeltextodecota,véase“Controldeltextodelacota”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>

Conceptosbásicosdelaslíneasdirectrices

Unalíneadirectrizpordefectoesunalínearectaconunextremodecota(cabezadeflecha)quehacereferenciaaunacaracterísticadeundibujo.Porreglageneral,lafuncióndeunadirectrizesconectarlaanotaciónconlacaracterísticaanotada.Enestecaso,anotaciónsignificatextodepárrafo,bloquesomarcosdecontroldecaracterísticas.EstaslíneasdirectricessondiferentesdelaslíneasdirectricessencillasqueAutoCADcreaautomáticamenteparalascotasradiales,dediámetroylineales,cuyotextonoseajustaentrelaslíneasdereferencia.

Losobjetosdirectricesseasocianaunaanotación,porloquealeditarlaanotaciónladirectrizseactualizaenconsonancia.Sepuedecopiarunaanotacióndecualquierpuntodeundibujoyañadirlaaunadirectrizocrearunaanotaciónnueva.Tambiénsepuedencreardirectricessinanotaciones.

Paraobtenermásinformaciónacercadelasdirectrices,véase“Introducciónalacreacióndetextoydirectrices”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>

Conceptosbásicosdelascotasasociativas

Lascotasasociativasajustanautomáticamentesusubicaciones,orientacionesymedidascuandosemodificanlosobjetosgeométricosasociadosconellas.LavariabledesistemaDIMASSOCcontrolalascotasasociativas.EstablezcaDIMASSOCen2paraactivarlascotasasociativas.

Paraobtenermásinformaciónsobrecotasasociativas,véase“Cotasasociativas”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>

Creacióndecotas

Puedecrearcotaslineales,radiales,angularesydecoordenadas.

Cuandosecreancotas,seutilizaelestilodecotaactivo.Unavezcreadalalíneadereferencia,puedemodificarsuorigen,suubicaciónyelcontenidodeltextodecota,asícomosuánguloconrespectoalalíneadecota.Tambiénsepuedemodificarelestiloqueutilizalacota.

Paraobtenermásinformaciónacercadelacreacióndecotas,véase“Modificacióndeobjetosexistentes”enelManualdelusuario.

CreacióndecotaslinealesCreacióndecotasradialesCreacióndecotasangularesCreacióndecotasporcoordenadas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndecotas>

Creacióndecotaslineales

Lascotaslinealespuedenestaralineadasogiradas.Lascotasalineadastienenlalíneadecotaparalelaalalíneadondeseencuentreelorigendelalíneadereferencia.Enelcasodelascotasgiradas,lalíneadecotasecolocaenánguloconrespectoalorigendelalíneadereferencia.

Paracrearunacotalineal,utiliceelmétodoAddDimAlignedoAddDimRotated.Unavezcreadaslascotaslinealessepuedemodificareltexto,elángulodeltextoyelángulodelalíneadecota.Enlassiguientesfiguras,sedesignadeformaexplícitaelorigendelaslíneasdereferencia.Semuestralaubicaciónfinaldelalíneadecota:

ParacrearunacotaalineadautiliceelmétodoAddDimAligned.Estemétodorequieretrescoordenadasdeentrada:elorigendeambaslíneasdecotaylaposicióndeltexto.

Paracrearunacotagirada,utiliceelmétodoAddDimRotated.Estemétodorequierelaentradadetrescoordenadasydelángulodelalíneadecota.Lastrescoordenadassonelorigendeambaslíneasdereferenciaylaposicióndeltexto.Elángulodebeproporcionarseenradianesyrepresentaelánguloderotacióndelalíneadecota.

Paraobtenermásinformaciónacercadelacreacióndecotaslineales,véase“Creacióndecotaslineales”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndecotas>

Creacióndecotasradiales

Lascotasradialesmidenlosradiosylosdiámetrosdearcosycírculos.Paracrearunacotaradial,utiliceelmétodoAddDimRadial.

Secreantiposdecotasdistintossegúneltamañodelcírculodelarco,lapropiedadTextPositionylosvaloresdelasvariablesdelsistemadecotasDIMUPT,DIMTOFL,DIMFIT,DIMTIH,DIMTOH,DIMJUSTyDIMTAD.(LasvariablesdelsistemasepuedenconsultaroconfigurarconlosmétodosGetVariableySetVariable

Paraeltextodecotashorizontales,sielángulodelalíneadecotaradialconrespectoalahorizontaltienemásde15gradosyestáfueradelcírculooarco,AutoCADdibujaunalíneadeconexión,tambiénllamadadequiebrooaterrizaje.Lalíneadeconexióntienelalongituddeunextremodecotayseubicajuntoaltextodelacota,comomuestranlassiguientesilustraciones:

Paracrearcotasradiales,utilicelosmétodosAddDimRadialoAddDimDiametric.Estosmétodosrequierentresvaloresdeentrada:lacoordenadadelcírculoodelcentrodelarco,lacoordenadaparaelenlacedeladirectrizylalongituddeladirectriz.

EstosmétodosutilizanelparámetroLeaderLengthcomodistanciadesdeel

puntodecuerdahastaelpuntodondelacotarealizaunalíneadeconexiónhorizontalaltextodeanotación(osedetienesilalíneadeconexiónnoesnecesaria).

Paraobtenermásinformaciónacercadelacreacióndecotaslineales,véase“Creacióndecotasradiales”enelManualdelusuario.

Creacióndeunacotaradial

Esteejemplocreaunacotaradialenespaciomodelo.

SubCh5_CreateRadialDimension()

DimdimObjAsAcadDimRadial

Dimcenter(0To2)AsDouble

DimchordPoint(0To2)AsDouble

DimleaderLenAsInteger

'Definethedimension

center(0)=0

center(1)=0

center(2)=0

chordPoint(0)=5

chordPoint(1)=5

chordPoint(2)=0

leaderLen=5

'Createtheradialdimensioninmodelspace

SetdimObj=ThisDrawing.ModelSpace._

AddDimRadial(center,chordPoint,leaderLen)

ZoomAll

EndSub

Nota ElparámetroLeaderLengthsóloseutilizaenlacreacióndelascotas,yúnicamentesiestádefinidoconelvalorpordefectodeposicióndeltexto.Cuandolacotasecierraporprimeravez,elcambiodelvalordeLeaderLengthnoafectaalapresentacióndelacota,peroelnuevoparámetroquedaalmacenadoysemuestraenlasaplicacionesDXF,LISPyADSRX.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndecotas>

Creacióndecotasangulares

Lascotasangularesmidenelánguloformadopordoslíneasotrespuntos.Sepuedenutilizar,porejemplo,paramedirelánguloqueformandosradiosdeuncírculo.Lalíneadecotaformaunarco.

Paracrearunacotaangular,utiliceelmétodoAddDimAngular.Estemétodorequieretresvaloresdeentrada:elvérticedelángulo,losorígenesdelaslíneasdereferenciaylaubicacióndeltexto.ElAngleVertexeselcentrodelcírculooarco,oelvérticecomúnalasdoslíneasqueseestánacotando.Elorigendelaslíneasdereferenciaestáenlospuntosporlosquepasanambaslíneas.

ElAngleVertexpuedecoincidirconunodelospuntosdelorigen.Laslíneasdereferenciaseañadendeformaautomáticacuandosenecesitan.

Paraobtenermásinformaciónacercadelacreacióndecotasangulares,véase“Creacióndecotasangulares”enelManualdelusuario.

Creacióndeunacotaangular

Esteejemplocreaunacotaangularenespaciomodelo.

SubCh5_CreateAngularDimension()

DimdimObjAsAcadDimAngular

DimangVert(0To2)AsDouble

DimFirstPoint(0To2)AsDouble

DimSecondPoint(0To2)AsDouble

DimTextPoint(0To2)AsDouble

'Definethedimension

angVert(0)=0

angVert(1)=5

angVert(2)=0

FirstPoint(0)=1

FirstPoint(1)=7

FirstPoint(2)=0

SecondPoint(0)=1

SecondPoint(1)=3

SecondPoint(2)=0

TextPoint(0)=3

TextPoint(1)=5

TextPoint(2)=0

'Createtheangulardimensioninmodelspace

SetdimObj=ThisDrawing.ModelSpace._

AddDimAngular(angVert,FirstPoint,SecondPoint,TextPoint)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndecotas>

Creacióndecotasporcoordenadas

Lascotasdecoordenadas,odereferencia,midenladistanciaperpendiculardesdeunpuntodeorigenllamadopuntodereferenciahastaunacaracterísticaacotadacomo,porejemplo,elagujerodeunapieza.Laacotaciónporcoordenadasevitaloserroresdeescala,almantenerdesfasesexactosdelosobjetosconrespectoalpuntodereferencia.

LascotasdecoordenadasestánformadasporlascoordenadasXoYyunalíneadirectriz.LascotasdecoordenadasdereferenciaXindicanladistanciadeunelementodesdelacotadereferenciaalolargodelejeX.LascotasdecoordenadasdereferenciaYmidenlamismadistanciaalolargodelejeY.AutoCADutilizaelorigendelsistemadecoordenadaspersonales(SCP)actualparadeterminarlascoordenadasmedidas.Seutilizaelvalorabsolutodelascoordenadas.

Eltextosealineaconlalíneadirectrizdelacoordenadasinconsiderarlaorientacióndetextodefinidaenelestilodecotaactivo.Sepuedeaceptareltextopordefectooescribirunonuevo.

Paracrearunacotadecoordenadas,utiliceelmétodoAddDimOrdinate.Estemétodorequieretresvaloresdeentrada:unacoordenadaquedetermineelpuntoquesedeseaacotar(A),unacoordenadaquedetermineelfinaldelalíneadirectriz(B)yunaseñalbooleanaquedeterminesiesunacotadecoordenadadereferenciaXoY.SiintroduceTRUEcomovalordelaseñalbooleana,elmétodocrearáunacotadecoordenadadereferenciaX.SiintroduceFALSE,crearáunacotadecoordenadadereferenciaY.

Paraobtenermásinformaciónacercadelacreacióndecotasporcoordenadas,véase“Creacióndecotasporcoordenadas”enelManualdelusuario.

Creacióndeunacotadecoordenadas

Esteejemplocreaunacotadecoordenadasenespaciomodelo.

SubCh5_CreatingOrdinateDimension()

DimdimObjAsAcadDimOrdinate

DimdefiningPoint(0To2)AsDouble

DimleaderEndPoint(0To2)AsDouble

DimuseXAxisAsLong

'Definethedimension

definingPoint(0)=5

definingPoint(1)=5

definingPoint(2)=0

leaderEndPoint(0)=10

leaderEndPoint(1)=5

leaderEndPoint(2)=0

useXAxis=5

'Createanordinatedimensioninmodelspace

SetdimObj=ThisDrawing.ModelSpace._

AddDimOrdinate(definingPoint,_

leaderEndPoint,useXAxis)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>

Edicióndecotas

AligualqueocurreconotrosobjetosgráficosdeAutoCAD,lascotaspuedenmodificarsepormediodelosmétodosypropiedadesestándarpropiosdelobjeto.

Lamayoríadelosobjetosdeacotacióndisponendelassiguientespropiedades:

Rotation

Determinaelánguloderotacióndelalíneadecota,enradianes.

StyleName

Designaelnombredelestilodeacotación.

TextOverride

Determinalacadenadetextodelacota.

TextPosition

Determinalaposicióndeltextodecota.

TextRotation

Determinaelánguloderotacióndeltextodecota.

Measurement

Designalamedidarealdelacota.

Algunosobjetosdeacotacióntambiéncuentanconpropiedadesparaeditarelorigendelaslíneasdereferenciasylalongituddelasdirectrices.

Encuantoalaedicióndelosobjetosdeacotación,seincluyenlossiguientesmétodos:

ArrayPolar

Creaunamatrizpolar.

ArrayRectangular

Creaunamatrizrectangular.

Copy

Copiaelobjetodecota.

Erase

Borraelobjetodecota.

Mirror

Reflejaelobjetodecota.

Move

Mueveelobjetodecota.

Rotate

Giraelobjetodecota.

ScaleEntity

Cambialaescaladelobjetodecota.

Paraobtenermásinformaciónacercadelamodificacióndecotas,véase“Modificacióndecotasexistentes”enelManualdelusuario.

Sustitucióndeltextodecota

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Edicióndecotas>

Sustitucióndeltextodecota

ElvalordecotamostradopuedereemplazarsemediantelapropiedadTextOverride.Estapropiedadpermitereemplazarcompletamenteelvalormostradodelacotaoañadirletexto.

Modificacióndeltextodecota

Esteejemploañadetextoalvalorparaquesemuestrentantolacadenacomoelvalordelacota.

SubCh5_OverrideDimensionText()

DimdimObjAsAcadDimAligned

Dimpoint1(0To2)AsDouble

Dimpoint2(0To2)AsDouble

Dimlocation(0To2)AsDouble

'Definethedimension

point1(0)=5#:point1(1)=3#:point1(2)=0#

point2(0)=10#:point2(1)=3#:point2(2)=0#

location(0)=7.5:location(1)=5#:location(2)=0#

'Createanaligneddimensionobjectinmodelspace

SetdimObj=ThisDrawing.ModelSpace._

AddDimAligned(point1,point2,location)

'Changethetextstringforthedimension

dimObj.TextOverride="Thevalueis<>"

dimObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>

Trabajoconestilosdecota

Unestilodeacotaciónesunconjuntodeparámetrosquedeterminanelaspectodeunacota.Mediantelosestilosdecotamemorizados,elusuariopuedeestablecereimponerestándaresparalosbocetos.

Todaslascotasquesecreanutilizanelestilodetextoactivo.Siantesdecrearunacotanosedefineniseaplicaningúnestilo,AutoCADaplicaelestilopordefectoSTANDARD.Paraestablecerelestilodeacotaciónactivo,utilicelapropiedadActiveDimStyle

Paraestablecerunestilodecotasuperior,primerosedebeguardaryasignarnombreaunestilo.Enelmomentodecrearse,elnuevoestiloesunacopiadelactual,peroposteriormenteseincluyentodaslasmodificacionesrealizadasenlapresentacióndelaspiezasacotadas,enlaubicacióndeltextodecotayenelaspectodelaanotación.Enestecaso,laanotaciónincluyeunidadesprincipalesyalternativas,toleranciasytexto.

Paraobtenermásinformaciónacercadelosestilosdecota,véase“Utilizacióndeestilosdecotas”enelManualdelusuario.

Creación,modificaciónycopiadeestilosdecotaSustitucióndelestilodecota

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Trabajoconestilosdecota>

Creación,modificaciónycopiadeestilosdecota

Paracrearunestilodecotanuevo,utiliceelmétodoAdd.Estemétodorequierelaentradadelnombredelnuevoestilodecota.

ActiveXAutomationdeAutoCADpermiteagregarnuevosestilosdecotaymodificarelestilodecotaactivo.Tambiénsepuedecambiarelestilodecotaasociadoacadacota,conelmétodoStyleName

Asímismo,sepuedecopiarunestiloounconjuntodevaloresyaexistentes.UtiliceelmétodoCopyFromparacopiarunestilodecotadeunobjetodeorigenenunnuevoestilodecota.ElobjetodeorigenpuedeserotroobjetoDimStyle,unacota,unobjetoToleranceoLeader,oinclusounobjetoDocumentCuandosecopianlosparámetrosdeestilodeotracota,elestiloseduplicaconexactitud.SilosparámetrosdeestilosecopiandeunacotaodeunobjetoToleranceoLeader,enelnuevoestilosecopianlosparámetrosactuales,incluidaslasmodificacionesdelobjeto.SisecopiaelestilodeunobjetoDocument,enelnuevoestilosecopianelestilodecotaactivoytodaslasmodificacionesdeldibujo.

Copiadeestilosdecotaymodificaciones

Enesteejemplosecreantresestilosdecotanuevosysecopianrespectivamenteencadaunolosparámetrosactualesdeldocumento,unestilodecotadeterminadoyunacotaconcreta.Sisigueelprocesodeconfiguraciónadecuadoantesdeejecutarestecódigodeejemplo,comprobaráquesecreanvariosestilosdecotadiferentes.

1. Creeunnuevodibujoyseleccióneloparaqueseaeldibujoactivo.

2. Creeunacotalinealenelnuevodibujo.Lacotadebeserelúnicoobjetodeldibujo.

3. Cambieelcolordelalíneadecotaaamarillo.

4. CambielavariabledesistemaDIMCLRDa5(azul).

5. Ejecuteelsiguienteejemplo:

SubCh5_CopyDimStyles()

DimnewStyle1AsAcadDimStyle

DimnewStyle2AsAcadDimStyle

DimnewStyle3AsAcadDimStyle

SetnewStyle1=ThisDrawing.DimStyles.Add_

("Style1copiedfromadim")

CallnewStyle1.CopyFrom(ThisDrawing.ModelSpace(0))

SetnewStyle2=ThisDrawing.DimStyles.Add_

("Style2copiedfromStyle1")

CallnewStyle2.CopyFrom(ThisDrawing.DimStyles.Item_

("Style1copiedfromadim"))

SetnewStyle2=ThisDrawing.DimStyles.Add_

("Style3copiedfromtherunningdrawingvalues")

CallnewStyle2.CopyFrom(ThisDrawing)

EndSub

AbraelcuadrodediálogoDIMSTYLE.Ahoradeberíatenertresestilosdecotaenlalista.Elestilo1debetenerunalíneadecotaamarilla.Elestilo2deberserigualalestilo1,yelestilo3debetenerlalíneadecotaazul.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Trabajoconestilosdecota>

Sustitucióndelestilodecota

Entodaslascotasesposibleignorarlosparámetrosdesuestilodeacotación.Lamayoríadelosobjetosdeacotacióndisponendelassiguientespropiedades:

AltRoundDistance

Especificaelredondeodelasunidadesalternativas.

AngleFormat

Estableceelformatodelasunidadesdelascotasangulares.

Arrowhead1Block,Arrowhead2Block

Designaelbloquequeseutilizacomoextremodecotapersonalizadodelaslíneasdecota.

Arrowhead1Type,Arrowhead2Type

Designaeltipodeextremodecotadelaslíneasdecota.

ArrowheadSize

Especificaeltamañodelosextremosdecotadelaslíneasdecota,losextremosdecotadelaslíneasdirectricesylaslíneasdeconexión

CenterMarkSize

Especificaeltamañodelamarcacentraldelascotasradialesydediámetro.

CenterType

Especificaeltipodelamarcacentraldelascotasradialesydediámetro.

DecimalSeparator

Especificaelcarácterutilizadocomoseparadordecimalenlosvaloresdecotaydetoleranciadecimales.

DimensionLineColor

Determinaelcolordelalíneadecotadeunobjetodecota,directrizotolerancia.

DimensionLineWeight

Determinaelgrosordelaslíneasdecota.

DimLine1Suppress,DimLine2Suppress

Designanlasupresióndelaslíneasdecota.

DimLineInside

Especificalapresentacióndelíneasdecotasolamentedentrodelaslíneasdereferencia.

ExtensionLineColor

Designaelcolordelaslíneasdereferenciadecota.

ExtensionLineExtend

Especificaladistanciadelalíneadereferenciaquesobrepasaalalíneadecota.

ExtensionLineOffset

Determinaladistanciaquesedesvíanlaslíneasdereferenciaconrespectoasuspuntosdeorigen.

ExtensionLineWeight

Determinaelgrosordelaslíneasdereferencia.

ExtLine1EndPoint,ExtLine2EndPoint

Determinaelpuntofinaldelaslíneasdereferencia.

ExtLine1StartPoint,ExtLine2StartPoint

Especificaelpuntoinicialdelaslíneasdereferencia.

ExtLine1Suppress,ExtLine2Suppress

Determinalasupresióndelaslíneasdereferencia.

Ajustar

Especificalaubicacióndeltextoylosextremosdecotafueraodentrodelaslíneasdereferencia.

ForceLineInside

Determinasiunalíneadecotasedibujaentrelaslíneasdereferencia,inclusocuandoeltextoestásituadofueradedichaslíneas.

FractionFormat

Especificaelformatodelosvaloresfraccionariosenlascotasylastolerancias.

HorizontalTextPosition

Designalajustificaciónhorizontaldeltextodelacota.

LinearScaleFactor

Especificaunfactordeescalaglobalparalamedicióndecotaslineales.

PrimaryUnitsPrecision

Designaelnúmerodeposicionesdecimalesmostradasparalasunidadesprincipalesdeunacotaounatolerancia.

SuppressLeadingZeros,SuppressTrailingZeros

Especificalasupresióndeloscerosaladerechayalaizquierdaenlosvaloresdelascotas.

SuppressZeroFeet,SuppressZeroInches

Especificalasupresióndeunamedidadeceropiesyceropulgadasenlosvaloresdelascotas.

TextColor

Designaelcolordeltextodelosobjetosdecotaydetolerancia.

TextGap

Especificaladistanciaentreeltextodelacotaylalíneadecotacuandosedividelalíneaparaincluireltexto.

TextHeight

Determinalaalturadeltextodelacotaolatolerancia.

TextInside

Especificasieltextodelacotadebedibujarsedentrodelaslíneasdereferencia.

TextInsideAlign

Especificalaposicióndeltextodelacotadentrodelaslíneasdereferenciaparatodoslostiposdeacotacionesexceptolasdecoordenadas.

TextMovement

Indicacómosedibujaeltextodelacotacuandoeltextosedesplaza.

TextOutsideAlign

Especificalaposicióndeltextodelacotafueradelaslíneasdereferenciaparatodoslostiposdeacotacionesexceptolasdecoordenadas.

TextPosition

Determinalaposicióndeltextodecota.

TextPrecision

Indicalaprecisióndeltextodelascotasangulares.

TextPrefix

Designaelprefijodelvalordelacota.

TextRotation

Determinaelánguloderotacióndeltextodecota.

TextSuffix

Designaelsufijodelvalordelacota.

ToleranceDisplay

Especificasisemuestranlastoleranciasjuntoconeltextodelacota.

ToleranceHeightScale

Especificaunfactordeescalaparalaalturadeltextodelosvaloresdetoleranciaconrespectoalaalturadeltextodelacota.

ToleranceJustification

Designalajustificaciónverticaldelosvaloresdetoleranciaconrespectoaltextodecotanominal.

ToleranceLowerLimit

Especificaellímitedetoleranciamínimadeltextodelascotas.

TolerancePrecision

Indicalaprecisióndelosvaloresdetoleranciaenlascotasprincipales.

ToleranceSuppressLeadingZeros

Especificalasupresióndeloscerosalaizquierdaenlosvaloresdetolerancia.

ToleranceSuppressTrailingZeros

Especificalasupresióndeloscerosaladerechaenlosvaloresdecota.

ToleranceUpperLimit

Especificaellímitedetoleranciamáximadeltextodelascotas.

UnitsFormat

Designaelformatodelasunidadesdelastodaslascotasexceptolasangulares.

VerticalTextPosition

Designalaposiciónverticaldeltextoconrespectoalalíneadecota.

Introduccióndeunsufijodefinidoporelusuarioparautilizarloenunacotaalineada

EsteejemplocreaunacotaalineadaenespaciomodeloyutilizalapropiedadTextSuffixparapermitirqueelusuariocambieelsufijodeltextodelacota.

SubCh5_AddTextSuffix()

DimdimObjAsAcadDimAligned

Dimpoint1(0To2)AsDouble

Dimpoint2(0To2)AsDouble

Dimlocation(0To2)AsDouble

DimsuffixAsString

'Definethedimension

point1(0)=1.3:point1(1)=7.8:point1(2)=0

point2(0)=5:point2(1)=5:point2(2)=0

location(0)=5:location(1)=7:location(2)=0

'Createanaligneddimensionobjectinmodelspace

SetdimObj=ThisDrawing.ModelSpace._

AddDimAligned(point1,point2,location)

ThisDrawing.Application.ZoomAll

'Allowtheusertochangethetextsuffixforthedimension

suffix=InputBox("Enteranewtextsuffixforthedimension"_

,"SetDimensionSuffix",":SUFFIX")

'Applythechangetothedimension

dimObj.TextSuffix=suffix

ThisDrawing.RegenacAllViewports

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>

Acotaciónenespaciomodeloyenespaciopapel

Sepuedendibujarcotastantoenespaciopapelcomoenespaciomodelo.Noobstante,silageometríaqueseestáacotandoestáenelespaciomodelo,convienedibujarlascotasendichoespacio,yaqueAutoCADsitúalospuntosdedefinicióndelascotasenelespaciodondeestádibujadalageometría.

Cuandosedibujaenespaciopapelunacotaquedescribelageometríadeunmodelo,lacotanocambiacuandoseutilizancomandosdeediciónosemodificaelfactordeampliacióndelaventanagráficadelespaciomodelo.Tampocosealteralaposicióndelascotasdeespaciopapelcuandosecambiaunavistadelespaciopapelalespaciomodelo.

Sidibujacotasenelespaciopapelyelfactordeescalaglobalparaacotaciónlineal(valordelavariabledesistemaDIMLFAC)esmenorquecero,ladistanciamedidasemultiplicaporelvalorabsolutodeDIMLFAC.Sisedibujancotasenelespaciomodelo,seutilizaelvalor1.0aunqueDIMLFACseamenorquecero.AutoCADcalculaunvalorparaDIMLFACsimodificalavariableenlasolicitudAcotaryseleccionalaopciónVentana.AutoCADcalculalaescaladeespaciomodeloaespaciopapelyasignaestevalorconsignonegativoalavariableDIMLFAC.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>

Creacióndedirectricesyanotaciones

Unadirectrizesunalíneaqueconectaanotacionesconunacaracterísticadeundibujo.Lasdirectricesysusanotacionestienencarácterasociativo,porloquealmodificarunaanotaciónsudirectrizseactualizaconsecuentemente.ElobjetoLeadernosedebeconfundirconlaslíneasdirectricesqueAutoCADgeneraautomáticamentecomopartedeunalíneadecota.

Paraobtenermásinformaciónacercadelasdirectrices,véase“Creacióndetextocondirectrices”enelManualdelusuario.

CreacióndelíneasdirectricesAdicióndeunaanotaciónaunalíneadirectrizAsociatividaddelasdirectricesModificacióndelaasociatividaddelasdirectricesEdicióndedirectrices

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>

Creacióndelíneasdirectrices

Puedecrearunalíneadirectrizdesdecualquierpuntoocaracterísticadeundibujoycontrolarlosparámetrosquedeterminansuaspectoduranteelprocesodecreación.Unalíneadirectrizpuedeconsistirenunaseriedesegmentosdelínearectaoenunasuavecurvaspline.Elcolordeladirectrizsecontrolamedianteelcolordelalíneadecotaactual.Laescaladeladirectrizsecontrolaconlaescalageneraldecotasquetengadefinidaelestilodecotaactivo.Eltipoytamañodelosextremosdecotas(flechas),sisedesignaalguno,secontrolamedianteelprimerextremoquesehayadefinidoenelestiloactivo.

Porlogeneral,ladirectrizylaanotaciónseconectanmedianteunapequeñalíneaconocidacomolíneadeconexión.LaslíneasdeconexiónaparecenconcuadrosdecontroldecaracterísticasyMTextcuandoelúltimosegmentodeladirectriztieneunángulomayorde15gradosdesdelahorizontal.Lalongituddelalíneadeconexiónesigualaladeunasolaflecha.Cuandoladirectriznotieneanotaciones,tampococuentaconlíneadeconexión.

Paracrearunalíneadirectriz,utiliceelmétodoAddLeader.Estemétodorequieretresvaloresdeentrada:lamatrizdecoordenadasqueespecificandóndecrearladirectriz,elobjetodeanotación(oNULLsilalíneadirectriznotieneanotación,yeltipodedirectrizquesevaacrear.Eltipodeterminasiladirectrizseráunalínearectaounacurvasplinesuave.Tambiéndeterminasitendráflechasono.Useunadelasconstantessiguientesparaespecificareltipodedirectriz:acLineNoArrow,acLineWithArrow,acSplineNoArrow,oacSplineWithArrow.Estasconstantesseexcluyenmutuamente.

Creacióndeunalíneadirectriz

Esteejemplocreaunalíneadirectrizenespaciomodelo.Ladirectriznotieneasociadasanotaciones.

SubCh5_CreateLeader()

DimleaderObjAsAcadLeader

Dimpoints(0To9)AsDouble

DimleaderTypeAsInteger

DimannotationObjectAsAcadObject

points(0)=0:points(1)=0:points(2)=0

points(3)=4:points(4)=4:points(5)=0

points(6)=4:points(7)=5:points(8)=0

leaderType=acLineWithArrow

SetannotationObject=Nothing

'Createtheleaderobjectinmodelspace

SetleaderObj=ThisDrawing.ModelSpace._

AddLeader(points,annotationObject,leaderType)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>

Adicióndeunaanotaciónaunalíneadirectriz

UnaanotacióndedirectrizpuedeserunobjetoTolerance,MTextoBlockRef.Sepuedecrearunaanotaciónnuevaoutilizarlacopiadeunayaexistente,perosóloseañadealadirectrizunavezcreada.

Paraañadirunaanotaciónmientrassecreaunadirectriz,introduzcalanotaenelmétodoAddLeader.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>

Asociatividaddelasdirectrices

Debidoaquelasdirectricesseasocianconsuanotación,cuandolaanotaciónsemueveelpuntofinaldeladirectrizsemueveconella.Conformesedesplazaelrectángulodetoleranciayeltextodelaanotación,elsegmentofinaldelalíneadirectrizalternalaconexiónentrelascarasizquierdayderechadelaanotación,segúnlarelacióndelaanotaciónconelpenúltimopunto(elsegundoporelfinal)deladirectriz.Sielpuntomediodelaanotaciónseencuentraaladerechadelpenúltimopuntodeladirectriz,éstaseenlazaaladerecha;delocontrario,elenlaceserealizaalaizquierda.

CuandoseeliminaunobjetodeldibujomediantelosmétodosErase,Add(paraagregarunbloque)oWBlock,serompelaasociatividad.Cuandoladirectrizysuanotaciónsecopianjuntasenunamismaoperación,lanuevacopiaesasociativa.Noesasociativasisecopianporseparado.Silaasociatividadserompe,porejemploporcopiarsóloelobjetoLeaderoborrarlaanotación,lalíneadeconexióndeladirectrizdesaparece.

Asociacióndeunalíneadirectrizaunaanotación

EnesteejemplosecreaunobjetoMText.DespuéssecreaunalíneadirectrizutilizandoelobjetoMTextcomoanotación.

SubCh5_AddAnnotation()

DimleaderObjAsAcadLeader

DimmtextObjAsAcadMText

Dimpoints(0To9)AsDouble

DiminsertionPoint(0To2)AsDouble

DimwidthAsDouble

DimleaderTypeAsInteger

DimannotationObjectAsObject

DimtextStringAsString,msgAsString

'CreatetheMTextobjectinmodelspace

textString="Hello,World."

insertionPoint(0)=5

insertionPoint(1)=5

insertionPoint(2)=0

width=2

SetmtextObj=ThisDrawing.ModelSpace._

AddMText(insertionPoint,width,textString)

'DataforLeader

points(0)=0:points(1)=0:points(2)=0

points(3)=4:points(4)=4:points(5)=0

points(6)=4:points(7)=5:points(8)=0

leaderType=acLineWithArrow

'CreatetheLeaderobjectinmodelspaceandassociate

'theMTextobjectwiththeleader

SetannotationObject=mtextObj

SetleaderObj=ThisDrawing.ModelSpace._

AddLeader(points,annotationObject,leaderType)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>

Modificacióndelaasociatividaddelasdirectrices

Salvoenlorelativoalarelacióndeasociatividad,ladirectrizysuanotaciónsonobjetostotalmenteindependientesdeldibujo.Igualquelamodificacióndeunadirectriznoafectaalaanotación,laedicióndeéstatampocoafectaalaprimera.

AunquelaanotacióndetextosecreautilizandolasvariablesdesistemaDIMCLRT,DIMTXTyDIMTXSTYparadefinirsucolor,alturayestilo,estasvariablesnopuedenemplearseparaeditarlaanotación,yaquenosetratadeunverdaderoobjetodecota.LaanotacióndetextodebeeditarsecomocualquierotroobjetoMtext.

UtiliceelmétodoEvaluateparaevaluarlarelacióndeladirectrizconlaanotaciónquetieneasociada.Siespreciso,estemétodoactualizalageometríadirectriz.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>

Edicióndedirectrices

Cualquiermodificaciónrealizadaenunaanotacióndedirectrizquecambiesuposiciónafectaalaposicióndelextremodeladirectrizasociada.Deigualforma,alrotarlaanotacióntambiéngiralalíneadirectriz(siexiste).

Sideseaajustareltamañodeunadirectriz,puedeatribuirleunfactordeescala.Cuandoseatribuyeunaescalasóloseactualizaelobjetodesignado.Porejemplo,siseajustalaescaladeladirectriz,laanotaciónpermaneceenlamismaposiciónrespectodelpuntofinaldeladirectriz,peronocambiadeescala.

Lasdirectrices,ademásdeampliarseoreducirse,tambiénsepuedendesplazar,reflejaryrotar.UtilicelosmétodosScaleEntity,Move,MirroryRotateparamodificardirectrices.ElestilodetextoquetieneasociadounaanotacióntambiénsepuedecambiarmediantelapropiedadStyleName.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>

Usodetoleranciasgeométricas

Lastoleranciasgeométricasindicanlasdesviacionesdeforma,perfil,orientación,ubicaciónyoscilacióndeunacaracterística.Lastoleranciasgeométricasseañadenalosrectángulosdetolerancia.Estosrectánguloscontienentodalainformaciónsobrelatoleranciadeunasolacota.

Paraobtenermásinformaciónacercadelusoderectángulosdetoleranciayeltrabajocontoleranciasgeométricas,véaselasección“Adicióndetoleranciasgeométricas”enelManualdelusuario.

CreacióndetoleranciasgeométricasModificacióndetolerancias

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Usodetoleranciasgeométricas>

Creacióndetoleranciasgeométricas

Paracrearunatoleranciageométrica,utiliceelmétodoAddTolerance.Estemétodorequierelaintroduccióndetresvalores:lacadenadetextoquecontieneelsímbolodetolerancia,laubicacióndeldibujodondesesituarálatoleranciayunvectordedirecciónparadeterminarladireccióndelatolerancia.Lastoleranciastambiénsepuedencopiar,desplazar,borrar,ampliaroreduciryrotar.

Creacióndeunatoleranciageométrica

Esteejemplocreaunatoleranciageométricasencillaenespaciomodelo.

SubCh5_CreateTolerance()

DimtoleranceObjAsAcadTolerance

DimtextStringAsString

DiminsertionPoint(0To2)AsDouble

Dimdirection(0To2)AsDouble

'Definethetoleranceobject

textString="HereistheFeatureControlFrame"

insertionPoint(0)=5

insertionPoint(1)=5

insertionPoint(2)=0

direction(0)=1

direction(1)=1

direction(2)=0

'Createthetoleranceobjectinmodelspace

SettoleranceObj=ThisDrawing.ModelSpace._

AddTolerance(textString,insertionPoint,direction)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Usodetoleranciasgeométricas>

Modificacióndetolerancias

Lastoleranciasestáninfluidasporvariasvariablesdesistema:DIMCLRDcontrolaelcolordelrectángulodetolerancia,DIMCLRTcontrolaelcolordeltextodelatolerancia,DIMGAPcontrolaelespacioentreelrectángulodetoleranciayeltexto,DIMTXTcontrolaeltamañodeltextodelatoleranciayDIMTXTSTYcontrolaelestilodetextodelatolerancia.UtiliceelmétodoSetVariableparaajustarlosvaloresdelasvariablesdelsistema.

¿Comentarios?

<$nopage>MenuGroups(colección):<$nopage>menú(objetos):<$startrange>InsertInMenuBar(método):códigodeejemplo,separadores:añadiramenús,PopupMenuItem(objeto):AddSeparator(método),AddSeparator(método),utilizarlapropiedadType,Label(propiedad):teclarápida,PopupMenuItem(objeto):teclasrápidas,asignar,submenús:añadir,submenús:colocar,PopupMenu(objeto):crearsubmenús,menús:crearsubmenús,<$nopage>cascada(menús).<$endrange>InsertInMenuBar(método):códigodeejemplo,menús:suprimir,PopupMenu(objeto):suprimirelementosdemenú,PopupMenuItem(objeto):suprimirelementosdemenú,Delete(método):códigodeejemplo,PopupMenuItem(objeto):Tag(propiedad),PopupMenuItem(objeto):Label(propiedad),PopupMenuItem(objeto):Caption(propiedad),PopupMenuItem(objeto):Macro(propiedad),PopupMenuItem(objeto):HelpString(propiedad),PopupMenuItem(objeto):Enable(propiedad),PopupMenuItem(objeto):Check(propiedad),menús:activar,menús:desactivar,menús:verificar,menús:colocar,PopupMenuItem(objeto):Index(propiedad),PopupMenuItem(objeto):Type(propiedad),PopupMenuItem(objeto):Submenu(propiedad),PopupMenuItem(objeto):Parent(propiedad),PopupMenuItem(objeto):Parent(propiedad),menús:tipodeelementodemenú,menús:devolversubmenús,menús:asignarelementosdemenú,menús:macrosdemenús,caracteresespeciales,InsertInMenuBar(método):códigodeejemplo,Toolbars(colección):Add(método),Toolbars(colección):Name(propiedad),Name(propiedad):barrasdeherramientas,Toolbar(objeto):asignarnombre,Add(método):barrasdeherramientas,códigodeejemplo,Toolbar(objeto):códigodeejemplo,AddToolbarButton(método),Toolbar(objeto):AddToolbarButton(método),ToolbarItem(objeto),ToolbarItem(objeto):colocarbotonesdebarrasdeherramientas,ToolbarItem(objeto):Name(propiedad),Name(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):HelpString(propiedad),HelpString(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Macro(propiedad),Macro(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):crearbotóndesplegable,botóndesplegable,Toolbar(objeto):códigodeejemplo,AddToolbarButton(método):códigodeejemplo,ToolbarItem(objeto):códigodeejemplo,Toolbar(objeto):AddSeparator(método),Toolbar(objeto):usarlapropiedadType,separadores:añadirabarrasdeherramientas,SetBitmaps(método),ToolbarItem(objeto):SetBitmaps(método),GetBitmaps(método),ToolbarItem(objeto):GetBitmaps,SetBitmaps(método):SmallIconName(parámetro),SetBitmaps(método):LargeIconName(parámetro),Type(propiedad):códigodeejemplo,GetBitmaps(método):códigodeejemplo,ToolbarItem(objeto):códigodeejemplo,iconosdesplegables,barrasdeherramientas:AddToolbarButton(método),AddToolbarButton(método):crear

barrasdeherramientasdesplegables,Toolbar(objeto):barrasdeherramientasdesplegables(crear),AddToolbarButton(método):códigodeejemplo,Toolbar(objeto):códigodeejemplo,ToolbarItem(objeto):códigodeejemplo,iconosdesplegables,barrasdeherramientas:códigodeejemplo,AttachToolbarToFlyout(método),códigodeejemplo,Visible(propiedad):códigodeejemplo,Toolbar(objeto):Float(método),Float(método):barrasdeherramientasflotantes,Toolbar(objeto):Dock(método),Dock(método):anclarbarrasdeherramientas,Toolbar(objeto):Docked(propiedad),Dock(método):códigodeejemplo,Toolbar(objeto):códigodeejemplo,ToolbarItem(objeto):suprimir,ToolbarItem(objeto):Tag(propiedad),Tag(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Name(propiedad),Name(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Macro(propiedad),Macro(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):HelpString(propiedad),HelpString(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Index(propiedad),Index(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Type(propiedad),Type(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Flyout(propiedad),Flyout(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Parent(propiedad),Parent(propiedad):ToolbarItem(objeto),PopupMenuItem(objeto):escribirmacros,ToolbarItem(objeto):escribirmacros,macros:enmenús,macros:enbarrasdeherramientas,macros:directricesdeescritura,PICKAUTO(variabledesistema),PICKADD(variabledesistema),macros:caracteresespeciales(tabla),macrosdemenú:caracteresespeciales(tabla),macrosdebarrasdeherramientas:caracteresespeciales(tabla),macros:terminar,terminarmacros:ejemplosdecódigo,macros:datosdelusuario,entradadeusuario,interrumpirmacros,CAPA(comando):macros,macros:CAPA(comando),DESIGNA(comando):macros,macros:DESIGNA(comando),contrabarra(\\):macros,macros:contrabarra,carácter,macros:retardos(lista),interrumpirmacros:retardos(lista),macros:cancelarcomandos,macros:manipulacióndecomandos,macros:usodelarepetición,macros:designacióndeobjetosúnicos,designacióndeobjetosúnicosenmacros,BORRA(comando):macros,macros:BORRA(comando),ToolbarItem(objeto):mensajedeayudaenlalíneadeestado,PopupMenuItem(objeto):mensajedeayudaenlalíneadeestado,ayudaenlalíneadeestado,paramenúsybarrasdeherramientas,Ayuda,líneadeestado:paramenúsybarrasdeherramientas,InsertInMenuBar(método):códigodeejemplo,cursor(menús):ShortcutMenu(propiedad),cursor(menús):añadirelementosnuevos,<$nopage>menúcontextual.

ManualdeldesarrolladordeActiveXyVBA>

Personalizacióndebarrasdeherramientasymenús

ActiveXAutomationdeAutoCADpermiteunaltogradodecontrolsobrelapersonalizacióndemenúsybarrasdeherramientasenlasesiónactualdeAutoCAD.

ConAutoCADActiveX/VBA,puedemodificaroincrementarlaestructurademenúsexistente,obienreemplazarlaporcompleto.Tambiénpuederealizarcambiosenlasbarrasdeherramientasyenlosmenúscontextuales.

Lapersonalizacióndemenúspuedeaumentarelrendimiento,yaquepermiteexponertareasespecíficasdeunaaplicaciónoconcentrartareasdemuchospasosenunasencillaopcióndemenú.

Paraobtenerinformaciónadicionalsobrepersonalizacióndemenúsybarrasdeherramientas,consulteelManualdepersonalización.

ConceptosbásicossobrelascoleccionesMenuBaryMenuGroupsCargadegruposdemenúsCambiodelabarrademenúsCreaciónymodificacióndemenúsdesplegablesycontextualesCreaciónymodificacióndebarrasdeherramientasCreacióndemacrosCreacióndemensajesdeayudaenlalíneadeestadoparaelementosdemenúsydebarrasdeherramientasAdicióndeentradasalmenúcontextual

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

ConceptosbásicossobrelascoleccionesMenuBaryMenuGroups

AutoCAD®ActiveX®ofrecevariosobjetosrelacionadosconlosmenús.LosdosmásimportantessonlacolecciónMenuBarylacolecciónMenuGroups.LacolecciónMenuBarcontienetodoslosmenúsquesemuestranenlabarrademenúsdeAutoCAD.

LacolecciónMenuGroupsincluyelosgruposdemenúsquesecarganenlasesiónactivadeAutoCAD.EstosgruposcontienentodoslosmenúsqueestándisponiblesenlasesióndeAutoCADenlabarrademenússepuedenmostrartodoslosmenúsopartedeellos.Ademásdelosmenús,losgruposdemenúsincluyentambiéntodaslasbarrasdeherramientasqueestándisponiblesenlasesiónactivadeAutoCAD.Losgruposdemenústambiénrepresentanmenúsenmosaico,menúsdepantallaomenúsdetablero.

TodoslosgruposdemenúscontienenunacolecciónPopupMenusyotraToolbars.LacolecciónPopupMenusincluyetodoslosmenúsdelgrupodemenús.Deigualforma,lacolecciónToolbarscontienetodaslasbarrasdeherramientasdelgrupodemenús.

CadaPopupMenuesenrealidadunacolecciónquecontieneunobjetoindividualporcadaelementodemenúqueapareceenelmismo.Deigualforma,cadaToolbaresunacolecciónqueconstadeunobjetoindividualporcadaelementodelabarradeherramientas.

¿Comentarios?

<$nopage>MenuGroups(colección):

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

Cargadegruposdemenús

LosgruposdemenússecarganenAutoCADmedianteelmétodoLoad.Porejemplo,elsiguientecódigocargaelarchivodepersonalizaciónacad.cui:

ThisDrawing.Application.MenuGroups.Load"acad.cui"

Cuandoutilicedichométodo,asignealparámetroBaseMenuelvalorTRUEparacargarungrupodemenúsnuevoalabarrademenús.ElgrupodemenússecargarácomomenúbasedelamismamaneraqueelcomandoMENUenAutoCAD.

Paracargarcomomenúparcialungrupodemenúsnuevo,omitaelparámetroBaseMenu.ElgrupodemenússecargarádelamismamaneraqueelcomandoMENULOADenAutoCAD.UnavezcargadosenlacolecciónMenuGroups,losmenúsparcialespuedenañadirsealabarrademenúsmediantelosmétodosInsertMenuInMenuBaroInsertInMenuBar.

Despuésdecargarungrupodemenús,todoslosmenúsybarrasdeherramientasdefinidosporélestarándisponibles.Esposible:

Añadirnuevosmenúsalabarrademenús

Eliminarmenúsdelabarrademenús

Reorganizarlosmenúsenlabarrademenús

Añadirnuevoselementosaunmenúounabarradeherramientasexistente

Eliminarelementosdeunmenúounabarradeherramientasexistente

Crearnuevosmenúsybarrasdeherramientas

Dejarlasbarrasdeherramientasflotantesofijas

Activarodesactivarelementosdemenúobarradeherramientas

Seleccionaroquitarlaseleccióndeunelementodemenú

Cambiarelidentificador,laetiquetaolacadenadebúsquedadeunelementodemenúobarradeherramientas

Volveraasignarlasmacrosasociadasaelementosdemenúsobarrasdeherramientas

Nota SólosepuedenmodificarmenúsdesplegablesybarrasdeherramientasmedianteActiveXAutomation.Noobstante,sepuedeutilizarActiveXAutomationparacagarydescargarotrostiposdemenús,comoelementosdemenúsdesímbolos,menúsdepantallaodetablero.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

Cambiodelabarrademenús

Comohapodidocomprobar,labarrademenúspuedereemplazarseporungrupodemenúsnuevosiésteseencuentracargadocomomenúbase.Tambiénsepuedenañadir,eliminaryredistribuirmenúsindividualesenlabarrademenús.

InsercióndemenúsenlabarrademenúsEliminacióndemenúsdelabarrademenúsReorganizacióndeopcionesdemenúenlabarrademenús

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Cambiodelabarrademenús>

Insercióndemenúsenlabarrademenús

Paraincluirunmenúexistenteenlabarrademenús,utilicelosmétodosInsertMenuInMenuBaroInsertInMenuBar.Ambosmétodoscumplenelmismoobjetivo:insertarunmenúexistenteenlabarrademenús.

Ladiferenciaentreestosdosmétodosradicaenelobjetodesdeelquesellaman.ElmétodoInsertMenuInMenuBarsellamadesdelacolecciónPopupMenus.Conestemétodosepuedeninsertarlosmenúsdeunacolecciónenunaubicaciónespecíficadelabarrademenús.Requierecomoentradaelnombredelmenúquesedeseainsertarylaposicióndelabarrademenúsdondesedeseacolocar.

ElmétodoInsertInMenuBarsellamadirectamentedesdeelobjetoPopupMenuquesedeseainsertar.Laúnicaentradaquerequiereestemétodoeslaposiciónenlabarrademenús.Noesnecesariointroducirelnombredelmenúyaqueseestállamandoalmétododirectamentedesdeelobjeto.

Utiliceelmétodoqueseamásidóneoparalaaplicaciónqueestéutilizando.

Insercióndemenúsenlabarrademenús

EsteejemplocreaunmenúllamadoTestMenueinsertaenélunelementodemenú.SeasignaalelementoelcomandoABRIR.Despuéssemuestraelmenúenlabarrademenús.

SubCh6_InsertMenu()

'Defineavariableforthecurrentmenugroup

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application._

MenuGroups.Item(0)

'Createanewmenu

DimnewMenuAsAcadPopupMenu

SetnewMenu=currMenuGroup.Menus.Add("TestMenu")

'Declarethevariablesforthemenuitem

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrostringtheVBequivalentof

'"ESCESC_open"andcreatethemenuitem

openMacro=Chr(3)+Chr(3)+"_open"

SetnewMenuItem=newMenu.AddMenuItem(newMenu.Count+1,_

"Open",openMacro)

'Displaythemenuonthemenubar

currMenuGroup.Menus.InsertMenuInMenuBar"TestMenu",""

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Cambiodelabarrademenús>

Eliminacióndemenúsdelabarrademenús

Paraeliminarunmenúdelabarrademenús,utilicelosmétodosRemoveMenuFromMenuBaroRemoveFromMenuBar.Ambosmétodoscumplenelmismoobjetivo:eliminarunmenúdelabarrademenús.

Ladiferenciaentreestosdosmétodosradicaenelobjetodesdeelquesellaman.ElmétodoRemoveMenuFromMenuBarsellamadesdelacolecciónPopupMenus.Requierecomoentradaelnombredelmenúquesedeseaeliminarolaposicióndondeseencuentradentrodelabarrademenús.Porejemplo,lassiguientesinstruccioneseliminanelmenúqueseañadióenelapartadoInsercióndemenúsenlabarrademenús:

currMenuGroup.Menus.RemoveMenuFromMenuBar("TestMenu")

ElmétodoRemoveFromMenuBarsellamadirectamentedesdeelobjetoPopupMenuquesedeseaeliminar.Estemétodonorequiereningunaentrada.Noesnecesariointroducirelnombredelmenúyaqueseestállamandoalmétododirectamentedesdeelmismoobjetoquesedeseaeliminar.

Utiliceelmétodoqueseamásidóneoparalaaplicaciónqueestéutilizando.

Nota Losmenúsqueseeliminandelabarrademenúspermanecendisponiblesensugrupodemenús,aunqueocultosalavistadelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Cambiodelabarrademenús>

Reorganizacióndeopcionesdemenúenlabarrademenús

Paraorganizarlosmenúsdelabarrademenús,inserteyeliminelosquenecesitehastaobtenerlaconfiguracióndeseada.

Desplazamientodelprimermenúalfinaldelabarrademenús

Esteejemploeliminaelprimermenúdelabarrademenúsyloinsertacomoúltimomenúdelabarra.

SubCh6_MoveMenu()

'Defineavariabletoholdthemenutobemoved

DimmoveMenuAsAcadPopupMenu

DimMyMenuBarAsAcadMenuBar

SetMyMenuBar=ThisDrawing.Application.menuBar

'SetmoveMenuequaltothefirstmenudisplayed

'onthemenubar

SetmoveMenu=MyMenuBar.Item(0)

'Removethefirstmenufromthemenubar

MyMenuBar.Item(0).RemoveFromMenuBar

'Addthemenubackintothemenubar

'inthelastpositiononthebar

moveMenu.InsertInMenuBar(MyMenuBar.count)

EndSub

¿Comentarios?

<$nopage>menú(objetos):<$startrange>InsertInMenuBar(método):códigodeejemplo,separadores:añadiramenús,PopupMenuItem(objeto):AddSeparator(método),AddSeparator(método),utilizarlapropiedadType,Label(propiedad):teclarápida,PopupMenuItem(objeto):teclasrápidas,asignar,submenús:añadir,submenús:colocar,PopupMenu(objeto):crearsubmenús,menús:crearsubmenús,<$nopage>cascada(menús).<$endrange>InsertInMenuBar(método):códigodeejemplo,menús:suprimir,PopupMenu(objeto):suprimirelementosdemenú,PopupMenuItem(objeto):suprimirelementosdemenú,Delete(método):códigodeejemplo,PopupMenuItem(objeto):Tag(propiedad),PopupMenuItem(objeto):Label(propiedad),PopupMenuItem(objeto):Caption(propiedad),PopupMenuItem(objeto):Macro(propiedad),PopupMenuItem(objeto):HelpString(propiedad),PopupMenuItem(objeto):Enable(propiedad),PopupMenuItem(objeto):Check(propiedad),menús:activar,menús:desactivar,menús:verificar,menús:colocar,PopupMenuItem(objeto):Index(propiedad),PopupMenuItem(objeto):Type(propiedad),PopupMenuItem(objeto):Submenu(propiedad),PopupMenuItem(objeto):Parent(propiedad),PopupMenuItem(objeto):Parent(propiedad),menús:tipodeelementodemenú,menús:devolversubmenús,menús:asignarelementosdemenú,menús:macrosdemenús,caracteresespeciales,InsertInMenuBar(método):códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

Creaciónymodificacióndemenúsdesplegablesycontextuales

AutoCADActiveX/VBAtienelacapacidaddepersonalizardostiposdemenúsdeAutoCAD:menúsdesplegablesycontextuales(avecesdenominadosmenúsdecursor).Ambossemuestrancomomenúsencascada.Elmenúcontextualpermiteaccederconrapidezaelementosdemenúdeusofrecuente,comolosmodosdereferenciaaobjetos.

Unmenúdesplegablepuedecontenerhasta999elementosdemenú.Unmenúcontextualpuedecontenerhasta499elementosdemenú.Amboslímites

incluyenatodoslosmenúsdelajerarquía.Sielnúmerodeelementosdeunmenúexcededichoslímites,AutoCADignoraloselementossobrantes.Siunmenúdesplegableocontextualsobrepasaelespaciodisponibleenlapantallagráfica,setruncaparaajustarloalapantalla.

Losmenúsdesplegablessiempresedespliegandesdelabarrademenús,mientrasqueloscontextualessiempresemuestranenlaposicióndelospunterosencruzdelapantallagráfica,ocercadeellos.Elmanejodeambostiposdemenúseselmismo,exceptoqueeltítulodelmenúcontextualnoestáincluidoenlabarrademenús.Simplementenosemuestra.Elaccesoalmenúcontextualserealizaatravésdeunmenúúnicosituadoenelgrupodemenúsbase.ElmenúcontextualsepuedeidentificarconlapropiedadShortcutMenu.SiestapropiedaddevuelveTRUE,elmenúconsultadoeselmenúcontextualdelgrupo.

CreacióndemenúsnuevosAdicióndenuevoselementosdemenúaunmenúAdicióndeseparadoresaunmenúAsignacióndeteclarápidaaunaopcióndemenúCreacióndesubmenúsencascadaEliminacióndeopcionesdemenúsExamendepropiedadesdeelementosdemenú

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>

Creacióndemenúsnuevos

Paracrearunmenúnuevo,agregueunobjetoPopupMenualacolecciónPopupMenusconelmétodoAdd.

Paracrearunmenúcontextual,primerodebeeliminarunoyaexistente.Sólopuedehaberunmenúcontextualencadagrupodemenús.Sinohayotromenúcontextual,puedeañadirunoconlaetiqueta“POP0”.AsíindicaráaAutoCADquedeseacrearunmenúdeestetipo.

ElmétodoAddrequierecomoentradaelnombre(etiqueta)delmenúquesedeseaañadir.Estenombreseráeltítulodelmenúcuandosecargueenlabarrademenús.Además,elnombreeslamaneramásfácildeidentificarelmenúenlacolección.

Elnombredeunmenúpuedeserunasimplecadenadetextoocontenercódigosespeciales.Losnombresdelosmenússepuedencambiardespuésdesucreación.Paracambiarelnombredeunmenúexistente,utilicelapropiedadNamedelmenú.

Creacióndeunmenúemergente

Enesteejemplosecreaunnuevomenúemergentellamado“TestMenu”enelprimergrupodemenúsdelacolecciónMenuGroups.

SubCh6_CreateMenu()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Createthenewmenu

DimnewMenuAsAcadPopupMenu

SetnewMenu=currMenuGroup.Menus.Add("TestMenu")

EndSub

¿Comentarios?

<$nopage>menú(objetos):<$startrange>InsertInMenuBar(método):códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>

Adicióndenuevoselementosdemenúaunmenú

Paraagregarnuevoselementosaunmenú,utiliceelmétodoAddMenuItem.EstemétodocreaunnuevoobjetoPopupMenuItemyloañadealmenúindicado.

ElmétodoAddMenuItemrequierecuatroparámetrosdeentrada:Index,Label,TagyMacro.

EspecificarelparámetroIndexEspecificarelparámetroLabelEspecificarelparámetroTagEspecificarelparámetroMacro

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>

EspecificarelparámetroIndex

ElparámetroIndex,oíndice,esunnúmeroenteroquedeterminalaposicióndelnuevoelementoenelmenú.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenelmenúdespuésdeltítulo.Paraañadirelnuevoelementoalfinaldeunmenú,asignealparámetroIndexelvalordelapropiedadCountdelmenú(lapropiedadCountdelmenúindicaelnúmerototaldeelementosquecontieneelmenú).(LapropiedadCountdelmenúrepresentaelnúmerototaldeelementosdemenúenesemenú.)

Laprimeraposicióndelíndiceescero(0)yquelosseparadoresaparecencomoelementosdemenúindividualesconsupropionúmerodeíndice.LapropiedadCountdelmenúdelailustraciónseríaseis(6).ParaañadirunelementodemenúentreTileHorizontallyyTileVertically,asignealparámetroIndexelvalordos(2),queeselnúmerodeíndicedelelementodemenúTileVertically.Elnuevoelementodemenúseinsertaenelnúmerodeíndicedos(2)yempujaatodoslosdemáselementosunaposiciónhaciaabajo.

Unavezcreadaunaopcióndemenú,suíndicenosepuedecambiarconlapropiedadIndex.Paracambiarelnúmerodeíndicedeunaopcióndemenúexistente,debeborrarlaopciónyvolveraañadirlaenunaposicióndiferente,oañadirosuprimirlasopcionescircundanteshastaalcanzarlaposiciónadecuada.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>

EspecificarelparámetroLabel

Unaetiqueta(Label)esunacadenaquedefineelcontenidoyelformatodelasopcionesdemenú.LasetiquetasdeelementosdemenúpuedencontenerexpresionesdecadenaDIESELcondicionalesquelasalterencadavezquesevisualicen.

AdemásdelasexpresionesdecadenaDIESEL,laetiquetapuedecontenercódigosespeciales.Porejemplo,unsigno&colocadojustoantesdeuncarácterindicaquedichocaráctereslateclarápidadelelemento.

Eltextoqueelusuarioveenpantallacomoopcióndemenúsedenomina'leyenda'yprocededelainterpretacióndetodaslasexpresionesdecadenaDIESELycódigosespecialesincluidosenlaetiqueta.Porejemplo,laetiqueta“&Edit”producelaleyenda“Editar.”.

Sideseacambiarlaetiquetadespuésdecrearlaopcióndemenú,utilicelapropiedadLabel.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>

EspecificarelparámetroTag

Elidentificador,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodentrodeundeterminadomenú.

Sideseacambiarelidentificadordespuésdecrearlaopcióndemenú,utilicelapropiedadTagString.

¿Comentarios?

<$startrange>InsertInMenuBar(método):códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>

EspecificarelparámetroMacro

Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunmenú.Lasmacrosdemenúspuedensersimplesregistrosdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandos,AutoLISP,DIESEL,ocódigodeprogramacióndeActiveX.

Sideseacambiarlamacrodespuésdecrearlaopcióndemenú,utilicelapropiedadMacro.

Adicióndeopcionesaunmenúemergente

Enesteejemplosecreaunnuevomenúllamado“TestMenu”yseinsertaenelmismounaopcióndemenú.Laopcióndemenúrecibeelnombre“Open”ylamacroqueseleasignaeselcomandoOPEN.

SubCh6_AddAMenuItem()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Createthenewmenu

DimnewMenuAsAcadPopupMenu

SetnewMenu=currMenuGroup.Menus.Add("TestMenu")

'Addamenuitemtothenewmenu

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrotheVBAequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewMenuItem=newMenu.AddMenuItem_

(newMenu.count+1,"Open",openMacro)

'Displaythemenuonthemenubar

newMenu.InsertInMenuBar_

(ThisDrawing.Application.menuBar.count+1)

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>

Adicióndeseparadoresaunmenú

Paraañadirunseparadoraunmenú,utiliceelmétodoAddSeparator.EstemétodocreaunnuevoobjetoPopupMenuItemyloañadealmenúindicado.AestaclasedeobjetoPopupMenuItemseleasignaeltipoacSeparator.EltipodeelementodemenúsepuedeconocerconlapropiedadType.

ElmétodoAddSeparatorutilizacomoúnicaentradaelparámetroIndex.ElparámetroIndex,oíndice,esunnúmeroenteroqueespecificalaposicióndelseparadordentrodelmenú.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenelmenúdespuésdeltítulo.

Paraobtenerunejemplodecómoañadirseparadoresaunmenú,véaseActivaciónydesactivacióndeopcionesdemenú.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>

Asignacióndeteclarápidaaunaopcióndemenú

ParaasignarlateclarápidaaunelementodemenúmedianteAutoCADActiveX/VBA,utilicelapropiedadLabeldeeseelemento.Paraespecificarunateclarápida,inserteelequivalenteASCIIdeunsigno&enlaetiquetajustoantesdelcarácterqueseutilizarácomoacelerador.Porejemplo,laetiquetaChr(Asc("&"))+"Edit"semostrarácomo“Editar”,conelcarácter“E”utilizadocomoteclarápida.

Adicióndeteclasrápidasamenús

EnesteejemploserepiteelejemplodeAdicióndeopcionesaunmenúemergente,conlaadicióndelasteclasrápidasalosmenús“TestMenu”y“Open”.La“s”yla“O”seutilizanrespectivamentecomoteclasrápidasdelosmenús“TestMenu”y“Open”.

SubCh6_AddAMenuItem()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Createthenewmenu

DimnewMenuAsAcadPopupMenu

SetnewMenu=currMenuGroup.Menus.Add_

("Te"+Chr(Asc("&"))+"stMenu")

'Addamenuitemtothenewmenu

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrotheVBAequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewMenuItem=newMenu.AddMenuItem_

(newMenu.count+1,Chr(Asc("&"))_

+"Open",openMacro)

'Displaythemenuonthemenubar

newMenu.InsertInMenuBar_

(ThisDrawing.Application.menuBar.count+1)

EndSub

¿Comentarios?

<$nopage>cascada(menús).<$endrange>InsertInMenuBar(método):códigodeejemplo,">

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>

Creacióndesubmenúsencascada

Paraagregarunsubmenúencascada,creeelsubmenúconelmétodoAddSubmenu.EstemétodocreaunnuevoobjetoPopupMenuItemyloañadealmenúindicado.AestaclasedeobjetoPopupMenuItemseleasignaeltipoacSubmenu.

ElmétodoAddSubmenurequieretresparámetrosdeentrada:Index,LabelyTag.

ElparámetroIndex,oíndice,esunnúmeroenteroquedeterminalaposicióndelnuevoelementoenelmenú.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenelmenúdespuésdeltítulo.Paraañadirelnuevoelementoalfinaldeunmenú,asignealparámetroIndexelvalordelapropiedadCountdelmenú(lapropiedadCountdelmenúindicaelnúmerototaldeelementosquecontieneelmenú).(LapropiedadCountdelmenúrepresentaelnúmerototaldeelementosdemenúenesemenú.)

ElparámetroLabel,oetiqueta,esunacadenaquedefineelcontenidoyelformatodeloselementosdemenú.Eltextoqueelusuarioveenpantallacomoopcióndemenúsedenomina'leyenda'yprocededelainterpretacióndetodaslasexpresionesdecadenaDIESELycódigosespecialesincluidosenlaetiqueta.Porejemplo,laetiqueta“&Edit”producelaleyenda“Editar.”.

ElparámetroTag,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodentrodeundeterminadomenú.

ElmétodoAddSubmenunodacomoresultadoelobjetoPopupMenuItemquecrea,sinoquedevuelveelnuevomenúalqueapuntaelsubmenú.Ensulugar,

devuelveelnuevomenúalqueapuntaelsubmenú.Elnuevomenú,devueltocomoobjetoPopupMenu,podrárellenarsecomocualquierotromenúnormal.Paraobtenerinformaciónsobrecómorellenarunmenú,véaseAdicióndenuevoselementosdemenúaunmenú.

Creaciónyrellenodeunsubmenú

Enesteejemplo,secreaunnuevomenúdenominado“TestMenu”yseagregaaunsubmenúdenominado“OpenFile.”Acontinuaciónelsubmenúserellenaconunaopcióndemenúdenominada“Open,”,que,alejecutarla,abreundibujo.Porúltimo,semuestraelmenúenlabarrademenús.

SubCh6_AddASubMenu()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Createthenewmenu

DimnewMenuAsAcadPopupMenu

SetnewMenu=currMenuGroup.Menus.Add("TestMenu")

'Addthesubmenu

DimFileSubMenuAsAcadPopupMenu

SetFileSubMenu=newMenu.AddSubMenu("","OpenFile")

'Addamenuitemtothesubmenu

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrotheVBequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewMenuItem=FileSubMenu.AddMenuItem_

(newMenu.count+1,"Open",openMacro)

'Displaythemenuonthemenubar

newMenu.InsertInMenuBar_

(ThisDrawing.Application.menuBar.count+1)

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>

Eliminacióndeopcionesdemenús

Paraeliminarelementosdeunmenú,utiliceelmétodoDeletedelelementodemenú.

Advertencia Sisuprimeunaopcióndemenú,noinvoqueotrosmétodosopropiedadesquedirectaoindirectamentevuelvanacargarelmismoarchivoIUPdentrodelamismamacro.Porejemplo,despuésdesuprimirunaopcióndemenú,noutiliceelmétodoMenuGroupLoadnilapropiedadPreferences.Profiles.ActiveProfile,niutiliceelcomando“Menuload”usandoelmétodoDocument.SendCommand.EstasopcionescausandirectaoindirectamentelacargadearchivosIUP.Solodebeusarestosmétodosopropiedadesenunamacroseparada.

Eliminacióndeunaopcióndeunmenú

Esteejemploañadeunelementodemenúalfinaldelúltimomenúmostradoenlabarrademenús.Despuéseliminaelelemento.

SubCh6_DeleteMenuItem()

DimLastMenuAsAcadPopupMenu

SetLastMenu=ThisDrawing.Application.menuBar._

Item(ThisDrawing.Application.menuBar.count-1)

'Addamenuitem

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrotheVBequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewMenuItem=LastMenu.AddMenuItem_

(LastMenu.count+1,"Open",openMacro)

'Removethemenuitemfromthemenu

newMenuItem.Delete

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>

Examendepropiedadesdeelementosdemenú

Lassiguientespropiedadesestánpresentesentodaslasopcionesdemenús:

TagString

Elidentificador,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodentrodeundeterminadomenú.Losidentificadoresdenotanlasteclasrápidas(secuenciasdepulsacióndeteclas)correspondientesacadaopcióndemenú.UtilicelapropiedadTagStringparaleeroescribirelvalordelosidentificadores.

Label

Unaetiqueta(Label)esunacadenaquedefineelcontenidoyelformatodelasopcionesdemenú.LasetiquetasdeelementosdemenúpuedencontenerexpresionesdecadenaDIESELcondicionalesquelasalterencadavezquesevisualicen.UtilicelapropiedadLabelparaleeroescribirelvalordelasetiquetas.

Caption

Unaleyendaeseltextoqueelusuariovecomonombredelmenú.EsunapropiedaddesólolecturaqueprocededelapropiedadLabelunavezqueseeliminanlasexpresionesdecadenaDIESEL.UtilicelapropiedadCaptionparaleeroescribirelvalordelasleyendas.

Macro

Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunmenú.Lasmacrosdemenúspuedensersimples

registrosdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandos,AutoLISP,DIESEL,ocódigodeprogramacióndeActiveX.UtilicelapropiedadMacroparaleeroescribirelvalordelasmacrosdemenú.

HelpString

Lacadenadeayuda(HelpString)eslasecuenciadetextoqueapareceenlalíneadeestadodeAutoCADcuandounusuarioresaltaunaopciónparaseleccionarla.UtilicelapropiedadHelpStringparaescribiroleerelvalordeunacadenadeayuda.

Enable

UtilicelapropiedadEnableparaactivarodesactivarunaopcióndemenú.TambiénpuedeleerlapropiedadEnableparadeterminarsiunelementodemenúestáseleccionadoono.Cuandoseutilizaestapropiedadparaactivarodesactivarunaopcióndemenú,quedansustituidoslosparámetrosdeactivaciónquetengalaexpresiónDIESELdelaopción.Paraobtenerunejemplodedesactivacióndeelementosdemenú,véaseExamendepropiedadesdeelementosdemenú.

Check

UtilicelapropiedadCheckparaseleccionaroretirarlaseleccióndeunaopcióndemenú.TambiénpuedeleerlapropiedadCheckparadeterminarsiunelementodemenúestáseleccionadoono.Cuandoseutilizaestapropiedadparaseleccionaroretirarlaseleccióndeunaopcióndemenú,quedansustituidoslosparámetrosdeselecciónquetengalaexpresiónDIESELdelaopción.

Index

Elíndicedeunaopcióndemenúdeterminasuposicióndentrodelmenúalquepertenece.Laposicióndelíndicedeunmenúsiempreesla0.Porejemplo,siunelementoeselprimerodeunmenú,devuelveunaposicióndeíndice0.Sieselsegundoelemento,devuelvelaposicióndeíndice1yasísucesivamente.

Type

UtilicelapropiedadTypeparadeterminareltipodeopcióndemenú.Unaopcióndemenúpuedeperteneceralassiguientestipologías:menúnormal,separadoroencabezamientodeunsubmenú.Siesunelementodemenúnormal,estapropiedaddevuelveacMenuItem.Sielelementoesunseparador,estapropiedaddevuelveacMenuSeparator.Sielelementoeselencabezamientodeunsubmenú,estapropiedaddevuelveacSubMenu.

SubMenu

UtilicelapropiedadSubMenuparalocalizarelsubmenú.SielelementodemenúesdeltipoacSubMenu,estapropiedaddevuelveelmenúqueestáasociadocomosubmenú,omenúincrustado.ElmenúincrustadosedevuelvecomounobjetoPopupMenu.SielelementodemenúnoesdeltipoacSubMenu,estapropiedaddevuelveunerror.

Parent

UtilicelapropiedadParentparalocalizarelmenúalqueperteneceunaopcióndemenú.Estapropiedaddevuelveelmenúdonderesidelaopción.ElmenúsuperiorsedevuelvecomoobjetoPopupMenu.

Activaciónydesactivacióndeopcionesdemenú

Enesteejemplosecreaunmenúnuevodenominado“TestMenu”yseinsertandosopcionesdemenú.SedesactivaelsegundoelementomediantelapropiedadEnableysemuestraelmenúenlabarrademenús.

SubCh6_DisableMenuItem()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Createthenewmenu

DimnewMenuAsAcadPopupMenu

SetnewMenu=currMenuGroup.Menus.Add("TestMenu")

'Addtwomenuitemsandamenuseparatortothenewmenu

DimMenuEnableAsAcadPopupMenuItem

DimMenuDisableAsAcadPopupMenuItem

DimMenuSeparatorAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrotheVBequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetMenuEnable=newMenu.AddMenuItem_

(newMenu.count+1,"OpenEnabled",openMacro)

SetMenuSeparator=newMenu.AddSeparator("")

SetMenuDisable=newMenu.AddMenuItem_

(newMenu.count+1,"OpenDisabled",openMacro)

'Disablethesecondmenuitem

MenuDisable.Enable=False

'Displaythemenuonthemenubar

newMenu.InsertInMenuBar_

(ThisDrawing.Application.menuBar.count+1)

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

Creaciónymodificacióndebarrasdeherramientas

SepuedeutilizarAutoCADActiveX/VBAparacrearymodificarbarrasdeherramientas.

CreacióndebarrasdeherramientasAdicióndebotonesnuevosaunabarradeherramientasAdicióndeseparadoresaunabarradeherramientasDefinicióndelossímbolosdebotonesdebarrasdeherramientasCreacióndebarrasdeherramientasdesplegablesBarrasdeherramientasflotantesyfijasEliminacióndebotonesdeunabarradeherramientasExamendepropiedadesdeelementosdebarradeherramientas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Creacióndebarrasdeherramientas

Paracrearunabarradeherramientasnueva,agregueunnuevoobjetoToolbaralacolecciónToolbarsconelmétodoAdd.

ElmétodoAddrequierecomoentradaelnombredelabarradeherramientasquesedeseaañadir.Elnombreesunacadenadecaracteresalfanuméricossinmássignosdepuntuaciónqueunguión(–)ounsubrayado(_).Elnombreeslamaneramásfácildeidentificarlabarradeherramientasenlacolección.

Losnombresdebarrasdeherramientassepuedencambiardespuésdesucreación.Paracambiarelnombredeunabarradeherramientasexistente,utilicelapropiedadNamededichabarradeherramientas.

Creacióndeunabarradeherramientasnueva

Enesteejemplosecreaunabarradeherramientasnuevadenominada“TestToolbar”enelprimergrupodemenúsdelacolecciónMenuGroups.

SubCh6_CreateToolbar()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Createthenewtoolbar

DimnewToolbarAsAcadToolbar

SetnewToolbar=currMenuGroup.Toolbars.Add("TestToolbar")

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Adicióndebotonesnuevosaunabarradeherramientas

Paraañadirunnuevobotóndeherramientaaunabarradeherramientas,utiliceelmétodoAddToolbarButton.EstemétodocreaunobjetoToolbarItemnuevoyloañadealabarradeherramientasindicada.Sólodebeañadirbotonesaunabarradeherramientasmientraséstaestévisible.

ElmétodoAddToolbarButtonrequierecincoparámetrosdeentrada:Index,Name,HelpString,MacroyFlyoutButton.

Index

ElparámetroIndexesunnúmeroenteroquedeterminalaposicióndelnuevoelementodeToolbarenlabarradeherramientas.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenlabarradeherramientasdespuésdeltítulo.Paraañadirelnuevobotónalfinaldeunabarradeherramientas,asignealparámetroIndexelvalordelapropiedadCountdelabarradeherramientas.(LapropiedadCountdelabarradeherramientasrepresentaelnúmerototaldebotonesquecontiene.)Unavezcreadounbotóndebarradeherramientas,suíndicenosepuedecambiarconlapropiedadIndex.Paracambiarelnúmerodeíndicedeunbotóndebarradeherramientasexistente,debeeliminaryvolveraañadirelbotónenunaposicióndiferente,oañadiroeliminarlosbotonesquelorodeanhastaobtenerlaposicióncorrecta.

Name

Unnombreesunacadenaidentificativadelbotóndebarradeherramientas.Lacadenadebeestarformadaporcaracteresalfanuméricos,sinmássignosdepuntuaciónqueunguión(–)ounsubrayado(_).Estacadenasemuestracomounapistacuandoelcursorsesitúasobreelbotóndeherramienta.Unavezcreadounbotóndebarradeherramientas,sepuedecambiarsunombreconelparámetroName.

HelpString

Lacadenadeayuda(HelpString)eslasecuenciadetextoqueapareceenlalíneadeestadodeAutoCADcuandounusuarioresaltaunaopciónparaseleccionarla.Unavezcreadounbotóndebarradeherramientas,sepuedecambiarsucadenadeayudaconelparámetroHelpString.

Macro

Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunbotón.LasmacrosdebarrasdeherramientaspuedenserregistrossimplesdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandosycódigodeprogramacióndelenguajeDIESEL.Unavezcreadounbotóndebarradeherramientas,sepuedecambiarsumacroconelparámetroMacro.

FlyoutButton

ElparámetroFlyoutButtonesunidentificadoropcionalqueindicasielnuevobotónserádesplegableono.Sielnuevobotónesdesplegable,elparámetrodebetomarelvalorTRUE.Encasonegativo,esteparámetrodebetomarelvalorFALSEosepuedepasarporalto.

Adicióndebotonesaunabarradeherramientasnueva

Esteejemplocreaunabarradeherramientasnuevayleañadeunbotón.ElbotónseasignaaunamacroqueejecutaelcomandoOPENcuandosepulsaelbotón.

SubCh6_AddButton()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Createthenewtoolbar

DimnewToolbarAsAcadToolbar

SetnewToolbar=currMenuGroup.Toolbars.Add("TestToolbar")

'Addabuttontothenewtoolbar

DimnewButtonAsAcadToolbarItem

DimopenMacroAsString

'AssignthemacrotheVBequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewButton=newToolbar.AddToolbarButton_

("","NewButton","Openafile.",openMacro)

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Adicióndeseparadoresaunabarradeherramientas

Paraañadirunseparadoraunabarradeherramientas,utiliceelmétodoAddSeparator.EstemétodocreaunobjetoToolbarItemnuevoyloañadealabarradeherramientasindicada.AestaclasedeobjetosToolbarItemselesasignaeltipoacSeparator.EltipodebotóndebarradeherramientassepuedeconocerconlapropiedadType.

ElmétodoAddSeparatorrequierelaentradadeunparámetro:Index.ElparámetroIndexesunnúmeroenteroquedeterminalaposicióndelseparadordentrodelabarradeherramientas.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenlabarradeherramientasdespuésdeltítulo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Definicióndelossímbolosdebotonesdebarrasdeherramientas

Paradefinirlasimágenesquesedeseanutilizarencadabotóndeunabarradeherramientas,utilicelosmétodosSetBitmapsyGetBitmaps.

ElmétodoSetBitmapsrequieredosparámetros:SmallIconNameyLargeIconName.

SmallIconName

Elnombredeliconopequeñodefinelacadenadeidentificacióndelrecursodeimagenpequeña(mapadebitsde16×15).Estacadenadebeestarcompuestaporcaracteresalfanuméricos,sinmássignosdepuntuaciónqueunguión(–)osubrayado(_)ydebeincluirlaextensión.bmp.Elrecursopuedeserunmapadebitsdelsistemaounmapadebitsdefinidoporelusuario.LosmapasdebitsdefinidosporelusuariodebentenereltamañoapropiadoydebenestarubicadosenlarutaSupport.

LargeIconName

Elnombredeliconograndedefinelacadenadeidentificacióndelrecursodeimagengrande(mapadebitsde24×22).Estacadenadebeestarcompuestaporcaracteresalfanuméricos,sinmássignosdepuntuaciónqueunguión(–)osubrayado(_)ydebeincluirlaextensión.bmp.Elrecursopuedeserunmapadebitsdelsistemaounmapadebitsdefinidoporelusuario.LosmapasdebitsdefinidosporelusuariodebentenereltamañoapropiadoydebenestarubicadosenlarutaSupport.

Consultadeunabarradeherramientasparaobtenerelnombredelosiconosdelosbotones

SubCh6_GetButtonImages()

DimButtonAsAcadToolbarItem

DimToolbar0AsAcadToolbar

DimMenuGroup0AsAcadMenuGroup

DimSmallButtonNameAsString

DimLargeButtonNameAsString

DimmsgAsString

DimButtonTypeAsString

'Getthefirsttoolbarinthefirstmenugroup

SetMenuGroup0=ThisDrawing.Application._

MenuGroups.Item(0)

SetToolbar0=MenuGroup0.Toolbars.Item(0)

'Clearthestringvariables

SmallButtonName=""

LargeButtonName=""

'Createaheaderforthemessageboxand

'displaythetoolbartobequeried

msg="Toolbar:"+Toolbar0.Name+vbCrLf

Toolbar0.Visible=True

'Iteratethroughthetoolbarandcollectdata

'foreachbuttoninthetoolbar.Ifthetoolbaris

'anormalbuttonoraflyout,collectthesmall

'andlargebuttonnamesforthebutton.

ForEachButtonInToolbar0

ButtonType=Choose(Button.Type+1,"Button",_

"Separator","Control","Flyout")

msg=msg&ButtonType&":"

IfButton.Type=acToolbarButtonOr_

Button.Type=acToolbarFlyoutThen

Button.GetBitmapsSmallButtonName,_

LargeButtonName

msg=msg+SmallButtonName+","_

+LargeButtonName

EndIf

msg=msg+vbCrLf

NextButton

'Displaytheresults

MsgBoxmsg

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Creacióndebarrasdeherramientasdesplegables

Paraañadirunbotóndesplegableaunabarradeherramientas,utiliceelmétodoAddToolbarButton.EstemétodocreaunobjetoToolbarItemnuevoyloañadealabarradeherramientasindicada.

ElmétodoAddToolbarButtonrequierecincoparámetrosdeentrada:Index,Name,HelpString,MacroyFlyoutButton.AlasignarelvalorTRUEalparámetroFlyoutButton,elnuevobotónsecreacomouniconodesplegable.Elvalorquedevuelvaestemétodoserálanuevabarradeherramientasdesplegable,quepodrárellenarsecomocualquierbarradeherramientasnormal.

Paraobtenermásinformaciónacercadecómorellenarunabarradeherramientas,véaseAdicióndebotonesnuevosaunabarradeherramientas.

Creacióndeunbotóndesplegableparabarrasdeherramientas

Esteejemplocreadosbarrasdeherramientas.Laprimeracontieneunbotóndesplegable.Lasegundaestáenlazadaconelbotóndesplegabledelaprimera.

SubCh6_AddFlyoutButton()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application._

MenuGroups.Item(0)

'Createthefirsttoolbar

DimFirstToolbarAsAcadToolbar

SetFirstToolbar=currMenuGroup.Toolbars._

Add("FirstToolbar")

'Addaflyoutbuttontothefirstmenuonthemenubar

DimFlyoutButtonAsAcadToolbarItem

SetFlyoutButton=FirstToolbar.AddToolbarButton_

("","Flyout","Demonstratesaflyoutbutton",_

"OPEN",True)

'Createthesecondtoolbar.Thiswillbeattachedto

'thefirsttoolbarviatheflyoutbutton.

DimmsgAsString

SetSecondToolbar=currMenuGroup.Toolbars._

Add("SecondToolbar")

'Addabuttontothenexttoolbar

DimnewButtonAsAcadToolbarItem

DimopenMacroAsString

'AssignthemacrotheVBequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewButton=SecondToolbar.AddToolbarButton_

("","NewButton","Openafile.",openMacro)

'Attachthesecondtoolbartotheflyout

'buttononthefirsttoolbar

FlyoutButton.AttachToolbarToFlyoutcurrMenuGroup.Name,_

SecondToolbar.Name

'Displaythefirsttoolbar,hidethesecondtoolbar

FirstToolbar.Visible=True

SecondToolbar.Visible=False

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Barrasdeherramientasflotantesyfijas

Lasbarrasdeherramientaspuedenestablecersecomofijasoflotantesmedianteprogramación.

Paraqueunabarradeherramientasseaflotante,utiliceelmétodoFloatdelabarra.ElmétodoFloatrequierelaentradadetresparámetros:Top,LeftyNumberFloatRows.LosparámetrosTopyLeftespecificanlaubicación,enpíxeles,delosbordessuperioreizquierdodelabarradeherramientas.ElparámetroNumberFloatRowsespecificaelnúmerodefilasconquesecreaunabarradeherramientashorizontal.Estenúmerodebeserigualomayorqueuno.Losbotonesdelabarradeherramientassedistribuyendeformaequidistantealolargodelnúmerodefilasindicado.Enlasbarrasdeherramientasalineadasensentidovertical,estevalorespecificaelnúmerodecolumnas.

Paraanclarunabarradeherramientas,utiliceelmétodoDockdelabarra.ElmétodoDockrequieretresparámetrosdeentrada:Side,RowyColumna.ElparámetroSidedeterminaelladodelabarradeherramientasquesesituaráenlamaniobradeanclaje.Puedeespecificarelladosuperior,inferior,izquierdooderechodelabarradeherramientas.LosparámetrosRowyColumndeterminanelnúmerodefilaycolumnadelasbarrasdeherramientasancladasdondeseanclarálabarradeherramientas.

PuedeconsultarunabarradeherramientasparasabersiesfijamediantelapropiedadDockStatus.LapropiedadDockStatusdevolveráTRUEsilabarradeherramientasestáancladayFALSEsiesflotante.

Anclajedeunabarradeherramientas

Esteejemplocreaunabarradeherramientasnuevacontresbotones.Despuéssemuestralabarradeherramientasyseanclaalaizquierdadelapantalla.

SubCh6_DockToolbar()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application._

MenuGroups.Item(0)

'Createthenewtoolbar

DimnewToolbarAsAcadToolbar

SetnewToolbar=currMenuGroup.Toolbars._

Add("TestToolbar")

'Addthreebuttonstothenewtoolbar.

'Allthreebuttonswillhavethesamemacroattached.

DimnewButton1AsAcadToolbarItem

DimnewButton2AsAcadToolbarItem

DimnewButton3AsAcadToolbarItem

DimopenMacroAsString

'AssignthemacrotheVBequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewButton1=newToolbar.AddToolbarButton_

("","NewButton1","Openafile.",openMacro)

SetnewButton2=newToolbar.AddToolbarButton_

("","NewButton2","Openafile.",openMacro)

SetnewButton3=newToolbar.AddToolbarButton_

("","NewButton3","Openafile.",openMacro)

'Displaythetoolbar

newToolbar.Visible=True

'Dockthetoolbartotheleftofthescreen.

newToolbar.DockacToolbarDockLeft

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Eliminacióndebotonesdeunabarradeherramientas

Paraeliminarbotonesdeunabarradeherramientas,utiliceelmétodoDeletedelbotóndelabarradeherramientas.Sólodebeeliminarbotonesdeunabarradeherramientasmientraséstaestévisible.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Examendepropiedadesdeelementosdebarradeherramientas

Lassiguientespropiedadesestánpresentesentodosloselementosdebarrasdeherramientas:

Tagstring

Elidentificador,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodebarradeherramientasdentrodeunabarradeherramientasdeterminada.Cuandosecreaunelementodebarradeherramientas,seleasignaautomáticamenteunidentificador.UtilicelapropiedadTagstringparaleeroescribirelvalordelosidentificadores.

Name

Unnombreesunacadenaidentificativadelelementodebarradeherramientas.TambiénseutilizacomotextodelainformacióndeherramientaqueapareceenAutoCADcuandoelusuariomantieneelratónuotrodispositivoseñaladorsobreelelementodebarradeherramientas.UtilicelapropiedadNameparaleeroescribirelvalordelosnombres.

Macro

Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunelementodebarradeherramientas.Lasmacrospuedensersimplesregistrosdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandos,AutoLISP,DIESEL,ocódigodeprogramacióndeActiveX.UtilicelapropiedadMacroparaleeroescribirelvalordelasmacros.

HelpString

Lacadenadeayuda(HelpString)eslasecuenciadetextoqueapareceenlalíneadeestadodeAutoCADenrepresentacióndeunbotóndebarradeherramientas.UtilicelapropiedadHelpStringparaescribiroleerelvalordeunacadenadeayuda.

Index

Elíndicedeunelementodebarradeherramientasdeterminalaposicióndedichoelementoenlabarradeherramientasalaquepertenece.Laprimeraposicióndelíndicedeunabarradeherramientassiempreesla0.Porejemplo,siunelementoeselprimerodeunabarradeherramientas,tendráunaposicióndeíndice0;sieselsegundoelemento,tendrálaposicióndeíndice1,yasísucesivamente.UtilicelapropiedadIndexparaleeroescribirelvalordelasposicionesdeíndice.

Type

Unelementodeunabarradeherramientaspuedeperteneceraunodelossiguientestipos:unbotónnormaldebarradeherramientas,unseparador,unbotóndesplegableounelementodecontrolespecial.Sielelementoesunbotóndebarradeherramientasnormal,estapropiedaddevuelveacButton.Sielelementoesunseparador,estapropiedaddevuelveacToolButtonSeparator.Sielelementoesunbotóndesplegable,estapropiedaddevuelveacFlyout.Siesunelementodecontrolespecial,estapropiedaddevuelveacControl.UtilicelapropiedadTypeparadeterminareltipodeelementodebarradeherramientas.

Flyout

SielelementodebarradeherramientasesdeltipoacFlyout,estapropiedaddevuelvelabarradeherramientasquetieneenlazadacomobarradeherramientasdesplegable.LabarradeherramientassedevuelvecomoobjetoToolbar.SielelementodemenúnoesdeltipoacFlyout,estapropiedaddevuelveNULL.UtilicelapropiedadFlyoutparalocalizarlabarradeherramientas

desplegabledeunelementodebarradeherramientas.

Parent

Estapropiedaddevuelvelabarradeherramientasdonderesideelelemento.LabarradeherramientassuperiorsedevuelvecomoobjetoToolbar.UtilicelapropiedadParentparalocalizarlabarradeherramientasalaqueperteneceunelementodebarradeherramientas.

ToolbarProperties

Hayotraspropiedadesqueseaplicanatodosloselementosdelabarradeherramientas.Estaspropiedadesdefinensilabarradeherramientasestáancladaoflotante,siestávisibleuoculta,osiutilizabotonesgrandesopequeños.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

Creacióndemacros

Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunelementodebarradeherramientas.Lasmacrospuedensersimplesregistrosdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandos,AutoLISP,DIESEL,ocódigodeprogramacióndeActiveX.

Sipretendeincluirparámetrosdecomandoenunamacrodemenú,debeconocerelordenenqueelcomandoesperasusparámetros.Todosloscaracteresdeunamacrodemenúsonimportantes,inclusivelosespaciosenblanco.ComoAutoCADhasidorevisadoymejorado,podríacambiarlasecuenciadelosmensajesdealgunoscomandosy,enocasiones,elpropionombredelcomando.Portanto,esposiblequelosmenúspersonalizadosrequieranalgunospequeñoscambiosparaactualizarsealanuevaversióndeAutoCAD.

Cuandolaentradadeuncomandoprovienedeunelementodemenú,sesuponequelosvaloresdelasvariablesdesistemaPICKADDyPICKAUTOson1y0respectivamente.EstomantienelacompatibilidadconversionesanterioresdeAutoCADyfacilitalapersonalización,yaquenoesnecesarioverificarlosvaloresdedichasvariables.

AsignacióndecaracteresdemacroacaracteresASCIIequivalentesTerminacióndelamacroDetenciónparadatosdeusuarioCancelacióndecomandosRepeticióndemacrosMododedesignacióndeobjetosúnicos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>

AsignacióndecaracteresdemacroacaracteresASCIIequivalentes

EnlasiguientetablasepresentaunadescripciónbrevedeloscaracteresespecialesqueseutilizanenmacrosdemenúsysusnúmerosASCIIequivalentesenVByVBA.DurantelacreacióndelacadenadelapropiedadMacro,utiliceelequivalenteASCIIdeestoscaracteresespeciales.

Caracteresespecialesutilizadosenlasmacrosdemenúsybarrasdeherramientas

Carácter EquivalenteASCII Descripción

; chr(59) EjecutaINTRO

^M chr(13) EjecutaINTRO

^| chr(94)+chr(124)

EjecutaTAB

BARRAESPACIADORA

chr(32) LosespaciosenblancoentresecuenciasdecomandosdeunaopcióndemenúequivalenapulsarlaBARRAESPACIADORA.

\ chr(92) Sedetieneparaintroduccióndedatosdeusuario

_ chr(95) TraduceloscomandosdeAutoCADylaspalabrasclavequelossiguen

+ chr(43) Continúalamacrodemenúenlalíneasiguiente(sisetratadelúltimocarácter)

=* chr(61)+chr(42)

Muestraelmenúdesímbolosactual,desplegableocontextual

*^C^C chr(42)+chr(3)+chr(3)

Prefijodeunelementoderepetición

$ chr(36) CargaunaseccióndemenúointroduceunaexpresióndemacrocondicionaldeDIESEL.

^B chr(2) ActivaodesactivaForzcursor(CTRL+B).

^C chr(3) Cancelaelcomando(CTRL+C).

ESC chr(3) Cancelaelcomando(ESC).

^D chr(4) Activaodesactivacoordenadas(CTRL+D).

^E chr(5) Defineelsiguienteplanoisométrico(CTRL+E)

^G chr(7) Activaodesactivalarejilla(CTRL+G).

^H chr(8) Ejecutaretroceso

^O chr(15) ActivaodesactivaelmodoOrtoCTRL+O).

^P chr(16) ActivaodesactivaMENUECHO.

^Q chr(17) Transmitetodoslosmensajes,listasdeestadoyentradasalaimpresora(CTRL+Q)

^T chr(20) Activaodesactivaeltablero(CTRL+T).

^V chr(22) Cambialaventanagráficaactual(CTRL+V).

^Z chr(26) Carácternuloquesuprimelaadición

automáticadeBARRAESPACIADORAalfinaldeunelementodemenú.Terminacióndemacros

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>

Terminacióndelamacro

Cuandoseejecutaunamacro,AutoCADcolocaunespacioalfinaldelamacroantesdeprocesarlasecuenciadecomandos.AutoCADprocesalasiguientemacrodemenúcomosihubieraescritolineBARRAESPACIADORA.

línea

Algunasveces,estonoesdeseable;porejemplo,loscomandosTEXTOoACOTAdebenterminarseconunINTRO,noconunespacio.Algunasvecesesnecesarioutilizarvariosespacios(oINTRO)paraterminaruncomando,peroalgunoseditoresdetextonopermitencrearunalíneaconespaciosenblancoaladerecha.Dosconvencionesespecialespermitenresolverestosproblemas.

Cuandoapareceunpuntoycoma(;)enunamacro,AutoCADlosustituyeporunINTRO.

Siunalíneaterminaenuncarácterdecontrol,unacontrabarra(\),unsignomás(+)ounpuntoycoma(;),AutoCADnoañadeunespacioalfinaldelalínea.

Examinelasiguientemacro:

erase\;

Siesteelementoterminarasimplementeconunacontrabarra(loqueindicaqueelusuariodebeintroducirdatos),laoperaciónERASEnoseefectuaríacorrectamente,yaqueAutoCADnoañadeunespacioenblancodespuésdelacontrabarra.Porello,estamacrodemenúutilizaunpuntoycoma(;)paraforzarunINTROdespuésdelosdatosintroducidosporelusuario.Aquísemuestranotrosejemplos:

scp

ucs;

text\.40DRAFTInc;;;MainSt.;;;City,State;

AlseleccionarlaprimeramacroseintroducescpyBARRAESPACIADORAenlalíneadecomando,yapareceestemensaje:

Especifiqueunaopción[New/Move/orthoGraphic/Prev/Restore/Save/Del/Apply/?/World]<World>:

Alseleccionarlasegundamacroseintroducescp,BARRAESPACIADORAypuntoycoma(;)enlalíneadecomando,yseaceptaelvalorpordefecto,World.Enlapantallanoseobservaningunadiferenciaentreelprimerelementoyelsegundo;peronormalmentenoseincluiríanambosenelmismomenú.

Alseleccionarlaterceramacro,semuestraunmensajesolicitandounpuntoinicialysedibujaladirecciónentreslíneas.Delostrespuntosycomas(;;;),elprimeroterminalacadenadetexto,elsegundovuelveaejecutarelcomandoTEXTyeltercerosolicitalaposiciónpordefectodebajodelalíneaanterior.

Nota TodosloscaracteresespecialesdebenespecificarseconsusequivalentesASCII.ParaobtenerunalistadeequivalentesASCII,véaseAsignacióndecaracteresdemacroacaracteresASCIIequivalentes.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>

Detenciónparadatosdeusuario

Avecesresultaútilaceptardatosdeltecladoodeldispositivoseñaladorenmediodeunamacro,paralocualdebecolocarunacontrabarra(\)enelpuntodondedebenaparecerlosdatos.

circle\1

layeroff\;

Laprimeramacrosedetieneparapediralusuarioelpuntocentraly,acontinuación,leeunradiodevalor1delamacro.Tengaencuentaquenohayningúnespaciodespuésdelcarácterdecontrabarra(\).Lasiguientemacrohaceunapausaparapediralusuarioqueescribaunnombredecapa,ladesactivaysaledelcomandoCAPA.Normalmente,elcomandoCAPApreguntasidesearealizarotraoperaciónysólosalesisepulsaBARRAESPACIADORA(espacio)oINTRO(;).

Normalmente,lamacrocontinúadespuésdeintroducirunelemento.Portanto,noesposibleconstruirunamacroqueacepteunnúmerovariabledeentradas(comoenunaseleccióndeobjetos)ydespuéscontinúe.Noobstante,elcomandoDESIGNAesunaexcepción;unacontrabarradetienelamacrohastaqueterminelaseleccióndeobjetos.Porejemplo,considereestamacro:

select\changeprevious;propertiescolorred;

EstamacroutilizaelcomandoDESIGNAparacrearunconjuntodeseleccióndeunoovariosobjetos.Acontinuación,ejecutaelcomandoCAMBIA,hacereferenciaaesteconjuntodeselecciónconlaopciónPrevioycambiaelcolordetodoslosobjetosseleccionadosarojo.

Dadoqueelcarácterdecontrabarra(\)hacequelamacrosedetengapararecibirdatosdelusuario,nopuedeutilizarseparaningúnotrofinenunamacro.Cuandoespecifiquelasrutasdedirectoriodearchivos,utiliceunabarraoblicua(/)como

delimitadordelaruta:porejemplo,/directorio/archivo.

Lassiguientessituacionesretrasanlareanudacióndeunamacro:

Siseesperalaentradadeunpunto,esposiblequeleprecedanmodosdereferenciaaobjetos.

CuandoseutilizanpuntosconfiltrosX/Y/Z,lamacroseinterrumpehastaqueseacumulatodoelpunto.

ÚnicamenteenelcasodelcomandoDESIGNA,lamacronocontinúahastaqueterminaladesignacióndeobjetos.

Sielusuariorespondeconuncomandotransparente,lamacrointerrumpidapermaneceenesteestadohastaqueseterminaelcomandoyserecibenlosdatossolicitadosoriginalmente.

Sielusuariorespondeseleccionandootramacro(paraproporcionaropcionesoejecutaruncomandotransparente),lamacrooriginalseinterrumpeyelelementodemenúelegidoseprocesaensutotalidadantesdequelamacrointerrumpidareanudesuejecución.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>

Cancelacióndecomandos

Paracerciorarsedequeningunodeloscomandosanterioresquedaincompleto,utilice^C^Cenlasmacros.EstoequivaleapulsarESCdosvecesdesdeelteclado.Aunquelacadenaúnica^Ccancelalamayoríadeloscomandos,senecesita^C^CpararegresaralasolicitudComandodesdeuncomandoACOTA.Porello,enlamayoríadeloscasos,^C^CgarantizaelregresodeAutoCADalasolicituddecomando.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>

Repeticióndemacros

Unavezseleccionadouncomando,esprobablequeloquierautilizarvariasvecesantesdepasaraotrocomando.Normalmente,eltrabajoconlasherramientasserealizadelaformasiguiente:seseleccionaunaherramienta,serealizanvariasaccionesconella,acontinuaciónseescogeotrayasísucesivamente.Paranotenerqueseleccionarlaherramientaantesdecadauso,AutoCADproporcionaunafunciónderepeticióndecomandos,queseactivaporunarespuestanula.Sinembargo,nopuedeutilizarestafunciónparaespecificaropcionesdecomandos.

Estafunciónpermiterepetirloscomandosdeusomásfrecuentehastaqueseelijaotrocomando.Siunamacroempiezacon*^C^Cinmediatamentedespuésdelaetiquetadelelemento,lamacroseguardaenlamemoria.LamacrorespondealassiguientessolicitudesdecomandohastaquesepulseESCoseseleccioneotramacro.

Noutilice^C(Cancelar)dentrodeunamacroquecomienceporlacadena*^C^C;estocancelaríalarepeticióndelamacro.

Elsiguienteesunejemplodelafunciónrepetitivaomodal,delamanipulacióndecomandos.

*^C^CMOVESingle

*^C^CCOPYSingle

*^C^CERASESingle

*^C^CSTRETCHSingleCrossing

*^C^CROTATESingle

*^C^CSCALESingle

Larepeticióndemacrosnofuncionaenelcasodelosmenúsdesímbolos.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>

Mododedesignacióndeobjetosúnicos

Ladesignacióndeobjetosúnicosactivaelmododedesignaciónúnica,desactivaeldiálogohabitualdeladesignacióndeobjetosyhacequeladesignaciónregresealprimerobjetodesignadoporunaopciónsubsiguiente.Estopuederesultarbastanteprácticoenunamacro.Porejemplo,considereestamacro:

*^C^CERASEsingle

EstamacroterminaelcomandoactualyactivaelcomandoBORRAconlaopcióndedesignaciónúnica.Unavezseleccionadoelelemento,esnecesarioseñalarelobjetoúnicoquehadeborrarseoapuntaraunáreaenblancoyespecificarunaventana.Losobjetosdesignadosdeestaformaseborranylamacroserepite(debidoalasteriscoinicial)paraquepuedansuprimirseotroselementos.Conelmododedesignaciónúnica,lainteracciónconAutoCADesmásdinámica;.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

Creacióndemensajesdeayudaenlalíneadeestadoparaelementosdemenúsydebarrasdeherramientas

Unaspectoimportantedelsistemaoriginaldeasistenciasonlosmensajesdeayudadelalíneadeestado.Setratadesencillosmensajesdescriptivosqueaparecenenlalíneadeestadoalresaltarunelementodemenúodebarradeherramientas.LaayudadelalíneadeestadocorrespondienteatodoslosmenúsybarrasdeherramientasseencuentraenlapropiedadHelpStringdelpropioelemento.

Cuandosecreaporprimeravezunelementodemenúodebarradeherramientas,lapropiedadHelpStringestávacía.

Adicióndeayudadelíneadeestadoaunelementodemenú

Enesteejemplosecreaunnuevomenúdenominado“TestMenu”yacontinuaciónsecreaunelementodemenúdenominado“Open.”Despuésseasignaalelementodemenúayudadelalíneadeestado,mediantelapropiedadHelpString.

SubCh6_AddHelp()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Createthenewmenu

DimnewMenuAsAcadPopupMenu

SetnewMenu=currMenuGroup.Menus.Add_

("Te"+Chr(Asc("&"))+"stMenu")

'Addamenuitemtothenewmenu

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrotheVBAequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

'Createthemenuitem

SetnewMenuItem=newMenu.AddMenuItem_

(newMenu.count+1,Chr(Asc("&"))_

+"Open",openMacro)

'Addthestatuslinehelptothemenuitem

newMenuItem.HelpString="OpensanAutoCADdrawingfile."

'Displaythemenuonthemenubar

newMenu.InsertInMenuBar_

(ThisDrawing.Application.menuBar.count+1)

EndSub

¿Comentarios?

<$nopage>menúcontextual.

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

Adicióndeentradasalmenúcontextual

Elmenúcontextual,odecursor,esunmenúespecialincluidoenelgrupodemenúsbasedeAutoCAD.EstemenúaparecealmantenerpresionadalateclaMAYÚSyhacerclicconelbotónderechodelratón.

Paraencontrarelmenúcontextual,AutoCADbuscaenelgrupodemenúsdebaseunmenúcuyapropiedadShortcutMenuseaTRUE.Paraañadirnuevoselementosalmenúcontextual,sigalospasosenumeradosenAdicióndenuevoselementosdemenúaunmenú.

Losnuevosgruposdemenúspuedenteneronounmenúcontextualdisponible.Paracrearunmenúcontextualparaungrupodemenús,sigalasdirectricesindicadasenCreacióndemenúsnuevosyutilicePOP0comoetiquetadelnuevomenú.

Adicióndeunaopcióndemenúalfinaldelmenúcontextual

Enesteejemploseañadelaopcióndemenú“OpenDWG”alfinaldelmenúcontextual.

SubCh6_AddMenuItemToshortcutMenu()

DimcurrMenuGroupAsAcadMenuGroup

SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)

'Findtheshortcutmenuandassignittothe

'shortcutMenuvariable

DimscMenuAsAcadPopupMenu

DimentryAsAcadPopupMenu

ForEachentryIncurrMenuGroup.Menus

Ifentry.shortcutMenu=TrueThen

SetscMenu=entry

EndIf

Nextentry

'Addamenuitemtotheshortcutmenu

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrotheVBAequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewMenuItem=scMenu.AddMenuItem_

("",Chr(Asc("&"))_

+"OpenDWG",openMacro)

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>

Utilizacióndeeventos

LoseventossonnotificacionesomensajesenviadosporAutoCADparainformaralusuariodelestadoactualdelasesiónoparaadvertirledealgoquehasucedido.Porejemplo,cuandoseabreundibujoenAutoCADseactivaeleventoBeginOpen.EsteeventocontieneelnombredeldibujodeAutoCAD.Tambiénseactivauneventocuandosecierraundibujo.Conestainformaciónsepuedeescribirunasubrutinaouncontroladordeeventosqueutilicenestoseventospararegistrarlacantidaddetiempoquededicaunusuarioatrabajarenundibujoconcreto.

ConceptosbásicossobreloseventosdeAutoCADDirectricesparaloscontroladoresdeeventosControldeeventosdeniveldeaplicaciónControldeeventosdedocumentoControldeeventosdeniveldeobjeto

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>

ConceptosbásicossobreloseventosdeAutoCAD

ExistentrestiposdeeventosenAutoCAD®:

LoseventosdeniveldeaplicaciónrespondenacambiosdelaaplicaciónAutoCADydesuentorno.Estoseventoscorrespondenalasoperacionesdeapertura,guardado,cierreeimpresióndedibujos,creacióndenuevosdibujos,ejecucióndecomandosdeAutoCAD,cargaydescargadeaplicacionesARXyLISP,cambiosdelasvariablesdelsistemaycambiosenlaventanadelaaplicación.

Loseventosdedocumentorespondenacambiosdeundocumentoconcretoodesucontenido.Estoseventosrespondenalaadición,eliminaciónomodificacióndeobjetos,activacióndemenúscontextuales,cambiosenelconjuntodeselecciónPickfirst,cambiosenlaventanadedibujoyregeneracióndeldibujo.Tambiénexisteneventosdedocumentoparalaapertura,elcierreylaimpresióndedibujos,asícomoparalacargaydescargadeaplicacionesARXyLISPdesdeeldibujo.

Loseventosdeniveldeobjetorespondenaloscambiosdeunobjetoconcreto.Enlaactualidadsólohayuneventodeobjetos.Seactivasiemprequesemodificaunobjeto.

Lassubrutinasquerespondenaeventossedenominancontroladoresdeeventosyseejecutandeformaautomáticacadavezqueseactivasueventocorrespondiente.Lainformaciónquecontienenloseventos,comoelnombredeldibujoeneleventoBeginOpen,setransfierealoscontroladoresdeeventosmedianteparámetros.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>

Directricesparaloscontroladoresdeeventos

EsimportanterecordarqueloseventossóloproporcionaninformaciónsobreelestadoolasactividadesquetienenlugarenAutoCAD.Aunquepuedenescribirsecontroladoresdeeventosquerespondanaesoseventos,esfrecuentequeAutoCADseencuentreprocesandocomandoscuandoseactivaelcontroladordeeventos.Loscontroladoresdeeventos,portanto,tienenciertasrestriccionesdeseguridadencuantoasucapacidaddeactuaciónencombinaciónconAutoCADysubasededatos.

Nocreedependenciasdelasecuenciadeeventos.Alescribircontroladoresdeeventos,noconfíeenqueelordendeloseventossigaunasecuenciaexactaqueconsiderelógica.Porejemplo,siejecutauncomandoABRIR,seactivaránloseventosBeginCommand,BeginOpen,EndOpenyEndCommand.Noobstante,esposiblequenoseproduzcaneneseorden.LaúnicasecuenciadeeventosenlaquepuedeconfiaresladequeuneventoBeginseproduciráantesqueuneventoEnd.Enelejemploanteriorloseventospuedenactivarseenelordensiguiente:BeginCommand,BeginOpen,EndCommand,yEndOpen,oinclusoBeginCommand,EndCommand,BeginOpen,yEndOpen.

Nocreedependenciasdelasecuenciadeoperaciones.Sisuprimeobjeto1y,acontinuación,objeto2,noconfíeenrecibirprimeroeleventoObjectEraseddelobjeto1yacontinuacióneldelobjeto2.PodríarecibirenprimerlugareleventoObjectEraseddelobjeto2.

Norealicefuncionesinteractivasdesdeuncontroladordeeventos.IntentarejecutarfuncionesinteractivasdesdeuncontroladordeeventospodríacausarseriosproblemasyaqueAutoCADpodríaestarprocesandouncomandoenelmomentodeactivarseelevento.Es,por

tanto,necesarioevitarelusodemétodosdeentrada-precisióncomoGetPoint,GetEntity,GetKeyword,etc.,deoperacionesconconjuntosdeselecciónydelmétodoSendCommandenloscontroladoresdeeventos.

Noiniciecuadrosdediálogodesdeuncontroladordeeventos.LoscuadrosdediálogoseconsideranfuncionesinteractivasypuedeninterferirconlaoperaciónactualdeAutoCAD.Loscuadrosdemensajeydeadvertencianoseconsideranfuncionesinteractivasypuedeniniciarsesinriesgos;sinembargo,generaruncuadrodemensajeenuncontroladordeeventosparaloseventosBeginModal,EndModal,Activate,DeactivateyBeginRightClickpuedeproducirunasecuenciainesperada.

Puedeescribirdatosencualquierobjetodelabasededatos,exceptoenelobjetoquegeneróelevento.CualquierobjetoqueactivauneventosepuedeabrirparautilizarloconAutoCADyconlaoperaciónqueestáactualmenteencurso.Portanto,noescribainformaciónenunobjetodesdeuncontroladordeeventosdelmismoobjeto.Lalecturadeinformacióndesdeelobjetoqueactivauneventopuederealizarsesinningúnriesgo.Porejemplo,supongaquetieneunsuelodebaldosasyquecreauncontroladordeeventosasociadoalbordedelsuelo.Sicambiaeltamañodelsuelo,elcontroladordeeventosañadeosustraebaldosasdeformaautomáticapararellenareláreanueva.Elcontroladordeeventospodráleerelnuevoáreadelborde,peronopodrárealizarningúncambioenél.

Norealiceningunaaccióndesdeuncontroladordeeventosquepuedaactivarelmismoevento.Sillevaacabolamismaacciónenuncontroladordeeventosqueactivaelmismoevento,crearáunbucleinfinito.Porejemplo,nodebenuncaintentarabrirundibujodesdedentrodeleventoBeginOpen;AutoCADcontinuaríaabriendomásdibujoshastaquesealcanzaraelnúmeromáximodedibujosabiertosposible.

RecuerdequenopuedenactivarseeventosmientrasAutoCADestámostrandouncuadrodediálogomodal.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>

Controldeeventosdeniveldeaplicación

LoseventosdeniveldeaplicaciónnosonpermanentesenAutoCADVBA.Esdecir,quenoseactivandeformaautomáticaalcargarunproyectoVBAPortanto,esnecesarioactivarlosparaVBAyparatodoslosdemáscontroladoresdeActiveX®Automation.

Unavezactivadosloseventosdeniveldeaplicación,tendráasudisposiciónunpotencialdeeventosmuyimportante.Estoseventosincluyen:

AppActivate

Seiniciajustoantesdeactivarlaventanadelaaplicaciónprincipal.

AppDeactivate

Seiniciajustoantesdedesactivarlaventanadelaaplicaciónprincipal.

ARXLoaded

SeactivadespuésdecargarunaaplicaciónObjectARX.

ARXUnloaded

SeactivadespuésdedescargarunaaplicaciónObjectARX.

BeginCommand

Seactivajustodespuésdeejecutaruncomando,peroantesdesufinalización.

BeginFileDrop

Seactivaalcolocarunarchivoenlaventanadelaaplicaciónprincipal.

BeginLISP

SeactivacuandoAutoCADrecibelasolicituddecalcularunaexpresiónLISP.

BeginModal

Seactivajustoantesdelaaperturadeuncuadrodediálogomodal.

BeginOpen

SeactivajustodespuésdequeAutoCADrecibalasolicituddeabrirundibujoexistente.

BeginPlot

SeactivajustodespuésdequeAutoCADrecibalasolicituddeimprimirundibujo.

BeginQuit

SeactivajustoantesdequefinaliceunasesióndeAutoCAD.

BeginSave

SeactivajustodespuésdequeAutoCADrecibalasolicituddeguardareldibujo.

EndCommand

Seactivajustodespuésdequefinaliceuncomando.

EndLISP

SeactivacuandofinalizalaevaluacióndeunaexpresiónLISP.

EndModal

Seactivajustodespuésdelcierredeuncuadrodediálogomodal.

EndOpen

SeactivacuandoAutoCADterminadeabrirundibujoexistente.

EndPlot

Seactivadespuésdelenvíodeundocumentoalaimpresora.

EndSave

SeactivacuandoAutoCADterminadeguardareldibujo.

LISPCancelled

SeactivacuandosecancelalaevaluacióndeunaexpresiónLISP.

NewDrawing

Seactivajustoantesdelacreacióndeunnuevodibujo.

SysVarChanged

Seactivacuandosecambiaelvalordeunavariabledelsistema.

WindowChanged

Seactivacuandoserealizauncambioenlaventanadelaaplicación.

WindowMovedOrResized

Seactivajustodespuésdedesplazarocambiareltamañodelaventanadelaaplicación.

Activacióndeeventosdeniveldeaplicación

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdeniveldeaplicación>

Activacióndeeventosdeniveldeaplicación

ParapoderutilizareventosdelniveldeaplicaciónesnecesariocrearunnuevomódulodeclaseydeclararunobjetodeltipoAcadApplicacionconeventos.Porejemplo,supongaquesehacreadounmódulodeclasenuevodenominadoModuloEventoClase.LanuevaclasecontieneladeclaracióndelaaplicaciónconlapalabraclavedeVBAWithEvents.

ParacrearunaclasenuevaydeclararunobjetoApplicationconeventos

1. EnVBAIDE,inserteunmódulodeclase.EnelmenúInsertar,elijaMódulodeclase.

2. EnlaventanaProyecto,elijaelmódulodeclasequeacabadeinsertar.

3. EnlaventanaPropiedades,cambieelnombredelaclaseporModulo-EventoClase.

4. AbralaventanaCódigodelaclaseutilizandoF7oelijaCódigoenelmenúVer.

5. Enlaventanadecódigodelaclase,añadalasiguientelínea:

PublicWithEventsAppAsAcadApplication

Despuésdedeclararlo,elnuevoobjetoconeventosapareceenlalistadesplegabledeobjetosdelmódulodeclase.Ahorapuedeescribirprocedimientosdeeventoparaelnuevoobjetodelmódulodeclase.Alseleccionarelnuevoobjetoenlalistadeobjetos,loseventosválidosparadichoobjetoapareceránenlalistadesplegabledeprocedimientos.

Antesdeejecutarlosprocedimientos,debeconectarelobjetodeclaradodelmódulodeclaseconelobjetoApplication.Paraello,puedeutilizarelsiguientecódigodesdecualquiermódulo.

ParaconectarelobjetodeclaradoconelobjetoApplication

1. EnlaventanaCódigodelmóduloprincipal,añadalasiguientelíneaalaseccióndedeclaraciones:

DimXAsNewEventClassModule

2. Enlamismaventana,añadalasiguientesubrutina:

SubInitializeEvents()

SetX.App=ThisDrawing.Application

EndSub

3. Enelcódigodelmóduloprincipal,añadaunallamadaalasubrutinaInitializeEvents:

CallInitializeEvents

DespuésdeejecutarelprocedimientoInitializeEvents,elobjetoAppdelmódulodeclaseseñalaalobjetoApplicationespecificadoylosprocedimientosdeeventodelmódulodeclaseseejecutansiemprequeseactivaelevento.

SolicitudparacontinuarcuandosearrastraysueltaundibujoenAutoCAD

EsteejemplointerceptaelprocesodecargacuandosearrastraunarchivoysesueltaenAutoCAD.SemuestrauncuadrodemensajequecontieneelnombredelarchivoylosbotonesSí,NoyContinuar,loscualespermitenalusuariodecidirsielarchivodebeseguircargándoseovisualizándose.Sielusuarioeligecancelarlaoperación,estadecisiónsedevuelvemedianteelparámetroCanceldeleventoBeginFileDropyelarchivonosecarga.

PublicWithEventsACADAppAsAcadApplication

SubExample_AcadApplication_Events()

'Thisexampleintializesthepublicvariable(ACADApp)

'whichwillbeusedtointerceptAcadApplicationEvents

'

'RunthisprocedureFIRST!

'WecouldgettheapplicationfromtheThisDocument

'object,butthatwouldrequirehavingadrawingopen,

'sowegrabitfromthesystem.

SetACADApp=GetObject(,"AutoCAD.Application.17")

EndSub

PrivateSubACADApp_BeginFileDrop_

(ByValFileNameAsString,CancelAsBoolean)

'ThisexampleinterceptsanApplicationBeginFileDropevent.

'

'Thiseventistriggeredwhenadrawingfileisdragged

'intoAutoCAD.

'

'Totriggerthisexampleevent:

'1)Makesuretoruntheexamplethatinitializes

'thepublicvariable(namedACADApp)linkedtothisevent.

'

'2)DraganAutoCADdrawingfileintotheAutoCAD

'applicationfromeithertheWindowsDesktop

'orWindowsExplorer

'Usethe"Cancel"variabletostoptheloadingofthe

'draggedfile,andthe"FileName"variabletonotify

'theuserwhichfileisabouttobedraggedin.

IfMsgBox("AutoCADisabouttoload"&FileName&vbCrLf_

&"Doyouwanttocontinueloadingthisfile?",_

vbYesNoCancel+vbQuestion)<>vbYesThen

Cancel=True

EndIf

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>

Controldeeventosdedocumento

LoseventosdeniveldeaplicaciónnosonpermanentesenAutoCADVBA.Esdecir,quenoseactivandeformaautomáticaalcargarunproyectoVBANoobstante,noestánhabilitadosparaningúnotrocontrolador,comoVB.Esnecesario,portanto,activarlosparatodoslosdemáscontroladoresdeActiveXAutomation.

Unavezactivadosloseventosdeniveldeaplicación,tendráasudisposiciónunpotencialdeeventosmuyimportante.Incluye:

Activate

Seiniciaalactivarunaventanadedocumento.

BeginDocClose

Seiniciajustodespuésderecibirunasolicitudparacerrarundibujo.

BeginCommand

Seactivajustodespuésdeejecutaruncomando,peroantesdesufinalización.

BeginDoubleClick

Seactivacuandoelusuariohacedobleclicenunobjetodeldibujo.

BeginLISP

SeactivacuandoAutoCADrecibelasolicituddecalcularunaexpresiónLISP.

BeginPlot

SeactivajustodespuésdequeAutoCADrecibalasolicituddeimprimirundibujo.

BeginRightClick

Seactivacuandoelusuariohaceclicconelbotónderechoenlaventanadeldibujo.

BeginSave

SeactivajustodespuésdequeAutoCADrecibalasolicituddeguardareldibujo.

BeginShortcutMenuCommand

SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoCommand.

BeginShortcutMenuDefault

SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoDefault.

BeginShortcutMenuEdit

SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoEdit.

BeginShortcutMenuGrip

SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoGrip.

BeginShortcutMenuOsnap

SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoOsnap.

Deactivate

Seiniciaaldesactivarlaventanadeldibujo.

EndCommand

Seactivajustodespuésdequefinaliceuncomando.

EndLISP

SeactivacuandofinalizalaevaluacióndeunaexpresiónLISP.

EndPlot

Seactivadespuésdelenvíodeundocumentoalaimpresora.

EndSave

SeactivacuandoAutoCADterminadeguardareldibujo.

EndShortcutMenu

Seactivacuandoapareceelmenúcontextual.

LayoutSwitched

Seactivadespuésdequeelusuariocambiedepresentación.

LISPCancelled

SeactivacuandosecancelalaevaluacióndeunaexpresiónLISP.

ObjectAdded

Seactivadespuésdeañadirunobjetoaldibujo.

ObjectErased

Seactivadespuésdeborrarunobjetodeldibujo.

ObjectModified

Seactivadespuésdemodificarunobjetodeldibujo.

SelectionChanged

SeactivaalcambiarelconjuntodeselecciónPickfirst.

WindowChanged

Seactivacuandoserealizauncambioenlaventanadeldocumento.

WindowMovedOrResized

Seactivajustodespuésdedesplazarocambiareltamañodelaventanadeldibujo.

Activacióndeeventosdedocumentoenotrosentornos(noVBA)Programacióndeeventosdedocumentoenotrosentornos(noVBA)ProgramacióndeeventosdedocumentoenVBA

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdedocumento>

Activacióndeeventosdedocumentoenotrosentornos(noVBA)

ParapoderutilizareventosdedocumentoenVBuotroentornoquenoseaVBA,esnecesariocrearunnuevomódulodeclaseydeclararunobjetodeltipoAcadDocumentconeventos.Porejemplo,supongaquesehacreadounmódulodeclasenuevodenominadoModuloEventoClase.LanuevaclasecontieneladeclaracióndelaaplicaciónconlapalabraclavedeVBAWithEvents.

ParacrearunaclasenuevaydeclararunobjetoDocumentoconeventos

1. EnVBAIDE,inserteunmódulodeclase.EnelmenúInsertar,elijaMódulodeclase.

2. EnlaventanaProyecto,elijaelmódulodeclasequeacabadeinsertar.

3. EnlaventanaPropiedades,cambieelnombredelaclaseporModulo-EventoClase.

4. AbralaventanaCódigodelaclaseutilizandoF7oelijaCódigoenelmenúVer.

5. Enlaventanadecódigodelaclase,añadalasiguientelínea:

PublicWithEventsDocAsAcadDocument

Despuésdedeclararlo,elnuevoobjetoconeventosapareceenlalistadesplegabledeobjetosdelmódulodeclase.Ahorapuedeescribirprocedimientosdeeventoparaelnuevoobjetodelmódulodeclase.Alseleccionarelnuevoobjetoenlalistadeobjetos,loseventosválidosparadichoobjetoapareceránenlalistadesplegabledeprocedimientos.

Antesdeejecutarlosprocedimientos,debeconectarelobjetodeclaradodel

módulodeclaseconelobjetoDocument.Paraello,puedeutilizarelsiguientecódigodesdecualquiermódulo.

ParaconectarelobjetodeclaradoconelobjetoDocumento

1. EnlaventanaCódigodelmóduloprincipal,añadalasiguientelíneaalaseccióndedeclaraciones:

DimXAsNewEventClassModule

2. Enlamismaventana,añadalasiguientesubrutina:

ubInitializeEvents()

SetX.Doc=ThisDrawing

EndSub

3. Enelcódigodelmóduloprincipal,añadaunallamadaalasubrutinaInitializeApp:

CallInitializeEvents

DespuésdeejecutarelprocedimientoInitializeEvents,elobjetoDocdelmódulodeclaseseñalaalobjetodedocumentocreadoylosprocedimientosdeeventodelmódulodeclaseseejecutansiemprequeseactivaelevento.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdedocumento>

Programacióndeeventosdedocumentoenotrosentornos(noVBA)

Unavezactivadosloseventosdedocumento,encontrarálavariabledeclaseDocenlalistadesplegabledeobjetosdelmóduloClasedelaventanadecódigo.SeleccionelaclaseDocyaparecerálalistadeeventosdisponiblesenlalistadesplegabledeprocedimientos.Seleccioneeleventoparaelquedeseaescribiruncontroladorylaestructurabásicadelmismosecrearáautomáticamente.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdedocumento>

ProgramacióndeeventosdedocumentoenVBA

LoseventosdedocumentonoseactivandeformaautomáticaalcargarunproyectoVBA.ParaescribircontroladoresparaeventosdedocumentoenVBA,seleccioneAcadDocumentenlalistadesplegabledeobjetosdelaventanadecódigo.Loseventosdisponiblesparaeldocumentoaparecenenlalistadesplegabledeprocedimientos.Seleccioneeleventoparaelquedeseaescribiruncontroladorylaestructurabásicadelmismosecrearáautomáticamente.

Tengapresentequeloscontroladoresdeeventoscreadosdeestaformaseaplicanaldibujoqueseencuentreactivo.Paracrearcontroladoresdeeventosparaundibujoespecífico,primerosigalospasosexplicadosenActivacióndeeventosdedocumentoenotrosentornos(noVBA).Podráactivardocumentosconcretosparaloseventos.

EnelsiguienteejemploseutilizaelcontroladordeeventoBeginShortcutMenuDefaultparaañadirlaopcióndemenú“OpenDWG”alprincipiodelmenúcontextual.Después,elcontroladordeeventoEndShortcutMenueliminalaopcióndemenúadicionalparaquenoseguardepermanentementeenlaconfiguracióndemenúsdelusuario.

PrivateSubAcadDocument_BeginShortcutMenuDefault_

(ShortcutMenuAsAutoCAD.IAcadPopupMenu)

OnErrorResumeNext

'Addamenuitemtothecursormenu

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

openMacro=Chr(vbKeyEscape)+Chr(vbKeyEscape)+"_open"

SetnewMenuItem=ShortcutMenu.AddMenuItem_

(0,Chr(Asc("&"))_

+"OpenDWG",openMacro)

EndSub

PrivateSubAcadDocument_EndShortcutMenu_

(ShortcutMenuAsAutoCAD.IAcadPopupMenu)

OnErrorResumeNext

ShortcutMenu.Item("OpenDWG").Delete

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>

Controldeeventosdeniveldeobjeto

EleventodeniveldeobjetonoespermanenteenAutoCADVBA.Esdecir,quenoseactivandeformaautomáticaalcargarunproyectoVBAPortanto,esnecesarioactivarloparaVBAyparatodoslosdemáscontroladoresdeActiveXAutomation.

Unavezactivadosloseventosdeobjeto,podrádisponerdeleventoModified.Esteeventoseactivadespuésdemodificarunobjetodeldibujo.

Activacióndeleventodeniveldeobjeto

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdeniveldeobjeto>

Activacióndeleventodeniveldeobjeto

ParapoderutilizareventosdelniveldeobjetoesnecesariocrearunnuevomódulodeclaseydeclararuntipodeobjetoAcadApplicacionconeventos.Porejemplo,supongaquesehacreadounmódulodeclasenuevodenominadoModuloEventoClase.LanuevaclasecontieneladeclaracióndelaaplicaciónconlapalabraclavedeVBAWithEvents.

ParacrearunaclasenuevaydeclararCírculocomoobjetoconeventos

1. EnVBAIDE,inserteunmódulodeclase.EnelmenúInsertar,elijaMódulodeclase.

2. EnlaventanaProyecto,elijaelmódulodeclasequeacabadeinsertar.

3. EnlaventanaPropiedades,cambieelnombredelaclaseporModulo-EventoClase.

4. AbralaventanaCódigodelaclaseutilizandoF7oelijaCódigoenelmenúVer.

5. Enlaventanadecódigodelaclase,añadalasiguientelínea:

PublicWithEventsObjectAsAcadCircle

Despuésdedeclararlo,elnuevoobjetoconeventosapareceenlalistadesplegabledeobjetosdelmódulodeclase.Ahorapuedeescribirprocedimientosdeeventoparaelnuevoobjetodelmódulodeclase.Alseleccionarelnuevoobjetoenlalistadeobjetos,loseventosválidosparadichoobjetoapareceránenlalistadesplegabledeprocedimientos.

Antesdeejecutarlosprocedimientos,debeconectarelobjetodeclaradodelmódulodeclaseconelobjetoCircle.Paraello,puedeutilizarelsiguientecódigodesdecualquiermódulo.

ParaconectarelobjetodeclaradoconelobjetoAutomation:

1. EnlaventanaCódigodelmóduloprincipal,añadalasiguientelíneaalaseccióndedeclaraciones:

DimXAsNewEventClassModule

2. Enlamismaventana,creeuncírculodenominado“MyCircle”einicialícelocomosicontuvieraeventos:

SubInitializeEvents()

DimMyCircleAsAcadCircle

DimcenterPoint(0To2)AsDouble

DimradiusAsDouble

centerPoint(0)=0#:centerPoint(1)=0#:centerPoint(2)=0#

radius=5#

SetMyCircle=ThisDrawing.ModelSpace.AddCircle(centerPoint,radius)

SetX.Object=MyCircle

EndSub

3. Enelcódigodelmóduloprincipal,añadaunallamadaalasubrutinaInitializeApp:

CallInitializeEvents

DespuésdeejecutarelprocedimientoInitializeEvents,elobjetoCircledelmódulodeclaseseñalaalobjetodecírculocreado;losprocedimientosdeeventodelmódulodeclaseseejecutansiemprequeseactivaelevento.Nota CuandocreecódigoenVBA,debeproporcionarungestordeeventosparatodoslosobjetosdeleventoModified.Delocontrario,VBApodríaterminardeformainesperada.

VisualizacióndeláreadeunapolilíneacerradacadavezqueseactualizaEsteejemplocreaunapolilíneaoptimizadaconeventos.Despuéselgestordeleventodelapolilíneamuestraelnuevoáreaquesecreaalcambiarlapolilínea.Paraactivarelevento,cambieeltamañodelapolilíneaenAutoCAD.RecuerdequedebeejecutarlasubrutinaCreatePLineWithEventsparaqueseactiveelcontroladordeeventos.

PublicWithEventsPLineAsAcadLWPolyline

SubCreatePLineWithEvents()

'Thisexamplecreatesalightweightpolyline

Dimpoints(0To9)AsDouble

points(0)=1:points(1)=1

points(2)=1:points(3)=2

points(4)=2:points(5)=2

points(6)=3:points(7)=3

points(8)=3:points(9)=2

SetPLine=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

PLine.Closed=True

ThisDrawing.Application.ZoomAll

EndSub

PrivateSubPLine_Modified_

(ByValpObjectAsAutoCAD.IAcadObject)

'Thiseventistriggeredwhenthepolylineisresized.

'Ifthepolylineisdeletedthemodifiedeventisstill

'triggered,soweusetheerrorhandlertoavoid

'readingdatafromadeletedobject.

OnErrorGoToERRORHANDLER

MsgBox"Theareaof"&pObject.ObjectName&"is:"_

&pObject.Area

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>

Trabajoenespaciotridimensional

Lamayorpartedelosdibujosconstandevistasbidimensionales(2D)deobjetostridimensionales(3D).Aunqueestemétododedibujoestámuyextendidoentrelascomunidadesdearquitecturaylaingeniería,eslimitado:losdibujossonrepresentaciónen2Ddeobjetosen3D,ydebeninterpretarsevisualmente.Además,comolasvistassecreanporseparado,haymásposibilidadesdeerroresyambigüedades.Comoresultado,talvezquieracrearmodelos3Drealesenlugardelasrepresentaciones2D.PuedeutilizarlasherramientasdedibujodeAutoCADparacrearobjetostridimensionalesdetalladosyrealistas,asícomoparamanejarlosdediversasformas.

Definicióndecoordenadas3DDefinicióndeunsistemadecoordenadaspersonalesConversióndecoordenadasCreacióndeobjetos3DTareasdeediciónen3DModificacióndesólidos3D

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>

Definicióndecoordenadas3D

Introducircoordenadas3Denelsistemadecoordenadasuniversales(SCU)essimilaraintroducircoordenadas2Dendichosistema.AdemásdeespecificarlosvaloresXeY,elusuarioespecificaunvalorZ.Aligualqueocurreconlascoordenadas2D,seutilizaunavarianteparapasarlascoordenadasalosmétodosypropiedadesActiveX®yparaconsultarlascoordenadas.

Paraobtenermásinformaciónacercadeladefinicióndecoordenadas3D,véase“Introduccióndecoordenadas3D“enelManualdelusuario.

Definiciónyconsultadecoordenadasenpolilíneas2Dy3D

Enesteejemplosecreandospolilíneas,cadaunacontrescoordenadas.Laprimeraesunapolilínea2Dylasegunda3D.ObservequelalongituddelamatrizquecontienelosvérticesestáampliadaparaincluirlascoordenadasZenlacreacióndelapolilínea3D.Elejemploterminaconlaconsultadelascoordenadasdelaspolilíneas,quesemuestranenuncuadrodemensaje.

SubCh8_Polyline_2D_3D()

Dimpline2DObjAsAcadLWPolyline

Dimpline3DObjAsAcadPolyline

Dimpoints2D(0To5)AsDouble

Dimpoints3D(0To8)AsDouble

'Definethree2Dpolylinepoints

points2D(0)=1:points2D(1)=1

points2D(2)=1:points2D(3)=2

points2D(4)=2:points2D(5)=2

'Definethree3Dpolylinepoints

points3D(0)=1:points3D(1)=1:points3D(2)=0

points3D(3)=2:points3D(4)=1:points3D(5)=0

points3D(6)=2:points3D(7)=2:points3D(8)=0

'Createthe2DlightweightPolyline

Setpline2DObj=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points2D)

pline2DObj.Color=acRed

pline2DObj.Update

'Createthe3Dpolyline

Setpline3DObj=ThisDrawing.ModelSpace._

AddPolyline(points3D)

pline3DObj.Color=acBlue

pline3DObj.Update

'Querythecoordinatesofthepolylines

Dimget2DptsAsVariant

Dimget3DptsAsVariant

get2Dpts=pline2DObj.Coordinates

get3Dpts=pline3DObj.Coordinates

'Displaythecoordinates

MsgBox("2Dpolyline(red):"&vbCrLf&_

get2Dpts(0)&","&get2Dpts(1)&vbCrLf&_

get2Dpts(2)&","&get2Dpts(3)&vbCrLf&_

get2Dpts(4)&","&get2Dpts(5))

MsgBox("3Dpolyline(blue):"&vbCrLf&_

get3Dpts(0)&","&get3Dpts(1)&","&_

get3Dpts(2)&vbCrLf&_

get3Dpts(3)&","&get3Dpts(4)&","&_

get3Dpts(5)&vbCrLf&_

get3Dpts(6)&","&get3Dpts(7)&","&_

get3Dpts(8))

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>

Definicióndeunsistemadecoordenadaspersonales

Puededefinirunsistemadecoordenadaspersonales(SCP)paracambiarelemplazamientodelpuntodeorigen(0,0,0)ylaorientacióndelplanoXYydelejeZ.UnSCPsepuedecolocaryorientarencualquierpuntodelespaciotridimensional.Sepuedendefinir,guardaryutilizartantossistemasdecoordenadascomosenecesiten.LaintroducciónyvisualizacióndelascoordenadasdependedelsistemaSCPqueestéactivo.

ParaindicarelorigenylaorientacióndelSCP,puedemostrareliconoSCPenelpuntodeorigendelSCPmediantelapropiedadUCSIconAtOrigin.SieliconoSCPestáactivado(véaselapropiedadUCSIconOn)peronoapareceenelorigen,semuestraenlacoordenadadelSCUdefinidaporlavariabledesistemaUCSORG.

PuedecrearunsistemadecoordenadaspersonalesconelmétodoAdd.Estemétodorequierecuatrovaloresdeentrada:lacoordenadadelorigen,unacoordenadaenlosejesXeY,yelnombredelSCP.

TodaslascoordenadasdeActiveXAutomationdeAutoCAD®seintroducenenelsistemadecoordenadasuniversales.UtiliceelmétodoGetUCSMatrixparavolveralamatrizdetransformacióndeunSCPconcreto.UtiliceestamatrizdetransformaciónparabuscarlascoordenadasSCUequivalentes.

ParaactivarunSCP,utilicelapropiedadActiveUCSdelobjetoDocument.SiserealizancambiosenelSCPactivo,elnuevoobjetodeSCPdeberestablecersecomoSCPactivoparaqueloscambiossevean.PararestablecerelSCPactivo,sólohayquellamaralapropiedadActiveUCSdenuevoconelobjetodeSCPactualizado.

ParaobtenermásinformaciónsobreladefinicióndelSCP,véase“Controldelsistemadecoordenadaspersonales(SCP)en3D”enelManualdelusuario.

CreacióndeunSCPnuevo,activaciónytraduccióndelascoordenadasdeunpuntoaSCP

LasiguientesubrutinacreaunnuevoSCPyloestablececomoelSCPactivodeldibujo.Acontinuación,pidealusuarioquedesigneunpuntodeldibujoydevuelvelascoordenadasSCUySCPdelpunto.

SubCh8_NewUCS()

'Definethevariableswewillneed

DimucsObjAsAcadUCS

Dimorigin(0To2)AsDouble

DimxAxisPnt(0To2)AsDouble

DimyAxisPnt(0To2)AsDouble

'DefinetheUCSpoints

origin(0)=4:origin(1)=5:origin(2)=3

xAxisPnt(0)=5:xAxisPnt(1)=5:xAxisPnt(2)=3

yAxisPnt(0)=4:yAxisPnt(1)=6:yAxisPnt(2)=3

'AddtheUCStothe

'UserCoordinatesSystemscollection

SetucsObj=ThisDrawing.UserCoordinateSystems._

Add(origin,xAxisPnt,yAxisPnt,"New_UCS")

'DisplaytheUCSicon

ThisDrawing.ActiveViewport.UCSIconAtOrigin=True

ThisDrawing.ActiveViewport.UCSIconOn=True

'MakethenewUCStheactiveUCS

ThisDrawing.ActiveUCS=ucsObj

MsgBox"ThecurrentUCSis:"&ThisDrawing.ActiveUCS.Name_

&vbCrLf&"Pickapointinthedrawing."

'FindtheWCSandUCScoordinateofapoint

DimWCSPntAsVariant

DimUCSPntAsVariant

WCSPnt=ThisDrawing.Utility.GetPoint(,"Enterapoint:")

UCSPnt=ThisDrawing.Utility.TranslateCoordinates_

(WCSPnt,acWorld,acUCS,False)

MsgBox"TheWCScoordinatesare:"&WCSPnt(0)&","_

&WCSPnt(1)&","&WCSPnt(2)&vbCrLf&_

"TheUCScoordinatesare:"&UCSPnt(0)&","_

&UCSPnt(1)&","&UCSPnt(2)

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>

Conversióndecoordenadas

ElmétodoTranslateCoordinatesconvierteunpuntooundesplazamientodeunsistemadecoordenadasaotro.Unargumentodepunto,llamadoOriginalPoint,puedeinterpretarsecomounpunto3Docomounvectordedesplazamiento3D.EsteargumentosedistingueporelargumentoBoolean,Disp.SielargumentoDispsedefinecomoTRUE,elargumentoOriginalPointsetratacomounvectordedesplazamiento;encasocontrario,setratacomounpunto.OtrosdosargumentosdeterminanelsistemadecoordenadasalqueperteneceOriginalPoint,asícomoelsistemadecoordenadasalqueOriginalPointdebeconvertirse.LossiguientessistemasdecoordenadasdeAutoCADpuedenespecificarseenlosargumentosFromyTo:

SCU

Sistemadecoordenadasuniversales:elsistemadecoordenadasdereferencia.TodoslosdemássistemasdecoordenadassedefinenenfuncióndelSCU,quenuncacambia.LosvaloresmedidosconelSCUpermanecenestablesaunqueserealicencambiosenotrossistemasdecoordenadas.TodoslospuntosquesetransfierenalosmétodosypropiedadesdeActiveX,oqueéstosdevuelven,estánexpresadosenelSCU,salvoqueseespecifiquelocontrario.

SCP

Sistemadecoordenadaspersonales(SCP):elsistemadecoordenadasdetrabajo.ElusuarioespecificaunSCPparacreartareasdedibujosconmásfacilidad.TodoslospuntosquesetransmitenaloscomandosdeAutoCAD,incluidoslosdevueltosporfuncionesexternasyrutinasdeAutoLISP,estánenelsistemaSCPactivo(amenosqueelusuariolosprecedadeun*enlasolicituddecomando).SideseaquesuaplicaciónenvíealoscomandosdeAutoCADcoordenadasenlossistemasSCU,SCOoSCV,primerodebeconvertirlasalsistemaSCPmedianteelmétodoTranslateCoordinates.

SCO

Sistemadecoordenadasdeobjeto:losvaloresdepuntoespecificadospordeterminadosmétodosypropiedadesparalosobjetosPolylineyLightweightPolylineseexpresanenestesistemadecoordenadasrelativoalobjeto.Dependiendodelusoqueselevayaadaralobjeto,estospuntossuelenconvertirsealSCU,alSCPactivooalSCVactivo.Delmismomodo,lospuntosdelSCU,SCPoSCVquevayanaincluirseenlabasededatosdebenconvertirseantesalSCOpormediodelasmismaspropiedades.Paraconocerlosmétodosypropiedadesqueusanestesistemadecoordenadas,véaseActiveXandVBAReferencedeAutoCAD.CuandoconviertacoordenadasalSCO,odesdeéste,introduzcalanormaldelSCOenelúltimoargumentodelafunciónTranslateCoordinates.

SCV

Sistemadecoordenadasdevisualización:elsistemadecoordenadasdondesetransformanlosobjetosantesdemostrarse.ElorigendelSCVeselpuntoalmacenadoenlavariabledesistemaTARGETdeAutoCADysuejeZeslalíneademira.Enotraspalabras,unaventanagráficasiempreesunavistaenplantadesuSCV.PuedenutilizarseestascoordenadasparadeterminarellugardelapantalladondeelusuariodeAutoCADveráunobjetoconcreto.

SCVEP

SCVenespaciopapel:estesistemadecoordenadassólopuedetransformarsealSCVdelaventanagráficadelespaciomodeloactualmenteactivaydesdeelmismo.Setratabásicamentedeunatransformación2D,dondelascoordenadasXeYcambiansuescalaosedesfasansielargumentoDispesFALSE.LacoordenadaZcambiadeescala,perojamásseconvierte.Porlotanto,puedeusarseparahallarelfactordeescalaentrelosdossistemasdecoordenadas.ElSCVEPsólopuedetransformarseenlaventanagráficaactualdelespaciomodeloactual.SielargumentoFromesigualaSCVEP,elargumentoTodebeserigualaSCVyviceversa.

ConversióndecoordenadasSCOencoordenadasSCU

Enesteejemplosecreaunapolilíneaenespaciomodelo.SuprimervérticesemuestraenlossistemasdecoordenadasSCOySCU.LaconversióndeSCOaSCUrequieresituarlanormaldelSCOenelúltimoargumentodelmétodoTranslateCoordinates.

SubCh8_TranslateCoordinates()

'Createapolylineinmodelspace.

DimplineObjAsAcadPolyline

Dimpoints(0To14)AsDouble

'Definethe2Dpolylinepoints

points(0)=1:points(1)=1:points(2)=0

points(3)=1:points(4)=2:points(5)=0

points(6)=2:points(7)=2:points(8)=0

points(9)=3:points(10)=2:points(11)=0

points(12)=4:points(13)=4:points(14)=0

'CreatealightweightPolylineobjectinmodelspace

SetplineObj=ThisDrawing.ModelSpace.AddPolyline(points)

'FindtheXandYcoordinatesofthe

'firstvertexofthepolyline

DimfirstVertexAsVariant

firstVertex=plineObj.Coordinate(0)

'FindtheZcoordinateforthepolyline

'usingtheelevationproperty

firstVertex(2)=plineObj.Elevation

'Changethenormalfortheplinesothatthe

'differencebetweenthecoordinatesystems

'isobvious.

DimplineNormal(0To2)AsDouble

plineNormal(0)=0#

plineNormal(1)=1#

plineNormal(2)=2#

plineObj.Normal=plineNormal

'TranslatetheOCScoordinateintoWCS

DimcoordinateWCSAsVariant

coordinateWCS=ThisDrawing.Utility.TranslateCoordinates_

(firstVertex,acOCS,acWorld,False,plineNormal)

'Displaythecoordinatesofthepoint

MsgBox"Thefirstvertexhasthefollowingcoordinates:"_

&vbCrLf&"OCS:"&firstVertex(0)&","&_

firstVertex(1)&","&firstVertex(2)&vbCrLf&_

"WCS:"&coordinateWCS(0)&","&_

coordinateWCS(1)&","&coordinateWCS(2)

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>

Creacióndeobjetos3D

CrearunamallapolicaraCrearunsólidoencuñaAutoCADadmitetrestiposdemodeladoen3D:alámbrico,desuperficieysólido.Cadaunodeellossedistinguedelosdemásporsustécnicasdecreaciónydemodificación.

Paraobtenermásinformaciónacercadelacreacióndeobjetos3D,véase“Creacióndeobjetos3D”enelManualdelusuario.

CreacióndemodelosalámbricosCreacióndemallasCreacióndemallaspolicaraCreacióndesólidos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Creacióndeobjetos3D>

Creacióndemodelosalámbricos

ConAutoCADsepuedencrearmodelosalámbricossituandolosobjetosplanos2Denunaubicacióncualquieradeunespacio3D.Losobjetos2Dpuedencolocarseenespacios3Dmedianteunodelossiguientesmétodos:

Crearelobjetodefiniendopuntos3D.LascoordenadasqueintroduzcadefinenlaposiciónX,YyZdelpunto.

Definirelplanodeconstrucciónpordefecto(XY)sobreelquedeseadibujarelobjetomedianteladefinicióndeunSCP.

Moverelobjetohastalaposiciónadecuadaenelespacio3Dunavezcreado.

Tambiénpuedencrearseobjetosalámbricos,comopolilíneas,quepuedenexistirenlastresdimensiones.UtiliceelmétodoAdd3DPolyparacrearpolilíneas3D.

Paraobtenermásinformaciónacercadelacreacióndeestructurasalámbricas,véase“Creacióndemodelosalámbricos”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Creacióndeobjetos3D>

Creacióndemallas

Unamallarectangular(objetoPolygonMesh)representalasuperficiedeunobjetomediantefacetasplanas.Ladensidaddemalla,onúmerodefacetas,sedefineenfuncióndeunamatrizdevérticesMyN,similaraunarejillaconfilasycolumnas.MedianteMyNsedeterminalaposicióndelascolumnasyfilas,respectivamente,decualquiervérticedado.Estosobjetossepuedencrearenespacio2Dy3D,sibiensuusoesmásapropiadopara3D.

UtiliceelmétodoAdd3DMeshparacrearmallasrectangulares.Estemétodorequieretresvaloresdeentrada:elnúmerodevérticesdeladirecciónM,elnúmerodevérticesdeladirecciónNyunamatrizdevariantesquecontengalascoordenadasdetodoslosvérticesdelamalla.

UnavezestablecidoPolygonMesh,utilicelaspropiedadesMCloseyNCloseparacerrarlamalla.

Paraobtenermásinformaciónacercadelacreacióndemallas,véase“Creacióndesuperficies”enelManualdelusuario.

Creacióndeunamallapoligonal

Enesteejemplosecreaunamallapoligonalde“.Ladireccióndelaventanagráficaactivaseajustadeformaquelanaturalezatridimensionaldelamallasevisualizaconmásfacilidad.

SubCh8_Create3DMesh()

DimmeshObjAsAcadPolygonMesh

DimmSize,nSize,CountAsInteger

Dimpoints(0To47)AsDouble

'createthematrixofpoints

points(0)=0:points(1)=0:points(2)=0

points(3)=2:points(4)=0:points(5)=1

points(6)=4:points(7)=0:points(8)=0

points(9)=6:points(10)=0:points(11)=1

points(12)=0:points(13)=2:points(14)=0

points(15)=2:points(16)=2:points(17)=1

points(18)=4:points(19)=2:points(20)=0

points(21)=6:points(22)=2:points(23)=1

points(24)=0:points(25)=4:points(26)=0

points(27)=2:points(28)=4:points(29)=1

points(30)=4:points(31)=4:points(32)=0

points(33)=6:points(34)=4:points(35)=0

points(36)=0:points(37)=6:points(38)=0

points(39)=2:points(40)=6:points(41)=1

points(42)=4:points(43)=6:points(44)=0

points(45)=6:points(46)=6:points(47)=0

mSize=4:nSize=4

'createsa3Dmeshinmodelspace

SetmeshObj=ThisDrawing.ModelSpace._

Add3DMesh(mSize,nSize,points)

'Changetheviewingdirectionoftheviewport

'tobetterseethecylinder

DimNewDirection(0To2)AsDouble

NewDirection(0)=-1

NewDirection(1)=-1

NewDirection(2)=1

ThisDrawing.ActiveViewport.direction=NewDirection

ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Creacióndeobjetos3D>

Creacióndemallaspolicara

UtiliceelmétodoAddPolyfaceMeshparacrearunamallapolicaraenlaquelascaraspuedantenernumerososvértices.

Elprocesodecreacióndeunamallapolicaraesmuysimilaralempleadoparacrearunamallarectangular.Paracrearunamallapolicara,indiquelascoordenadasdetodossusvérticesy,acontinuación,definacadacaraintroduciendolosnúmerosdevérticedetodoslosvérticesdeesacara.Amedidaquevacreandolamallapolicara,puedeoptarporocultardeterminadoslados,asignarlosacapasoasignarlescolor.

Sideseaquelosladosseaninvisibles,indiqueelnúmerodevérticecorrespondientecomounvalornegativo.Paraobtenermásinformaciónacercadelacreacióndemallaspolicara,véaseelmétodoAddPolyfaceMeshenActiveXandVBAReference.

Creacióndeunamallapolicara

Enesteejemplosecreaunamallapolicaraenespaciomodelo.Despuésseactualizaladireccióndevisualizacióndelaventanagráficaactivaparapermitirunamejorvisióndelanaturalezatridimensionaldelamalla.

SubCh8_CreatePolyfaceMesh()

'Definethemeshvertices

Dimvertex(0To17)AsDouble

vertex(0)=4:vertex(1)=7:vertex(2)=0

vertex(3)=5:vertex(4)=7:vertex(5)=0

vertex(6)=6:vertex(7)=7:vertex(8)=0

vertex(9)=4:vertex(10)=6:vertex(11)=0

vertex(12)=5:vertex(13)=6:vertex(14)=0

vertex(15)=6:vertex(16)=6:vertex(17)=1

'Definethefacelist

DimFaceList(0To7)AsInteger

FaceList(0)=1

FaceList(1)=2

FaceList(2)=5

FaceList(3)=4

FaceList(4)=2

FaceList(5)=3

FaceList(6)=6

FaceList(7)=5

'Createthepolyfacemesh

DimpolyfaceMeshObjAsAcadPolyfaceMesh

SetpolyfaceMeshObj=ThisDrawing.ModelSpace.AddPolyfaceMesh_

(vertex,FaceList)

'Changetheviewingdirectionoftheviewportto

'betterseethepolyfacemesh

DimNewDirection(0To2)AsDouble

NewDirection(0)=-1

NewDirection(1)=-1

NewDirection(2)=1

ThisDrawing.ActiveViewport.direction=NewDirection

ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Creacióndeobjetos3D>

Creacióndesólidos

Unobjetosólido(objeto3DSolid)representatodoelvolumendeunobjeto.Lossólidossonprobablementelosobjetosmenosambiguosymáscompletosdetodoslostiposdemodelizado3D.Lacreacióndeformassólidascomplejasesmásfácilquelademallasyrepresentacionesalámbricas.

Lacreacióndesólidospuedellevarseacaboapartirdeunadelasformassólidasbásicascomo,porejemplo,unprismarectangular,uncono,uncilindro,unaesfera,untoroideounacuña,mediantelaextrusióndeunobjeto2Dalolargodeunatrayectoriaomediantesurotaciónsobreuneje.Utiliceunodelossiguientesmétodosparacrearsólidos:

AddBox,AddCone,AddCylinder,AddEllipticalCone,AddEllipticalCylinder,AddExtrudedSolid,AddExtrudedSolidAlongPath,AddRevolvedSolid,AddSolid,AddSphere,AddTorus,oAddWedge.

Aligualqueocurreconlasmallas,lossólidossemuestranenpantallacomorepresentacionesalámbricashastaquesedecideocultarlos,sombrearlosomodelizarlos.Además,esposibleanalizarlaspropiedadesfísicasdelossólidos(volumen,momentosdeinercia,centrodegravedad,etc).Utilicelassiguientespropiedadesparaanalizarsólidos:MomentOfInertia,PrincipalDirections,PrincipalMoments,ProductOfInertia,RadiiOfGyration,yVolume.

LapropiedadContourlinesPerSurfacecontrolaelnúmerodelíneasdetriangulaciónparaverlaspartescurvasdelarepresentaciónalámbrica.LapropiedadRenderSmoothnesscontrolalasuavidaddeobjetossombreadosyconlíneasocultas.

Paraobtenermásinformaciónacercadelacreacióndesólidos,véase“Creacióndeobjetos3D”enelManualdelusuario.

Creacióndeunacuñasólida

Enelsiguienteejemplosecreaunsólidoconformadecuñaenespaciomodelo.Despuésseactualizaladireccióndevisualizacióndelaventanagráficaactivaparapermitirunamejorvisióndelanaturalezatridimensionaldelacuña.

SubCh8_CreateWedge()

DimwedgeObjAsAcad3DSolid

Dimcenter(0To2)AsDouble

DimlengthAsDouble

DimwidthAsDouble

DimheightAsDouble

'Definethewedge

center(0)=5#:center(1)=5#:center(2)=0

length=10#:width=15#:height=20#

'Createthewedgeinmodelspace

SetwedgeObj=ThisDrawing.ModelSpace._

AddWedge(center,length,width,height)

'Changetheviewingdirectionoftheviewport

DimNewDirection(0To2)AsDouble

NewDirection(0)=-1

NewDirection(1)=-1

NewDirection(2)=1

ThisDrawing.ActiveViewport.direction=NewDirection

ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>

Tareasdeediciónen3D

Esteapartadotratasobrelarealizacióndediferentestareasdeediciónen3Dcomogirar,disponerenformadematrizyreflejarensimetría.

Rotacióndeobjetosen3DDisposiciónenmatrizen3DReflexiónensimetríadeobjetosalolargodeunplano

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Tareasdeediciónen3D>

Rotacióndeobjetosen3D

ConelmétodoRotatepuedegirarobjetosen2Dalrededordeunpuntoprecisado.LadireccióndelarotaciónestádeterminadaporelSCU.ElmétodoRotate3Dgiralosobjetosen3Dalrededordeunejeprecisado.ElmétodoRotate3Drequieretresvaloresdeentrada:lascoordenadasSCUdelosdospuntosquedefinenelejederotaciónyelánguloderotaciónenradianes.

Puedegirarobjetos3DmediantelosmétodosRotateoRotate3D.

Paraobtenermásinformaciónacercadelarotaciónen3D,véase“Rotacióndeobjetos“enelManualdelusuario.

Creacióndeunprismarectangular3Dyrotaciónsobreuneje

Enesteejemplosecreaunprismarectangular3D.Despuéssedefineelejederotacióny,porúltimo,segiraelcuadrado30gradosalrededordeleje.

SubCh8_Rotate_3DBox()

DimboxObjAsAcad3DSolid

DimlengthAsDouble

DimwidthAsDouble

DimheightAsDouble

Dimcenter(0To2)AsDouble

'Definethebox

center(0)=5:center(1)=5:center(2)=0

length=5

width=7

height=10

'Createtheboxobjectinmodelspace

SetboxObj=ThisDrawing.ModelSpace._

AddBox(center,length,width,height)

'Definetherotationaxiswithtwopoints

DimrotatePt1(0To2)AsDouble

DimrotatePt2(0To2)AsDouble

DimrotateAngleAsDouble

rotatePt1(0)=-3:rotatePt1(1)=4:rotatePt1(2)=0

rotatePt2(0)=-3:rotatePt2(1)=-4:rotatePt2(2)=0

rotateAngle=30

rotateAngle=rotateAngle*3.141592/180#

'Rotatethebox

boxObj.Rotate3DrotatePt1,rotatePt2,rotateAngle

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Tareasdeediciónen3D>

Disposiciónenmatrizen3D

ConelmétodoArrayRectangularpuedecrearunamatrizrectangularen3D.Ademásdeespecificarelnúmerodecolumnas(direcciónX)yfilas(direcciónY),tambiénpuedeespecificarelnúmerodeniveles(direcciónZ).

Paraobtenermásinformaciónacercadelautilizacióndematricesdeobjetosen3D,véase“Creacióndeunamatrizdeobjetos”enelManualdelusuario.

Creacióndeunamatrizrectangular3D

Enesteejemplosecreauncírculoy,acontinuación,seutilizaparacrearunamatrizrectangulardecuatrofilas,cuatrocolumnasytresnivelesdecírculos.

SubCh8_CreateRectangularArray()

'Createthecircle

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=2:center(1)=2:center(2)=0

radius=0.5

SetcircleObj=ThisDrawing.ModelSpace._

AddCircle(center,radius)

'Definetherectangulararray

DimnumberOfRowsAsLong

DimnumberOfColumnsAsLong

DimnumberOfLevelsAsLong

DimdistanceBwtnRowsAsDouble

DimdistanceBwtnColumnsAsDouble

DimdistanceBwtnLevelsAsDouble

numberOfRows=4

numberOfColumns=4

numberOfLevels=3

distanceBwtnRows=1

distanceBwtnColumns=1

distanceBwtnLevels=4

'Createthearrayofobjects

DimretObjAsVariant

retObj=circleObj.ArrayRectangular_

(numberOfRows,numberOfColumns,_

numberOfLevels,distanceBwtnRows,_

distanceBwtnColumns,distanceBwtnLevels)

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Tareasdeediciónen3D>

Reflexiónensimetríadeobjetosalolargodeunplano

ConelmétodoMirror3Dsepuedenreflejarobjetosalolargodeunplanodesimetríaprecisadomedianteladefinicióndetrespuntos.

Paraobtenermásinformaciónacercadelareflexióndeobjetosensimetríaen3D,véase“Reflejodeobjetos”enelManualdelusuario.

Reflexiónensimetríaen3D

Enesteejemplosecreaunprismarectangularenespaciomodelo.Despuéssereflejaensimetríaconrespectoaunplanoyseasignaelcolorrojoalprismareflejado.

SubCh8_MirrorABox3D()

'Createtheboxobject

DimboxObjAsAcad3DSolid

DimlengthAsDouble

DimwidthAsDouble

DimheightAsDouble

Dimcenter(0To2)AsDouble

center(0)=5#:center(1)=5#:center(2)=0

length=5#:width=7:height=10#

'Createthebox(3DSolid)objectinmodelspace

SetboxObj=ThisDrawing.ModelSpace._

AddBox(center,length,width,height)

'Definethemirroringplanewiththreepoints

DimmirrorPt1(0To2)AsDouble

DimmirrorPt2(0To2)AsDouble

DimmirrorPt3(0To2)AsDouble

mirrorPt1(0)=1.25:mirrorPt1(1)=0:mirrorPt1(2)=0

mirrorPt2(0)=1.25:mirrorPt2(1)=2:mirrorPt2(2)=0

mirrorPt3(0)=1.25:mirrorPt3(1)=2:mirrorPt3(2)=2

'Mirrorthebox

DimmirrorBoxObjAsAcad3DSolid

SetmirrorBoxObj=boxObj.Mirror3D_

(mirrorPt1,mirrorPt2,mirrorPt3)

mirrorBoxObj.Color=acRed

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>

Modificacióndesólidos3D

Unavezcreadounsólido,puedeprocederalacreacióndeformassólidasmáscomplejasmediantelacombinacióndedistintosobjetossólidos.Puedeoptarporunirsólidos,sustraerlosolocalizarsuvolumencomún(partessuperpuestas).UtiliceelmétodoBooleanoCheckInterferenceparaefectuardichascombinaciones.

Lossólidossepuedenmodificartambiénmediantelaobtencióndelaseccióntransversalbidimensionaldeunsólidooelcortedeunsólidoendospartes.UtiliceelmétodoSectionSolidparabuscarseccionestransversalesdesólidos,yelmétodoSliceSolidparacortarunsólidoendospartes.

Búsquedadelainterferenciaentredossólidos

Enesteejemplosecreaunprismarectangularyuncilindroenespaciomodelo.Acontinuación,selocalizalainterferenciaentrelosdossólidosysecreaunsólidonuevoapartirdeella.Parafacilitarlavisualización,elprismasecoloreaenblanco,elcilindroenciányelsólidodeinterferenciaenrojo.

SubCh8_FindInterferenceBetweenSolids()

'Definethebox

DimboxObjAsAcad3DSolid

DimlengthAsDouble

DimwidthAsDouble

DimheightAsDouble

Dimcenter(0To2)AsDouble

center(0)=5:center(1)=5:center(2)=0

length=5

width=7

height=10

'Createtheboxobjectinmodelspace

'andcoloritwhite

SetboxObj=ThisDrawing.ModelSpace._

AddBox(center,length,width,height)

boxObj.Color=acWhite

'Definethecylinder

DimcylinderObjAsAcad3DSolid

DimcylinderRadiusAsDouble

DimcylinderHeightAsDouble

center(0)=0:center(1)=0:center(2)=0

cylinderRadius=5

cylinderHeight=20

'CreatetheCylinderand

'coloritcyan

SetcylinderObj=ThisDrawing.ModelSpace.AddCylinder_

(center,cylinderRadius,cylinderHeight)

cylinderObj.Color=acCyan

'Findtheinterferencebetweenthetwosolids

'andcreateanewsolidfromit.Colorthe

'newsolidred.

DimsolidObjAsAcad3DSolid

SetsolidObj=boxObj.CheckInterference(cylinderObj,True)

solidObj.Color=acRed

ZoomAll

EndSub

Cortedeunsólidoendossólidos

Enesteejemplosecreaunprismarectangularenespaciomodelo.Despuéssecortatomandocomoreferenciaunplanodefinidoportrespuntos.Lasecciónsedevuelvecomosólido3D.

SubCh8_SliceABox()

'Createtheboxobject

DimboxObjAsAcad3DSolid

DimlengthAsDouble

DimwidthAsDouble

DimheightAsDouble

Dimcenter(0To2)AsDouble

center(0)=5#:center(1)=5#:center(2)=0

length=5#:width=7:height=10#

'Createthebox(3DSolid)objectinmodelspace

SetboxObj=ThisDrawing.ModelSpace._

AddBox(center,length,width,height)

boxObj.Color=acWhite

'Definethesectionplanewiththreepoints

DimslicePt1(0To2)AsDouble

DimslicePt2(0To2)AsDouble

DimslicePt3(0To2)AsDouble

slicePt1(0)=1.5:slicePt1(1)=7.5:slicePt1(2)=0

slicePt2(0)=1.5:slicePt2(1)=7.5:slicePt2(2)=10

slicePt3(0)=8.5:slicePt3(1)=2.5:slicePt3(2)=10

'slicetheboxandcolorthenewsolidred

DimsliceObjAsAcad3DSolid

SetsliceObj=boxObj.SliceSolid_

(slicePt1,slicePt2,slicePt3,True)

sliceObj.Color=acRed

ZoomAll

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>

Definicióndepresentacioneseimpresión

UnavezcreadoeldibujoconAutoCAD,habitualmentesetrazaenpapel.Undibujotrazadopuedecontenerunaúnicavistadeldibujoovarias,dotándolodeunaorganizaciónmáscompleja.Enespaciopapel,sepuedencrearventanasgráficasflotantes,quemuestrandistintasvistasdeldibujo.Segúnseanecesario,sepuedeimprimirunaovariasventanasgráficasoestablecerlasopcionesquedeterminenloquedebetrazarseycómodebeajustarselaimagenalpapel.

ElespaciomodeloyelespaciopapelPresentacionesVentanasgráficasImpresióndedibujos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>

Elespaciomodeloyelespaciopapel

Elespaciomodeloeselentornodedibujodondeelusuariocrealageometríadelmodelo.Porlogeneral,alcomenzarundibujoenelespaciomodelosedesignanloslímitesdeldibujoparadeterminarsuextensión,ysedibujaaescalareal.

Elespaciopapelrepresentaelmodeloconformequedarátrazadoenpapel.Enelespaciopapelesposiblepresentardistintasvistasdeldibujoyvistasaescalaindependientesentresí,ydisponerlasdistintasvistasdeldibujocomosedeseaquesetracen.Elmismodibujopuedetenerdistintasrepresentacionesdeespaciopapel.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>

Presentaciones

Laspresentacionescontienentodalageometríadeldibujo.LageometríadelespaciomodeloseincluyeenunapresentacióndenominadaModelo.Nisepuedecambiarelnombredelapresentacióndelespaciomodelo,nisepuedecrearmásdeunapresentacióndelespaciomodelo.Sólopuedehaberunapresentacióndeespaciomodelopordibujo.

Lageometríadelespaciopapeltambiénseincluyeenlaspresentaciones.Esposibletenervariaspresentacionesdeespaciopapelparacadadibujo.Cadaunarepresentaunaconfiguracióndeimpresióndistinta.Elnombredelaspresentacionesdelespaciopapelsepuedemodificar.

EnActiveX®Automation,todalageometríadelapresentacióndelespaciomodeloestáincluidaenlacolecciónModelSpace.Comoenundibujopuedehabermásdeunapresentacióndelespaciopapel,lacolecciónPaperSpaceapuntaalaúltimapresentacióndelespaciopapelactiva.

Paraobtenermásinformaciónacercadelaspresentacionesdeespaciopapel,véase“Sombreados,rellenosycoberturas”enelManualdelusuario.

PresentacionesybloquesConfiguracionesdeimpresiónParámetrosdepresentación

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>

Presentacionesybloques

ElcontenidodecualquierpresentaciónsedistribuyeentredosobjetosActiveXdiferentes:elobjetoLayoutyelobjetoBlock.ElobjetoLayoutcontienelosajustesdetrazadoylaspropiedadesvisualesdelapresentacióntalcomoapareceenlainterfazdeusuario.ElobjetoBlockcontienelageometríadelapresentación.

CadaobjetoLayoutestáasociadoaunsoloobjetoBlock.SideseaaccederalobjetoBlockasociadoaunapresentacióndeterminada,utilicelapropiedadBlock.Asuvez,cadaobjetoBlockestáasociadoaunsoloobjetoLayout.ParaaccederalobjetoLayoutasociadoaunbloquedeterminado,utilicelapropiedadLayoutdelbloque.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>

Configuracionesdeimpresión

LosobjetosPlotConfigurationseparecenalosobjetosLayoutenquecontienenlamismainformacióndeimpresión.SediferencianenqueelobjetoLayouttieneasociadounobjetoBlockquecontienelageometríaquedebeimprimirse.LosobjetosPlotConfigurationnoseasocianaunobjetoBlockparticular.Simplemente,esunconjuntoguardadodeconfiguracionesdetrazadoresquesepuedeutilizarconcualquiergeometría.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>

Parámetrosdepresentación

Losparámetrosdepresentacióndeterminanlasalidaimpresa.Estosparámetrosafectanaltamañodepapel,laescaladeimpresión,eláreadeimpresión,elorigendeimpresiónyelnombredeldispositivodeimpresión.Comprenderelmododeutilizarlosparámetrosdepresentacióngarantizaquelapresentaciónsetrazarádelaformaesperada.TodoslosparámetrosdeunapresentaciónpuedencambiarsepormediodelaspropiedadesylosmétodosdelobjetoLayout.

TamañoyunidadesdepapelAjustedelorigendeimpresiónDefinicióndeláreadetrazadoEstablecimientodelaescaladeimpresiónDefinicióndelaescaladelgrosordelíneaConfiguracióndeldispositivodeimpresión

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>

Tamañoyunidadesdepapel

Laeleccióndeltamañodelpapeldependedeltrazadorconfiguradoparaelsistema.Cadamodelodetrazadortienesupropialistaestándardetamañosdepapeldisponibles.EltamañodelpapeldeunapresentaciónsepuedecambiarpormediodelapropiedadCanonicalMediaName.

TambiénsepuedenespecificarlasunidadesdelapresentaciónmediantelapropiedadPaperUnits.Lapropiedadrequieretresvaloresdeentrada:acInches,acMillimetersoacPixels.Sieltrazadorseencuentraconfiguradoparasalidaráster,deberáprecisareltamañodesalidaenpíxeles.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>

Ajustedelorigendeimpresión

EltrazadocomienzaenlaesquinainferiorizquierdadeláreadeimpresiónindicadaysecontrolaconlapropiedadPlotOrigin.Habitualmente,elorigendetrazadoes(0,0).Noobstante,esposiblecentrareltrazadoenlahojadepapel,asignandoalapropiedadCenterPlotelvalorTRUE.Alcentrarseeltrazadosemodificasuorigen.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>

Definicióndeláreadetrazado

Alpreparareltrazadodeunapresentación,sepuedeespecificareláreadeimpresiónparadeterminarquéseincluiráenlaimpresión.Paraprecisareláreadeltrazado,utilicelapropiedadPlotTypeEstapropiedadrequierelaentradadeunodelossiguientesvalores:

acDisplay

Imprimetodoloqueseencuentraenlapantalladelespaciomodeloactual.Estaopciónnoestádisponiblecuandoseimprimedesdeunapresentacióndeespaciopapel.

acExtents

Imprimetodoloqueseencuentradentrodelcontornodelespacioseleccionado.

acLimits

Imprimetodoloqueestádentrodeloslímitesdelespacioactual.

acView

ImprimelavistaguardadaporlapropiedadViewToPlot.

acWindow

ImprimetodoloqueestáenlaventanaespecificadaenelmétodoSetWindowToPlot.

acLayout

Imprimetodoloqueseencuentradentrodelosmárgenesdeltamañodepapelespecificado.Estaopciónnoseencuentradisponiblecuandoseimprimedesdeelespaciomodelo.

Cuandosecreaunanuevapresentacióndeespaciopapel,laopciónpordefectoesacLayout.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>

Establecimientodelaescaladeimpresión

Porlogeneral,losobjetossedibujanensutamañoreal.Cuandoseimprimeeldibujo,seleatribuyeunaescalaobienseajustalaimagenalapágina.Paraprecisarunaescala,introduzcaunaescaladetrazadopredefinidaopersonalizada.

Paraintroducirunaescalaestándar,primeroestablezcalapropiedadUseStandardScalecomoTRUE.LuegopuedeescribirlaescaladeseadautilizandolapropiedadStandardScale.

Paraescribirunaescalapersonalizada,primerdefinalapropiedadUseStandardScalecomoFALSE.LuegopuedeintroducirlaescalapersonalizadautilizandoelmétodoSetCustomScale.

Durantelafasederevisióndeunavistadedibujo,laaplicacióndelaescalaprecisanosiempreesimportante.PuedeutilizarelvaloracScaleToFitdelapropiedadStandardScaleparaimprimirlapresentaciónconelmáximotamañoquepermitaelformatodelpapel.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>

Definicióndelaescaladelgrosordelínea

Sepuedeajustarlaescaladelosgrosoresdelínea(lineweight)deformaproporcionalalaescaladetrazadoenlaspresentaciones.Normalmente,losgrosoresdelíneaprecisanelanchodelíneadelosobjetostrazados,ysetrazanconesteanchodelíneaindependientementedelaescaladetrazado.Lamayorpartedelasveces,seutilizalaescaladetrazadopordefecto1:1altrazarunapresentación.Sinembargo,sideseatrazarunapresentacióntamañoEquesehayaajustadoaescalaparaunahojadepapeltamañoA,puedeespecificarquelosgrosoresdelíneaseajustenaescalaenproporciónconlanuevaescaladetrazado.

Paraajustarlaescaladelosgrosoresdelínea,asignealapropiedadScaleLineweightselvalorTRUE.Sinodeseaajustarlaescala,asigneaestapropiedadelvalorFALSE.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>

Configuracióndeldispositivodeimpresión

ElnombredeldispositivodetrazadoseespecificaenlapropiedadConfigName.Puededefinirestenombreparacualquiernombrededispositivoválidodesusistema.Sinoseestablecelapropiedad,eltrazadoseenvíaaldispositivopredeterminadodelsistema.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>

Ventanasgráficas

Enelespaciomodelo,lageometríasedibujaenventanasgráficasdispuestasenmosaico(citadasenActiveXAutomationcomoobjetosViewport).Enlapantallasepuedentenerabiertasunaomásdeestasventanas.Cuandohayvariasenpantalla,lasmodificacionesqueserealicenenunaafectanatodaslasdemás.Sinembargo,losparámetrosdeampliación,puntodevista,rejillayresoluciónsípuedendefinirseencadaventanaporseparado.

Enelespaciopapelsetrabajaenventanasgráficasdeespaciopapelflotantes(mencionadasenActiveXAutomationcomoobjetosPViewport)queincluyendistintasvistasdelmodelo.Lasventanasflotantes,querecibenelmismotratamientoquecualquierobjeto,puedendesplazarseovariardetamañoyformaparapresentareldibujocomoconvenga.Tambiénesposibledibujarobjetos,comoanotacionesocuadrosderotulación,directamenteenlavistadeespaciopapelsinqueafectealmodelo.

Paraobtenermásinformaciónacercadeventanasgráficas,consulte“Definicióndelasventanasgráficasdelespaciomodelo”y

“Presentacióndevariasvistasenespaciomodelo”enelManualdelusuario.VentanasflotantesCambioaunapresentacióndeespaciopapelCambioaunapresentacióndeespaciomodeloCreacióndeventanasgráficasdeespaciopapel.

ModificacióndevistasycontenidodelasventanasgráficasAjustedeescaladelasvistasenrelaciónconelespaciopapelAjustedeescaladetiposdelíneadepatronesenespaciopapelUsodeventanasgráficassombreadas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>

Ventanasflotantes

Elmodelonopuedemodificarseenespaciopapel.ParaaccederalmodelodeunobjetoPViewport,utilicelapropiedadActiveSpaceparacambiardelespaciopapelalespaciomodelo.Deestaformapodrátrabajarconelmodelosinperderdevistasupresentaciónglobal.EnobjetosPViewport,lascapacidadesdeediciónycambiodevisualizaciónsoncasilasmismasqueenobjetosViewport.Sinembargo,tienemáscontrolsobrelasvistasindividuales.Porejemplo,sepuedeinutilizarodesactivarcapasenalgunasventanasgráficasdepresentaciónsinquelasotrasseveanafectadas.Sepuedeactivarydesactivarlavisualizacióndeunaventanagráficaentera.Tambiénesposiblealinearvistasentreventanasgráficasyajustarsusescalasenrelaciónconlapresentaciónglobal.

Lailustraciónsiguientemuestralasdiferentesvistasdeunmodeloquesepuedenpresentarenespaciopapel.LasimágenesdeespaciopapelrepresentandistintasvistasdeunobjetoPViewport.Enunadelasvistas,lacapadecotasestáinutilizada.Observequeelcuadrodetítulo,elmarcoylaanotación,dibujadosenespaciopapel,noaparecenenlavistadelespaciomodelo.Además,lacapaquecontieneelmarcodelaventanagráficaestádesactivada.

CuandosetrabajaenunobjetoViewport,lapropiedadActiveSpacedebetenersiempreelvaloracModelSpace.CuandosetrabajaenunobjetoPViewport,lapropiedadActiveSpacepuedetenerelvaloracModelSpaceoacPaperSpace,porloqueesposiblecambiarentreelespaciopapelyel

espaciomodelosegúnlasnecesidades.

ParámetrosdelosobjetosPViewportyViewport,ydelapropiedadActiveSpace

Tipodeventanagráfica

Estado Descripción

PViewport ActiveSpace=acPaperspace

Disposicióndelapresentaciónenventanasgráficasflotantesyposibilidaddeañadircuadrosderotulación,marcosyanotaciones.Laediciónnoafectaalmodelo.

PViewport ActiveSpace=acModelspace

Trabajoconventanasgráficasflotantesparamodificarelmodeloocambiarlasvistas.Sepuedeninutilizarodesactivarcapasdeterminadasenlasdistintasventanasgráficas.

Ventanagráfica

ActiveSpace=acModelspace

Divisióndelapantallaenventanasgráficasenmosaicoparaeditarvariasvistasdelmodelo.

EnActiveXAutomationdeAutoCAD®,lapropiedadActiveSpaceseutilizaparacontrolarlavariabledesistemaTILEMODE.EstablecerThisDrawing.ActiveSpace=acModelSpaceesequivalentea

establecerTILEMODE=comoactivado,yestablecerThisDrawing.ActiveSpace=acPaperSpaceesequivalenteaestablecerTILEMODE=comodesactivado.

Deigualforma,lapropiedadMSpaceequivalealoscomandosMSPACEyPSPACEdeAutoCAD.EstablecerThisDrawing.MSpace=TRUEesigualautilizarelcomandoMSPACE:conmutaaespaciomodelo.EstablecerThisDrawing.MSpace=FALSEesigualqueutilizarelcomandoPSPACE:conmutaaespaciopapel.

Porotrolado,serequiereelusodelmétodoDisplayantesdedefinirTRUEenlapropiedadMSpace.ElmétodoDisplayinicializadeterminadosparámetrosgráficosquedebenfijarseantesdecambiaralespaciomodelo.EnAutoCAD,estosellevaacabo“entrebastidores.”Sinembargo,enlainterfazdeActiveXAutomation,elprogramadoreselresponsabledeestainicialización.

Nota Recuerdeque,parapoderasignarTRUEalapropiedadMSpace,debehaberactivadolavisualizacióndealmenosunobjetoPViewportconelmétodoDisplay.Sinoseactivalavisualización,seproduciráunerrorcuandoseintentedefinirlapropiedadMSpace.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>

Cambioaunapresentacióndeespaciopapel

Desdeelespaciomodelosepuedecambiaralaúltimapresentacióndelespaciopapelactivo.

Paracambiaralaúltimapresentacióndelespaciopapelactivo

1. AsignealapropiedadActiveSpaceelvaloracPaperSpace:

ThisDrawing.ActiveSpace=acPaperSpace

2. ConmutelapropiedadMSpaceaFALSE:

ThisDrawing.MSpace=FALSE

Cuandoseestáenelespaciopapel,AutoCADmuestraeliconodelsistemadecoordenadaspersonales(SCP)delespaciopapelenlaesquinainferiorizquierdadeláreagráfica.Elcursorencruzindicaquesepuedenrealizarcambioseneláreadepresentacióndeespaciopapel(noenlasvistasdelasventanasgráficas).

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>

Cambioaunapresentacióndeespaciomodelo

Desdeelespaciopapelsepuedepasaralasventanasgráficasflotantesoenmosaicodelespaciomodelo.

Paracambiaralasventanasgráficasflotantes

1. UtiliceelmétodoDisplayparainicializarlosparámetrosgráficos:

ThisDrawing.ActivePViewport.DisplayTRUE

2. ConmutelapropiedadMSpaceaTRUE:

ThisDrawing.MSpace=TRUE

Seencontraráenelespaciomodelo,conventanasflotantes.

Nota Debecrearventanasflotantesantesdeintentarcambiaralespaciomodelo.

Paracambiaralasventanasgráficasenmosaico

Paracambiaralasventanasgráficasenmosaico,efectúeestepasoadicional:

AsignealapropiedadActiveSpaceelvaloracModelSpace:

ThisDrawing.ActiveSpace=acModelSpace

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>

Creacióndeventanasgráficasdeespaciopapel.

LasventanasgráficasdeespaciopapelsecreanconelmétodoAddPViewport.Estemétodorequiereunpuntocentralylaanchurayalturadelanuevaventanagráfica.Antesdecrearlaventanagráfica,utilicelapropiedadActiveSpaceparaespecificarelespaciopapelcomoespacioactual(normalmentesehaceestableciendoTILEMODEen0).

DespuésdecrearelobjetoPViewportsepuedenconfigurarlaspropiedadesdelavista,comoladireccióndelavista(propiedadDirection),lalongituddelalenteparavistasenperspectiva(propiedadLensLength)ylapresentacióndelarejilla(propiedadGridOn).Tambiénsepuedencontrolarpropiedadesdelaventanagráfica,comolacapa(propiedadLayer),eltipodelínea(propiedadLinetype)ylaescaladeltipodelínea(propiedadLinetypeScale).

Creaciónyactivacióndeunaventanagráficaflotante

EnesteejemploseconmutaAutoCADaespaciopapel,secreaunaventanaflotante,seconfiguralavistayseactivalaventana.

SubCh9_SwitchToPaperSpace()

'Settheactivespacetopaperspace

ThisDrawing.ActiveSpace=acPaperSpace

'Createthepaperspaceviewport

DimnewVportAsAcadPViewport

Dimcenter(0To2)AsDouble

center(0)=3,25

center(1)=3

center(2)=0

SetnewVport=ThisDrawing.PaperSpace._

AddPViewport(center,6,5)

'Changetheviewdirectionfortheviewport

DimviewDir(0To2)AsDouble

viewDir(0)=1

viewDir(1)=1

viewDir(2)=1

newVport.direction=viewDir

'Enabletheviewport

newVport.DisplayTrue

'Switchtomodelspace

ThisDrawing.MSpace=True

'SetnewVportcurrent

'(notalwaysnecessarybutagoodidea)

ThisDrawing.ActivePViewport=newVport

'ZoomExtentsinmodelspace

ZoomExtents

'Turnmodelspaceeditingoff

ThisDrawing.MSpace=False

'ZoomExtentsinpaperspace

ZoomExtents

EndSub

Elordendelospasosdelcódigodeesteejemploesmuyimportante.Comonorma,lassentenciasdebenestablecerseenelmismoordenenelqueseharíadesdelalíneadecomandodeAutoCAD.Lasúnicasaccionesinesperadassonladefinicióndelavistaylaactivacióndelaventanagráfica.

Nota Paraconfiguraromodificaraspectosdelavista(dirección,distanciafocal,etc.),elmétodoDisplaydelobjetoViewportdebeestardesactivado(FALSE);paraestablecerunaventanagráficacomoactual,elmétodoDisplaydebeestaractivado(TRUE).

Creacióndecuatroventanasflotantes

Enesteejemploseamplíaelejemplode"Crearyactivarunaventanagráficaflotante"paracrearcuatroventanasflotantesyestablecersusvistasensuperior,frontal,derechaeisométrica,respectivamente.Laescaladelasvistasseajustaalamitaddelaescaladelespaciopapel.Paraasegurarsedequeestasventanastienenalgoquemostrar,puedecrearunaesferasólida3Dantesdeprobarelejemplo.

SubCh9_FourPViewports()

DimtopVport,frontVportAsAcadPViewport

DimrightVport,isoVportAsAcadPViewport

Dimpt(0To2)AsDouble

DimviewDir(0To2)AsDouble

ThisDrawing.ActiveSpace=acPaperSpace

ThisDrawing.MSpace=True

'TaketheexistingPViewportandmakeitthetopVport

pt(0)=2.5:pt(1)=5.5:pt(2)=0

SettopVport=ThisDrawing.ActivePViewport

'NoneedtosetDirectionfortopview

topVport.center=pt

topVport.width=2.5

topVport.height=2.5

topVport.DisplayTrue

ThisDrawing.MSpace=True

ThisDrawing.ActivePViewport=topVport

ZoomExtents

ZoomScaled0.5,acZoomScaledRelativePSpace

'CreateandsetupfrontVport

pt(0)=2.5:pt(1)=2.5:pt(2)=0

SetfrontVport=ThisDrawing.PaperSpace._

AddPViewport(pt,2.5,2.5)

viewDir(0)=0:viewDir(1)=1:viewDir(2)=0

frontVport.direction=viewDir

frontVport.DisplayacOn

ThisDrawing.MSpace=True

ThisDrawing.ActivePViewport=frontVport

ZoomExtents

ZoomScaled0.5,acZoomScaledRelativePSpace

'CreateandsetuprightVport

pt(0)=5.5:pt(1)=5.5:pt(2)=0

SetrightVport=ThisDrawing.PaperSpace._

AddPViewport(pt,2.5,2.5)

viewDir(0)=1:viewDir(1)=0:viewDir(2)=0

rightVport.direction=viewDir

rightVport.DisplayacOn

ThisDrawing.MSpace=True

ThisDrawing.ActivePViewport=rightVport

ZoomExtents

ZoomScaled0.5,acZoomScaledRelativePSpace

'CreateandsetupisoVport

pt(0)=5.5:pt(1)=2.5:pt(2)=0

SetisoVport=ThisDrawing.PaperSpace._

AddPViewport(pt,2.5,2.5)

viewDir(0)=1:viewDir(1)=1:viewDir(2)=1

isoVport.direction=viewDir

isoVport.DisplayacOn

ThisDrawing.MSpace=True

ThisDrawing.ActivePViewport=isoVport

ZoomExtents

ZoomScaled0.5,acZoomScaledRelativePSpace

'Finish:Performaregeninallviewports

ThisDrawing.RegenTrue

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>

Modificacióndevistasycontenidodelasventanasgráficas

ParacambiarlavistadeunobjetoViewport,debeencontrarseenelespaciomodeloyteneractivalaventanagráfica.

Paraeditarundibujoenunaventanagráficaflotante

1. Enelespaciomodelo,utilicelapropiedadActiveViewportparaactivarlaventanagráfica:

Thisdrawing.ActiveViewport=MyViewportObject

2. Modificacióndeldibujo.

Tambiénpuedecrearobjetos,comoanotaciones,cotasocuadrosderotulación,enelespaciopapel.Noobstante,esnecesarioasignaralapropiedadActiveSpaceelvalorFALSEyactivarelespaciopapelpormediodelapropiedadMSpace.Losobjetosquesecreanenespaciopapelsólosonvisiblesenelespaciopapel.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>

Ajustedeescaladelasvistasenrelaciónconelespaciopapel

Antesdeimprimir,sepuedenestablecerfactoresdeescaladeampliaciónexactosparacadaseccióndeldibujo.Alajustarlaescaladelasvistasenrelaciónconelespaciopapel,seestableceunaescalasistemáticaparacadaunadelasvistas.Porejemplo,lasiguienteilustraciónmuestraunavistaenespaciopapelconvariasventanasgráficas,enlasqueseofrecenvistasdistintasaescalasdiferentes.Paraajustarlaescaladeldibujotrazadoconprecisión,esimprescindiblequeseajustenlasescalasdelasvistasenrelaciónconelespaciopapel,ynoenfuncióndelavistaanteriornideltamañorealdelmodelo.

Cuandosetrabajaenespaciopapel,elfactordeescalaindicalarelaciónentreeltamañodeldibujotrazadoyeltamañorealdelmodeloexhibidoenlasventanasgráficas.Paraobtenerestaescala,sedividenlasunidadesdeespaciopapelporlasunidadesdeespaciomodelo.Paraundibujoenescaladeuncuarto,porejemplo,seespecificaunfactordeescaladeunaunidaddeespaciopapelporcuatrounidadesdeespaciomodelo(1:4).

UtiliceelmétodoZoomScaledparaatribuirunaescalaalasventanasgráficasenrelaciónconlasunidadesdeespaciopapel.Estemétodorequieretresvaloresdeentrada:laventanagráficaquevamosaescalar,elfactordeescalaycómoqueremosqueseapliquedichofactor.Estetercervaloresoptativoydeterminacómoseaplicalaescala:

Enrelaciónconloslímitesdeldibujo

Enrelaciónconlavistaactual

Enrelaciónconlasunidadesdelespaciopapel

Paraatribuirunaescalaaunavistaenrelaciónconlasunidadesdeespaciopapel,introduzcalaconstanteacZoomScaled -RelativePSpaceparaestevalor.

Comomuestranlasilustraciones,unaescalade2enrelaciónconlasunidadesdeespaciopapel,laescaladelaventanagráficaaumentaaldobleeltamañodelasunidadesdeespaciopapel.Unaescalade0,5relativaalasunidadesdeespaciopapelreducealamitadeltamañodelasunidadesdeespaciopapel.Elmodeloseimprimealamitaddesutamañoreal.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>

Ajustedeescaladetiposdelíneadepatronesenespaciopapel

Enespaciopapel,haydosformasdeatribuirescalaauntipodelínea.Laescalasepuedebasarenlasunidadesdedibujodelespacioenquesecreóelobjeto(modeloopapel),opuedetratarsedeunaescalauniformebasadaenunidadesdeespaciopapel.Laescaladetipodelíneatambiénpuedeserunaescalauniformebasadaenunidadesdeespaciopapel.LavariabledesistemaPSLTSCALEpermitemantenerlamismaescaladelostiposdelíneaparalosobjetosmostradosadiferentesescalasendistintasventanasgráficas.Afectatambiénalapresentacióndelaslíneasenlasvistas3D.

Enlasiguienteilustraciónsehaajustadouniformementeenespaciopapellaescaladelostiposdelíneautilizadosparacrearlaslíneasenespaciomodelo,mediantelavariabledesistemaPSLTSCALE.Observequeeltipodelíneamuestralamismaescalaenlasdosventanasgráficas,inclusoenaquellosobjetosquetienendistintosfactoresdeampliación.

ElmétodoSetVariablepermiteajustarelvalordelavariabledesistemaPSLTSCALE.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>

Usodeventanasgráficassombreadas

Sieldibujocontienecaras3D,mallas,objetosdeextrusión,superficiesosólidos,sepuedetrazardesdeelespaciopapelmediantelasopcionesComosemuestra,Estructuraalámbrica,OcultoyModelizado.Esposibleobtenerunavistapreliminardelasventanassombreadasymodelizadas,trazarlaseimprimirlasenarchivoconsombreadoymodelizadocompletos.

Paraestablecerunaopciónparatrazarventanasgráficassombreadasenelespaciopapel,utilicelapropiedadShadePlotdelobjetoPViewport.

Nota Paraocultarlíneasaltrazarventanasgráficasdelespaciomodelo(objetosViewport),utilicelapropiedadPlotHiddendelobjetoLayout.Estapropiedadrequiereunvalorbooleano:TRUEparaquitarlaslíneasocultas,FALSEparadibujarlas.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>

Impresióndedibujos

Losdibujossepuedenimprimirdirectamente,talcomosevenenelespaciomodelo,osepuedenprepararprimeroenunapresentacióndeespaciopapel.Sueleserpreferibletrazardesdeelespaciomodelocuandosedeseaverocomprobareldibujoantesdecrearunapresentacióndelespaciopapel.Unavezqueelmodeloestélisto,sepuedepreparareimprimirunapresentacióndeespaciopapel.

Nota LavariabledesistemaBACKGROUNDPLOTdebeestablecerseen0paraqueunarchivodecomandospuedatrazarvariostrabajos.

EltrazadoimplicatrabajarcondosobjetosActiveXAutomation:elobjetoLayoutyelobjetoPlot.ElobjetoLayoutcontienelaconfiguracióndelostrazadoresdelapresentación.ElobjetoPlotcontienelosmétodosypropiedadesqueinicianysupervisanunasecuenciadetrazado.

RealizacióndeunaimpresiónbásicaImpresióndesdeelespaciomodeloImpresióndesdeelespaciopapel

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Impresióndedibujos>

Realizacióndeunaimpresiónbásica

DesdeelobjetoPlotsepuedenutilizarlossiguientesmétodosypropiedades:

PlotToFile

Imprimeenunarchivo.

PlotToDevice

Trazaenunaimpresoraotrazador.

DisplayPlotPreview

Muestraunavistapreliminardeltrazadoespecificado.

QuietErrorMode

Conmutaelmododeerrorsilenciosoparainformardeerroresdetrazado.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Impresióndedibujos>

Impresióndesdeelespaciomodelo

Normalmente,cuandosetrazaundibujogrande,comoelplanodeunaplanta,sepuedeprecisarunaescalaparaconvertirlasunidadesrealesdeldibujoenpulgadasomilímetrosdetrazado.Sinembargo,cuandosetrazadesdeelespaciomodelo,lasopcionespordefectoqueseutilizansinosehanespecificadootrasincluyentrazaralaimpresoradelsistema,trazarlavisualizaciónactual,ajustarescalaalpapel,ydesfase0,0.Paramodificarlosparámetrosdetrazado,cambielaspropiedadesdelobjetoLayoutasociadoconelespaciomodelo.

Impresióndelaextensióndeunapresentacióndelespaciomodeloactivo

Enesteejemplo,enprimerlugarsecompruebaqueelespacioactivoeselespaciomodelo.Acontinuaciónestablecevariosconfiguracionesdetrazadores.Porúltimo,eltrabajoseenvíaparasutrazadomedianteelmétodoPlotToDevice.

SubCh9_PrintModelSpace()

'Verifythattheactivespaceismodelspace

IfThisDrawing.ActiveSpace=acPaperSpaceThen

ThisDrawing.MSpace=True

ThisDrawing.ActiveSpace=acModelSpace

EndIf

'Settheextentsandscaleoftheplotarea

ThisDrawing.ModelSpace.Layout.PlotType=acExtents

ThisDrawing.ModelSpace.Layout._

StandardScale=acScaleToFit

'Setthenumberofcopiestoone

ThisDrawing.Plot.NumberOfCopies=1

'Initiatetheplot

ThisDrawing.Plot.PlotToDevice

EndSub

ElnombredeldispositivosepuedeespecificarmediantelapropiedadConfigName.EstedispositivosepuedereemplazarenelmétodoPlotToDevicesiseespecificaunarchivoPC3.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Impresióndedibujos>

Impresióndesdeelespaciopapel

Sepuedetrazarunapresentacióndelespaciopapel.Esposibletrazarlapresentaciónactiva,comoseexplicaen"Trazardesdeelespaciomodelo",oespecificarelnombredelapresentaciónquesedeseatrazar.

¿Comentarios?

<$nopage>imágenesbitonales.<$nopage>bloque(referencias):<$nopage>BlockReference(objeto):<$nopage>refx.

ManualdeldesarrolladordeActiveXyVBA>

Técnicasavanzadasdedibujoyorganización

Amedidaqueganeexperiencia,podráaprovecharlasdiversasfuncionesavanzadasdeAutoCADparaperfeccionarsusaplicaciones.

Puedeincluirimágenesrástereneldibujo,comofotografíasdigitales,aéreasyporsatélite,asícomoimágenesmodelizadasporordenador.Paraobtenerinformaciónsobrelasimágenesráster,ademásdeloexpuestoenestasección,consulteelManualdelusuario.

Ademásdemejorarlaimagenvisualdeldibujo,AutoCADproporcionavariasfuncionesparaayudarleaorganizardatos,loquepermiteampliaraúnmáslainteligenciadelosobjetosdeldibujo.

TrabajoconimágenesrásterUtilizacióndebloquesyatributosUtilizacióndereferenciasexternasAsignaciónyrecuperacióndedatosextendidos

¿Comentarios?

<$nopage>imágenesbitonales.

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>

Trabajoconimágenesráster

ConAutoCAD®sepuedenañadirimágenesrásteralosdibujosvectorialesdeAutoCADy,acontinuación,verytrazarelarchivoresultante.

EnlazaryajustarlaescaladeunaimagenrásterGestióndeimágenesrásterModificarimágenesycontornosdeimagenDelimitacióndeimágenes

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>

Enlazaryajustarlaescaladeunaimagenráster

Lasimágenespuedencolocarseenunarchivodedibujo,peronosonrealmentepartedelarchivo.LaimagensevinculaalarchivodedibujoatravésdeunnombrederutaodeunIDdedocumentodegestióndedatos.Lasrutasdeimágenesvinculadassepuedencambiaroeliminarencualquiermomento.Paraenlazarunaimagen,secreaunobjetoRastereneldibujoutilizandoelmétodoAddRaster.Estemétodorequierecuatrovaloresdeentrada:elnombredelarchivodeimagenqueenlazar,elpuntodeinsercióneneldibujoparacolocarla,elfactordeescalayelánguloderotación.RecuerdequeelobjetoRasterrepresentaunvínculoindependientealaimagen,nolaimagenensí.

Unavezquehayaenlazadounaimagen,puedevolveraenlazarlavariasveces,creandounnuevoobjetoRasterparacadaenlace.Cadaenlacetienesupropiocontornoderecorteysupropiaconfiguracióndebrillo,contraste,difuminaciónytransparencia.Unasolaimagenpuedecortarseenmúltiplespiezasyreorganizarseindependientementeeneldibujo.

PuededefinirelfactordeescaladelaimagenrásteralcrearelobjetoRasterdeformaquelageometríadelaimagencoincidaconlaescaladelageometríacreadaeneldibujodeAutoCAD.Cuandoseleccionaunaimagenparaenlazar,laimagenseinsertaconunfactordeescalade1unidaddemedidadeimagena1unidaddemedidadeAutoCAD.Paradefinirelfactordeescaladelaimagen,necesitasaberlaescaladelageometríadelaimagen,ynecesitasaberquéunidaddemedida(pulgadas,pies,etc.)deseautilizarparadefinir1unidaddemedidadeAutoCAD.ElarchivodeimagendebecontenerinformaciónderesoluciónquedefinalosPPP(puntosporpulgada)yelnúmerodepíxelesdelaimagen.

Siunaimagentieneinformaciónderesolución,AutoCADlacombinaconelfactordeescalayconlaunidaddemedidadeAutoCADqueustedproporcioneparaajustarlaescaladelaimageneneldibujo.Porejemplo,supongamosquela

imagenrásteresunplanotécnicodigitalizadoenelquelaescalaesde1pulgadaiguala50pies,o1:600,yqueeldibujodeAutoCADestádefinidoparaqueunaunidadrepresenteunapulgada.Paradefinirelfactordeescaladelaimagendebeescribir600paraelparámetroScaleFactordelmétodoAddRaster.AutoCADinsertaentonceslaimagenaunaescalaquehagacorresponderlageometríadelaimagenconlageometríavectorialdeldibujo.

Nota Sinosedefineningunainformaciónderesoluciónenelarchivodeimagenenlazado,AutoCADcalculalaanchuradelaimagenoriginalcomounaunidad.Despuésdelainserción,laanchuradelaimagenenunidadesdeAutoCADesigualalfactordeescala.

Enlazarunaimagenráster

Esteejemplocreaunacotaradialenespaciomodelo.Esteejemploutilizaelarchivowatch.jpg,queseencuentraeneldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariableimageName.

SubCh10_AttachingARaster()

DiminsertionPoint(0To2)AsDouble

DimscalefactorAsDouble

DimrotationAngleAsDouble

DimdwgNameAsString

DimrasterObjAsAcadRasterImage

imageName="C:/ProgramFiles/AutoCADDirectory/sample/watch.jpg'

insertionPoint(0)=5

insertionPoint(1)=5

insertionPoint(2)=0

scalefactor=2

rotationAngle=0

OnErrorGoToERRORHANDLER

'Attachtherasterimageinmodelspace

SetxlineObj=ThisDrawing.ModelSpace.AddXLine_

(imageName,insertionPoint,_

scalefactor,rotationAngle)

ZoomAll

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>

Gestióndeimágenesráster

Puedegestionarelnombredeimagenráster,delarchivoysurutautilizandolaspropiedadesdelobjetoRaster.

CambioderutasdearchivodeimagenNombrarimágenes

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Gestióndeimágenesráster>

Cambioderutasdearchivodeimagen

LarutayelnombredearchivopuedenconsultarseocambiarseutilizandolapropiedadImageFile.LarutadefinidaporestapropiedadeslarutarealenqueAutoCADbuscalaimagen.

SiAutoCADnopuedeencontrareldibujo(porejemplo,sihamovidoelarchivoaundirectoriodiferentealqueguardóconlapropiedadImageFile),eliminalainformaciónderutarelativaoabsolutadelnombre(porejemplo,\images\tree.tgaoc:\myproject\images\tree.tgaseconvierteentree.tga)ybuscalasrutasquehadefinidousandoelmétodoSetProjectFilePathenelobjetoPreferences.Sieldibujonoestásituadoenlasrutas,vuelveaintentarconlaprimerarutadebúsqueda.

PuedeeliminarlarutadelnombredelarchivooespecificarunarutarelativaredefiniendolapropiedadImageFile.

ElcambioderutaenlapropiedadImageFilenoafectaalaconfiguraciónderutadebúsquedadelosarchivosdelproyecto.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Gestióndeimágenesráster>

Nombrarimágenes

Losnombresdeimagennosonnecesariamentelosmismosquelosnombresdearchivo.Cuandoenlazaunaimagenaundibujo,AutoCADutilizaelnombredearchivosinlaextensióndearchivocomonombredeimagen.Puedecambiarelnombredelaimagensinqueestoafectealnombredelarchivo.

ElarchivodeimagenserepresentamediantelapropiedadImageFileenelobjetoRaster.ElcambiodelapropiedadImageFilecambiarálaimagendeldibujo.ElnombredelaimagenesrepresentadoporlapropiedadName,yelcambiodelapropiedadNamecambiarásolamenteelnombredelaimagen,noelarchivoasociadoaella.

¿Comentarios?

<$nopage>imágenesbitonales.

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>

Modificarimágenesycontornosdeimagen

Todaslasimágenestienenuncontornodeimagen.Cuandoenlazaunaimagenaundibujo,elcontornodeimagenheredalaconfiguracióndepropiedadesactual,incluyendoelcolor,lacapa,eltipodelíneaylaescaladetipodelínea.Silaimagenesunaimagenbitonal,elcolordelaimagenydelcontornosoniguales.

AligualqueconotrosobjetosdeAutoCAD,puedemodificarlasimágenesysuspropiedadesdecontorno.Porejemplo,puede:

Mostraruocultarelcontornodeimagen

Modificarlacapa,colordecontornoytipodelíneadelaimagen

Cambiarlaubicacióndelaimagen

Ajustarlaescaladelaimagen,girarlaycambiarsualturayanchura.

Hacerlaimagenvisibleoinvisible

Cambiarlatransparenciadelaimagen

Cambiarelbrillodelaimagen,elcontrasteyladifuminación

ModificarlacalidadylavelocidaddevisualizacióndelaimagenVisualizaciónyocultacióndeloscontornosdelaimagenModificacióndelacapa,elcolordelcontornoyeltipodelíneadelcontornodelaimagenModificacióndelaescala,rotación,posición,anchurayalturadelaimagenCambiodelavisibilidaddelaimagenModificacióndelcolorylatransparenciadeimágenesbitonales

Ajustedelbrillo,elcontrasteyeldifuminadodelaimagen

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>

Visualizaciónyocultacióndeloscontornosdelaimagen

Conellosegarantizaquelaimagennosemuevaomodifiqueporerror,yseevitaeltrazadoovisualizacióndelcontorno.Cuandoloscontornosdelaimagenestánocultos,lasimágenesdelimitadassiguenvisualizándosehastaloslímitesespecificadosporelcontornoysóloesteúltimoseveafectado.Lavisualizaciónyocultacióndeloscontornosdelaimagenafectaatodaslasimágenesenlazadasaldibujo.

Paramostraruocultarloscontornosdeunaimagen,utilicelapropiedadClippingEnabled.

Nota Estapropiedadsoloafectaalcontornodelaimagen.Paraveruncambioenlaimagenalactivarodesactivarestapropiedad,observedetenidamenteelpequeñocontornoquerodealaimagen.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>

Modificacióndelacapa,elcolordelcontornoyeltipodelíneadelcontornodelaimagen

Elcoloryeltipodelíneadeloscontornosdeunaimagen,asícomolacapadedondeestaseencuentra,puedencambiarseconlassiguientespropiedades:

Layer

Especificalacapadelaimagen.

Color

Especificaelcolordelcontornodelaimagen.

Linetype

Especificaeltipodelíneadelaimagen.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>

Modificacióndelaescala,rotación,posición,anchurayalturadelaimagen

Laescala,rotación,posición,anchurayalturadeunaimagensepuedencambiarconlossiguientesmétodosypropiedades:

ScaleEntity

Asignaunaescalaalaimagen

Rotate

Rotalaimagen.

Origin

Especificalaposicióndelaimagen.

Width

Especificalaanchuradelaimagenenpíxeles.

Height

Especificalaalturadelaimagenenpíxeles.

ImageWidth

Especificalaanchuradelaimagenenunidadesdebasededatos.

ImageHeight

Determinalaalturadelaimagenenunidadesdebasededatos

ShowRotation

Determinasilaimagenrástersemuestragirada

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>

Cambiodelavisibilidaddelaimagen

Lavisibilidaddelasimágenesafectaalavelocidadderedibujoalocultarimágenesenlasesióndedibujoactual.Lasimágenesocultasnosemuestrannisetrazan,sólosemuestraelcontornodeldibujo.Paraocultarimágenes,asignealapropiedadImageVisibilityelvalorFALSE.Paravolveravisualizarlasimágenes,asignealapropiedadImageVisibilityelvalorTRUE.

¿Comentarios?

<$nopage>imágenesbitonales.

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>

Modificacióndelcolorylatransparenciadeimágenesbitonales

Lasimágenesrásterbitonalessonimágenesqueconstanúnicamentedeuncolordeprimerplanoyuncolordefondo.Alenlazarunaimagenbitonal,lospíxelesdeprimerplanodelaimagenheredanlosparámetrosdecapaactualesdelcolor.Ademásdelasmodificacionesquepuedenefectuarseencualquierimagenenlazada,lasimágenesbitonalespuedenmodificarsemedianteelcambiodelcolordeprimerplanoylaactivaciónodesactivacióndelatransparenciadelfondo.

Nota Lasimágenesbitonalesyloscontornosdeimágenesbitonalessiempretienenelmismocolor.

Paracambiarelcolordefondodeunaimagenbitonal,utilicelapropiedadColor.Paraactivarodesactivarlatransparencia,utilicelapropiedadTransparency.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>

Ajustedelbrillo,elcontrasteyeldifuminadodelaimagen

Esposibleajustarelbrillo,elcontrasteyeldifuminadodelasimágenesdeAutoCADparasuvisualizaciónenpantallayparasuimpresión,sinalterarelarchivodelaimagenrásteroriginal.

Utilicelassiguientespropiedadesparaajustarelbrillo,elcontrasteyeldifuminado:

Brightness

Especificaelniveldebrillodeunaimagen.

Contrast

Especificaelgradodecontrastedeunaimagen.

Fade

Especificalaintensidaddedifuminadodeunaimagen.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>

Delimitacióndeimágenes

Ladelimitacióndelasimágenespermitedefinirlazonadelaimagenquesedeseevereimprimir.Elcontornodelimitadordebeserunpolígono2Dounrectánguloconlosvérticesdentrodelcontornodelaimagen.Variascopiasdelamismaimagenpuedentenerdistintoscontornos

Paradelimitarunaimagen:

1. ActiveloscontornosdelaimagenconlapropiedadClippingEnabled

2. EspecifiqueelcontornodelimitadoryrealiceladelimitaciónconelmétodoClipBoundary.Estemétodorequiereunvalordeentrada:unamatrizvariantedeunsistemadecoordenadas2Dqueespecifiqueelcontornodelimitadordeunaimagenráster.ModificacióndelcontornodelimitadorVisualizaciónyocultacióndelcontornodelimitador

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Delimitacióndeimágenes>

Modificacióndelcontornodelimitador

Paramodificaruncontornodelimitadorexistente,sencillamenterepitalospasosanteriores.Seborraráelcontornoantiguoyapareceráelnuevoensulugar.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Delimitacióndeimágenes>

Visualizaciónyocultacióndelcontornodelimitador

Lasimágenesdelimitadaspuedenmostrarseconelcontornodelimitador,obien,puedeocultarseestecontornoymostrarloscontornosoriginalesdelaimagen.Paraocultaruncontornodelimitadorymostrarlaimagenoriginal,asignealapropiedadClippingEnabledelvalorFALSE.Paravisualizarlaimagendelimitada,establezcalapropiedadClippingEnabledenTRUE.

Delimitacióndelcontornodelimitadordeunaimagenráster

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Delimitacióndeimágenes>Visualizaciónyocultacióndelcontornodelimitador>

Delimitacióndelcontornodelimitadordeunaimagenráster

Esteejemplocreaunacotaradialenespaciomodelo.Despuésdelimitalaimagenbasándoseenuncontornodelimitador.Esteejemploutilizaelarchivodowntown.jpg,queseencuentraeneldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariableimageName.

SubCh10_ClippingRasterBoundary()

DiminsertionPoint(0To2)AsDouble

DimscalefactorAsDouble

DimrotationAngleAsDouble

DimdwgNameAsString

DimrasterObjAsAcadRasterImage

imageName="C:\AutoCAD\sample\downtown.jpg"

insertionPoint(0)=5

insertionPoint(1)=5

insertionPoint(2)=0

scalefactor=2

rotationAngle=0

OnErrorGoToERRORHANDLER

'Createsarasterimageinmodelspace

SetxlineObj=ThisDrawing.ModelSpace.AddXLine_

(imageName,insertionPoint,_

scalefactor,rotationAngle)

ZoomAll

'Establishtheclipboundarywithanarrayofpoints

DimclipPoints(0To9)AsDouble

clipPoints(0)=6:clipPoints(1)=6.75

clipPoints(2)=7:clipPoints(3)=6

clipPoints(4)=6:clipPoints(5)=5

clipPoints(6)=5:clipPoints(7)=6

clipPoints(8)=6:clipPoints(9)=6,75

'Cliptheimage

rasterObj.ClipBoundaryclipPoints

'Enablethedisplayoftheclip

rasterObj.ClippingEnabled=True

ThisDrawing.RegenacActiveViewport

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

<$nopage>bloque(referencias):<$nopage>BlockReference(objeto):

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>

Utilizacióndebloquesyatributos

AutoCADdisponedevariascaracterísticasqueayudanagestionarlosobjetosdeldibujo.Losbloquesfacilitanlaorganizaciónymanipulacióndevariosobjetoscomounsolocomponente.Losatributosasocianelementosdeinformaciónconlosbloquesdeldibujo;porejemplo,númerosdereferenciadepiezasyprecios.

ConlasreferenciasexternasdeAutoCAD,orefX,sepuedensuperponeroenlazardibujosenterosconeldibujoactual.Alabrireldibujoactual,cualquiermodificaciónefectuadaeneldibujoalquesehacereferenciaquedaráreflejadaeneldibujoactual.

UtilizacióndebloquesUtilizacióndeatributos

¿Comentarios?

<$nopage>bloque(referencias):<$nopage>BlockReference(objeto):

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>

Utilizacióndebloques

Unbloqueesunacoleccióndeobjetosquepuedenagruparseparaformarunúnicoobjetoounareferenciadebloque.Lasreferenciasdebloquedelosdibujospuedeninsertarse,ajustarsuescalaygirarse.Tambiénpuededescomponerlareferenciaabloqueensusobjetos,modificarlosydefinirdenuevoelbloque.AutoCADactualizatodaslasfuturasyactualescopiasdelareferenciadebloquebasándoseenladefinicióndelbloque.

Losbloquessepuedendefinirapartirdeobjetosdibujadosoriginalmenteendiferentescapascondistintoscoloresytiposdelínea.Sepuedeconservarlainformaciónsobrelacapa,elcoloryeltipodelíneadeunbloque.Estopermitequecadavezqueseinserteunbloque,losobjetosdelmismosedibujenensucapaconelcolorytipodelíneaoriginales.

Paraobtenermásinformaciónacercadelusodebloques,véase“Creacióneinsercióndesímbolos(bloques)”enelManualdelusuario.

DefinicióndebloquesInsercióndebloquesDescomposicióndereferenciasdebloqueRedefinicióndebloques

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndebloques>

Definicióndebloques

Paracrearunbloquenuevo,utiliceelmétodoAdd.Estemétodorequieredosvaloresdeentrada:laubicacióndeldibujoendondeseañadeelbloqueyelnombredelbloquequesecrea.

Unavezcreado,selepuedenañadirotrosobjetosgeométricosuotrobloque.Después,puedeinsertarunainstanciadelbloqueeneldibujo.Albloquequeseinsertaseleconocecomoobjetodereferenciadebloque.

TambiénpuedecrearunbloqueutilizandoelmétodoWBlockparaagruparobjetosenunarchivodedibujoindependiente.Elarchivodedibujopuedeentoncesutilizarsecomodefinicióndebloqueparaotrosdibujos.AutoCADconsideracomobloquecualquierdibujoqueseinserteenotrodibujo.

Paraobtenermásinformaciónacercadeladefinicióndebloques,véase“Creacióndebloques”enelManualdelusuario.

¿Comentarios?

<$nopage>bloque(referencias):

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndebloques>

Insercióndebloques

SepuedeutilizarelmétodoInsertBlockparainsertarbloquesodibujoscompletoseneldibujoactual.ElmétodoInsertBlockrequiereseisvalorescomoentrada:elpuntodeinserción,elnombredelbloqueodibujequeseinserta,elfactordeescalaX,elfactordeescalaY,elfactordeescalaZ,yelánguloderotación.

LosdibujosinsertadosenotrosdibujossonconsideradosporAutoCADcomoreferenciasabloques.Lassiguientesinsercionesrefierenaladefinicióndebloque(quecontieneladescripcióngeométricadelbloque)conparámetrosdeposición,escalayrotacióndistintos.Sisemodificaeldibujooriginalunavezinsertado,lasmodificacionesnotendránefectoenelbloqueinsertado.Siquierequeelbloqueinsertadoreflejelasmodificacionesrealizadaseneldibujooriginal,puededefinirdenuevoelbloquemediantelareinsercióndeldibujooriginal.ParaellopuedeutilizarelmétodoInsertBlock.

Siinsertaundibujoamododebloque,elbloqueadquiereautomáticamenteelnombredelarchivo.Despuésdecrearelbloque,puedecambiarsunombremediantelapropiedadName.

Pordefecto,elpuntobaseparalainsercióndedibujosenAutoCADtienelascoordenadas(0,0,0).Sepuedemodificarelpuntobasedeundibujo,siabreeldibujooriginalespecificaunpuntobasedeinsercióndiferenteparalavariabledesistemaINSBASEconelmétodoSetVariable.AutoCADemplearáelnuevopuntobaselapróximavezqueinserteeldibujo.

SieldibujoinsertadocontieneobjetosPaperSpace,dichosobjetosnoseincluyenenladefinicióndebloquedeldibujoactual.Parausarlosobjetosdibujadosenespaciopapelenotrosdibujos,abraeldibujooriginalydefinalosobjetosdelespaciopapelcomounbloqueconelmétodoAdd.Lainsercióndeundibujoenotrosepuederealizartantoenespaciopapelcomoenespaciomodelo.

Unareferenciaabloquenopuedeiterarseparaencontrarlosobjetosoriginalesquelacomponen.Sinembargo,sepuedeiterarladefinicióndebloqueoriginal,osepuededescomponerlareferenciaabloqueensuscomponentesoriginales.

TambiénsepuedeinsertarunamatrizdebloquesconelmétodoAddMInsertBlock.Estemétodonoinsertaunbloqueeneldibujo,comohaceInsertBlock,sinoqueinsertaunamatrizdelbloqueespecificado.EstemétododevuelveunobjetoMInsertBlock.

Paraobtenermásinformaciónacercadelainsercióndebloques,véase“Insercióndebloques”enelManualdelusuario.

Definicióneinsercióndeunbloqueenundibujo

Esteejemplodefineunbloqueyañadeuncírculoasudefinición.Despuésseinsertaelbloqueenundibujo,comoreferenciadebloque.

SubCh10_InsertingABlock()

'Definetheblock

DimblockObjAsAcadBlock

DiminsertionPnt(0To2)AsDouble

insertionPnt(0)=0

insertionPnt(1)=0

insertionPnt(2)=0

SetblockObj=ThisDrawing.Blocks.Add_

(insertionPnt,"CircleBlock")

'Addacircletotheblock

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=0

center(1)=0

center(2)=0

radius=1

SetcircleObj=blockObj.AddCircle(center,radius)

'Inserttheblock

DimblockRefObjAsAcadBlockReference

insertionPnt(0)=2

insertionPnt(1)=2

insertionPnt(2)=0

SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_

(insertionPnt,"CircleBlock",1#,1#,1#,0)

ZoomAll

MsgBox"Thecirclebelongsto"&blockRefObj.ObjectName

EndSub

Nota Unavezinsertado,elSCUdelarchivoexternosealineaenparaleloconelplanoXYdelsistemadecoordenadaspersonales(SCP)deldibujoactual.Deestaforma,unbloqueprocedentedeunarchivoexternopuedeinsertarseconcualquierorientaciónenelespaciopreviadefinicióndelascoordenadasSCP.

¿Comentarios?

<$nopage>BlockReference(objeto):

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndebloques>

Descomposicióndereferenciasdebloque

UtiliceelmétodoExplodepararomperunareferenciadebloque.Conellopodrámodificarelbloque,oañadiroborrarlosobjetosquelodefinen.

Presentacióndelosresultadosdeladescomposicióndeunareferenciadebloque

Esteejemplocreaunbloqueyañadeuncírculoasudefinición.Despuésseinsertaelbloqueenundibujo,comoreferenciadebloque.Acontinuaciónsedescomponelareferenciadebloqueysemuestranlosobjetosresultantesdeesteprocesojuntoconsutipodeobjeto.

SubCh10_ExplodingABlock()

'Definetheblock

DimblockObjAsAcadBlock

DiminsertionPnt(0To2)AsDouble

insertionPnt(0)=0

insertionPnt(1)=0

insertionPnt(2)=0

SetblockObj=ThisDrawing.Blocks.Add_

(insertionPnt,"CircleBlock")

'Addacircletotheblock

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=0

center(1)=0

center(2)=0

radius=1

SetcircleObj=blockObj.AddCircle(center,radius)

'Inserttheblock

DimblockRefObjAsAcadBlockReference

insertionPnt(0)=2

insertionPnt(1)=2

insertionPnt(2)=0

SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_

(insertionPnt,"CircleBlock",1#,1#,1#,0)

ZoomAll

MsgBox"Thecirclebelongsto"&blockRefObj.ObjectName

'Explodetheblockreference

DimexplodedObjectsAsVariant

explodedObjects=blockRefObj.Explode

'Loopthroughtheexplodedobjects

DimIAsInteger

ForI=0ToUBound(explodedObjects)

explodedObjects(I).Color=acRed

explodedObjects(I).Update

MsgBox"ExplodedObject"&I&":"_

&explodedObjects(I).ObjectName

explodedObjects(I).Color=acByLayer

explodedObjects(I).Update

Next

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndebloques>

Redefinicióndebloques

PararedefinirunbloquesepuedeutilizarcualquieradelosmétodosypropiedadesdelobjetoBlock.Alredefinirunbloque,todaslasreferenciasaesebloquedeldibujoseactualizaráninmediatamenteparareflejarlanuevadefinición.

Laredefiniciónafectaalasinsercionesdebloqueyaefectuadasyalasfuturas.Losatributosconstantessepierdenysonreemplazadosporatributosconstantesnuevos.Losatributosvariablespermanecenintactos,inclusosielnuevobloquenotieneatributos.

Redefinicióndeobjetosenunadefinicióndebloque

Esteejemplocreaunbloqueyañadeuncírculoasudefinición.Despuésseinsertaelbloqueenundibujo,comoreferenciadebloque.Elcírculodeladefinicióndebloqueseactualizaylareferenciadebloqueseactualizaautomáticamente.

SubCh10_RedefiningABlock()

'Definetheblock

DimblockObjAsAcadBlock

DiminsertionPnt(0To2)AsDouble

insertionPnt(0)=0

insertionPnt(1)=0

insertionPnt(2)=0

SetblockObj=ThisDrawing.Blocks.Add_

(insertionPnt,"CircleBlock")

'Addacircletotheblock

DimcircleObjAsAcadCircle

Dimcenter(0To2)AsDouble

DimradiusAsDouble

center(0)=0

center(1)=0

center(2)=0

radius=1

SetcircleObj=blockObj.AddCircle(center,radius)

'Inserttheblock

DimblockRefObjAsAcadBlockReference

insertionPnt(0)=2

insertionPnt(1)=2

insertionPnt(2)=0

SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_

(insertionPnt,"CircleBlock",1#,1#,1#,0)

ZoomAll

'Redefinethecircleintheblock,

'andupdatetheblockreference

circleObj.radius=3

blockRefObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>

Utilizacióndeatributos

Lasreferenciasdeatributossirvendeetiquetaoidentificadorinteractivoparaenlazartextoaunbloque.Ejemplosdeatributospuedensernúmerosdereferenciadepiezas,precios,comentariosonombresdepropietarios.

Esposibleextraerdeundibujoinformacióndereferenciadeatributosyemplearlaenunahojadecálculoobasededatosconlafinalidaddegenerarlistasdepiezasolistasdeelementos(BOM).Unbloquepuedetenerasociadamásdeunareferenciadeatributo,siemprequeéstastenganidentificadoresdistintos.Tambiénpuededefiniratributosconstantes.Dadoquetienenelmismovalorentodaslasaparicionesdelbloque,AutoCADnosolicitaunvalorcuandoseinsertaelbloque.

Losatributospuedenserinvisibles,loquesignificaquelasreferenciasdeatributonosemuestranniseimprimen.Noobstante,lainformacióndelasreferenciasdeatributossealmacenaenelarchivodeldibujo.

Paraobtenermásinformaciónacercadelusodeatributos,véase“Informacióngeneraldeatributosdebloque“enelManualdelusuario.

CreacióndedefinicionesyreferenciasdeatributosEdicióndedefinicionesdeatributosExtraccióndelainformacióndeatributos

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndeatributos>

Creacióndedefinicionesyreferenciasdeatributos

Paracrearunareferenciadeatributo,esprecisocrearantesunadefinicióndeatributoenunbloquemedianteelmétodoAddAttribute.Estemétodorequiereseisvaloresdeentrada:laalturadeltextodeatributo,elmododeatributo,lacadenademensaje,elpuntodeinserción,lacadenadeidentificaciónyelvalorpordefectodelatributo.

Elvalordelmodoesopcional.Sepuedenintroducircincoconstantesparaespecificarelmododeatributo:

acAttributeModeNormal

Especificaquesemantieneelmodoactualdecadaatributo.

acAttributeModeInvisible

Especificaquelosvaloresdeatributosnoaparezcancuandoseinserteelbloque.ElcomandoATTDISPanulaelmodoinvisible.

acAttributeModeConstant

Asignaunvalorfijoalosatributosparalasinsercionesdebloque.

acAttributeModeVerify

Solicitaqueseverifiqueelvalordelatributoalinsertarelbloque.

acAttributeModePreset

Estableceelvalorpordefectodelatributoalinsertarunbloquequecontieneunatributointroducido.Elvalornopuedemodificarseenestemodo.

Puedeintroducircualquiercombinacióndeopciones,todasellasoninguna.Sideseaespecificarunacombinacióndeopciones,añadalasconstantesjuntas.Porejemplo,podráintroduciracAttributeModeInvisible+acAttributeModeConstant.

Lacadenademensajeaparecealinsertarunbloquequecontieneelatributo.ElvalorpordefectodeestacadenaeslacadenaTag.IntroduzcaelmodoacAttributeModeConstantparadesactivarelmensaje.

Elidentificadorreconocecadaaparicióndelatributo.Puedeutilizarcualquiercaráctersalvoespaciososignosdeadmiración.AutoCADconviertelasletrasminúsculasenmayúsculas.

Unavezqueladefinicióndeatributosehaincorporadoalbloque,siemprequeinserteelbloqueconelmétodoInsertBlockpodráespecificarunvalordistintoparalareferenciadeatributo.

Ladefinicióndeatributoestáasociadaalbloquesobreelquesecrea.Lasdefinicionesdeatributoquesecreanenespaciomodelooespaciopapelnoseconsideranenlazadasaningúnbloquedeterminado.

Creacióndeunadefinicióndeatributo

Esteejemplocreaunbloqueyleañadeunatributo.Despuésseinsertaelbloqueeneldibujo.

SubCh10_CreatingAnAttribute()

'Definetheblock

DimblockObjAsAcadBlock

DiminsertionPnt(0To2)AsDouble

insertionPnt(0)=0

insertionPnt(1)=0

insertionPnt(2)=0

SetblockObj=ThisDrawing.Blocks.Add_

(insertionPnt,"BlockWithAttribute")

'Addanattributetotheblock

DimattributeObjAsAcadAttribute

DimheightAsDouble

DimmodeAsLong

DimpromptAsString

DiminsertionPoint(0To2)AsDouble

DimtagAsString

DimvalueAsString

height=1

mode=acAttributeModeVerify

prompt="NewPrompt"

insertionPoint(0)=5

insertionPoint(1)=5

insertionPoint(2)=0

tag="NewTag"

value="NewValue"

SetattributeObj=blockObj.AddAttribute(height,mode,_

prompt,insertionPoint,tag,value)

'Inserttheblock,creatingablockreference

'andanattributereference

DimblockRefObjAsAcadBlockReference

insertionPnt(0)=2

insertionPnt(1)=2

insertionPnt(2)=0

SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_

(insertionPnt,"BlockWithAttribute",1#,1#,1#,0)

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndeatributos>

Edicióndedefinicionesdeatributos

PuedeutilizarlaspropiedadesymétodosdelobjetoAttributeparaeditarelatributo.Algunasdelaspropiedadesdeunatributoincluyen:

Alignment

Determinalaalineaciónhorizontalyverticaldelatributo.

Backward

Especificaladireccióndeltextodelatributo.

FieldLength

Especificalalongituddecampodelatributo.

Height

Especificalaalturadelatributo

InsertionPoint

Especificaelpuntodeinsercióndelatributo.

Mode

Especificaelmododelatributo.

PromptString

Especificalacadenademensajedelatributo.

Rotation

Especificalarotacióndelatributo

ScaleFactor

Especificaelfactordeescaladelatributo

TagString

Especificalacadenadelidentificadordelatributo.

Acontinuaciónseincluyenalgunosmétodosquepuedenutilizarseparamodificaratributos:

ArrayPolar

Creaunamatrizpolar

ArrayRectangular

Creaunamatrizrectangular

Copy

Copiaelatributo

Erase

Borraelatributo

Mirror

Reflejaelatributo.

Move

Desplazaelatributo

Rotate

Rotaelatributo

ScaleEntity

Asignaunaescalaalatributo

Paravolveracrearunadefinicióndeatributo

Esteejemplocreaunbloqueyleañadeunatributo.Despuésseinsertaelbloqueeneldibujo.Porúltimo,seactualizaelatributodetextoparaquesemuestrereflejadoalaizquierda.

SubCh10_RedefiningAnAttribute()

'Definetheblock

DimblockObjAsAcadBlock

DiminsertionPnt(0To2)AsDouble

insertionPnt(0)=0

insertionPnt(1)=0

insertionPnt(2)=0

SetblockObj=ThisDrawing.Blocks.Add_

(insertionPnt,"BlockWithAttribute")

'Addanattributetotheblock

DimattributeObjAsAcadAttribute

DimheightAsDouble

DimmodeAsLong

DimpromptAsString

DiminsertionPoint(0To2)AsDouble

DimtagAsString

DimvalueAsString

height=1

mode=acAttributeModeVerify

prompt="NewPrompt"

insertionPoint(0)=5

insertionPoint(1)=5

insertionPoint(2)=0

tag="NewTag"

value="NewValue"

SetattributeObj=blockObj.AddAttribute(height,mode,_

prompt,insertionPoint,tag,value)

'Inserttheblock,creatingablockreference

'andanattributereference

DimblockRefObjAsAcadBlockReference

insertionPnt(0)=2

insertionPnt(1)=2

insertionPnt(2)=0

SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_

(insertionPnt,"BlockWithAttribute",1#,1#,1#,0)

'Redefinetheattributetexttodisplaybackwards.

attributeObj.Backward=True

attributeObj.Update

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndeatributos>

Extraccióndelainformacióndeatributos

PuedeextraerinformacióndelosatributosdeundibujomediantelosmétodosGetAttributesyGetConstantAttributes.GetAttributesdevuelveunamatrizdetodaslasreferenciasaatributosenlazadasaunbloque,juntoconsusvaloresactuales.GetConstantAttributesdevuelveunamatrizdelosatributosconstantesenlazadosconelbloqueolareferenciaexterna.Losatributosquedevuelveestemétodosondefinicionesdeatributosconstantes,nodereferenciasaatributos.

Paraextraerinformacióndeatributosnoesprecisoutilizararchivosdeplantillanicreararchivosdeinformacióndeatributos.PuedeexaminarlainformacióndelosatributossencillamenteiterandoenlamatrizdereferenciasdeatributoconlaspropiedadesTagStringyTextStringdelareferencia.

LapropiedadTagStringrepresentaelidentificadorindividualdelareferenciadeatributo.LapropiedadTextStringcontieneelvalordelareferenciadeatributo.

Paraobtenermásinformaciónacercadelaextraccióndeinformacióndeatributos,véase“Extraccióndedatosdeatributosdebloque“enelManualdelusuario.

Obtencióndeinformacióndereferenciadeatributos

Esteejemplocreaunbloqueyleañadeunatributo.Despuésseinsertaelbloqueeneldibujo.Seobtienenlosdatosdeatributosysemuestranenuncuadrodemensaje.Despuésseactualizanparalareferenciadebloqueydenuevoseobtienenysemuestranenuncuadrodemensaje.

SubCh10_GettingAttributes()

'Createtheblock

DimblockObjAsAcadBlock

DiminsertionPnt(0To2)AsDouble

insertionPnt(0)=0

insertionPnt(1)=0

insertionPnt(2)=0

SetblockObj=ThisDrawing.Blocks.Add_

(insertionPnt,"TESTBLOCK")

'Definetheattributedefinition

DimattributeObjAsAcadAttribute

DimheightAsDouble

DimmodeAsLong

DimpromptAsString

DiminsertionPoint(0To2)AsDouble

DimtagAsString

DimvalueAsString

height=1#

mode=acAttributeModeVerify

prompt="AttributePrompt"

insertionPoint(0)=5

insertionPoint(1)=5

insertionPoint(2)=0

tag="AttributeTag"

value="AttributeValue"

'Createtheattributedefinitionobjectontheblock

SetattributeObj=blockObj.AddAttribute_

(height,mode,prompt,_

insertionPoint,tag,value)

'Inserttheblock

DimblockRefObjAsAcadBlockReference

insertionPnt(0)=2

insertionPnt(1)=2

insertionPnt(2)=0

SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_

(insertionPnt,"TESTBLOCK",1,1,1,0)

ZoomAll

'Gettheattributesfortheblockreference

DimvarAttributesAsVariant

varAttributes=blockRefObj.GetAttributes

'Movetheattributetagsandvaluesintoa

'stringtobedisplayedinaMsgbox

DimstrAttributesAsString

strAttributes=""

DimIAsInteger

ForI=LBound(varAttributes)ToUBound(varAttributes)

strAttributes=strAttributes+"Tag:"+_

varAttributes(I).TagString+vbCrLf+_

"Value:"+varAttributes(I).textString

Next

MsgBox"TheattributesforblockReference"+_

blockRefObj.Name&"are:"&vbCrLf_

&strAttributes

'Changethevalueoftheattribute

'Note:ThereisnoSetAttributes.Onceyouhavethe

'variantarray,youhavetheobjects.

'Changingthemchangestheobjectsinthedrawing.

varAttributes(0).textString="NEWVALUE!"

'Gettheattributesagain

DimnewvarAttributesAsVariant

newvarAttributes=blockRefObj.GetAttributes

'Again,displaythetagsandvalues

strAttributes=""

ForI=LBound(varAttributes)ToUBound(varAttributes)

strAttributes=strAttributes+"Tag:"+_

newvarAttributes(I).TagString+vbCrLf+_

"Value:"+newvarAttributes(I).textString

Next

MsgBox"TheattributesforblockReference"&_

blockRefObj.Name&"are:"&vbCrLf_

&strAttributes

EndSub

¿Comentarios?

<$nopage>refx.

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>

Utilizacióndereferenciasexternas

Lasreferenciasexternas(refX)vinculanotrodibujoconelactual.Cuandoseinsertaundibujocomobloque,elbloqueseguardacontodalageometríaasociadaenlabasededatosdeldibujoactual.Noseactualizasisemodificaeldibujooriginal.Sinembargo,alinsertarundibujocomounareferenciaexterna,ésteseactualizaalmodificareldibujooriginal.Portanto,losdibujosquecontienenreferenciasexternasreflejansiempreloscambiosmásrecientesefectuadosenlosarchivosreferidosdesdeelexterior.

Aligualqueunareferenciaabloque,unareferenciacruzadasemuestraeneldibujoactualcomounúnicoobjeto.Sinembargo,apenasaumentaeltamañodelarchivodeldibujoactualynopuededescomponerse.Comoenlosbloques,lasreferenciasexternasasociadasaldibujopuedenanidarse.

Paraobtenermásinformaciónacercadelasreferenciasexternas,véase“Enlace,actualizaciónyunióndereferenciasexternas“enelManualdelusuario.

ActualizacióndereferenciasexternasEnlacedereferenciasexternasDesenlacedereferenciasexternasRecargadereferenciasexternasDescargadereferenciasexternasUnióndereferenciasexternasDelimitacióndebloquesyreferenciasexternasSolicituddecargayrendimientodelasreferenciasexternas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Actualizacióndereferenciasexternas

Cuandoseabreoimprimeundibujo,AutoCADcargalasreferenciasexternasdeformaqueeldibujoreferidosereflejeenelestadomásreciente.Unavezefectuadaslasmodificacioneseneldibujoreferidoexternamenteyguardadoelarchivo,otrosusuariospodránaccederinmediatamentealasmodificacionescontansólovolveracargarlareferenciaexterna.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Enlacedereferenciasexternas

Alenlazarunareferenciaexterna,seasociaundibujo(elarchivodereferenciaolareferenciaexterna)coneldibujoactual.Cuandoundibujohacealusiónaunareferenciaexterna,AutoCADsóloenlazaladefinicióndelaRefXaldibujo,adiferenciadelosbloquesnormales,enlosqueseguardaladefiniciónyelcontenidodelbloqueconeldibujoactual.AutoCADleeeldibujodereferenciaparadeterminarloquedebemostrarseeneldibujoactual.Sielarchivodereferencianoexisteoestádañado,susdatosnosemuestraneneldibujoactual.Cadavezqueseabreundibujo,AutoCADcargatodoslosobjetosgráficosynográficos(comocapas,tiposdelíneayestilosdetexto)desdelosarchivosdereferencia.SiVISRETAINestáactivada,AutoCADguardatodalainformacióndecapadependientedelareferenciaexternaquesehayaactualizadoeneldibujoactual.

Lasreferenciasexternaspuedenenlazarsetantasvecescomosedeseeycadaunaenunaposición,conunaescalayunánguloderotacióndiferentes.Tambiénpuedencontrolarselascapasdependientesylaspropiedadesdetipodelíneadefinidasenlareferenciaexterna.

Paraenlazarunareferenciaexterna,utiliceelmétodoAttachExternalReference.Estemétodorequierelarutayelnombredearchivodeldibujoalquesevaahacerreferencia,elnombredelareferenciaexternaquesevaautilizareneldibujoactual,elpuntodeinserción,laescalaylainformaciónderotacióndelareferenciaexterna.ElmétodoAttachExternalReferencedevuelveelobjetoExternalReferencereciéncreado.

Paraobtenermásinformaciónsobreelenlacedereferenciasexternas,véase“Enlacedereferenciasexternas”enelManualdelusuario.

Enlacedeunareferenciaexternaaundibujo

Esteejemplomuestratodoslosbloquesdeldibujoactualantesydespuésdeañadirunareferenciaexterna.Seutilizaelarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.

SubCh10_AttachingExternalReference()

OnErrorGoToERRORHANDLER

DimInsertPoint(0To2)AsDouble

DiminsertedBlockAsAcadExternalReference

DimtempBlockAsAcadBlock

DimmsgAsString,PathNameAsString

'Defineexternalreferencetobeinserted

InsertPoint(0)=1

InsertPoint(1)=1

InsertPoint(2)=0

PathName="C:/ProgramFiles/AutoCAD2008/sample/3DHouse.dwg"

'DisplaycurrentBlockinformationforthisdrawing

GoSubListBlocks

'Addtheexternalreferencetothedrawing

SetinsertedBlock=ThisDrawing.ModelSpace._

AttachExternalReference(PathName,"XREF_IMAGE",_

InsertPoint,1,1,1,0,False)

ZoomAll

'DisplaynewBlockinformationforthisdrawing

GoSubListBlocks

ExitSub

ListBlocks:

msg=vbCrLf'Resetmessage

ForEachtempBlockInThisDrawing.Blocks

msg=msg&tempBlock.Name&vbCrLf

Next

MsgBox"Thecurrentblocksinthisdrawingare:"&msg

Return

ERRORHANDLER:

MsgBoxErr.Description

EndSub

Superposicióndereferenciasexternas

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>Enlacedereferenciasexternas>

Superposicióndereferenciasexternas

Superponeresparecidoaenlazar,exceptocuandoseenlazaosesuperponeundibujo.Cualquierotrasuperposiciónqueestéanidadaseignoray,porlotanto,nosevisualiza.Enotraspalabras,lassuperposicionesanidadasnosecargan.

Parasuperponerunareferenciaexterna,asigneelvalorTRUEalparámetroOverlaydelmétodoAttachExternalReference.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Desenlacedereferenciasexternas

Puededesenlazardefinicionesdereferenciasexternasparasuprimirlasreferenciastotalmentedeldibujo.Tambiénpuedeborrarlasreferenciasexternasporseparado.Aldesenlazarunadefinicióndereferenciaexternaseeliminantodoslossímbolosdependientesasociadosaella.Siseborrantodaslascopiasdeunareferenciaexternaeneldibujo,AutoCADeliminaladefinicióndelareferenciaexternacuandosevuelveaabrireldibujo.

Paradesenlazarunareferenciaexterna,utiliceelmétodoDetach.Lasreferenciasexternasanidadasnosepuedendesenlazar.

Desenlacedeunadefinicióndereferenciaexterna

Esteejemploenlazaunareferenciaexternaydespuésladesenlaza.Seutilizaelarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.

SubCh10_DetachingExternalReference()

OnErrorGoToERRORHANDLER

'Defineexternalreferencetobeinserted

DimxrefHomeAsAcadBlock

DimxrefInsertedAsAcadExternalReference

DiminsertionPnt(0To2)AsDouble

DimPathNameAsString

insertionPnt(0)=1

insertionPnt(1)=1

insertionPnt(2)=0

PathName="c:/AutoCAD2008/sample/3DHouse.dwg"

'Addtheexternalreference

SetxrefInserted=ThisDrawing.ModelSpace._

AttachExternalReference(PathName,"XREF_IMAGE",_

insertionPnt,1,1,1,0,False)

ZoomAll

MsgBox"Theexternalreferenceisattached."

'Detachtheexternalreferencedefinition

DimnameAsString

name=xrefInserted.name

ThisDrawing.Blocks.Item(name).Detach

MsgBox"Theexternalreferenceisdetached."

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Recargadereferenciasexternas

Sialgúnusuariomodificaundibujoreferidoexternamentemientrassetrabajaeneldibujoalqueestáenlazadalareferenciaexterna,puedeactualizareldibujoquecontienelareferenciaexternaconelmétodoReload.Alvolveracargarlo,eldibujodereferenciaexternaseleccionadoseactualizaeneldibujoreceptor.Además,sihadescargadounareferenciaexterna,puedecargardenuevoeldibujoreferidoexternamenteencualquiermomento.

Recargadeunadefinicióndereferenciaexterna

Esteejemploenlazaunareferenciaexternaydespuéslavuelveacargar.Seutilizaelarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.

SubCh10_ReloadingExternalReference()

OnErrorGoToERRORHANDLER

'Defineexternalreferencetobeinserted

DimxrefHomeAsAcadBlock

DimxrefInsertedAsAcadExternalReference

DiminsertionPnt(0To2)AsDouble

DimPathNameAsString

insertionPnt(0)=1

insertionPnt(1)=1

insertionPnt(2)=0

PathName="c:/AutoCAD2008/sample/3DHouse.dwg"

'Addtheexternalreferencetotheblock

SetxrefInserted=ThisDrawing.ModelSpace._

AttachExternalReference(PathName,"XREF_IMAGE",_

insertionPnt,1,1,1,0,False)

ZoomAll

MsgBox"Theexternalreferenceisattached."

'Reloadtheexternalreferencedefinition

ThisDrawing.Blocks.Item(xrefInserted.name).Reload

MsgBox"Theexternalreferenceisreloaded."

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Descargadereferenciasexternas

Paradescargarunareferenciaexterna,utiliceelmétodoUnload.Cuandosedescargaunarchivodereferenciaquenoutilizaeldibujoactual,elrendimientodeAutoCADaumenta,yaquenotienequeleernimostrargeometríainnecesarianiinformacióndetablasdesímbolos.Lageometríadelasreferenciasexternasydelasanidadas,silashay,nosemuestraeneldibujoactivomientrasnosevuelvanacargar.

Descargadeunadefinicióndereferenciaexterna

Esteejemploenlazaunareferenciaexternaydespuésladescarga.Seutilizaelarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.

SubCh10_UnloadingExternalReference()

OnErrorGoToERRORHANDLER

'Defineexternalreferencetobeinserted

DimxrefHomeAsAcadBlock

DimxrefInsertedAsAcadExternalReference

DiminsertionPnt(0To2)AsDouble

DimPathNameAsString

insertionPnt(0)=1

insertionPnt(1)=1

insertionPnt(2)=0

PathName="c:/AutoCAD2008/sample/3DHouse.dwg"

'Addtheexternalreference

SetxrefInserted=ThisDrawing.ModelSpace._

AttachExternalReference(PathName,"XREF_IMAGE",_

insertionPnt,1,1,1,0,False)

ZoomAll

MsgBox"Theexternalreferenceisattached."

'Unloadtheexternalreferencedefinition

ThisDrawing.Blocks.Item(xrefInserted.name).Unload

MsgBox"Theexternalreferenceisunloaded."

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Unióndereferenciasexternas

LaunióndeunareferenciaexternaconundibujomedianteelmétodoBindhacequelareferenciaformepartepermanentedeldibujoydejedeconsiderarseunarchivodereferenciaexterna.Lainformaciónreferidaexternamenteseconvierteenunbloque.Alactualizareldibujoreferidoexternamente,noseactualizalareferenciaexternaunida.Esteprocesounedeformacompletalabasededatosdeldibujo,incluidostodossussímbolosdependientes.

Lossímbolosdependientessonobjetosguardados,comoporejemplobloques,estilosdecotas,capas,tiposdelíneayestilosdetexto.Alunirlareferenciaexternasepuedenutilizarlosobjetosconnombreeneldibujoactual.

ElmétodoBindsólorequierelaentradadeunparámetro:bPrefixName.SiseasignaabPrefixNameelvalorTRUE,losnombresdesímbolodeldibujodelareferenciaexternaapareceneneldibujoactualconelprefijo<nombredebloque>$x$,dondexesunnúmeroenteroqueaumentaautomáticamenteparaevitarquesereemplacenlasdefinicionesdebloqueexistentes.SiseasignaalparámetrobPrefixNameelvalorFALSE,losnombresdesímbolodeldibujodelareferenciaexternasefusionanconeldibujoactualsinelprefijo.Sihaynombresduplicados,AutoCADutilizalossímbolosdefinidosconanterioridadeneldibujo.Sinoestásegurodesieldibujocontienenombresdesímbolosduplicados,esrecomendablequeasignealprefijobPrefixNameelvalorTRUE.

Paraobtenermásinformaciónacercadelaasignacióndereferenciasexternas,véase“Archivodedibujosquecontienenreferenciasexternas(unión)“enelManualdelusuario.

Unióndeunadefinicióndereferenciaexterna

Esteejemploenlazaunareferenciaexternaydespuéslaunealdibujo.Seutiliza

elarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.

SubCh10_BindingExternalReference()

OnErrorGoToERRORHANDLER

'Defineexternalreferencetobeinserted

DimxrefHomeAsAcadBlock

DimxrefInsertedAsAcadExternalReference

DiminsertionPnt(0To2)AsDouble

DimPathNameAsString

insertionPnt(0)=1

insertionPnt(1)=1

insertionPnt(2)=0

PathName="c:/AutoCAD2008/sample/3DHouse.dwg"

'Addtheexternalreference

SetxrefInserted=ThisDrawing.ModelSpace._

AttachExternalReference(PathName,"XREF_IMAGE",_

insertionPnt,1,1,1,0,False)

ZoomAll

MsgBox"Theexternalreferenceisattached."

'Bindtheexternalreferencedefinition

ThisDrawing.Blocks.Item(xrefInserted.name).BindFalse

MsgBox"Theexternalreferenceisbound."

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Delimitacióndebloquesyreferenciasexternas

ActiveXAutomationnodisponedeningúnmétodoparadelimitarcontornosdebloquesyreferenciasexternas.UtiliceelcomandoXCLIPdeAutoCADoenvíeelcomandoXCLIPaAutoCADutilizandoelmétodoSendCommand.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Solicituddecargayrendimientodelasreferenciasexternas

Medianteunacombinacióndesolicituddecargayusodeíndicesparaguardarlosdibujos,esposibleaumentarelrendimientodelosdibujosconreferenciasexternas.LasolicituddecargafuncionajuntoconlasvariablesdesistemaXLOADCTLeINDEXCTL.Siseactivalasolicituddecargaysehanguardadoíndicesenlosdibujosreferidos,AutoCADcargaenmemoriasólolosdatosdeldibujoreferidoqueseanecesariopararegenerareldibujoactual.Esdecir,loselementosdereferenciasepuedenleer“previasolicitud”.

Parapoderutilizaralmáximolasventajasdelasolicituddecarga,anteshayqueguardarlosdibujosreferidosconíndicesespacialesydecapa.Lasmejorasenelrendimientoqueseproducenconlassolicitudesdecargasonmásevidentescuando:

Serecortaunareferenciaexternaparamostrarunapequeñapartedelamismayseguardauníndiceespacialeneldibujoreferidoexternamente.

Seinutilizanvariascapasdelareferenciaexternayeldibujoreferidoexternamenteseguardaconuníndicedecapa.

Paraactivarlasolicituddecarga,utiliceelmétodoXRefDemandLoad.SidecideactivarlacargamediantesolicitudconlaopciónacDemandLoadEnabledWithCopy,AutoCADcreaunacopiatemporaldelarchivoreferidoexternamenteycargamediantesolicitudelarchivotemporal.Deestemodo,puedecargarporsolicitudlareferenciaexternaalavezquepermitequeotrosusuariosmodifiqueneldibujodereferenciaoriginal.Cuandodesactivelasolicituddecarga,AutoCADcargaráeldibujodereferenciacompletoindependientementedelavisibilidaddelascapasodelapresenciadedelimitaciones.

Paraactivarlosíndicesespacialesydecapa,establezcalavariabledesistema

INDEXCTLmedianteelmétodoSetVariable.LosparámetrossiguientesseaplicanalavariabledesistemaINDEXCTL:

0=nosehancreadoíndices.

1=sehacreadoelíndicedecapas.

2=sehacreadoelíndiceespacial.

3=sehancreadoelíndiceespacialyeldecapas.

Pordefecto,INDEXCTLvale0cuandosecreaundibujonuevodeAutoCAD.

Paraobtenermásinformaciónacercadelasolicituddecargayreferenciasexternas,véase“Incrementodelrendimientoconreferenciasexternasdegrantamaño”enelManualdelusuario.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>

Asignaciónyrecuperacióndedatosextendidos

Puedeutilizardatosextendidos(datoseX)comounmedioparaenlazarinformaciónconlosobjetosdeundibujo.

Asignacióndedatosextendidosaunconjuntodeselección

Enesteejemplo,sepidealusuarioquedesigneobjetosdeldibujo.Losobjetosdesignadosseintroducenenunconjuntodeselecciónylosdatosextendidosespecificadosseenlazancontodoslosobjetosdedichoconjunto

SubCh10_AttachXDataToSelectionSetObjects()

'Createtheselectionset

DimssetAsObject

Setsset=ThisDrawing.SelectionSets.Add("SS1")

'Prompttheusertoselectobjects

sset.SelectOnScreen

'Definethexdata

DimappNameAsString,xdataStrAsString

appName="MY_APP"

xdataStr="Thisissomexdata"

DimxdataType(0To1)AsInteger

Dimxdata(0To1)AsVariant

'Definethevaluesforeacharray

'1001indicatestheappName

xdataType(0)=1001

xdata(0)=appName

'1000indicatesastringvalue

xdataType(1)=1000

xdata(1)=xdataStr

'Loopthroughallentitiesintheselection

'setandassignthexdatatoeachentity

DimentAsObject

ForEachentInsset

ent.SetXDataxdataType,xdata

Nextent

EndSub

Visualizacióndelosdatosextendidosdetodoslosobjetosdeunconjuntodeselección

Esteejemplomuestralosdatosextendidosenlazadosenelejemploanterior.Sienlazadatosextendidosquenosoncadenas(tipo1000),necesitarácorregirestecódigo

SubCh10_ViewXData()

'Findtheselectioncreatedinpreviousexample

DimssetAsObject

Setsset=ThisDrawing.SelectionSets.Item("SS1")

'Definethexdatavariablestoholdxdatainformation

DimxdataTypeAsVariant

DimxdataAsVariant

DimxdAsVariant

'Defineindexcounter

DimxdiAsInteger

xdi=0

'Loopthroughtheobjectsintheselectionset

'andretrievethexdatafortheobject

DimmsgstrAsString

DimappNameAsString

DimentAsAcadEntity

appName="MY_APP"

ForEachentInsset

msgstr=""

xdi=0

'RetrievetheappNamexdatatypeandvalue

ent.GetXDataappName,xdataType,xdata

'IfthexdataTypevariableisnotinitialized,there

'wasnoappNamexdatatoretrieveforthatentity

IfVarType(xdataType)<>vbEmptyThen

ForEachxdInxdata

msgstr=msgstr&vbCrLf&xdataType(xdi)_

&":"&xd

xdi=xdi+1

Nextxd

EndIf

'IfthemsgstrvariableisNULL,therewasnoxdata

Ifmsgstr=""Thenmsgstr=vbCrLf&"NONE"

MsgBoxappName&"xdataon"&ent.ObjectName&_

":"&vbCrLf&msgstr

Nextent

EndSub

¿Comentarios?

<$nopage>controlesdecuadrosdediálogo.<$nopage>controlesdeformularios.

ManualdeldesarrolladordeActiveXyVBA>

DesarrollodeaplicacionesconVBA

MuchastareasdeprogramaciónimplicanalgomásquetrabajarconelmodelodeobjetosActiveXdeAutoCAD.Estecapítuloproporcionaunabreveintroducciónalacreacióndecuadrosdediálogo,almanejodeerrores,elcontroldelfocodelaventanayladistribucióndelaaplicaciónaterceros.

RecuerdequeladocumentacióndeMicrosoftparaVBAcontienemásinformaciónsobreestostemas.

AlgunaterminologíadeVBAFormulariosdeVBAGestióndeerroresCodificacióndemódulosdecódigodeVBAEjecucióndemacrosdeVBAdesdeunabarradeherramientasounmenúCargaautomáticadeunproyectoVBAEjecuciónautomáticadeunamacrodeVBAAperturaautomáticadelIDEdeVBAalcargarunproyectoUtilizacióndeunestadodecerodocumentosDistribucióndeaplicacionesMigraciónde64bits

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

AlgunaterminologíadeVBA

EnestecapítuloseamplíalainformaciónsobreVBA.LossiguientestérminosleayudaránaconocerytrabajarmejorenelentornoVBA.

Proyecto

Conjuntodeformulariosymódulosqueseagrupanenunsoloarchivo.

Módulo

Grupodesubrutinasyfunciones(posiblementerelacionadas).

Macro

Subrutinaofunciónpública.Lasmacrosestánadisposicióndelusuariocomocomponentesejecutablesdelproyectopersonal.

Cuadrodediálogo

Medioutilizadoparamostraruobtenerdatosdurantelaejecucióndeaplicaciones.

Forma

Contenedordeloscontrolesdelcuadrodediálogo.

¿Comentarios?

<$nopage>controlesdecuadrosdediálogo.<$nopage>controlesdeformularios.

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

FormulariosdeVBA

Losformulariossonlaspiezasbásicasapartirdelascualessecreanloscuadrosdediálogoespecialesdecadaaplicación.Atravésdelosformulariospersonalizadosseproporcionainformaciónalosusuarios,serecogendatosdelosusuariosyseotorgacontrolaéstossobrelaactividaddelaaplicación.

Losformulariossoncomounlienzo:alprincipioestánenblanco.Pararellenarellienzoseutilizaunapaleta.Enestecaso,lapaletaeselcuadrodeherramientasdecontrol.Eldesarrollador,comoelartista,colocaenelformularioloscontrolesseleccionadosenelcuadrodeherramientas.Sepuedenañadirtantoscontrolescomosedesee.Encualquiermomentosepuedenajustareltamañoylaspropiedadesdeloscontrolesydelpropioformulario.Porúltimo,seañadealoscontroleselcódigoquelosdotadefunciones.

AunqueVisualBasic6admitevariostiposdeformularios,VBAsóloadmitelosdeltipoUserForm.EstosignificaquealgunosformularioscreadosyexportadosenVisualBasic6nopuedenimportarseenVBA.

LosUserForms—oformularios,comosedenominanenestemanual—puedensermodalesosinmodo.LapropiedadShowModaldeunformulariodeterminasisondeunouotrotipo.Losformulariosmodalesquesepresentanenlaaplicaciónenusodebencerrarseparaquesepuedaefectuarcualquierotraacciónenlaaplicación.Paraobtenermásinformaciónacercadelosformulariosmodales,véaseFormulariosmodales.

Paracrearunnuevoformularioenelproyecto

1. AbralaventanaProyectoenelIDEdeVBAyseleccioneelproyectoalquedeseaañadirelformulario.

2. EnelmenúInsertar,elijaUserForm.Secreaunformulariovacíoyseañadealproyecto.

Paracrearunformulariosinmodoenelproyecto

1. AbralaventanaProyectoenelIDEdeVBAyseleccioneelproyectoalquedeseaañadirelformulario.

2. EnelmenúInsertar,elijaUserFormycambieaFalsolapropiedadShowModal.

3. AñadaAcFocusCtrl(AcFocusCtrl.dll)alcuadrodeherramientasyarrastreelcontrolalformulario.AcFocusCtrlmantieneelenfoqueenelformulariodurantelainteracciónconelusuario.ModosdediseñoydeejecuciónAdicióndecontrolesaunformularioPresentaciónyocultacióndeformulariosCargaydescargadeformulariosFormulariosmodales

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>

Modosdediseñoydeejecución

Losformulariossecreanenelmododediseño,enelqueesposiblehacerlosiguiente:

Añadircontroles

Cambiarlaspropiedades

Cambiarlaspropiedadesdeloscontroles

Añadircontrolesalmódulo

Enelmododediseñonohayinteracciónentreelusuario,lainterfazdeusuariodeAutoCAD®yelformulario.

Cuandoseejecutalaaplicación,elformularioseencuentraenmododeejecución.Enelmododeejecuciónnosepuedenrealizarajustesdirectamenteenelformulario.Noobstante,elformulariosemuestraenlainterfazdeusuariodeAutoCADyelusuariopuedeinteractuarconélconnormalidad.

¿Comentarios?

<$nopage>controlesdecuadrosdediálogo.<$nopage>controlesdeformularios.

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>

Adicióndecontrolesaunformulario

Añadircontrolesaunformularioesmuysencillo.Bastaconseleccionaruncontrolenelcuadrodeherramientasyarrastrarloalformulario.Alsoltarelratón,secolocaráenelformulariounacopiadelcontrolseleccionado.Después,sepuedecambiarsuposiciónysutamaño.Puedeañadirtantoscontrolescomodesee.

Ademásdelmétododearrastrarysoltarexistenmásformasdecolocarcontrolesenunformulario.

CambiodetamañoyposicióndeloscontrolesUtilizacióndecontrolesdeformatoModificacióndelaspropiedadesdeuncontrolAdicióndecódigoauncontrol

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>

Cambiodetamañoyposicióndeloscontroles

Paramoveruncontrol,bastaconseleccionarloyarrastrarlohastasunuevaposiciónenelformulario.

Paracambiareltamañodeuncontrol,hagaclicenélunavezparaseleccionarlo.Cuandouncontrolestáseleccionado,sumarcoesvisible.Paracambiareltamañodelcontrol,bastaconseleccionarunodelospinzamientosdetamaño(ahoravisibles)delmarcoyarrastrarlohastalanuevaposición.Alsoltarelpinzamiento,elcontrolcambiadetamañodeacuerdoconesaposición.Sepuedeseguirelmismoprocedimientoparacambiardetamañoelformulario.

Paramoverocambiardetamañoavarioscontrolesalavez,selecciónelosunoaunomientrasmantienepulsadalateclaMAYÚS.Seresaltarántodosloscontroles.Ahorapuededesplazarocambiareltamañodeloscontrolescomosisetrataradeungrupo.

Paracambiareltamañodeuncontrolmientrassecoloca

1. Seleccioneelcontrolenelcuadrodeherramientasdecontrol.

2. Enelformulario,pulse,arrastreysuelteelbotóndelratón.Elcontrolseleccionadoquedarácolocadoenelformulario.Eltamañovaríasegúnsearrastraelratón.

Paracolocarvariosejemplaresdelmismocontrol

1. Enelcuadrodeherramientasdecontrol,hagadobleclicenelcontrolquedeseecolocar.

2. Enelformulario,hagaclicenlaposicióndondedeseecolocarunacopiadelcontrol.Despláceseaotraposicióndelformularioyhagaclicdenuevo.Apareceráotracopiadelcontrol.Sepuedenañadirtantascopias

delcontrolcomosenecesiten.

3. Cuandoterminedetrabajarconelcontrol,regresealcuadrodeherramientasdecontrolyvuelvaahacerclicenelcontrolparaquedejedeestarseleccionado.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>

Utilizacióndecontrolesdeformato

VBAproporcionavarioscontrolesdeformatoqueayudanaajustarlapresentaciónfinaldelformulario.EstoscontrolespuedenhallarseenelmenúFormatodeIDEdeVBA.Permitenalinearcontrolesentresí,hacerquedosomáscontrolestenganelmismotamaño,cambiarladistanciaentreellosycentrarlosenelformulario.

Cuandoutiliceloscontrolesdeformato,recuerdequeesposibleseleccionarvariosalavezpormediodeMAYÚS.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>

Modificacióndelaspropiedadesdeuncontrol

Laspropiedadesdeterminandiversascaracterísticasdeloscontroles,comoeltamaño,laforma,elcolor,laetiquetaylosvalorespordefecto.SepuedemodificarlaspropiedadesdeuncontrolenelmododediseñoutilizandolaventanaPropiedades.

Paracambiarlaspropiedadesdeuncontrol

1. Enelformulario,seleccioneuncontrol.

2. PulseF4paraabrirlaventanaPropiedades,siaúnnoestáabierta.

3. EnlaventanaPropiedades,localicelapropiedadquedeseemodificaryseleccioneelvaloractualdelamisma.

4. Cambieelvalorporelqueestimeconvenienteparalapropiedad.

Tambiénpuedecambiarlapropiedaddeuncontroldurantelaejecuciónsiescribecódigoparaaccederalamisma.Paraobtenerinformaciónacercadelcambiodepropiedadesdeuncontrolentiempodeejecución,véaseladocumentacióndeMicrosoft.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>

Adicióndecódigoauncontrol

Ahoraqueyatieneunformularioconelaspectoadecuado,puedeañadircódigoaloscontroles.Paraabrirlaventanadecódigosdeuncontrol,hagadobleclicenélenlaventanaUserForm.SeabrelaventanaCódigo,conunasubrutinacreadaparaesecontrolysuprocedimientodeeventopredeterminado.

Puedeañadircódigoalprocedimientodeeventopredeterminadooelegirunprocedimientodistintodelalistadesplegabledeprocedimientos,queseencuentraenlaesquinasuperiorderechadelaventanaCódigo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>

Presentaciónyocultacióndeformularios

Enestemomentoyatieneunformularioconelaspectoadecuadoyconcódigodetrásdetodossuscontroles.Elúltimopasoesconseguirqueelformulariosemuestrealusuariodurantelaejecución.LapresentaciónenpantalladelosformulariosserealizaatravésdelmétodoShowdeVBA.PuedellamaralmétodoShowdesdecualquiermódulodecódigodelaaplicación.

Elformulariocreadoesmodalpordefecto,loqueimpidealusuariointeractuardirectamenteconAutoCADmientraselformularioestéenpantalla.Porejemplo,elusuarionopodráseleccionarunpuntouobjetodeldibujomientrasestéabiertoelformulario.ParaqueelusuariopuedaaccederaldibujodeAutoCAD,deberáutilizarelmétodoHidedeVBA.ElmétodoHideocultaelformularioyconcedealusuariounaccesolimitadoaAutoCAD.CuandoseutilizaelmétodoHide,esimportanterecordarqueelformularionosedescargadelamemoria;conservarátodoslosvaloresactualesmientrasestéoculto.

LasllamadasalmétodoHideserealizanigualquelasdelmétodoShow.

Presentacióndeunformulario

Enesteejemplosemuestraelformulariollamado“UserForm1”:

PublicSubMyApplication()

UserForm1.Show

EndSub

Ahorasepuedellamaralasubrutina(quehacequesepresenteelformulario)comomacro,desdeelcomandoVBARUNodesdeunmenúdeAutoCAD.

Ocultacióndeunformulario

Enesteejemploseocultaelformulariollamado“UserForm1”:

PublicSubMyAppHide()

UserForm1.Hide

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>

Cargaydescargadeformularios

Esposiblequeenalgunasocasionesdeseecargarunformularioenmemoriadurantelaejecución,peronomostrarlo.Estopuedeserútilparaconseguiruncontrolmejorcuandotienelugarlacargaenlaaplicación,ocuándoelprogramanecesitaaccederalformularioperonohacefaltamostrárseloalusuario.

Paracargarunformulariosinmostrarloenpantalla,utiliceelmétodoLoaddeVBA.PosteriormentepodráutilizarelmétodoShowparahacerlovisibleenelmomentoadecuadodurantelaejecucióndelaaplicación.Recuerdequeelusuarionopodráinteractuarconelformulariomientrasnoestévisible.

SisellamaalmétodoShowyaúnnosehacargadoelformulario,secargaráautomáticamente.

Enalgunoscasosesposiblequedeseedescargarunformularioconcreto.Cuandosedescargaunformulario,éstedesaparecedelamemoria,yelsistemarecuperatodalamemoriaasociadaalmismo.Hastaqueelformulariosevuelveacargar,mediantelosmétodosLoadoShow,nielusuarionielprogramapuedenaccederalmismo.Podríaoptarpordescargarunformulariosisabequenoseutilizarámásenlaaplicaciónynecesitadejarlibrelamemoria.

ElmétodoHidenorealizaningunadescarga.Sifinalizalaejecucióndelaaplicaciónyelformularionosehadescargado,sedescargaráautomáticamente.EnlatablasiguientesecomparanlosmétodosShow,Hide,LoadyUnloaddeVBA:

MétodosShow,Hide,LoadyUnloaddeVBA:

Método Descripción

Show Presentaunformulario.Siaúnnosehacargado,el

formulariosecargaautomáticamente.

Hide Ocultaunformulario.Elformularionosedescargadelamemoria.

Cargar Cargaunformularioenmemoria,peronolomuestraenpantalla.

Unload Descargaunformulariodelamemoria.PuedeefectuarsedeformaexplícitadesdeelmétodoUnloadodeformaautomáticaalcerrarlaaplicación.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>

Formulariosmodales

Cuandosedefineuncuadrodediálogocomo'modal'enVBAdeAutoCAD,elusuariodeberesponderalmismoantesdepodercontinuarutilizandolaaplicación.ElsiguientecódigonoseejecutarámientrasnosecierreelcuadrodediálogomodalconunodelosmétodosHideoUnload.Portanto,elprogramadordelaaplicacióndebeestudiarcuidadosamentedóndeycuándoesconvenienteutilizarcuadrosdediálogo.

Porejemplo,puedepresentarseuncuadrodediálogoquesolicitealusuariolaseleccióndeunobjetoeneldibujodeAutoCAD.ParaqueelusuariopuedadesignarelobjetoenlaventanadelaaplicacióndeAutoCAD,esprecisoocultarprimeroelformulariomedianteelmétodoHide.Unavezquesehaseleccionadoelobjeto,sepuedeutilizarelmétodoShowparavolverapresentarelformulario,contodossusdatos,ycontinuarconlaaplicación.

Nota Aunqueotrosformulariosdelaaplicaciónsedesactivencuandoseabreuncuadrodediálogomodal,noocurrelomismoconlasotrasaplicaciones.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

Gestióndeerrores

Lamayoríadelosentornosdedesarrolloproporcionanunsistemadetratamientodeerrorespordefecto.EnVByVBA,lareacciónpordefectoanteunerrorconsisteenmostrarunmensajedeerrorycerrarlaaplicación.Sibienestecomportamientoeseladecuadoenlasfasesdedesarrollo,noeselmásconvenienteparaelusuariofinal.Puedehabererroresquesedeseenignorar,yotrosquedebanproducirunarespuestaespecial.Enalgunasocasionespuedeseraconsejablesuprimirlapresentacióndelmensajedeerror,osimplemente,controlarelmensajequesepresentaalusuario.Además,laterminaciónautomáticadelasaplicacionesnotendránuncaunabuenaacogidaporpartedelusuariofinal.

Porlogeneral,lasrutinasdecontroldeerroressonnecesariascuandoserequierequeelusuariointroduzcaalgúndatoycuandosetrabajaconentradaysalidadearchivos.Recuerdeque,aunqueestésegurodequeelarchivonecesarioexisteyestádisponibleparasuproceso,puedendarseciertascondicionesimprevistasqueprovoquenerrores.

Nota LamayoríadeejemplosdecódigoqueseencuentranenladocumentacióndeAutoCADutilizanidentificacióndeerrores.Deestaformaelejemploesmenoscomplejoymáspreciso.Perocomoocurrecontodosloslenguajesdeprogramación,esimprescindibleunacorrectaidentificaciónysolucióndeloserroresparaquelasaplicacionesseanestables.

DefinicióndetiposdeerrordelasaplicacionesIdentificacióndeerroresdeejecuciónRespuestaaerroresidentificadosRespuestaaerroresdeentradadedatosdelusuariodeAutoCAD

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>

Definicióndetiposdeerrordelasaplicaciones

Existentrestiposdiferentesdeerroresquepodráencontrarensusaplicaciones:erroresdecompilación,erroresdeejecuciónyerroreslógicos.

Loserroresdecompilaciónseproducenalcrearlaaplicación.Ensumayoríasonerroresdesintaxis,problemasrelativosalalcancedelasvariablesyfallosdeescritura.EnVBA,estostiposdeerrorsedetectanenelentornodedesarrollo.Cuandoseintroduceunalíneadecódigoincorrecta,éstaseresaltayapareceunmensajedeerrorquedescribeelproblema.Loserroresqueseproducendurantelacompilacióndebencorregirseparaquelaaplicaciónsepuedaejecutar.

Loserroresdeejecuciónsonunpocomásdifícilesdedetectarycorregir.Seproducendurantelaejecucióndelcódigo,yamenudoincluyenlaentradadedatosporpartedelusuario.Porejemplo,silaaplicaciónsolicitaalusuarioqueintroduzcaelnombredeundibujoyelnombrequeescribenoexiste,seproduceunerrordetiempodeejecución.Paragestionarconeficacialoserroresdeejecuciónesnecesariopreverlosproblemasposiblesyescribirelcódigonecesariopararesolverestassituaciones.

Loserroreslógicossonlosquepresentanmayordificultaddedetecciónyderesolución.Unasituaciónenlaquenoexistenerroresdecompilaciónnideejecuciónyelresultadodelprogramasigasiendoincorrectopuedesersíntomadeunerrorlógico.Estoesloquelosprogramadoresconocencomo"bug",quepuedesermuyfácilomuydifícildeidentificar.

Paraobtenerinformaciónacercadelalocalizaciónycorreccióndeestostrestiposdeerror,véaseladocumentacióndelentornodedesarrollopropio.LoserroresespecíficosdeAutoCADseconsideranerroresdeejecución,yporlotantoeseltipodeerrorquesetrataconmásdetenimientoenestapublicación.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>

Identificacióndeerroresdeejecución

EnVByVBA,loserroresdeejecuciónseidentificanpormediodelainstrucciónOnError.Estainstrucciónponeliteralmenteunatrampaalsistemay,cuandoseproduceunerror,elprocesosedesvíahaciaelgestordeerroresconcretoquesehayaespecificado.Enestecasoseomitelagestióndeerroresestablecidapordefecto.

LainstrucciónOnErrortienetresmodalidades:

OnErrorResumeNext

OnErrorGoToLabel

OnErrorGoTo0

LainstrucciónOnErrorResumeNextseutilizacuandosedeseaignorarloserrores.Estainstrucciónidentificaelerror,yenvezdepresentarunmensajedeerrorycerrarelprograma,pasaalasiguientelíneadecódigoycontinúaconlaejecución.Porejemplo,supongaquedeseacrearunasubrutinaparaiterarenelespaciomodeloycambiarelcolordecadaentidad,perosabequeAutoCADarrojaráunerrorsiseintentaasignarcoloraunaentidadqueseencuentraenunacapabloqueada.Enlugardecerrarelprograma,bastaconquesesaltelaentidaddelacapabloqueadaycontinúeprocesandolasdemásentidades.Estoes,precisamente,loquelainstrucciónOnErrorResumeNextpermitehacer.

LainstrucciónOnErrorGoToLabelseutilizaparaescribirrutinasespecíficasdecontroldeerrores.Estainstrucciónidentificaelerror,yenvezdepresentarunmensajedeerrorycerrarelprograma,saltaaunpuntoconcretodelcódigo.Acontinuación,elcódigorespondealerrordelaformamásidóneaparalaaplicación.Porejemplo,elcódigoanteriorpodríaampliarseparaquesemuestreunmensajeconelidentificadordetodaslasentidadesdelacapa

bloqueada.

GestióndeerroresconlasecuenciaOnErrorResumeNext

Lasiguientesubrutinaiteraenelespaciomodeloycambiaarojoelcolordelasentidades.Intenteejecutarestasubrutinaenundibujoquetengaalgunasdesusentidadesenunacapabloqueada.Acontinuación,amplíeconexplicacioneslainstrucciónOnErrorResumeNextyvuelvaaejecutarlasubrutina.Observaráquelasubrutinaseinterrumpeenlaprimeraentidaddelacapabloqueada.

SubCh11_ColorEntities()

DimentryAsObject

OnErrorResumeNext

ForEachentryInThisDrawing.ModelSpace

entry.Color=acRed

Nextentry

EndSub

GestióndeerroresconlainstrucciónOnErrorGoTo

Lasiguientesubrutinaiteraenelespaciomodeloycambiaarojoelcolordelasentidades.Elgestordeerroresmuestra,porcadaentidaddelacapabloqueada,unmensajedeerrorjuntoconelidentificadordelaentidad.Intenteejecutarestasubrutinaenundibujoquetengaalgunasdesusentidadesenunacapabloqueada.Acontinuación,amplíeconexplicacioneslainstrucciónOnErrorResumeGoToMyErrorHandlingyvuelvaaejecutarlasubrutina.Observaráquelasubrutinaseinterrumpeenlaprimeraentidaddelacapabloqueada.

SubCh11_ColorEntities2()

DimentryAsObject

OnErrorGoToMyErrorHandler

ForEachentryInThisDrawing.ModelSpace

entry.Color=acRed

Nextentry

'Important!Exitthesubroutinebeforetheerrorhandler

ExitSub

MyErrorHandler:

Msgboxentry.EntityName+"isonalockedlayer."+_

"Thehandleis:"+entry.Handle

ResumeNext

EndSub

LainstrucciónOnErrorGoTo0cancelaelidentificadordelerroractual.LasinstruccionesOnErrorResumeNextyOnErrorGoToLabelsiguenactivashastaquefinalizalasubrutina,hastaquesedeclaraotrarutinadecontroldeerroresohastaquesecancelalarutinadecontroldeerroresconlainstrucciónOnErrorGoTo0.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>

Respuestaaerroresidentificados

Unavezidentificadoelerror,¿quéhacerconél?Larespuestadependedelanaturalezadelaaplicaciónydelerrormismo.

VByVBAproporcionaninformaciónsobreeltipodeerroridentificado,pormediodelobjetoErr.Esteobjetopresentavariaspropiedades:Number,Description,Source,Helpfile,HelpContextyLastDLLError.LaspropiedadesdelobjetoErrserellenanconlainformacióndelúltimoerrorqueseproduce.Laspropiedadesdenúmeroydescripciónsonlasmásimportantes.LapropiedadNumbercontieneelcódigodeerrorúnicoquetieneasociadoelerror,mientrasquelapropiedadDescriptionincluyeelmensajedeerrorquesepresentaría.

SepuedeutilizarelidentificadordelerrorparacompararlapropiedadNumberdelerrorconunvalorsupuestamenteesperado,yconocerlanaturalezadelerrorproducido.Unavezqueseconozcaeltipodeerror,sepuedenemprenderlasaccionesnecesariaspararesolverlo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>

RespuestaaerroresdeentradadedatosdelusuariodeAutoCAD

Losmétodosquerequierenlaentradadedeterminadosdatosporpartedelusuarioincorporanciertacantidaddeidentificacióndeerrores.Sielusuariointentaintroducirdatosdistintosdelosespecificados,AutoCADrechazalaentradayvuelveapreguntar.ElusodelmétodoInitializeUserInputproporcionauncontroladicionaldelosdatosintroducidosporelusuario,perotambiénpuedeincluircondicionesadicionalesquesedebenverificarpormediodelaidentificacióndeerrores.Sideseaverunejemplodeidentificacióndeerroresrequeridaconciertostiposdedatosintroducidosporelusuario,consulteSolicituddedatosdeusuario

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

CodificacióndemódulosdecódigodeVBA

AunqueVBAnoadmitelacreacióndeejecutables,síofreceprotecciónporcontraseñaparalavisibilidaddelosformulariosdeproyectos,lasclasesylosmódulosenelniveldeproyectos.PuedeencontrarestafuncióndeprotecciónenelmenúdelIDEdeVBA.SeleccioneHerramientas PropiedadesdeproyectoProtección.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

EjecucióndemacrosdeVBAdesdeunabarradeherramientasounmenú

ParaejecutarunamacrodeVBAdesdeunabarradeherramientasounmenúdeAutoCAD,bastaconmodificarlapropiedadMacrodedichomenúobarradeherramientas.LapropiedadMacrodebetenerdefinidoIguala.

-VBARUNnombrearchivo.dvb!nombremódulo.nombremacro

dondenombrearchivoeselnombredelarchivodeproyecto,nombremóduloelnombredelmódulodondesehallalamacroquesedebeejecutarynombremacroelnombredelamacro.ElnombredelarchivosóloserequierecuandoelarchivonosecargaenlasesiónactualdeAutoCAD.Siseproporcionaelnombredelarchivo,éstesecarga.

Paraobtenermásinformaciónacercadelamodificacióndemenúsybarrasdeherramientas,véasePersonalizacióndebarrasdeherramientasymenús.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

CargaautomáticadeunproyectoVBA

ExistendosmanerasdecargarautomáticamenteunproyectodeVBA:

Cuandoestácargado,VBAbuscaeneldirectoriodeAutoCADunproyectollamadoacad.dvb.Estearchivosecargaautomáticamentecomoproyectopordefecto.

Exceptoelpredeterminado,acad.dvb,todoslosdemásproyectossepuedenutilizarcargándolosexpresamenteeneliniciopormediodelcomandoVBALOAD.LasiguientemuestradecódigoutilizaelarchivodeiniciodeAutoLISPparacargarVBAyunproyectodeVBAllamadomyproj.dvbcuandoseiniciaAutoCAD.AbraelBlocdenotasdeWindows(notepad.exe)ycreeelarchivoacad.lsp,oábralosiyaexiste,yescribaoañadaalfinallassiguienteslíneas:(defunS::STARTUP()

(command"_VBALOAD""myproj.dvb")

)

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

EjecuciónautomáticadeunamacrodeVBA

Esposibleejecutarautomáticamentecualquiermacrodelarchivoacad.dvb,siselellamaconlaversióndelíneadecomandodeVBARUNdesdeunafuncióndeiniciodeAutoCADcomoacad.lsp.Porejemplo,paraejecutardeformaautomáticaunamacrollamadadrawline,enprimerlugarguardelamacrodrawlineenelarchivoacad.dvb.Acontinuación,ejecutenotepad.exeycree(oañada)lassiguienteslíneasdeacad.lsp:

(defunS::STARTUP()

(command"_-vbarun""drawline")

)

SepuedeconseguirqueseejecuteunamacroalcargarVBAsiseleasignaelnombredemacroAcadStartup.Unamacrodelarchivoacad.dvbquesellameAcadStartupseejecutadeformaautomáticaalcargarseVBA.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

AperturaautomáticadelIDEdeVBAalcargarunproyecto

EnelcuadrodediálogoAbrirproyectoVBAexisteunaopciónquepermiteabrirautomáticamenteelentornodedesarrollointeractivo.ActivelacasilladeselecciónAbrirelEditordeVisualBasic,situadaenlaesquinainferiorizquierdadelcuadrodediálogo,yelIDEdeVBAseabriráautomáticamentealcargarunproyectoVBA.Estaopciónpermaneceráactivahastaqueladesactive.

Nota ParaaccederalcuadrodediálogoAbrirproyectoVBA,escribaVBALOADenlalíneadecomando.Seabriráelcuadrodediálogoypodráelegirelproyectoquedeseecargar.SinoveelcuadrodediálogoAbrirproyectoVBA,esprobablequeestosedebaaquelavariabledesistemaFILEDIAestédesactivada.Lavariabledesistemaactivaydesactivalapresentacióndeloscuadrosdediálogo.ParavolveraactivarFILEDIAasígneleelvalor1.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

Utilizacióndeunestadodecerodocumentos

UnestadodecerodocumentosenAutoCADesaquélenelquenoestáabiertoningúndibujo.DebentenerseencuentavariasconsideracionescuandosetrabajeenVBAenunestadodecerodocumentos:

ElobjetoThisDrawingnoestádefinidocuandoAutoCADseencuentraenunestadodecerodocumentos.SiseintentautilizarThisDrawing,seproduceunerror.

Losobjetosquedependendelosdocumentostampocoestándefinidosenunestadodecerodocumentos.EstosobjetossonaquellosqueestándebajodelobjetoDocumentenelmodelodeobjetosdeAutoCAD.Sepuedetrabajarconobjetosquenodependendedocumentos,comoApplicationoMenuBar.

AutoCADnotienelíneadecomandoenelestadodecerodocumentos.TodointentodeaccederalalíneadecomandodeAutoCADenunestadodecerodocumentosproduceunerror.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

Distribucióndeaplicaciones

LasaplicacionesVBApuedendistribuirsededosformas:

IncrustadasenunarchivodedibujodeAutoCAD

AlmacenadasenunarchivodeproyectoVBA

Debeelegirselaopcióndedistribuciónmásapropiadaparalaaplicaciónconcreta.Lasaplicacionesespecíficasdeldibujoactualyquenonecesitanaccederaotrosdibujossuelenincrustarseeneldibujo.Laincrustacióndelaaplicacióneneldibujogarantizaqueéstasecarguealabrireldibujoyqueelusuariolatengadisponiblemientraseldibujosemantengaabierto.

Lasaplicacionesquesecompartenentredistintosusuarios,queseactualizanconfrecuencia,querequierenabrirycerrarotrosdibujosoquenoseutilizanamenudo,suelesermásconvenienteguardarlasenunarchivodeproyectoVBA.Deestaforma,laaplicacióntieneunaubicacióncentralizadayseaseguraquetodosutilizansuúltimaversión.

SideseamásinformaciónsobrelosproyectosincrustadosylosarchivosdeproyectodeVBA,consulteDescripcióndelosproyectosVBAglobaleseincrustados.

DistribucióndeaplicacionesdeVisualBasic6

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Distribucióndeaplicaciones>

DistribucióndeaplicacionesdeVisualBasic6

LasaplicacionesdeVisualBasic6,asícomootrasaplicacionesexternasalproceso,nopuedenalmacenarseenlosdibujosdeAutoCAD.Estasaplicacionessecompilanenejecutablesindependientes(EXE).

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

Migraciónde64bits

Microsoftnoproporcionaunaversiónde64bitsdeVBAparadesarrolladores;portantoseránecesariocambiarlasaplicacionesde32bitsquesedesarrollenparalasversionesdeAutoCADde64bits.En64bits,VBAseejecutacomocomponentefueradeproceso,alqueseaccedeatravésdeunacapade"conversión"de32a64bits.

NosegarantizaqueelcomportamientodeVBAenlaversiónde64bitsdeAutoCADseaidénticoaldeVBAcon32bitsdeAutoCAD.Porejemplo,sielIDEdeVBAestáactivoosisemuestraunaventanademodos,puedequehayaunpequeñoretrasocuandosevuelvaapintarunaventanadeAutoCAD.

Paraobtenermásinformación,consulteelAutoCADMigrationGuideCreacióndeinstanciasdeobjetosdeAutoCADenVBAGestióndeIDdeobjetosApéndicedemétodosde32bits

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Migraciónde64bits>

CreacióndeinstanciasdeobjetosdeAutoCADenVBA

Lossistemasoperativosde64bitspuedenejecutaraplicacionesde32y64bits,peronopuedenmezclarestostiposenunproceso.Porejemplo,noesposiblecargararchivosDLLde32bitsenunprocesode64bitsniviceversa.Todosloscomponentesejecutables(archivosEXEyDLL)quesecarganenunprocesodebencoincidireneltipobinariodelproceso.Loscomponentesenprocesodelasaplicacionesde64bitsdebencambiarseaprocesosde64bitssiemprequeseaposible.

Puedeproducirseunerroralintentarcrearunobjetonuevo.EltecladoNewdeVBintentarácargarlosarchivosDLLCOMdeAutoCADde64bits.PuestoqueVBAesunaaplicaciónde32bits,nopuedecargararchivosDLLde64bits.Porejemplo,uncódigodeltipo

DimcolorAsAcadAcCmColor

Setcolor=NewAcadAcCmColor

or

DimcolorAsNewAcadAcCmColor

color.SomeMethod()

necesitamodificarseocambiarsea

DimcolorAsAcadAcCmColor

Setcolor=AcadApplication.GetInterfaceObject(“Autocad.AcCmColor.17”).

ElproblemaanteriordebesolucionarsemedianteAcadApplication.GetInterfaceObject(“ProgIdOfAcAnyObject”)

paracualquierobjetoderivadodeIDispatch.NoseesperaquelasclasesderivadasdeIUnknown(porejemplo,AcSmSheetSet,AcSmSheetMgr,etc.)migrenaVBAde64bits.EsrecomendablecambiarestosprocesosaVB.Net.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Migraciónde64bits>

GestióndeIDdeobjetos

AliniciarAutoCAD2008de64bits,losIDdeobjetosserepresentanmedianteuntipodedatosdeenterosde64bits(_int64).SiseaccedeaestosvaloresenVBAde32bitsseproduciráunerrordecompilación.Comosolución,seutilizaunnuevoconjuntodenombresdemétodosconelsufijo"32"correspondientesalosmétodosanteriores(porejemploObjectID32(),OwnerID32()).EstosmétodosutilizaneltipodedatosLONGqueseasignademanerainternaaltipodedatosdeenterosde64bits.

Parasermásprecisos,unIDdeobjetode32bitssecreadeformainternaparacadaIDdeobjetonecesarioenVBA.EsteIDseasignaasuIDrealde64bitsdemaneraquesisedevuelveelIDde32bitsaAutoCADapartirdeuncódigoVBA,elIDdeobjetode64bitssedevolveráyseutilizarádeformainternaparatodoslosfines.

EnelsiguienteejemplosemuestrauncódigodeIDdeobjetode32bitscambiado.

Códigooriginal:

DimsplineObjAsAcadSpline

DimobjectIDAsLong

objectID=splineObj.objectID

DimtempObjAsAcadObject

SettempObj=ThisDrawing.ObjectIdToObject(objectID)

Códigocambiadoparaqueseacompatiblecon64bits:

DimsplineObjAsAcadSpline

DimobjectIDAsLong

objectID=splineObj.objectID32

DimtempObjAsAcadObject

SettempObj=ThisDrawing.ObjectIdToObject32(objectID)

LasaplicacionesdeVBAtambiénpuedenutilizarunidentificadordeobjetosenlugardesuIDdeobjeto.EnelsiguienteejemplosemuestracómoutilizarelidentificadorenlugardelIDdeobjeto:

Códigooriginal:

DimsplineObjAsAcadSpline

DimobjectIDAsLong

objectID=splineObj.objectID

DimtempObjAsAcadObject

SettempObj=ThisDrawing.ObjectIdToObject(objectID)

Códigocambiadoparaqueseacompatiblecon64bits:

DimsplineObjAsAcadSpline

DimobjectHandleAsString

objectHandle=splineObj.Handle

DimtempObjAsAcadObject

SettempObj=ThisDrawing.HandleToObject(objectHandle)

Nota :SeignoraráelsoporteparaVBAenfuturasversionesdeAutoCAD.LosdesarrolladoresdeVBAdebenprepararseparacambiarsucódigoVBAaVB.Net.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Migraciónde64bits>

Apéndicedemétodosde32bits

EnlasiguientetablaseenumeranlosnuevoscódigosañadidosenAutoCAD2008paralassustitucionesde32bits:

TablademétodosdeVBAparasistemasde64bits

Método Descripción

GetBlockAttributeValue32 DevuelveelvalordeatributodesdeunaceldadebloqueespecificadaparaelobjetodedefinicióndeatributocontenidoenelbloquemedianteelcorrespondienteIDdeobjetode32bits.

GetBlockTableRecordId32 ObtieneelIDdeobjetode32bitsdelregistrodelatabladebloquesasociadoalaceldatipodelbloqueyanContent.

GetDataLink32 DevuelveelIDdeobjetode32bitsdelobjetodevínculodedatos.

GetFieldId32 DevuelveelIDdeobjetode32bitsdelobjetodecampoasociadoalaceldaespecificada.

GetGridLinetype32 DevuelveelobjetodeIDde32bitsdelobjetodetipodelíneade

rejilla.

Key32 EspecificaelIDdeobjetodelobjetodeorigenenlaoperaciónCopyObjectsdeunsistemade64bits.

ObjectID32 ObtieneelIDdeobjetodeunsistemade64bits.

ObjectIDtoObject32 ObtieneelobjetoquecorrespondeaundeterminadoIDdeobjetodeunsistemade64bits.

OwnerID32 ObtieneelIDdeobjetodelobjetodepropietario(primario)deunsistemade64bits.

SetBlockAttributeValue32 EstableceelvalordeatributodesdeunaceldadebloqueespecificadaparaelobjetodedefinicióndeatributocontenidoenelbloqueyennContentmedianteelcorrespondienteIDdeobjetode32bits.

SetBlockTableRecordId32 EstableceelregistrodetabladebloquesdelIDdeobjetode32bitsasociadoalaceldatipodelbloqueyanContent.

SetDataLink32 EstableceelIDdeobjetode32bitsdelobjetodevínculodedatos.

SetFieldId32 EstableceelIDdeobjetode32bitsdelobjetodecampoasociadoalaceldaespecificadayanContent.

SetGridLinetype32 EstableceelIDdeobjetode32bitsdelobjetodetipoderejilla.

Value32 EspecificaelvaloractualdelapropiedadodelIDdeobjetodelobjetoclonadoqueseacabadecrearparaunsistemade64bits.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>

InteracciónconotrasaplicacionesyconlasAPIdeWindows

LatecnologíaActiveXpermiteintercambiarinformaciónfácilmenteconotrasaplicacionesdeAutoCADyconaplicacionescompatiblesconActiveX,comoMicrosoftExceloMicrosoftWord.Enestecapítuloseexponenalgunosprocedimientosbásicosparalainteracciónconotrasaplicaciones.

InteracciónconaplicacionesdeVisualLISPInteracciónconotrasaplicacionesdeWindowsAccesoalasAPIdeWindowsdesdeVBA

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>

InteracciónconaplicacionesdeVisualLISP

LasaplicacionesdeVisualLISP®tienenaccesoatodoelrangodeobjetosActiveX®.PuedenllamaratodoslosmétodosdeActiveX,ydefiniryrecuperarsuspropiedades.Además,lasaplicacionesdeVisualLISPpuedenejecutarmacrosdeVBApormediodelcomandoVBARUN

LasaplicacionesdeActiveXyVBApuedenejecutaraplicacionesdeVisualLISPpormediodelmétodoSendCommand.EstemétodopermiteaActiveXyalasaplicacionesVBAenviarcomandosalalíneadecomandodeAutoCAD.

ParaobtenermásinformaciónacercadelaccesoaobjetosActiveXatravésdeVisualLISP,véaseAutoLISPDeveloper’sGuide.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>

InteracciónconotrasaplicacionesdeWindows

LatecnologíaActiveXdeAutoCAD®permiteintercambiarinformaciónfácilmenteconotrasaplicacionescompatiblesconActiveX,comoMicrosoftExcelyMicrosoftWord.Estacapacidadpermitealusuariorecopilar,almacenarypresentarinformacióndeAutoCADconformatosdistintosalosdibujosdeAutoCAD.TambiénfacilitalacargadeinformaciónenAutoCADdesdeestasaplicacionesparadirigirlosprocesosdecreaciónomanipulacióndeobjetosdeAutoCAD.Unejemploprácticodeestatecnologíaeslacreacióndeunalistadeelementos,apartirdelosobjetosdeundibujodeAutoCAD,conelformatodehojadecálculodeMicrosoftExcel.

YasehavistolaformadeescribircódigopormediodelModelodeobjetosdeActiveXdeAutoCAD.ParaintercambiarinformaciónconotrasaplicacionescompatiblesconActiveXbastaconhacerunareferenciaalmodelodeobjetosdeActiveXdelaotraaplicaciónyescribirelcódigonecesarioparautilizarsusobjetos.

Nota Enestecapítulosóloseproporcionaunaintroducciónbrevedelasfuncionesdeprogramaciónentreaplicaciones.PuestoqueeltemanoesespecíficodeAutoCAD,setratatambiénenladocumentacióndeMicrosoftyenotrasguíasdeprogramaciónindependientes.

ParaintercambiarinformaciónentremodelosdeobjetosdeActiveX

1. IncluyareferenciasalmodelodeobjetosdeActiveXdelasotrasaplicaciones.Deestaforma,elcódigoconsideralosnombresylasrelacionesdelosobjetosdelotromodelodeobjetos.

2. Creeunainstanciadelaotraaplicación.Secreanobjetosválidosparainiciarinstanciasdelosobjetosbásicosen

elotromodelodeobjetos.

3. EscribaelcódigoutilizandotantoelmodelodeobjetosdeAutoCADcomoelmodelodeobjetosdelasotrasaplicaciones.Aquíserealizaelintercambiodedatos.ReferenciasalabibliotecadeobjetosActiveXdeotrasaplicacionesCreacióndeunainstanciadelaotraaplicaciónProgramaciónconobjetosdeotrasaplicaciones

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>InteracciónconotrasaplicacionesdeWindows>

ReferenciasalabibliotecadeobjetosActiveXdeotrasaplicaciones

Paraescribircódigoqueconsulteotraaplicación,debeindicaraVBAquelepermitadisponerdelosobjetosdelaotraaplicación.Paraello,seestableceunareferenciaenlabibliotecadeobjetosdelaotraaplicación.Setratadeunarchivosituadoensuordenadorenelqueestándefinidostodoslosobjetos,métodos,propiedades,constantesyeventosdelaaplicación.

LasreferenciasaunabibliotecadeobjetosserealizandesdeelentornoIDEdeVBA.EnelIDEdeVBA,enelmenúHerramientas,existeunaopciónllamadaReferencias.EstaopcióndemenúabreuncuadrodediálogoconlalistadetodaslasbibliotecasdeobjetosVBAqueseencuentranenelsistema.Paraestablecerunareferenciaaunabiblioteca,bastaconseleccionarlabibliotecaenlalista.Lasbibliotecasquetienencasillasdeselecciónmarcadascuentanyaconreferenciasenelproyectoactual.Porejemplo,paraañadirlabibliotecadeobjetosdeMicrosoftExcel,seleccionelaentradacorrespondientedelalista.

Cuandohayacreadounareferenciaalabibliotecadeobjetosdelaotraaplicación,podráutilizarelExaminadordeobjetosdeVBAparaverunalistadelosobjetosdelaaplicación.

Nota DebeestablecerlareferenciadecadaproyectoVBAquevayaautilizarestemodelodeobjetos.Cuandoseestablecelareferenciaparaunproyecto,éstanoseestableceautomáticamenteparaningúnotroproyecto,pormotivosdeeficacia.

Paraestablecerunareferenciaalabibliotecadeobjetosdeotraaplicación

1. EnelIDEdeVBA,abraelmenúHerramientasyseleccionelaopcióndemenúReferencias.

2. BusqueyseleccioneelelementocorrespondientealaaplicaciónalaquedeseaaccederenlalistaReferencias.

3. SeleccioneAceptarparacerrarelcuadrodediálogoconlasmodificacionesrealizadas.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>InteracciónconotrasaplicacionesdeWindows>

Creacióndeunainstanciadelaotraaplicación

Unavezestablecidaunareferenciaalabibliotecadeobjetosdeunaaplicación,esnecesariocrearunainstanciadelaaplicación.Estosignificaquesedebeiniciarlaotraaplicacióndesdeelprograma,paraqueelcódigotengaaccesoalosobjetosconlosquedebetrabajar.

Paraello,primerodebedeclararunavariablequerepresentelaotraaplicación.UtilicelainstrucciónDimparaseguirelmismoprocedimientoqueconlosobjetosinternos.DeberíaincluirunacualificacióndeltipodeaplicaciónenlainstrucciónDim.Porejemplo,estainstrucciónDimdeclaraunavariabledeobjetodeltipoExcel.Application:

DimExcelAppObjasExcel.Application

Trasdeclararlavariable,utilicelainstrucciónSetconlapalabraclaveNewparaquelavariableequivalgaaunacopiadelaaplicaciónqueseestéejecutando.Porejemplo,lasiguienteinstrucciónSetestablecelavariabledeclaradamásarribacomolaaplicaciónExcel.LapalabraclaveNewiniciaunanuevasesióndeExcel.

SetExcelAppObj=NewExcel.Application

Nota Algunasaplicacionessólopermitenunainstanciaenejecucióndelaaplicaciónporvez.SiseutilizalanuevapalabraclaveNewconunadeestasaplicaciones,seestableceunareferenciaalainstanciaexistenteynoseejecutaunanuevasesióndelaaplicación.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>InteracciónconotrasaplicacionesdeWindows>

Programaciónconobjetosdeotrasaplicaciones

Despuésdeañadirunareferenciaalabibliotecadeobjetosycrearunainstanciadelaaplicaciónpuedecrearymanipularobjetosenella.Puedeutilizartodoslosobjetos,métodosypropiedadesdefinidosporelmodelodeobjetos.Porejemplo,siseutilizanlasdeclaracionesdevariabledelasecciónanterior,lasiguientelíneadecódigopresentalasesióndeExcelalusuario.

ExcelAppObj.Visible=TRUE

Deberíaestudiarenprofundidadelmodelodeobjetosdelaaplicaciónparalaqueestéescribiendoelcódigo.PuedeutilizarelExaminadordeobjetosdeVBAoelarchivodeayudadelaaplicaciónparaobtenermásinformaciónsobrecualquiermodelodeobjetosalquesehagareferencia.

Salidadelaotraaplicación

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>InteracciónconotrasaplicacionesdeWindows>Programaciónconobjetosdeotrasaplicaciones>

Salidadelaotraaplicación

Cuandoseiniciaunaaplicaciónmedianteprogramación,seutilizamemoriadelordenador.Salgadelaaplicaciónencuantoterminedeutilizarlaparaquequedenlibreslosrecursosdelsistema.

AunquecadaModelodeobjetosesdistinto,casitodostienenunmétodoQuitparaelobjetoApplication,quesepuedeutilizarparacerrarlaaplicacióncorrectamente.Porejemplo,siseutilizanlasdeclaracionesdevariabledelasecciónanterior,lasiguientelíneadecódigoejecutalasalidadeExcel:

ExcelAppObj.Application.Quit

Nota Nidestruirnisuperarelalcancedelavariabledelobjetooriginanobligatoriamenteelfindelaaplicación.Latotallimpiezadelamemoriasóloseasegurautilizandoelmétodoapropiadoparasalirdelaaplicación.

EnumeracióndeatributosdeAutoCADenunahojadecálculodeExcel

Estasubrutinalocalizatodaslasreferenciasdebloquedeldibujoactual.Acontinuación,encuentralosatributosenlazadosadichasreferenciasdebloqueylospresentaenunahojadecálculodeExcel.Paraejecutaresteejemplo,sigaestospasos:

1. Abraundibujoquecontengareferenciasabloqueconatributos(eldibujodeejemplosample/activeX/attrib.dwgcontienereferenciasabloquedeestetipo).

2. AbraelIDEdeVBAutilizandoelcomandoVBAIDEdeAutoCAD.

3. EnelIDEdeVBA,elijaHerramientas ReferenciasyseleccioneMicrosoftExcel8.0ObjectModel.

4. CopieestasubrutinaenunaventanadecódigodeVBAyejecútela.

SubCh12_Extract()

DimExcelAsExcel.Application

DimExcelSheetAsObject

DimExcelWorkbookAsObject

DimRowNumAsInteger

DimHeaderAsBoolean

DimelemAsAcadEntity

DimArray1AsVariant

DimCountAsInteger

'LaunchExcel.

SetExcel=NewExcel.Application

'Createanewworkbookandfindtheactivesheet.

SetExcelWorkbook=Excel.Workbooks.Add

SetExcelSheet=Excel.ActiveSheet

ExcelWorkbook.SaveAs"Attribute.xls"

RowNum=1

Header=False

'Iteratethroughmodelspacefinding

'allblockreferences.

ForEachelemInThisDrawing.ModelSpace

Withelem

'Whenablockreferencehasbeenfound,

'checkitforattributes

IfStrComp(.EntityName,"AcDbBlockReference",1)_

=0Then

If.HasAttributesThen

'Gettheattributes

Array1=.GetAttributes

'CopytheTagstringsforthe

'AttributesintoExcel

ForCount=LBound(Array1)ToUBound(Array1)

IfHeader=FalseThen

IfStrComp(Array1(Count).EntityName,_

"AcDbAttribute",1)=0Then

ExcelSheet.Cells(RowNum,_

Count+1).value=_

Array1(Count).TagString

EndIf

EndIf

NextCount

RowNum=RowNum+1

ForCount=LBound(Array1)ToUBound(Array1)

ExcelSheet.Cells(RowNum,Count+1).value_

=Array1(Count).textString

NextCount

Header=True

EndIf

EndIf

EndWith

Nextelem

Excel.Application.Quit

EndSub

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>

AccesoalasAPIdeWindowsdesdeVBA

EsposibleaccederalosprocedimientosAPIdeWindows®desdelamayoríadelasaplicacionesdeWindows.Estosprocedimientospermitenampliarlacapacidadfuncionaldelaaplicación.

LasAPIdeWindowspermitenobtenerinformaciónsobreelsistemaactual,comolosotrosprogramasinstaladosoenejecución,ellugardondeseencuentralainformaciónylaconfiguracióndecontrolactual.Tambiénpermitenaccederaloscontrolesdesonido,multimediaypalancademandos.EstastareassólorepresentanalgunadelasmuchasfuncionesqueproporcionanlasAPIdeWindows.

ParautilizarunaAPIdeWindows,primerosedebedeclararenlaaplicación.EstosellevaacaboconlainstrucciónDeclare.LainstrucciónDeclarerequiereciertainformación:

Elnombredelabibliotecadevínculosdinámicos(DLL)quecontengaelprocedimientoquedeseeutilizar.

ElnombredelprocedimientoconformeaparezcaenlaDLL.

Elnombredelprocedimientoconformedeseeutilizarloenlaaplicación.

Losparámetrosqueelprocedimientoespererecibir.

Eltipodedatosdelvalordevuelto(sielprocedimientollamadoesunafunción).

LainstrucciónDeclarepuedecolocarseencualquieradelosmódulosdeVBA.Sisesitúaenunmóduloestándar,elprocedimientoestarádisponibleparatodoslosmódulosdelaaplicación,amenosqueselimitesualcanceconlapalabraclavePrivate.SiseubicalainstrucciónDeclareenunmódulodeformulariooclase,elprocedimientosóloestarádisponibleendichomódulo.

Despuésdedeclararunprocedimientoesposiblellamarlo,comoacualquierotroprocedimientodelaaplicación.

NoesfácilinterpretarbienlasinstruccionesDeclarecorrectas.Sinembargo,esmuyfácilinterpretarDeclaredemodoincorrecto,ylasconsecuenciaspuedensercatastróficas.NoolvideguardartodalainformacióndelasaplicacionesactivasantesdeprobarunainstrucciónDeclarenueva.

ParafacilitarelusodelasinstruccionesDeclare,Microsoftproporcionaunarchivoquepresentaenunalistamuchasdelasinstruccionesdeusomásfrecuente.ElarchivosellamaWin32api.txtysesuministraconVisualBasic6yconOffice.PuedebuscarenésteelprocedimientoquenecesitaycopiarladeclaraciónDeclareenelcódigo.

LadocumentacióndeMicrosoftVBAcontienemásinformaciónsobrelainstrucciónDeclareyunejemplodesuuso.LareferenciadelasAPIdeMicrosoftWindowsformapartedelosCDqueseentreganalosprogramadoressuscritosalCentrodeRecursosparaDesarrolladoresdeMicrosoftyproporcionaunareferenciadetodoslosprocedimientosdisponiblesenlasAPIdeWindows.EllibroVisualBasicProgrammer'sGuidetotheWin32API,deDanAppleman,constituyeunexcelenterecursoparalosprogramadoresdeVisualBasic6.

¿Comentarios?

<$nopage>aprendizaje:

ManualdeldesarrolladordeActiveXyVBA>

AprendizajedeActiveX/VBA:Diseñodelcaminodejardín

EsteaprendizajemuestracómoutilizarActiveXyVisualBasicparaAplicaciones(VBA)ycómoañadirunamacroaAutoCAD.Seorientahacialaarquitecturapaisajística,perolosconceptosquecontienesepuedenaplicaracualquierespecialidad.

EsteAprendizajeestádestinadoalusuarioavanzadodeAutoCADqueasuvezesprincipianteenprogramaciónVBA.

InspeccionarelentornoDefinirelobjetivoLaprimerafunciónObtencióndedatosDibujodelcontornodelcaminoDibujodelaslosetasIntegracióndeloselementosEjecucióndelcódigopasoapasoEjecucióndelamacroAdicióndeinterfazdecuadrodediálogo

¿Comentarios?

<$nopage>aprendizaje:

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Inspeccionarelentorno

Paraelaprendizaje,necesitaráelentornodedesarrollointegradodeVBA(VBAIDE)deAutoCAD®.VBAIDEseinstalaautomáticamenteconlaopcióndeinstalaciónCompletadelprogramadeinstalacióndeAutoCAD.SiseleccionólaopcióndeinstalaciónPersonalizadaenelmomentodeinstalarAutoCAD,VBAIDEpuedenohaberseinstalado.EsposiblequetengaqueinstalarloejecutandodenuevoelprogramadeinstalacióndeAutoCAD.

ParacomprobarsiVBAIDEestáinstalado

1. InicieAutoCAD.

2. Enlalíneadecomando,escribavbaideypulseINTRO.SiseabreVBAIDE,estosignificaqueestáinstalado.Siapareceelmensaje“AutoCADVBAnoseencuentrainstalado”,VBAIDEnoestáinstalado.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Definirelobjetivo

ElobjetivodeesteaprendizajeesdesarrollarunanuevamacroparaAutoCADquedibujeelcaminodeunjardínylorelleneconlosetascircularesdecemento.Lanuevamacrotendrálasiguientesecuenciadesolicitudes:

Command:gardenpath

Puntoinicialdelcamino:Elusuarioespecificaráelpuntoinicial

Puntofinaldelcamino:Elusuarioespecificaráelpuntofinal

Mitaddelaanchuradelcamino:Elusuarioespecificaráunnúmero

Radiodelaslosetas:Elusuarioespecificaráunnúmero

Espacioentrelaslosetas:Elusuarioespecificaráunnúmero

Enprimerlugar,lamacrosolicitaráalusuarioqueespecifiquelospuntosinicialyfinalquedeterminaránlalíneadecentrodelcamino.Luego,solicitaráalusuarioqueespecifiquelamitaddelaanchuradelcaminoyelradiodelaslosetascirculares.Finalmente,elusuarioespecificaráelespacioentrelaslosetas.Usarálamitaddelaanchuradelcaminoenvezdelaanchuracompletapuestoqueesmásfácilvisualizarlamitaddelaanchuradesdelalíneadecentrodelcamino.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Laprimerafunción

LamacroGardenpathsedesarrollautilizandounaseriedefuncionesysubrutinas.Muchassubrutinasrequierenlamanipulacióndeángulos.PuestoqueActiveXespecificaángulosenradianes,perolamayoríadelosusuariosutilizagradosparamedirángulos,comenzaremosporcrearunafunciónqueconviertagradosaradianes.

Paraconvertirgradosaradianes

1. Enlalíneadecomando,escribavbaideypulseINTRO.

2. EnVBAIDE,enelmenúVer,pulseCódigoparaabrirlaventanaCódigo.

3. EscribaelsiguientecódigoenlaventanaCódigo:

Constpi=3.14159

'Conversióndeunánguloengradosaradianes

Functiondtr(aAsDouble)AsDouble

dtr=(a/180)*pi

EndFunction

ObservequetanprontocomosepulsaINTROdespuésdeescribirlalíneaFunctiondtr(aAsDouble)AsDouble,EndFunctionseañadeautomáticamente.EstogarantizaquetodaslassubrutinasyfuncionestienenunainstrucciónEndasociada.Ahorareviseelcódigo.Primero,laconstantepisedefineconelvalorde3.14159.Estopermitequeseutilicelapalabrapienlugardetenerqueteclear3.14159cadavezquevayaausarelvalor.Acontinuación,defineunafunciónllamadadtr(abreviacióndegradosaradianes).Lafuncióndtrtomaunargumento,a,queeselánguloengrados.Elresultadoseobtienedividiendoelánguloengradospor180y,

acontinuación,multiplicandosuvalorporpi.Lalíneaquecomienzaporunacomillasimpleesuncomentario.VBAignoratodoeltextoquehayaenunalíneadespuésdeunacomillasimple.Ahoraestafunciónpuedeutilizarseenotrassubrutinasdetodoelproyecto

4. Guardesutrabajo.PulseArchivo GuardarGlobal1.Escribagardenpath.dvbcomonombredelproyecto.

Acontinuación,añadiráunafunciónparacalcularladistanciaentrepuntos.

Paracalcularladistanciaentredospuntos

1. Escribaelsiguientecódigodespuésdelafuncióndtr:

'Cálculodeladistanciaentredospuntos

Functiondistance(spAsVariant,epAsVariant)_

AsDouble

DimxAsDouble

DimyAsDouble

DimzAsDouble

x=sp(0)-ep(0)

y=sp(1)-ep(1)

z=sp(2)-ep(2)

distance=Sqr((Sqr((x^2)+(y^2))^2)+(z^2))

EndFunction

2. Guardesutrabajo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Obtencióndedatos

LamacroGardenpathpreguntaalusuariodóndedebedibujarseelcamino,quéanchuradebetener,dequétamañosonlaslosetasdecementoycuáleselespacioentreéstas.Ahoradefiniráunasubrutinaquesolicitaalusuariotodosestosdatosyquecalculadiversosnúmerosqueseutilizaránenelrestodelamacro.

Enestasubrutina,utilizarálosmétodosdeentradadedatosdeusuariodelobjetoUtility.

DeclaracióndevariablesEscrituradelasubrutinagpuser

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Obtencióndedatos>

Declaracióndevariables

Lasiguientesubrutinautilizadiversasvariables.Todaslasvariablesdebendeclararsepreviamenteparaquelasubrutinapuedaaccederaellas.

EnVBAIDE,escribaelsiguientecódigoenlaventanaCódigo,inmediatamentedespuésdelalíneaConstpi=3.14159:

Privatesp(0To2)AsDouble

Privateep(0To2)AsDouble

PrivatehwidthAsDouble

PrivatetradAsDouble

PrivatetspacAsDouble

PrivatepangleAsDouble

PrivateplengthAsDouble

PrivatetotalwidthAsDouble

Privateangp90AsDouble

Privateangm90AsDouble

AhoraobservelasdoslistasdesplegablesdelapartesuperiordelaventanaCódigo.EstaslistassedenominancuadroObjetoycuadroProcedimiento/Eventoyactualmentemuestranrespectivamentelostérminos(General)y(Declaraciones).Estaslistasmuestranlaseccióndelcódigoenlaqueestátrabajandoenestemomento,ylepermitendesplazarserápidamenteaotrasecciónsimplementeseleccionándolaenlalista.Lasección(Declaraciones)esellugarapropiadoparadeclararvariablesquevaautilizarenmásdeunasubrutina.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Obtencióndedatos>

Escrituradelasubrutinagpuser

Lasubrutinagpusersolicitaalusuariolainformaciónnecesariaparadibujaruncaminodejardín.Escribalosiguientedespuésdelafuncióndistance:

'Adquisicióndeinformaciónparaelcaminodeljardín

PrivateSubgpuser()

DimvarRetAsVariant

varRet=ThisDrawing.Utility.GetPoint(_

,"Puntoinicialdelcamino:")

sp(0)=varRet(0)

sp(1)=varRet(1)

sp(2)=varRet(2)

varRet=ThisDrawing.Utility.GetPoint(_

,"Puntofinaldelcamino:")

ep(0)=varRet(0)

ep(1)=varRet(1)

ep(2)=varRet(2)

hwidth=ThisDrawing.Utility._

GetDistance(sp,"Mitaddeanchuradelcamino:")

trad=ThisDrawing.Utility._

GetDistance(sp,"Radiodelaslosetas:")

tspac=ThisDrawing.Utility._

GetDistance(sp,"Espacioentrelosetas:")

pangle=ThisDrawing.Utility.AngleFromXAxis(_

sp,ep)

totalwidth=2*hwidth

plength=distance(sp,ep)

angp90=pangle+dtr(90)

angm90=pangle-dtr(90)

EndSub

Enlasubrutinagpuser,lalíneaDimvarRetAsVariantdeclaralavariablevarRet.Puestoqueestavariableseutilizasolamenteenestasubrutina,puededeclararseaquílocalmente,envezdehacerloenlasección(Declaraciones).

Lasiguientelínea,varRet=ThisDrawing.Utility.GetPoint(,"Puntoinicialdelcamino:"),llamaalmétodoGetPoint.Elcarácterdesubrayadosirveparaqueunalínealargaseamásfácildeleer,yaqueindicaaVBAquedebeleeresalíneaylasiguientecomosiformaranunasolalínea.Elcarácterdesubrayadopuedeeliminarsecolocandotodoelcódigoenunaúnicalínea.

ParaaccederalmétodoGetPoint,antesdebeiralobjetoThisDrawingquerepresentaeldibujoactual.DespuésdeescribirThisDrawingseescribeunpunto(.),loquesignificaquevaaaccederaalgoquehaydentrodeeseobjeto.Despuésdelpunto,seescribeUtilityyotropunto.Unavezmás,vaaaccederaalgoquehaydentrodelobjetoUtility.Finalmente,escribaGetPoint,queeselnombredelmétodoqueseestáinvocando.

ElmétodoGetPointtomadosparámetros.Elprimerparámetroesopcionalynoseutilizará.Dejeelparámetroenblancoyescribaúnicamenteunacomaparamarcarsuubicación.Elsegundoparámetroeslasolicitud,quetambiénesopcional.Paraesteparámetro,haescritounacadenaquesolicitaalusuarioqueespecifiqueelpuntoinicial.ElpuntoespecificadoporelusuariosecolocaenlavariablevarRet.Lastreslíneassiguientesdelasubrutinacopianelpuntodevueltoporelusuarioenlamatrizsp.

Elpuntofinalseobtienedelamismaforma.

ElmétodoGetDistanceseutilizaparaobtenerlamitaddelaanchuradelcamino(hwidth),elradiodelaslosetas(trad),yelespacioentreéstas(tspac).ElmétodoGetDistanceutilizadosparámetros.Elprimerparámetroesunpuntobase.Paraestevalor,usteddeterminaelpuntoinicial.Elsegundoparámetroeslasolicitud,paralaqueproporcionaunacadenaquesolicitaalusuarioeldatocorrespondiente.LointeresanteacercadelmétodoGetDistanceesquepuededevolvertantounvalorescritoenlalíneadecomandocomoladistanciaentreelpuntoinicialyunpuntoseleccionadoenAutoCAD.

Lasubrutinacontinuacalculandodiversasvariablesutilizadasmástardeenlamacro.LavariablepanglesedefineconelánguloentrelospuntosinicialyfinalysehallautilizandoelmétodoAngleFromXAxis.Laanchuradelcaminosehallamultiplicandolamitaddelaanchurapordos.Lavariableplengthsedefinecomolalongituddelcaminoysehallautilizandolafuncióndistanciaescritaanteriormente.Finalmente,secalculayseguardaelángulodelcaminomásymenos90gradosenangp90yangm90,respectivamente.

Lasiguienteilustraciónmuestralaformaenlaquelasvariablesobtenidasporgpuserespecificanlasdimensionesdelcamino.

Guardesutrabajo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Dibujodelcontornodelcamino

Ahoraquehaobtenidolaubicaciónylaanchuradelcamino,puededibujarsucontorno.Añadaelsiguientecódigobajolasubrutinagpuser:

'Dibujodelcontornodelcamino

PrivateSubdrawout()

Dimpoints(0To9)AsDouble

DimplineAsAcadLWPolyline

DimvarRetAsVariant

varRet=ThisDrawing.Utility.PolarPoint(_

sp,angm90,hwidth)

points(0)=varRet(0)

points(1)=varRet(1)

points(8)=varRet(0)

points(9)=varRet(1)

varRet=ThisDrawing.Utility.PolarPoint(_

varRet,pangle,plength)

points(2)=varRet(0)

points(3)=varRet(1)

varRet=ThisDrawing.Utility.PolarPoint(_

varRet,angp90,totalwidth)

points(4)=varRet(0)

points(5)=varRet(1)

varRet=ThisDrawing.Utility.PolarPoint(_

varRet,pangle+dtr(180),plength)

points(6)=varRet(0)

points(7)=varRet(1)

Setpline=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

EndSub

EstasubrutinadibujaelcontornodelcaminoutilizandoelmétodoAddLightweightPolyline.Estemétodorequiereunparámetro:unamatrizdepuntosquegenerelapolilínea.Debehallartodoslospuntosqueformanelobjetodepolilíneaycolocarlosenunamatrizenelordenenquedebendibujarse.Paraestapolilínea,lospuntosnecesariossonlosvérticesdelcamino.

Parahallarlosvérticesdelcamino,utiliceelmétodoPolarPoint.Estemétodoencuentraunpuntoqueestáaunánguloyunadistanciadeterminadosdesdeunpuntobase.Comienceporelpuntoinicial(sp)yencuentreelprimervérticedelcaminotrabajandoendireccióncontrariaalasagujasdelreloj.Estevérticeestaráaunadistanciaequivalentealamitaddelaanchuradelcamino(hwidth)ya-90gradosdelángulodelcamino.Puestoquedeseadibujarunrectángulocerradoparaelcamino,esepuntoseconvierteenelprimeryúltimopuntodelamatriz.Porlotanto,lascoordenadasXeYobtenidasconelmétodoPolarPointsedesplazanalaprimerayalaúltimaposicióndelamatrizdepuntos.

Losrestantesvérticesdelcaminosehallandelamismaformautilizandolalongitudylaanchuradelcamino(plengthywidth),yelángulodelcamino.CadavezqueseinvocaelmétodoPolarPoint,lascoordenadasobtenidas(varRet)secopianenlamatrizdepuntos.

Unavezidentificadoslosvérticesenlamatrizdepuntos,seinvocaelmétodoAddLightweightPolyline.ObservequeestemétodoesinvocadodesdeelobjetoModelSpace.Siejecutaraestamacro,veríaquelapolilíneatodavíanoesvisibleenAutoCAD.Lapolilíneanoserávisiblehastaqueactualicelavisualización,cosaqueharámástarde.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Dibujodelaslosetas

Ahoraquesehadesarrolladolasubrutinadeentradadedatosdeusuarioylasubrutinaparadibujarelcontorno,yasepuederellenarelcaminoconlosetascirculares.Estatarearequierealgodegeometría.

EnVBAIDE,escribaelsiguientecódigoenlaventanaCódigo,despuésdelarutinadrawout:

'Colocacióndeunahileradelosetasalolargodeladistanciadadadelcamino

'yposiblementedesfasedeésta

PrivateSubdrow(pdAsDouble,offsetAsDouble)

Dimpfirst(0To2)AsDouble

Dimpctile(0To2)AsDouble

Dimpltile(0To2)AsDouble

DimcirAsAcadCircle

DimvarRetAsVariant

varRet=ThisDrawing.Utility.PolarPoint(_

sp,pangle,pd)

pfirst(0)=varRet(0)

pfirst(1)=varRet(1)

pfirst(2)=varRet(2)

varRet=ThisDrawing.Utility.PolarPoint(_

pfirst,angp90,offset)

pctile(0)=varRet(0)

pctile(1)=varRet(1)

pctile(2)=varRet(2)

pltile(0)=pctile(0)

pltile(1)=pctile(1)

pltile(2)=pctile(2)

DoWhiledistance(pfirst,pltile)<(hwidth-trad)

Setcir=ThisDrawing.ModelSpace.AddCircle(_

pltile,trad)

varRet=ThisDrawing.Utility.PolarPoint(_

pltile,angp90,(tspac+trad+trad))

pltile(0)=varRet(0)

pltile(1)=varRet(1)

pltile(2)=varRet(2)

Loop

varRet=ThisDrawing.Utility.PolarPoint(_

pctile,angm90,tspac+trad+trad)

pltile(0)=varRet(0)

pltile(1)=varRet(1)

pltile(2)=varRet(2)

DoWhiledistance(pfirst,pltile)<(hwidth-trad)

Setcir=ThisDrawing.ModelSpace.AddCircle(_

pltile,trad)

varRet=ThisDrawing.Utility.PolarPoint(_

pltile,angm90,(tspac+trad+trad))

pltile(0)=varRet(0)

pltile(1)=varRet(1)

pltile(2)=varRet(2)

Loop

EndSub

'Dibujodelashilerasdelosetas

PrivateSubdrawtiles()

DimpdistAsDouble

DimoffsetAsDouble

pdist=trad+tspac

offset=0

DoWhilepdist<=(plength-trad)

drowpdist,offset

pdist=pdist+((tspac+trad+trad)*Sin(dtr(60)))

Ifoffset=0Then

offset=(tspac+trad+trad)*Cos(dtr(60))

Else

offset=0

EndIf

Loop

EndSub

Paracomprendercómofuncionanestassubrutinas,consultelasiguienteilustración.Lasubrutinadrowdibujaunahileradelosetasaunadistanciadadaalolargodelcaminoespecificadaporsuprimerargumento,ydesfasalahileraperpendicularmentealcaminoconunadistanciaespecificadaporelsegundoargumento.Sedeseadesfasarlaslosetasenhilerasalternasparaquecubranmásespacioysedistribuyandeformamásestética.

LasubrutinadrowhallalaubicacióndelaprimerahileramedianteelmétodoPolarPointparadesplazarlaalolargodelcaminoconladistanciaespecificadaporelprimerargumento.LasubrutinavuelveautilizarentonceselmétodoPolarPointparadesplazarseperpendicularmentealcaminoparaefectuareldesfase.LasubrutinautilizalainstrucciónWhileparacontinuardibujandocírculoshastaqueseencuentraelfinaldelcamino.ElmétodoPolarPointdelaprimerainstrucciónWhilesedesplazaalasiguienteposicióndelosetacreandounespacioequivalenteadosradiosdeloseta(trad)másunespacioentrelosetas(tspac).Elsegundobuclewhiledibujaentonceslaslosetasdelahileraenlaotradirecciónhastaqueseencuentraelotroborde.

Lasubrutinadrawtilesinvocadrowrepetidamentehastaquesedibujantodaslashilerasdelosetas.LasubrutinaWhilelooprecorrepasoapasoelcamino,invocandodrowparacadahilera.Laslosetasdelashilerasadyacentesformantriángulosequiláteros,talcomosemuestraenlailustraciónanterior.Lasaristasdeestostriángulosequivalenaldobledelradiodelalosetamáselespacioentrelosetas.Porlotanto,porlatrigonometría,ladistanciaalolargodelcaminoentrehileraseselsenode60gradosmultiplicadoporestacantidad,yeldesfasedelashilerasimpareseselcosenosesentagradosmultiplicadoporestacantidad.

LainstrucciónIfseutilizaendrawtilesparadesfasarhilerasalternas.Sieldesfaseesiguala0,defínalocomoelespacioentreloscentrosdelashilerasmultiplicadasporelcosenode60grados,talcomoseexplicóanteriormente.Sieldesfasenoesiguala0,establézcaloen0.Estoalternaeldesfasedelashilerasdelaformadeseada.

Guardesutrabajo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Integracióndeloselementos

AhorayaesposiblecombinarlassubrutinasenlamacroGardenpath.EnVBAIDEescribaelsiguientecódigoenlaventanaCódigo,despuésdelasubrutinadrawtiles:

'Ejecucióndelcomando,invocandolasfuncionesconstituyentes

Subgardenpath()

DimsblipAsVariant

DimscmdeAsVariant

gpuser

sblip=ThisDrawing.GetVariable("blipmode")

scmde=ThisDrawing.GetVariable("cmdecho")

ThisDrawing.SetVariable"blipmode",0

ThisDrawing.SetVariable"cmdecho",0

drawout

drawtiles

ThisDrawing.SetVariable"blipmode",sblip

ThisDrawing.SetVariable"cmdecho",scmde

EndSub

Lasubrutinapathinvocagpuserparaobtenerlaentradadelosdatosnecesarios.ElmétodoGetVariableseutilizaentoncesparaobtenerlosvaloresactualesdelasvariablesdesistemaBLIPMODEyCMDECHOyguardaestosvalorescomosblipyscmde.LasubrutinautilizaentonceselmétodoSetVariableparaestablecerambasvariablesdesistemaen0,desactivandomarcasauxiliaresyecodecomandos.Acontinuación,sedibujaelcaminousandolassubrutinasdrawoutydrawtiles.Finalmente,seutilizaelmétodoSetVariablepararestablecerelvalororiginaldelasvariablesdesistema.

Comopuedeverse,éstaeslaúnicasubrutina,entrelasquehaescrito,quenocomienzaconlapalabraclavePrivate,quegarantizaquelasubrutinasólopuedeinvocarsedesdeelmóduloactual.Puestoquelasubrutinagardenpathdebeestardisponibleparaelusuario,debeomitirselapalabraclavePrivate.

Guardesutrabajo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Ejecucióndelcódigopasoapaso

Ahoraejecutelamacro,recorriendoelcódigopasoapasoamedidaqueseejecuta.

EnelmenúHerr.deAutoCAD,pulseMacro Macros.EnelcuadrodediálogoMacros,seleccioneThisDrawing.gardenpathypulseEntrar.

VBAIDEapareceráenprimerplanoenlapantalla,ylaprimeralíneadelamacrogardenpathapareceráresaltada.Lalínearesaltadaeslalíneadecódigoqueestáapuntodeejecutarse.Paraejecutarlalínea,pulseF8.Lasiguientelíneadecódigoquedebeejecutarseeslasubrutinagpuser.ParaejecutarpasoapasolasubrutinagpuservuelvaapulsarF8.

Ahoraestáalprincipiodelarutinagpuser.PulseF8unavezmáspararesaltarelprimermétodoGetPoint.AntesdeejecutarestalíneaabralaventanaLocalespulsandoVer VentanaLocales.EstaventanasemuestraenlaparteinferiordeVBAIDE.TodaslasvariableslocalesysusvaloressemuestranenlaventanaLocalesmientrasseejecutalamacro.

AhorapulseF8paraejecutarelmétodoGetPoint.Observequeelresaltadodesapareceynosepresentanuevocódigo.EstoesporqueelmétodoGetPointestáesperandoaqueelusuarioespecifiqueunpuntoenAutoCAD.VuelvaalaventanadeAutoCAD.VerálasolicitudquehaespecificadoenlallamadaGetPointdelalíneadecomandos.Especifiqueunpunto.

Elcontrolvuelveahoraalamacro.LalíneaquesiguealallamadaalmétodoGetPointquedaresaltada.ContinúelaejecuciónpasoapasodelcódigopulsandoF8.RecuerdevolveralaventanadeAutoCADcuandotengaqueintroducirdatos.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Ejecucióndelamacro

Noesnecesariorecorrerpasoapasoelcódigocadavezqueseejecutalamacro.SepuedeejecutarlamacrodesdeelmenúHerr.pulsandoMacro Macros,seleccionandounamacroypulsandoEjecutar.Estolepermiteverelflujodeejecucióndelamismaformaenqueloharíaelusuario.EjecutelamacrodesdeAutoCAD,especificandolossiguientesvalores:

Puntoinicialdelcamino:2,2

Puntofinaldelcamino:9,8

Mitaddeanchuradelcamino:2

Radiodelaslosetas:0,2

Espacioentrelosetas:0,1

Esteejemplodeberíadibujaruncaminodejardíncomoelquesemuestraenlasiguientefigura:

PuedeexperimentarconlamacroGardenpathespecificandocondatosdiferentes.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>

Adicióndeinterfazdecuadrodediálogo

LamacroGardenpathsehaescritoparaaceptarlaintroduccióndedatosenlalíneadecomando.Paraañadircuadrosdediálogo,utilicelosformulariosdeVBAIDE.

Primero,copielaversiónterminadadegardenpath.dvbenotroarchivo,gpdialog.dvb.Luegoarrastregpdialog.dvbaAutoCAD.

CreacióndelcuadrodediálogoUtilizacióndelaventanaProyectoparanavegarporelproyectoActualizacióndelcódigoexistenteAdicióndecódigoalcuadrodediálogo

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Adicióndeinterfazdecuadrodediálogo>

Creacióndelcuadrodediálogo

Elcuadrodediálogoquevaacrearcontienedosbotonesdeopción(siseseleccionauno,elotrosedeselecciona)paraescogerlaformadelaloseta:circularopoligonal.Elcuadrodediálogoincluyetambiéntrescajasdetextoparaintroducirlossiguientesvaloresnuméricos:elradiodelaslosetas,elespaciadoentrelasmismasyelnúmerodeladosdelaloseta(queestásólodisponiblesisehaseleccionadolaopciónPolígono).

ParacrearuncuadrodediálogoenVBAIDE

1. EnelmenúInsertar,pulseUserFormparaabrirunnuevoformulario.Semuestrandosventanas,uncuadrodeherramientasyunformularioenblancodeusuario.

2. Seleccioneyarrastreunoporunolossiguientescontrolesdesdeelcuadrodeherramientasysitúelosenelformulariodeusuario.Tendráquecolocardosbotonesdeopción(

),tresetiquetas(

),trescuadrosdetexto(

)ydosbotonesdecomando(

),talcomoseapreciaenelsiguienteformulario:

3. Cierreelcuadrodeherramientas.

Paraestablecerlaspropiedadesdeloscontrolesdebotóndeopción

1. Enelformulariodeusuario,seleccioneelcontrolOptionButton1.EnelmenúVer,pulseVentanaPropiedadesycambielassiguientespropiedadesparaOptionButton1:(Name)=gp_polyCaption=PolígonoControlTipText=LosetaenformadepolígonoAccelerator=P

2. Enelformulariodeusuario,seleccioneelcontrolOptionButton2.EnlaventanaPropiedades,cambielassiguientespropiedadesparaOptionButton2:(Name)=gp_circCaption=CírculoControlTipText=LosetaenformadecírculoAccelerator=I

Paradefinirlaspropiedadesdeloscontrolesdeetiqueta

1. Enelformulariodeusuario,seleccioneelcontrolLabel1.Enlaventana

Propiedades,cambielassiguientespropiedadesparaLabel1:(Name)=label_tradCaption=RadiodelaslosetasTabStop=True

2. Enelformulariodeusuario,seleccioneelcontrolLabel2.EnlaventanaPropiedades,cambielassiguientespropiedadesparaLabel2:(Name)=label_tspacCaption=EspacioentrelosetasTabStop=True

3. Enelformulariodeusuario,seleccioneelcontrolLabel3.EnlaventanaPropiedades,cambielassiguientespropiedadesparaLabel3:(Name)=label_tsidesCaption=NúmerodecarasTabStop=True

Paradefinirlaspropiedadesdeloscontrolesdelcuadrodetexto

1. Enelformulariodeusuario,seleccioneelcontrolTextBox1.EnlaventanaPropiedades,cambielassiguientespropiedadesparaTextBox1:(Name)=gp_trad

2. Enelformulariodeusuario,seleccioneelcontrolTextBox2.EnlaventanaPropiedades,cambielassiguientespropiedadesparaTextBox2:(Name)=gp_tspac

3. Enelformulariodeusuario,seleccioneelcontrolTextBox3.EnlaventanaPropiedades,cambielassiguientespropiedadesparaTextBox3:(Name)=gp_tsides

Paraestablecerlaspropiedadesdeloscontrolesdebotóndecomandoylaventanadeformulario

1. Enelformulariodeusuario,seleccioneelcontrolCommandButton1.EnlaventanaPropiedades,cambielassiguientespropiedadespara

CommandButton1:(Name)=acceptCaption=AceptarControlTipText=AceptalasopcionesAccelerator=ODefault=True

2. Enelformulariodeusuario,seleccioneelcontrolCommandButton2.EnlaventanaPropiedades,cambielassiguientespropiedadesparaCommandButton2:(Name)=cancelCaption=CancelarControlTipText=CancelalaoperaciónAccelerator=C

3. Seleccionetodoelformulariohaciendoclicenelfondodelformulario,lejosdecualquiercontrol.EnlaventanaPropiedades,cambielassiguientespropiedadesparaelformulario:(Name)=gpDialogCaption=CaminodejardínElformulariodeberáahorateneresteaspecto:

4. Guardesutrabajo.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Adicióndeinterfazdecuadrodediálogo>

UtilizacióndelaventanaProyectoparanavegarporelproyecto

EnVBAIDE,laventanaProyectocontieneelnombreylaubicacióndelproyecto,unacarpetallamadaAutoCADObjetosyunacarpetallamadaFormularios.(PuedequetengaquepulsarAlternarcarpetasparaverlascarpetas.)CuandoseabrelacarpetaAutoCADObjetos(puedequeyaestéabierta),puedeverseuniconodedibujoyelnombreThisDrawing.AlabrirlacarpetaFormularios(puedequeyaestéabierta),puedeverseuniconodeformularioyelnombregpDialog,elformularioqueacabadecrear.

PuedeutilizarlaventanaProyectoparanavegarporelcódigoyparaqueleayudeasaberdóndeestátrabajando.Porejemplo,paraverelcódigoasociadoconelformularioquehacreado,resaltegpDialogenlaventanaProyectoypulseVercódigo.

SeabrelaventanaCódigocorrespondientealformulario.

ResalteThisDrawingenlaventanaProyecto.PuedeverelcódigohaciendoclicenVercódigo.Todoelcódigoquehaescritoestáenestaventana.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Adicióndeinterfazdecuadrodediálogo>

Actualizacióndelcódigoexistente

Ahoraquehacreadouncuadrodediálogo,puedeañadiromodificarcódigo.

Paramodificarelcódigoexistente

1. AbraelcódigocorrespondienteaThisDrawing,sitodavíanoestáabierto.

2. ActualicelassiguienteslíneasdelasecciónDeclaraciones:

PublictradAsDouble'Actualizado

PublictspacAsDouble'Actualizado

PublictsidesAsInteger'Adición

PublictshapeAsString'Adición

Puestoqueelcódigodelformularioaccedeatradytspac,haactualizadosusdefinicionesparahacerlaspúblicas.Lasvariablesprivadassóloestándisponiblesenelmóduloenelquesehandefinido,porloquelasvariablesdebenconvertirseenpúblicas.Además,haañadidotsidesparaelnúmerodeladosdelaslosetaspoligonalesytshapeparaqueelusuarioseleccionelaformadelaslosetas,quepuedeseruncírculoounpolígono.

3. Vayaalasubrutinagpuser.Eliminelasdoslíneasqueobtienenelradiodelaslosetasyelespacioentreellas,puestoqueestainformaciónseobtieneahoraatravésdelformulario.Enconcreto,eliminelosiguiente:

trad=ThisDrawing.Utility._

GetDistance(sp,"Radiodelaslosetas:")

tspac=ThisDrawing.Utility._

GetDistance(sp,"Espacioentrelosetas:")

4. Añadalaslíneasquecarganymuestranelformulario.Añadalassiguienteslíneasenellugardelaslíneaseliminadasenelpaso3:

LoadgpDialog

gpDialog.Show

5. Añadaunasubrutinaalfinaldelarchivodecódigoquedibujatantolaslosetascircularescomolaslosetaspoligonales:

'Dibujalalosetaconlaformaseleccionada

SubDrawShape(pltile)

DimangleSegmentAsDouble

DimcurrentAngleAsDouble

DimangleInRadiansAsDouble

DimcurrentSideAsInteger

DimvarRetAsVariant

DimaCircleAsAcadCircle

DimaPolygonAsAcadLWPolyline

ReDimpoints(1Totsides*2)AsDouble

'Ramabasadaeneltipodeformaadibujar

SelectCasetshape

Case"Círculo"

SetaCircle=ThisDrawing.ModelSpace._

AddCircle(pltile,trad)

Case"Polígono"

angleSegment=360/tsides

currentAngle=0

ForcurrentSide=0To(tsides-1)

angleInRadians=dtr(currentAngle)

varRet=ThisDrawing.Utility.PolarPoint(pltile,_

angleInRadians,trad)

points((currentSide*2)+1)=varRet(0)

points((currentSide*2)+2)=varRet(1)

currentAngle=currentAngle+angleSegment

NextcurrentSide

SetaPolygon=ThisDrawing.ModelSpace._

AddLightWeightPolyline(points)

aPolygon.Closed=True

EndSelect

EndSub

EstasubrutinautilizalainstrucciónSelectCasepararamificarelcontroldelprogramasegúneltipodeformaquesedebadibujar.Lavariabletshapeseutilizaparadeterminareltipodeforma.

6. Acontinuación,vayaalasubrutinadrow.Encuentrelosdoscasosenlosqueaparecelasiguientelínea:

Setcir=ThisDrawing.ModelSpace.AddCircle(pltile,trad)

Cambieestaslíneasparaquedibujenlaformacorrespondientedelosetas,comosemuestraacontinuación:

DrawShape(pltile)'Actualizado

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Adicióndeinterfazdecuadrodediálogo>

Adicióndecódigoalcuadrodediálogo

AhorapuedeeliminarelcódigoparalacreacióndelosetascirculareseinvocarlasubrutinaDrawShapeparaquedibujelaformaapropiada.

Paraañadirgestoresdeeventosparaelcuadrodediálogo

1. AbrirelcódigoparagpDialog.

2. Escribaelsiguientecódigoenlapartesuperiordelaventana:

PrivateSubgp_poly_Click()

gp_tsides.Enabled=True

ThisDrawing.tshape="Polígono"

EndSub

PrivateSubgp_circ_Click()

gp_tsides.Enabled=False

ThisDrawing.tshape="Círculo"

EndSub

Observequelassubrutinasgp_poly_Click()ygp_circ_Click()tienenelmismonombrequelosdoscontrolesdeopciónañadidosanteriormente,conlaadiciónde_Click.Estassubrutinasseejecutanautomáticamentecuandoelusuariopulsaenelcontrolrespectivo.ObservetambiénqueelcuadroObjetomuestraloscontrolesdelformulario,ordenadosalfabéticamenteporlapropiedad"Name"(nombre).

3. SitúeelcursorsobrelalíneaPrivateSubgp_poly_Click()yabraelcuadroProcedimiento/Evento.Podráverunalistadetodosloseventosalosquepuederesponderparaelcontroldeopcióngp_poly.LasdossubrutinasquehaescritogestionaneleventoClick.TambiénpuedeañadircódigopararesponderaleventoDblClick,queseejecutaráautomáticamentecuandoelusuariohagadobleclicenelcontrol.Puedeañadircódigoparacualquieradeloseventosdelalista.Estostiposdesubrutinassedenominangestoresdeeventos.Observeelcódigoquehaescritoparaestosdosgestoresdeeventos.ElprimergestordeeventosrespondealeventoClickquecorrespondealcontroldeopcióngp_poly.Laprimeralíneadecódigoactivaelcuadrodetextoparaelnúmerodelados.Estecuadrodetextosóloestádisponibleparapolígonos,porloquenoestáactivadoanoserqueseleccioneelcontrolPolígono.LasiguientelíneadecódigoestablecelavariabletshapecomoPolígono.ElsegundogestordeeventosrespondealeventoClickparaelcontroldeopcióngp_circ.EstegestordesactivaelcuadrodetextoparanúmerodeladosyestablecelavariabletshapeenCírculo.

4. AñadaelsiguientegestordeeventosparaelbotónAceptar:

PrivateSubaccept_Click()

IfThisDrawing.tshape="Polígono"Then

ThisDrawing.tsides=CInt(gp_tsides.text)

If(ThisDrawing.tsides<3#)Or_

(ThisDrawing.tsides>1024#)Then

MsgBox"Escribaunvalorentre3y"&_

"1024paraelnúmerodelados."

ExitSub

EndIf

EndIf

ThisDrawing.trad=CDbl(gp_trad.text)

ThisDrawing.tspac=CDbl(gp_tspac.text)

IfThisDrawing.trad<0#Then

MsgBox"Escribaunvalorpositivoparaelradio."

ExitSub

EndIf

If(ThisDrawing.tspac<0#)Then

MsgBox"Escribaunvalorpositivoparaelespaciado."

ExitSub

EndIf

GPDialog.Hide

EndSub

Estecódigocompruebasilaelecciónfinaldelaformahasidoladepolígono.Siesasí,elcódigoobtieneelnúmerodeladosdelcontrolgp_tsides.ElvalorqueintroduceelusuariosealmacenaenlapropiedadText.Puestoquesealmacenacomocadenadetexto,lacadenadebeconvertirsealenteroequivalenteutilizandolafunciónCInt.Unavezobtenido,elgestordeeventoscompruebaelrangodelvalorparaasegurarqueseencuentraentre3y1024.Sinoesasí,semuestraunmensajeysesaledelgestordeeventossinquetengalugarningúnotroproceso.Elresultadoesqueapareceunmensajeyqueelusuariotieneotraoportunidadparacambiarelvalor.DespuésdepulsardenuevoelbotónAceptar,estegestordeeventosseejecutayvuelveacomprobarelvalor.Lamacroobtienevaloresderadioydeespacio,peroestosvaloressondobles,noenteros,yseobtienenutilizandolafunciónCDbl.Estosvalorestambiénseverificanparacomprobarquesonpositivos.Unavezobtenidosyverificadoslosvalores,lainstruccióngpDialog.Hideocultaelformulario,devolviendoelcontrolalasubrutinaqueinvocóelformularioporprimeravez.

5. AñadaelsiguientegestordeeventosparaelbotónCancelar:

PrivateSubcancel_Click()

UnloadMe

Final

EndSub

Estesencillogestordeeventosdescargaelformularioycompletala

macro.Loúnicoquetodavíanohahechoesañadirlosvaloresinicialesparaelformulario.HayuneventollamadoInitializequeseaplicaalformulario.Seejecutacuandosecargaelformularioporprimeravez.

6. Añadaelsiguientegestordeeventosparalainicializacióndeformularios:

PrivateSubUserForm_Initialize()

gp_circ.Value=True

gp_trad.Text=".2"

gp_tspac.Text=".1"

gp_tsides.Text="5"

gp_tsides.Enabled=False

ThisDrawing.tsides=5

EndSub

Estecódigoestablecelosvaloresinicialesdelformularioyparalavariabletsides.Latsidesdebeestablecerseenunnúmeropositivomayorque3,aunqueelusuarioseleccioneuncírculo.Paracomprenderesto,fíjeseenlasubrutinaDrawShapequehaescritoanteriormente.Hayunavariablellamadapointsquesedefineutilizandoelnúmerodeladosdelpolígono.Tantosisesolicitaunaformadepolígonocomosino,seasignamemoriaalavariable.Porestemotivo,tsidesdebeestardentrodeunrangoválido.Elusuariopuedecambiarestevalordurantelaejecucióndelamacro.

AhorapuedeguardarlamacroyejecutarladesdeAutoCAD.

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>

ComparaciónentreVisualLISPyActiveX/VBA

LamayoríadelasfuncionesdisponiblesenlainterfazdeVisualLISPseencuentrantambiénenlainterfazdeActiveXyVBA.EsteapéndicepretendeservirdereferenciaalosdesarrolladoresqueyaconocenVisualLISP,paraqueconozcanlacorrespondenciadelasfuncionesenActiveXyVBA.

ComparaciónentreVisualLISPyActiveX/VBA

¿Comentarios?

ManualdeldesarrolladordeActiveXyVBA>ComparaciónentreVisualLISPyActiveX/VBA>

ComparaciónentreVisualLISPyActiveX/VBA

EnlasiguientetablasecomparanlasfuncionesdeVisualLISPconlosoperadoresylasfuncionessimilaresdeActiveX®,VBAyVisualBasic6.LosequivalentesdeActiveXAutomationestánindicadospor“AutoCAD.Application.”ylosequivalentesdeVisualBasic6seenumerancomofunciónuoperador.

ComparaciónentreVisualLISPyActiveX/VBA

FuncióndeAutoLISP EquivalentedeActiveX,VBAoVisualBasic6

+(suma) +(operadordesuma)

–(resta) -(operadorderesta)

*(multiplicación)

*(operadordemultiplicación)

/(división) /(operadordedivisión)

=(esigualque) =(igualque,operadordecomparación)

!=(distintode) <>(distintode,operadordecomparación)

<(menorque) <(menorque,operadordecomparación)

<=(menoroigualque)

<=(menoroigualque,operadordecomparación)

!=(distintode) <>(distintode,operadordecomparación)

>(mayorque) >(mayorque,operadordecomparación)

>(mayorqueesigualque)

>=(mayoroigualque,operadordecomparación)

~(Nobinario) OperadorNo

1+(incremento)

Utilizar+(operadordesuma)

1-(decremento) Utilizar–(operadorderesta)

abs FunciónAbs

acad_colordlg Noexiste

acad_helpdlg BuscarHELPenelíndicedeAyudaenpantalla

acad_strlsort BuscarSORTenelíndicedeAyudaenpantalla

action_tile Utilizareleditordediálogo

add_list Utilizareleditordediálogo

ads MétodoAutoCAD.Application.ListADS

alert FunciónMsgBox

and OperadorAnd

angle MétodoAutoCAD.Application.ActiveDocument.Utility.AngleFromXAxis

angtof MétodoAutoCAD.Application.ActiveDocument.Utility.

angtos MétodoAutoCAD.Application.ActiveDocument.Utility.

MétodoAngleToString

append Utilizarlasfuncionesdegestióndematrices

apply Noexiste

arx MétodoAutoCAD.Application.ListARX

arxload MétodoAutoCAD.Application.LoadARX

arxunload MétodoAutoCAD.Application.UnloadARX

ascii FunciónAsc

assoc Noexiste

atan FunciónAtn

atof FunciónCDbl

atoi FunciónCint

atom BuscarISenelíndicedeAyudaenpantalla

atoms-family Noexiste

autoarxload Noexiste

autoload Noexiste

Boole Utilizaroperadoreslógicos

boundp BuscarISenelíndicedeAyudaenpantalla

car/cdr Utilizarlasfuncionesdegestióndematrices

chr FunciónChr

client_data_tile Utilizareleditordediálogo

close MétodoAutoCAD.Application.Documents.Close

comando MétodoAutoCAD.ActiveDocument.SendCommand

cond InstrucciónSelectCase

cons UsarlasfuncionesdegestióndematricesoelmétodoAutoCAD.Application.collection.Add<entityname>

cos FunciónCos

cvunit Utilizarlasfuncionesdeconversión

defun PalabrasclaveFunctionyEndFunction

dictadd MétodoAutoCAD.Application.ActiveDocument.Dictionaries.Add

dictnext MétodoAutoCAD.Application.ActiveDocument.Dictionaries.Item

dictremove AutoCAD.Application.ActiveDocument.Dictionaries.MétodoDictionary.Delete

dictrename AutoCAD.Application.ActiveDocument.Dictionaries.MétodoDictionary.Rename

dictsearch AutoCAD.Application.ActiveDocument.Dictionaries.MétodosDictionary.GetNameyGetObject

dimx_tileydimy_tile

Utilizareleditordediálogo

distance MétodoAutoCAD.Application.Utility.GetDistanceinteractivo.

distof Noexiste

done_dialog Utilizareleditordediálogo

end_image Utilizareleditordediálogo

end_list Utilizareleditordediálogo

entdel AutoCAD.Application.ActiveDocument.collection_object.MétodoDelete

entget AutoCAD.Application.ActiveDocument.collection_object.propertyproperties

entlast AutoCAD.Application.ActiveDocument.Modelspace.Item(count-1)

entmake AutoCAD.Application.ActiveDocument.Modelspace.MétodoAdd<entityname>

entmakex AutoCAD.Application.ActiveDocument.Modelspace.MétodoAdd<entityname>

entmod Utilizarcualquieradelaspropiedadesdelecturayescrituradelobjeto

entnext MétodoAutoCAD.Application.ActiveDocument.collection.Item

entsel Objeto/métodos/propiedadesAutoCAD.Application.ActiveDocument.SelectionSets

entupd AutoCAD.Application.ActiveDocument.Modelspace.object.MétodoUpdate

eq Noexiste

equal OperadorEqv

*error* Objeto/método/propiedadesdeerror

eval Noexiste

exit MétodoAutoCAD.Application.Quit

exp FunciónExp

expand Noexiste

expt ^(operadorexponencial)

fill_image Utilizareleditordediálogo

findfile FunciónDir

fix FuncionesFix,Int,Cint

float FunciónCDbl

foreach InstrucciónForEach...Next

gc AutoCAD.Application.ActiveDocument.PurgeAll

gcd Noexiste

get_attr Utilizareleditordediálogo

get_tile Utilizareleditordediálogo

getangle MétodoAutoCAD.Application.ActiveDocument.Utility.GetAngle

getcfg PropiedadAutoCAD.Application.Preferences.property

getcname Noexiste

getcorner MétodoAutoCAD.Application.ActiveDocument.Utility.GetCorner

getdist MétodoAutoCAD.Application.ActiveDocument.Utility.GetDistance

getenv PropiedadAutoCAD.Application.Preferences.property

getfiled Utilizarelcuadrodediálogodearchivo

getint MétodoAutoCAD.Application.ActiveDocument.Utility.GetInteger

getkword MétodoAutoCAD.Application.ActiveDocument.Utility.GetKeyword

getorient MétodoAutoCAD.Application.ActiveDocument.Utility.MétodoGetOrientation

getpoint MétodoAutoCAD.Application.ActiveDocument.Utility.GetPoint

getreal MétodoAutoCAD.Application.ActiveDocument.Utility.GetReal

getstring MétodoAutoCAD.Application.ActiveDocument.Utility.GetString

getvar MétodoAutoCAD.Application.GetVariable

graphscr AppActivateAutoCAD.Application.Caption

grclear Funciónanticuada

grdraw Noexiste

grread Noexiste

grtext AutoCAD.Application.ActiveDocument.Utility.Prompt

grvecs Noexiste

handent AutoCAD.Application.ActiveDocument.ModelSpace.object.PropiedadHandle

help BuscarHELPenelíndicedeAyudaenpantalla

if InstrucciónIf…Then…Else

initget MétodoAutoCAD.Application.ActiveDocument.Utility.InitializeUserInput

inters AutoCAD.Application.ActiveDocument.Modelspace.object.IntersectWith

itoa FunciónStr

lambda Noexiste

last arrayname(UBound(arrayname))

length FunciónUBound

(lista) InstrucciónReDim

listp FunciónIsArray

load_dialog Utilizareleditordediálogo

load AutoLISPnopuedeutilizarseconAutomation

log FunciónLog

logand FunciónAnd

logior FunciónOr

lsh FunciónImp

mapcar Noexiste

max FunciónMax

mem Noexiste

member Utilizarcolección

menucmd ObjetoAutoCAD.Application.MenuBar

menugroup ObjetoAutoCAD.Application.MenuGroup

min FunciónMin

minusp Usarsintaxis<0

mode_tile Utilizareleditordediálogo

namedobjdict ColecciónAutoCAD.Application.ActiveDocument.

nentsel AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.SelectAtPoint

nentselp AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.SelectAtPoint

new_dialog Utilizareleditordediálogo

not Utilizarlosoperadoreslógicos

nth Utilizarsintaxisdeobjeto(n)

null FunciónIsNull

numberp TypeName(función)

open FunciónOpen

or Utilizarlosoperadoreslógicos

osnap Noexiste(SepuedeutilizarelmétodoSetVariableparacontrolarlavariabledesistemaOSMODE.)

polar MétodoAutoCAD.Application.ActiveDocument.Utility.PolarPoint

prin1 AutoCAD.Application.ActiveDocument.Utility.Prompt

princ AutoCAD.Application.ActiveDocument.Utility.Prompt

print AutoCAD.Application.ActiveDocument.Utility.Prompt

progn Noexiste

prompt AutoCAD.Application.ActiveDocument.Utility.Prompt

quit MétodoAutoCAD.Application.Quit

quote Noexiste

read Noexiste

read-char FunciónInput

read-line FunciónLineInput

redraw AutoCAD.Application.ActiveDocument.Modelspace.object.MétodoUpdate

regapp AutoCAD.Application.ActiveDocument.MétodoRegisteredApplications.Add

rem FunciónMod

repeat For… Each,While,

reverse Noexiste

rtos MétodoAutoCAD.Application.ActiveDocument.Utility.RealToString

set FunciónSet

set_tile Utilizareleditordediálogo

setcfg PropiedadAutoCAD.Application.Preferences.property

setfunhelp Noexiste

setq FunciónSet

setvar MétodoAutoCAD.Application.SetVariable

sin FunciónSin

setview AutoCAD.Application.ActiveDocument.Viewports.Viewport.MétodoSetView

slide_image Utilizareleditordediálogo

snvalid Noexiste

sqrt FunciónSqr

ssadd MétodoAutoCAD.Application.ActiveDocument.SelectionSets.Add

ssdel AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.Delete

ssget AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.SelectOnScreen

ssgetfirst Noexiste

sslength AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.Count

ssmemb CompararIDdeobjetoconlosmiembrosdeSelectionSet

ssname AutoCAD.Application.ActiveDocument.SelectionSets.PropiedadSelectionSet.Name

ssnamex Noexiste

sssetfirst AutoCAD.Application.ActiveDocument.PickfirstSelectionSet

startapp FunciónShell

start_dialog Utilizareleditordediálogo

start_image Utilizareleditordediálogo

start_list Utilizareleditordediálogo

strcase FunciónStrConv

strcat Operador&

strlen FunciónLen

subst Noexiste

substr FunciónMid

tablero Noexiste

tblnext AutoCAD.Application.ActiveDocument.collection_object.MétodoItem

tblobjname AutoCAD.Application.ActiveDocument.collection_object.MétodoName

tblsearch AutoCAD.Application.ActiveDocument.collection_object.MétodoName

term_dialog Utilizareleditordediálogo

terpri Noexiste

textbox AutoCAD.Application.ActiveDocument.space.object.MétodoGetBoundingBox

textpage Noexiste

textscr Noexiste

trace Noexiste

trans MétodoAutoCAD.Application.ActiveDocument.Utility.MétodoTranslateCoordinates

type TypeName(función)

unload_dialog Utilizareleditordediálogo

untrace Noexiste

vector_image Utilizareleditordediálogo

ver PropiedadAutoCAD.Application.Version

ventanas ColecciónAutoCAD.Application.ActiveDocument.

wcmatch OperadorLike

while While… Wend

write-char FunciónPrint

write-line FunciónPrint

xdroom Noexiste

xdsize Noexiste

zerop Usar=0sintaxis

¿Comentarios?

top related