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

704
<$nopage>ActiveX Automation (interface):proyectos de automatización. <$nopage>Índice de colores de AutoCAD (números). <$nopage>Color (propiedad):<$nopage>TrueColor (propiedad):<$nopage>VB:proyectos de automatización. <$nopage>VBA:proyectos de automatización. <$nopage>Visual Basic para aplicaciones. <$nopage>Visual Basic. Lice<$nopage>proyectos de automatización:migrar a AutoCAD 2004: <$nopage>proyectos:automatización. <$nopage>nombres de colores estándar. Manual del desarrollador de ActiveX y VBA > Introducción En esta introducción se explica el concepto de exposición de objetos de AutoCAD a través de una interfaz de ActiveX Automation y de la programación de estos objetos en el entorno de programación Visual Basic para aplicaciones. Presentación general de la tecnología ActiveX de AutoCAD Presentación general de la interfaz entre AutoCAD y Visual Basic para aplicaciones (VBA) Uso combinado de ActiveX y VBA en AutoCAD Organización de este manual Para obtener más información Código de ejemplo Migración de proyectos de automatización ¿Comentarios?

Upload: dokien

Post on 29-Sep-2018

247 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 2: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 3: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Laspantallasdedibujo,comovistasyventanasgráficas,sonobjetos.

SeconsideranobjetosinclusoeldibujoylaaplicaciónAutoCAD.

¿Comentarios?

Page 4: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 5: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

CómoestáintegradoVBAenAutoCAD

¿Comentarios?

Page 6: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 7: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

MicrosoftparaVBAestáincluidaenlaAyudadeAutoCADVBAypuedeaccederseaelladesdeelIDEdeVBAconunodelossiguientesmétodos:

PulsandolateclaF1

EligiendoAyudaenlabarrademenúsdelIDEdeVBA.

HaciendoclicenelsignodeinterrogacióndelabarradeherramientasdelIDEdeVBA.UsodeMicrosoft.NETFrameworkRequisitosyrestricciones

¿Comentarios?

Page 8: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 9: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 10: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Requisitosyrestricciones

Siinstala,reinstala,odesinstalaMicrosoftOfficeuotrasaplicacionesVBAdespuésdeinstalarAutoCAD,reinstaleAutoCADyreinicieelsistema.

¿Comentarios?

Page 11: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 12: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Introducción>

Organizacióndeestemanual

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

¿Comentarios?

Page 13: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Introducción>

Paraobtenermásinformación

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

¿Comentarios?

Page 14: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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”.

Page 15: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 16: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 17: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 18: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 19: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 20: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 21: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 22: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 23: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 24: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

SeadmiteelusodeVisualStudio.NETparadirigirypersonalizarAutoCADmedianteCOMAutomation.

¿Comentarios?

Page 25: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 26: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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.

Page 27: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Alertadevirus

¿Comentarios?

Page 28: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 29: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Descargadeunproyecto

Aldescargarunproyectoseaumentalamemoriadisponibleyseagilizalautilizacióndelalistadeproyectoscargadospuessereducesulongitud.

Noesposibledescargarproyectosincrustadosoproyectosalosquehacenreferenciaotrosproyectoscargados.

ParadescargarunproyectoVBA

PuededescargarunproyectoVBAseleccionándoloyeligiendoDescargar,obienmedianteelcomandoVBAUNLOAD,elcualsolicitaelproyectoquesedeseadescargar.

¿Comentarios?

Page 30: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Incrustacióndeunproyectoenundibujo

Cuandoseincrustaunproyectoseintroduceunacopiadelmismoenlabasededatosdedibujos.Elproyectoestarácargadoodescargadosegúnestéabiertoocerradoeldibujoquelocontiene.

Undibujopuedecontenersólounproyectoincrustado.Siundibujotieneyaunproyectoincrustado,debeextraerloantesdepoderincrustarotroproyecto.

ParaincrustarunproyectoenundibujodeAutoCAD

1. AbraelAdministradordeVBAyseleccioneelproyectoquedeseeincrustar.

2. ElijaIncluir.

¿Comentarios?

Page 31: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 32: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Creacióndeunproyecto

Losproyectosnuevossecreancomoproyectosglobalesnoguardados.Unavezcreado,puedeincrustarelproyectoenundibujooguardarloenunarchivodeproyecto.

ParacrearunproyectoVBA

1. AbraelAdministradordeVBA.

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

¿Comentarios?

Page 33: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>

Guardadodelproyecto

Losproyectosincrustadosseguardansiemprequeseguardaeldibujo.LosproyectosglobalesdebenguardarsedesdeelAdministradordeVBAodesdeelIDEdeVBA

ParaguardarunproyectoconelAdministradordeVBA

1. AbraelAdministradordeVBAyseleccioneelproyectoquedeseeguardar.

2. PulseGuardar.SeabriráelcuadrodediálogoGuardarcomo.

3. Seleccioneelnombredearchivoparaelproyectoquedeseeguardar.

4. PulseGuardar.

¿Comentarios?

Page 34: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

Gestióndemacros

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

UsodelcuadrodediálogoMacrosEjecucióndeunamacroEdicióndeunamacroRevisióndeunamacropasoapasodeopcionesdeproyectos

¿Comentarios?

Page 35: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 36: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 37: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 38: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>

Edicióndeunamacro

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

Paraeditarunamacro

1. AbraelcuadrodediálogoMacrosyseleccionelamacroquedeseeeditar.

2. PulseEditar.

¿Comentarios?

Page 39: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>

Revisióndeunamacropasoapaso

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

Pararevisarunamacropasoapaso

1. EnelcuadrodediálogoMacros,seleccionelamacroquedeseerevisar.

2. ElijaEntrar.

¿Comentarios?

Page 40: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 41: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Elmecanismodeprotecciónantivirusmuestraunmensajedeadvertenciaintegradosiemprequeseabreundibujoquepuedatenervirusdemacros.

ParadefinirlasopcionesdeunproyectoVBAdeAutoCAD

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

2. EnelcuadrodediálogoMacros,elijaOpcionesparaabrirelcuadrodediálogocorrespondiente.

3. EnelcuadrodediálogoOpciones,seleccionelasopcionesquedeseaactivar.

4. PulseAceptar.

¿Comentarios?

Page 42: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 43: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 44: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 45: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

Definicióndecomponentesdeunproyecto

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

ObjetosFormulariosMódulosestándarMódulosdeclaseReferenciasAdicióndecomponentesnuevos

¿Comentarios?

Page 46: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Objetos

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

¿Comentarios?

Page 47: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Formularios

Elcomponenteformulariocontieneloscuadrosdediálogopersonalizadosquesehayancreadoparautilizarconelproyecto.

¿Comentarios?

Page 48: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Módulosestándar

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

¿Comentarios?

Page 49: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Módulosdeclase

Elcomponentemódulodeclasecontienetodoslosobjetosdelusuario,queestándefinidoscomoclases.

¿Comentarios?

Page 50: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Referencias

Elcomponentereferenciacontienetodaslasreferenciasaotrosproyectosobibliotecas.

¿Comentarios?

Page 51: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 52: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 53: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 54: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 55: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 56: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 57: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 58: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

denombrealproyecto

Elnombredelproyectoyelnombredelarchivo.dvbdondeseguardaelproyectosondistintos.Elnombredelarchivo.dvbseasignaalguardarelproyecto.ElnombredelproyectosedefineenlaventanadepropiedadesdelIDEdeVBA.

Sinodesignaunnombredeproyectoyunnombredearchivo,AutoCADproporcionalossiguientesnombrespordefecto:

Nombredelproyecto:ACADProject

Nombredelarchivo:Project.dvb

Paracambiarelnombredeunproyecto

1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoquedeseecambiar.

2. Enlaventanadepropiedades,cambielapropiedadNombredelproyecto.

Page 59: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Paracambiarelnombredearchivodeunproyecto

1. EnelIDEdeVBA,elijalaopciónGuardardelmenúArchivo.

2. EnelcuadrodediálogoGuardarcomo,escribaelnuevonombreylaubicacióndelarchivodeproyecto.

¿Comentarios?

Page 60: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 61: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 62: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 63: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>

DefinicióndeopcionesdelIDEdeVBA

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

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

EditorFormatodeleditorGeneralAcoplar

¿Comentarios?

Page 64: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 65: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Formatodeleditor

LafichaFormatodeleditordeterminaelaspectodelcódigo.

Esposible:

Cambiarelcolordelcódigo

Designarloselementosdelalistadetexto

Cambiarelprimerplano

Cambiarelfondo

Cambiarlosindicadoresdemargen

Cambiareltipodeletradeltextoysutamaño

Mostraruocultarelindicadordemargen

Mostraruocultareltextodeejemplodelosparámetros

¿Comentarios?

Page 66: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 67: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Acoplar

Estafichapermiteelegirlasventanasquepuedenacoplarse.

¿Comentarios?

Page 68: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 69: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 70: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>

Obtencióndemásinformación

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

¿Comentarios?

Page 71: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 72: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

incrustadosenundibujoabiertosiloshay.

CuadrodediálogoMacros

EnelcuadrodediálogoMacrospuedeejecutar,suprimirycrearmacros,asícomoaccederalasopcionesdeproyectosVBA.

¿Comentarios?

Page 73: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 74: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 75: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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.

Page 76: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 77: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ElobjetoApplicationElobjetoDocumentObjetosdecolecciónObjetosgráficosynográficosObjetosPreferences,PlotyUtilityUsodelasfuncionesdeAutoCADnuevas

¿Comentarios?

Page 78: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 79: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

enelespaciodenombresglobal.

¿Comentarios?

Page 80: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 81: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 82: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 83: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 84: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 85: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

informaciónacercadelasfuncionesdeentrada,véaseSolicituddedatosdeusuario.

¿Comentarios?

Page 86: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>

UsodelasfuncionesdeAutoCADnuevas

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

SiunproyectodeautomatizacióncontienedeclaracionesexplícitasdelasinterfacesnuevasdeunadeterminadaversióndeAutoCAD,noutiliceeseproyectoconversionesanterioresdeAutoCAD.

¿Comentarios?

Page 87: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 88: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 89: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 90: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$nopage>raíz(objeto):

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Accesoalajerarquíadeobjetos>

AccesoalobjetoApplication

LapropiedadApplicationdelobjetoDocumentproporcionaaccesoalobjetoApplication.ElobjetoApplicationestáporencimadelobjetoDocumentenlajerarquíadeobjetos.

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

ThisDrawing.Application.Update

¿Comentarios?

Page 91: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 92: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 93: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Contienetodaslasvistasdeldibujo.

Coleccióndeventanasgráficas

Contienetodaslasventanasgráficasdeldibujo.

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

¿Comentarios?

Page 94: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 95: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 96: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 97: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 98: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 99: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 100: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Definicióndeobjetosanteriores(padre)

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

ElobjetoraízdelainterfazdeAutoCADeslaaplicaciónAutoCAD.

¿Comentarios?

Page 101: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 102: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

aumentarlafiabilidadylegibilidadentiempodeejecución.

¿Comentarios?

Page 103: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>

Usodevariantesenmétodosypropiedades

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

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

¿Comentarios?

Page 104: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>

¿QuéesunVariant?

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

EltipodedatosVariantsepuedeutilizarensustitucióndelamayoríadetiposdedatos,loqueaportagranflexibilidad.

¿Comentarios?

Page 105: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 106: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 107: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

SetsplineObj=ThisDrawing.ModelSpace.AddSpline_

(fitPoints,startTan,endTan)

'Zoominonthenewlycreatedspline

ZoomAll

EndSub

¿Comentarios?

Page 108: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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"

Page 109: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

EndSub

¿Comentarios?

Page 110: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 111: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 112: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 113: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 114: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 115: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$nopage>métodos.

ManualdeldesarrolladordeActiveXyVBA>

ControldelentornodeAutoCAD

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

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

¿Comentarios?

Page 116: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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."

Page 117: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 118: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 119: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 120: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 121: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>DefinicióndepreferenciasdeAutoCAD>

Preferenciasdebasesdedatos

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

ElobjetoDatabasePreferencesseencuentrabajolajerarquíadelobjetoDocument.

¿Comentarios?

Page 122: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 123: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 124: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 125: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 126: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

SubCh3_CurrentWindowState()

DimCurrWindowStateAsInteger

DimmsgAsString

CurrWindowState=ThisDrawing.WindowState

msg=Choose(CurrWindowState,"normal",_

"minimized","maximized")

MsgBox"Thedocumentwindowis"+msg

EndSub

¿Comentarios?

Page 127: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 128: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 129: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 130: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

scaletype=acZoomScaledRelative

ThisDrawing.Application.ZoomScaledscalefactor,scaletype

EndSub

¿Comentarios?

Page 131: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 132: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 133: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Ampliacióndeldibujoactivoatodoelcontenidoyalaextensióndeldibujo

SubCh3_ZoomAll()

'ZoomAll

MsgBox"PerformaZoomAll",,"ZoomAll"

ThisDrawing.Application.ZoomAll

'ZoomExtents

MsgBox"PerformaZoomExtents",,"ZoomExtents"

ThisDrawing.Application.ZoomExtents

EndSub

¿Comentarios?

Page 134: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 135: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

viewObj.Delete

EndSub

Eliminacióndeunavistadelacoleccióndevistas

EnesteejemploseborraunavistaguardadadelacolecciónViews.

SubCh3_DeleteViewFromCollection()

ThisDrawing.Views("View1").Delete

EndSub

¿Comentarios?

Page 136: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 137: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 138: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 139: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 140: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 141: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 142: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 143: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Definiciónydevolucióndevariablesdesistema

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

ThisDrawing.SetVariable"MAXSORT",100

¿Comentarios?

Page 144: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 145: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 146: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 147: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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:

Page 148: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ThisDrawing.ActiveViewport.OrthoOn=True

¿Comentarios?

Page 149: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 150: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 151: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 152: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 153: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 154: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 155: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 156: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

SubCh3_GetDistanceBetweenTwoPoints()

DimreturnDistAsDouble

'Returnthevalueenteredbyuser.Apromptisprovided.

returnDist=ThisDrawing.Utility.GetDistance_

(,"Picktwopoints.")

MsgBox"Thedistancebetweenthetwopointsis:"&returnDist

EndSub

¿Comentarios?

Page 157: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 158: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 159: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 160: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 161: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 162: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 163: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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"

Page 164: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

EndSub

¿Comentarios?

Page 165: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 166: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

'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?

Page 167: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 168: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 169: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

¿Comentarios?

Page 170: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>

Importacióndeotrosformatosdearchivo

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

¿Comentarios?

Page 171: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 172: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 173: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 174: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 175: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

(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

Page 176: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 177: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 178: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 179: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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).

Page 180: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 181: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 182: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 183: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 184: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 185: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 186: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 187: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 188: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 189: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

radius=5#

Setcurves(0)=ThisDrawing.ModelSpace.AddCircle_

(center,radius)

'Createtheregion

DimregionObjAsVariant

regionObj=ThisDrawing.ModelSpace.AddRegion(curves)

ZoomAll

EndSub

¿Comentarios?

Page 190: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 191: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 192: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Uniónderegiones

Paraunificarregiones,llamealmétodoBooleaneintroduzcaenlaoperaciónlaconstanteacUnionenlugardeacSubtraction.Puedecombinarencualquierordenlasregionesquedeseeunir.

¿Comentarios?

Page 193: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Cálculodelainterseccióndedosregiones

Paralocalizarlainterseccióndedosregiones,seutilizalaconstanteacIntersection.Puedecombinarencualquierordenlasregionesquedeseeintersectar.

¿Comentarios?

Page 194: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 195: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

CreacióndeobjetosHatch

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

ParacrearunobjetoHatch,utiliceelmétodoAddHatch.

¿Comentarios?

Page 196: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 197: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 198: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 199: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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)

Page 200: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 201: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 202: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 203: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 204: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

conjuntodeselección.

SubCh4_AddToASelectionSet()

'Createanewselectionset

DimssetAsAcadSelectionSet

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

'Prompttheusertoselectobjects

'andaddthemtotheselectionset.

'Tofinishselecting,pressINTRO.

sset.SelectOnScreen

EndSub

¿Comentarios?

Page 205: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 206: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 207: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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)

Page 208: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 209: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 210: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 211: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 212: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

"<" 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>"

Page 213: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

"<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?

Page 214: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 215: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 216: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

?(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

Page 217: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 218: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 219: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

FilterData(1)="MI_APL"

sstext.SelectByPolygonmode,pointsArray,FilterType,FilterData

EndSub

¿Comentarios?

Page 220: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 221: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

j=0

ForEachentInselset

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

&"is:"&ent.EntityName

j=j+1

Next

i=i+1

Next

EndSub

¿Comentarios?

Page 222: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 223: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 224: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 225: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 226: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 227: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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"

Page 228: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

EndSub

¿Comentarios?

Page 229: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 230: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Copiadeobjetosenlamismaubicación

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

¿Comentarios?

Page 231: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 232: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 233: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

'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?

Page 234: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 235: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 236: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 237: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 238: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 239: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 240: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 241: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 242: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 243: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Desplazamientodeobjetos

Sepuededesplazarobjetosalolargodeunvectorsinmodificarsuorientaciónnisutamaño.Tambiénsepuedegirarobjetosentornoaunpuntobase.

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

Desplazamientodeobjetosalolargodeunvector

¿Comentarios?

Page 244: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 245: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

'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?

Page 246: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 247: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 248: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 249: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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()

Page 250: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

'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?

Page 251: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 252: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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#

Page 253: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 254: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 255: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 256: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

'endpointto4,4,4

endPoint(0)=4

endPoint(1)=4

endPoint(2)=4

lineObj.endPoint=endPoint

lineObj.Update

EndSub

¿Comentarios?

Page 257: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 258: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

'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?

Page 259: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 260: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 261: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 262: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 263: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 264: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 265: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 266: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 267: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 268: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 269: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 270: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 271: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 272: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 273: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 274: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 275: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 276: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 277: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 278: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 279: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 280: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 281: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Supresióndecapas

Parasuprimirunacapa,utiliceelmétodoDelete.

Puedesuprimirunacapaencualquiermomentodelasesióndedibujo.Nosepuedensuprimirlacapaactual,lacapa0niunacapaquedependadeunareferenciaexternaoquecontengaobjetos.

Nota TampocosepuedensuprimirlascapasalasqueserefierendefinicionesdebloquenilacapaespecialllamadaDEFPOINTS,aunquenocontenganobjetosvisibles.

¿Comentarios?

Page 282: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 283: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

5 Azul

6 Magenta

7 Negro/Blanco

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

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

¿Comentarios?

Page 284: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 285: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

¿Comentarios?

Page 286: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 287: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Cambiodenombredetiposdelínea

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

¿Comentarios?

Page 288: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 289: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 290: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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")

Page 291: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 292: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 293: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 294: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 295: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 296: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 297: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 298: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ThisDrawing.Linetypes.LoadlinetypeName,"acad.lin"

IfErr.Description<>""ThenMsgBoxErr.Description

'Assignthecirclethelinetype"CENTER"

circleObj.Linetype="CENTER"

circleObj.Update

EndSub

¿Comentarios?

Page 299: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 300: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

AutoCADUsodeLayerStateManagerparagestionarparámetrosdecapa

¿Comentarios?

Page 301: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 302: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 303: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 304: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 305: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 306: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 307: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 308: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 309: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 310: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 311: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 312: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 313: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 314: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 315: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Especificalaexpansiónocompresióndeloscaracteres.

ObliqueAngle

Especificalainclinacióndeloscaracteres.

TextGenerationFlag

Especificasieltextodebegenerarsehacialaizquierda,bocaabajooenambossentidos.

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

Nota LlameaunodelosmétodosRegenoUpdateparaverloscambiosefectuadosenlaspropiedadesanteriores.

¿Comentarios?

Page 316: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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"

Page 317: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ThisDrawing.ActiveTextStyle.SetFonttypeFace,_

Bold,Italic,charSet,PitchandFamily

ThisDrawing.RegenacActiveViewport

MsgBox("Nowseehowitlooksafterchangingthefont...")

'Restoretheoriginaltypeface

ThisDrawing.ActiveTextStyle.SetFontSavetypeFace,_

Bold,Italic,charSet,PitchandFamily

ThisDrawing.RegenacActiveViewport

EndSub

¿Comentarios?

Page 318: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

TiposdeletraTrueType

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

¿Comentarios?

Page 319: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 320: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 321: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 322: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 323: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 324: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 325: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 326: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 327: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 328: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 329: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 330: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 331: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

TextGenerationFlag

Especificasieltextosemuestrareflejadohacialaizquierda,bocaabajoolasdoscosasalavez.

TextString

Especificalacadenadetextoquemostrarálapantalla.

Siemprequesemodificaunapropiedad,debeutilizarseelmétodoUpdateparaverloscambioseneldibujo.

Nota Paraobtenerunalistacompletadelosmétodosypropiedades,véaseladocumentacióndelobjetoTextenAutoCADActiveXandVBAReference.

¿Comentarios?

Page 332: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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._

Page 333: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 334: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 335: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

GiraelobjetoText.

¿Comentarios?

Page 336: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 337: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 338: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

insertPoint(2)=0

width=4

textString="Thisisatextstringforthemtextobject."

'CreateatextObjectinmodelspace

SetmtextObj=ThisDrawing.ModelSpace._

AddMText(insertPoint,width,textString)

ZoomAll

EndSub

¿Comentarios?

Page 339: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 340: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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}

Page 341: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 342: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 343: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 344: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 345: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 346: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 347: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>

Cotasytolerancias

Lascotasagreganmedidasalosdibujos.Lastoleranciasestablecenlavariaciónposibledeunacota.MedianteActiveXAutomationsepuedengestionarcotasconestilosymodificacionesdecota.

ConceptossobrecotasCreacióndecotasEdicióndecotasTrabajoconestilosdecotaAcotaciónenespaciomodeloyenespaciopapelCreacióndedirectricesyanotacionesUsodetoleranciasgeométricas

¿Comentarios?

Page 348: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 349: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ConceptosbásicosdelaslíneasdirectricesConceptosbásicosdelascotasasociativas

¿Comentarios?

Page 350: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 351: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 352: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 353: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 354: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 355: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>

Conceptosbásicosdelascotasasociativas

Lascotasasociativasajustanautomáticamentesusubicaciones,orientacionesymedidascuandosemodificanlosobjetosgeométricosasociadosconellas.LavariabledesistemaDIMASSOCcontrolalascotasasociativas.EstablezcaDIMASSOCen2paraactivarlascotasasociativas.

Paraobtenermásinformaciónsobrecotasasociativas,véase“Cotasasociativas”enelManualdelusuario.

¿Comentarios?

Page 356: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 357: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 358: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

¿Comentarios?

Page 359: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 360: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 361: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 362: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 363: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 364: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 365: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 366: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 367: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 368: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 369: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 370: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 371: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 372: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 373: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 374: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 375: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 376: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 377: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 378: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 379: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 380: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 381: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>

Adicióndeunaanotaciónaunalíneadirectriz

UnaanotacióndedirectrizpuedeserunobjetoTolerance,MTextoBlockRef.Sepuedecrearunaanotaciónnuevaoutilizarlacopiadeunayaexistente,perosóloseañadealadirectrizunavezcreada.

Paraañadirunaanotaciónmientrassecreaunadirectriz,introduzcalanotaenelmétodoAddLeader.

¿Comentarios?

Page 382: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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."

Page 383: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 384: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 385: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 386: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 387: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 388: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Usodetoleranciasgeométricas>

Modificacióndetolerancias

Lastoleranciasestáninfluidasporvariasvariablesdesistema:DIMCLRDcontrolaelcolordelrectángulodetolerancia,DIMCLRTcontrolaelcolordeltextodelatolerancia,DIMGAPcontrolaelespacioentreelrectángulodetoleranciayeltexto,DIMTXTcontrolaeltamañodeltextodelatoleranciayDIMTXTSTYcontrolaelestilodetextodelatolerancia.UtiliceelmétodoSetVariableparaajustarlosvaloresdelasvariablesdelsistema.

¿Comentarios?

Page 389: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 390: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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>

Page 391: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 392: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 393: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

CadaPopupMenuesenrealidadunacolecciónquecontieneunobjetoindividualporcadaelementodemenúqueapareceenelmismo.Deigualforma,cadaToolbaresunacolecciónqueconstadeunobjetoindividualporcadaelementodelabarradeherramientas.

¿Comentarios?

Page 394: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 395: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Dejarlasbarrasdeherramientasflotantesofijas

Activarodesactivarelementosdemenúobarradeherramientas

Seleccionaroquitarlaseleccióndeunelementodemenú

Cambiarelidentificador,laetiquetaolacadenadebúsquedadeunelementodemenúobarradeherramientas

Volveraasignarlasmacrosasociadasaelementosdemenúsobarrasdeherramientas

Nota SólosepuedenmodificarmenúsdesplegablesybarrasdeherramientasmedianteActiveXAutomation.Noobstante,sepuedeutilizarActiveXAutomationparacagarydescargarotrostiposdemenús,comoelementosdemenúsdesímbolos,menúsdepantallaodetablero.

¿Comentarios?

Page 396: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 397: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 398: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 399: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 400: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 401: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 402: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 403: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 404: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 405: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 406: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 407: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 408: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 409: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>

EspecificarelparámetroTag

Elidentificador,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodentrodeundeterminadomenú.

Sideseacambiarelidentificadordespuésdecrearlaopcióndemenú,utilicelapropiedadTagString.

¿Comentarios?

Page 410: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 411: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 412: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 413: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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)

Page 414: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

EndSub

¿Comentarios?

Page 415: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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,

Page 416: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 417: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 418: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 419: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 420: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 421: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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)

Page 422: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 423: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>

Creaciónymodificacióndebarrasdeherramientas

SepuedeutilizarAutoCADActiveX/VBAparacrearymodificarbarrasdeherramientas.

CreacióndebarrasdeherramientasAdicióndebotonesnuevosaunabarradeherramientasAdicióndeseparadoresaunabarradeherramientasDefinicióndelossímbolosdebotonesdebarrasdeherramientasCreacióndebarrasdeherramientasdesplegablesBarrasdeherramientasflotantesyfijasEliminacióndebotonesdeunabarradeherramientasExamendepropiedadesdeelementosdebarradeherramientas

¿Comentarios?

Page 424: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 425: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 426: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 427: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 428: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 429: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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()

Page 430: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 431: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 432: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 433: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 434: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 435: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>

Eliminacióndebotonesdeunabarradeherramientas

Paraeliminarbotonesdeunabarradeherramientas,utiliceelmétodoDeletedelbotóndelabarradeherramientas.Sólodebeeliminarbotonesdeunabarradeherramientasmientraséstaestévisible.

¿Comentarios?

Page 436: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 437: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 438: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

desplegabledeunelementodebarradeherramientas.

Parent

Estapropiedaddevuelvelabarradeherramientasdonderesideelelemento.LabarradeherramientassuperiorsedevuelvecomoobjetoToolbar.UtilicelapropiedadParentparalocalizarlabarradeherramientasalaqueperteneceunelementodebarradeherramientas.

ToolbarProperties

Hayotraspropiedadesqueseaplicanatodosloselementosdelabarradeherramientas.Estaspropiedadesdefinensilabarradeherramientasestáancladaoflotante,siestávisibleuoculta,osiutilizabotonesgrandesopequeños.

¿Comentarios?

Page 439: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 440: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 441: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 442: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

\ 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).

Page 443: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 444: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

automáticadeBARRAESPACIADORAalfinaldeunelementodemenú.Terminacióndemacros

¿Comentarios?

Page 445: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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;

Page 446: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 447: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 448: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

delimitadordelaruta:porejemplo,/directorio/archivo.

Lassiguientessituacionesretrasanlareanudacióndeunamacro:

Siseesperalaentradadeunpunto,esposiblequeleprecedanmodosdereferenciaaobjetos.

CuandoseutilizanpuntosconfiltrosX/Y/Z,lamacroseinterrumpehastaqueseacumulatodoelpunto.

ÚnicamenteenelcasodelcomandoDESIGNA,lamacronocontinúahastaqueterminaladesignacióndeobjetos.

Sielusuariorespondeconuncomandotransparente,lamacrointerrumpidapermaneceenesteestadohastaqueseterminaelcomandoyserecibenlosdatossolicitadosoriginalmente.

Sielusuariorespondeseleccionandootramacro(paraproporcionaropcionesoejecutaruncomandotransparente),lamacrooriginalseinterrumpeyelelementodemenúelegidoseprocesaensutotalidadantesdequelamacrointerrumpidareanudesuejecución.

¿Comentarios?

Page 449: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 450: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 451: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 452: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 453: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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_

Page 454: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

(newMenu.count+1,Chr(Asc("&"))_

+"Open",openMacro)

'Addthestatuslinehelptothemenuitem

newMenuItem.HelpString="OpensanAutoCADdrawingfile."

'Displaythemenuonthemenubar

newMenu.InsertInMenuBar_

(ThisDrawing.Application.menuBar.count+1)

EndSub

¿Comentarios?

Page 455: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 456: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

DimnewMenuItemAsAcadPopupMenuItem

DimopenMacroAsString

'AssignthemacrotheVBAequivalentof"ESCESC_open"

openMacro=Chr(3)+Chr(3)+"_open"

SetnewMenuItem=scMenu.AddMenuItem_

("",Chr(Asc("&"))_

+"OpenDWG",openMacro)

EndSub

¿Comentarios?

Page 457: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>

Utilizacióndeeventos

LoseventossonnotificacionesomensajesenviadosporAutoCADparainformaralusuariodelestadoactualdelasesiónoparaadvertirledealgoquehasucedido.Porejemplo,cuandoseabreundibujoenAutoCADseactivaeleventoBeginOpen.EsteeventocontieneelnombredeldibujodeAutoCAD.Tambiénseactivauneventocuandosecierraundibujo.Conestainformaciónsepuedeescribirunasubrutinaouncontroladordeeventosqueutilicenestoseventospararegistrarlacantidaddetiempoquededicaunusuarioatrabajarenundibujoconcreto.

ConceptosbásicossobreloseventosdeAutoCADDirectricesparaloscontroladoresdeeventosControldeeventosdeniveldeaplicaciónControldeeventosdedocumentoControldeeventosdeniveldeobjeto

¿Comentarios?

Page 458: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 459: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 460: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 461: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 462: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 463: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Seactivajustoantesdelacreacióndeunnuevodibujo.

SysVarChanged

Seactivacuandosecambiaelvalordeunavariabledelsistema.

WindowChanged

Seactivacuandoserealizauncambioenlaventanadelaaplicación.

WindowMovedOrResized

Seactivajustodespuésdedesplazarocambiareltamañodelaventanadelaaplicación.

Activacióndeeventosdeniveldeaplicación

¿Comentarios?

Page 464: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 465: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 466: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 467: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 468: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 469: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 470: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 471: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 472: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 473: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdedocumento>

Programacióndeeventosdedocumentoenotrosentornos(noVBA)

Unavezactivadosloseventosdedocumento,encontrarálavariabledeclaseDocenlalistadesplegabledeobjetosdelmóduloClasedelaventanadecódigo.SeleccionelaclaseDocyaparecerálalistadeeventosdisponiblesenlalistadesplegabledeprocedimientos.Seleccioneeleventoparaelquedeseaescribiruncontroladorylaestructurabásicadelmismosecrearáautomáticamente.

¿Comentarios?

Page 474: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 475: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ShortcutMenu.Item("OpenDWG").Delete

EndSub

¿Comentarios?

Page 476: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>

Controldeeventosdeniveldeobjeto

EleventodeniveldeobjetonoespermanenteenAutoCADVBA.Esdecir,quenoseactivandeformaautomáticaalcargarunproyectoVBAPortanto,esnecesarioactivarloparaVBAyparatodoslosdemáscontroladoresdeActiveXAutomation.

Unavezactivadosloseventosdeobjeto,podrádisponerdeleventoModified.Esteeventoseactivadespuésdemodificarunobjetodeldibujo.

Activacióndeleventodeniveldeobjeto

¿Comentarios?

Page 477: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 478: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 479: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 480: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 481: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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)

Page 482: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 483: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 484: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 485: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 486: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 487: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 488: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 489: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 490: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 491: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 492: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 493: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 494: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 495: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 496: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>

Tareasdeediciónen3D

Esteapartadotratasobrelarealizacióndediferentestareasdeediciónen3Dcomogirar,disponerenformadematrizyreflejarensimetría.

Rotacióndeobjetosen3DDisposiciónenmatrizen3DReflexiónensimetríadeobjetosalolargodeunplano

¿Comentarios?

Page 497: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 498: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 499: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 500: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

'Createthearrayofobjects

DimretObjAsVariant

retObj=circleObj.ArrayRectangular_

(numberOfRows,numberOfColumns,_

numberOfLevels,distanceBwtnRows,_

distanceBwtnColumns,distanceBwtnLevels)

ZoomAll

EndSub

¿Comentarios?

Page 501: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 502: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 503: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 504: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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._

Page 505: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 506: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 507: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>

Elespaciomodeloyelespaciopapel

Elespaciomodeloeselentornodedibujodondeelusuariocrealageometríadelmodelo.Porlogeneral,alcomenzarundibujoenelespaciomodelosedesignanloslímitesdeldibujoparadeterminarsuextensión,ysedibujaaescalareal.

Elespaciopapelrepresentaelmodeloconformequedarátrazadoenpapel.Enelespaciopapelesposiblepresentardistintasvistasdeldibujoyvistasaescalaindependientesentresí,ydisponerlasdistintasvistasdeldibujocomosedeseaquesetracen.Elmismodibujopuedetenerdistintasrepresentacionesdeespaciopapel.

¿Comentarios?

Page 508: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 509: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 510: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>

Configuracionesdeimpresión

LosobjetosPlotConfigurationseparecenalosobjetosLayoutenquecontienenlamismainformacióndeimpresión.SediferencianenqueelobjetoLayouttieneasociadounobjetoBlockquecontienelageometríaquedebeimprimirse.LosobjetosPlotConfigurationnoseasocianaunobjetoBlockparticular.Simplemente,esunconjuntoguardadodeconfiguracionesdetrazadoresquesepuedeutilizarconcualquiergeometría.

¿Comentarios?

Page 511: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 512: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 513: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>

Ajustedelorigendeimpresión

EltrazadocomienzaenlaesquinainferiorizquierdadeláreadeimpresiónindicadaysecontrolaconlapropiedadPlotOrigin.Habitualmente,elorigendetrazadoes(0,0).Noobstante,esposiblecentrareltrazadoenlahojadepapel,asignandoalapropiedadCenterPlotelvalorTRUE.Alcentrarseeltrazadosemodificasuorigen.

¿Comentarios?

Page 514: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 515: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Cuandosecreaunanuevapresentacióndeespaciopapel,laopciónpordefectoesacLayout.

¿Comentarios?

Page 516: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 517: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 518: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>

Configuracióndeldispositivodeimpresión

ElnombredeldispositivodetrazadoseespecificaenlapropiedadConfigName.Puededefinirestenombreparacualquiernombrededispositivoválidodesusistema.Sinoseestablecelapropiedad,eltrazadoseenvíaaldispositivopredeterminadodelsistema.

¿Comentarios?

Page 519: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 520: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ModificacióndevistasycontenidodelasventanasgráficasAjustedeescaladelasvistasenrelaciónconelespaciopapelAjustedeescaladetiposdelíneadepatronesenespaciopapelUsodeventanasgráficassombreadas

¿Comentarios?

Page 521: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 522: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 523: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 524: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 525: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 526: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 527: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 528: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 529: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 530: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 531: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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:

Page 532: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Enrelaciónconloslímitesdeldibujo

Enrelaciónconlavistaactual

Enrelaciónconlasunidadesdelespaciopapel

Paraatribuirunaescalaaunavistaenrelaciónconlasunidadesdeespaciopapel,introduzcalaconstanteacZoomScaled -RelativePSpaceparaestevalor.

Comomuestranlasilustraciones,unaescalade2enrelaciónconlasunidadesdeespaciopapel,laescaladelaventanagráficaaumentaaldobleeltamañodelasunidadesdeespaciopapel.Unaescalade0,5relativaalasunidadesdeespaciopapelreducealamitadeltamañodelasunidadesdeespaciopapel.Elmodeloseimprimealamitaddesutamañoreal.

¿Comentarios?

Page 533: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 534: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 535: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 536: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Impresióndedibujos>

Realizacióndeunaimpresiónbásica

DesdeelobjetoPlotsepuedenutilizarlossiguientesmétodosypropiedades:

PlotToFile

Imprimeenunarchivo.

PlotToDevice

Trazaenunaimpresoraotrazador.

DisplayPlotPreview

Muestraunavistapreliminardeltrazadoespecificado.

QuietErrorMode

Conmutaelmododeerrorsilenciosoparainformardeerroresdetrazado.

¿Comentarios?

Page 537: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 538: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 539: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Impresióndedibujos>

Impresióndesdeelespaciopapel

Sepuedetrazarunapresentacióndelespaciopapel.Esposibletrazarlapresentaciónactiva,comoseexplicaen"Trazardesdeelespaciomodelo",oespecificarelnombredelapresentaciónquesedeseatrazar.

¿Comentarios?

Page 540: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 541: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 542: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 543: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 544: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 545: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>

Gestióndeimágenesráster

Puedegestionarelnombredeimagenráster,delarchivoysurutautilizandolaspropiedadesdelobjetoRaster.

CambioderutasdearchivodeimagenNombrarimágenes

¿Comentarios?

Page 546: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 547: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 548: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 549: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Ajustedelbrillo,elcontrasteyeldifuminadodelaimagen

¿Comentarios?

Page 550: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 551: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 552: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 553: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 554: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 555: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 556: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 557: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 558: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Delimitacióndeimágenes>

Modificacióndelcontornodelimitador

Paramodificaruncontornodelimitadorexistente,sencillamenterepitalospasosanteriores.Seborraráelcontornoantiguoyapareceráelnuevoensulugar.

¿Comentarios?

Page 559: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 560: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 561: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

rasterObj.ClipBoundaryclipPoints

'Enablethedisplayoftheclip

rasterObj.ClippingEnabled=True

ThisDrawing.RegenacActiveViewport

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

Page 562: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 563: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 564: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 565: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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.

Page 566: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 567: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Nota Unavezinsertado,elSCUdelarchivoexternosealineaenparaleloconelplanoXYdelsistemadecoordenadaspersonales(SCP)deldibujoactual.Deestaforma,unbloqueprocedentedeunarchivoexternopuedeinsertarseconcualquierorientaciónenelespaciopreviadefinicióndelascoordenadasSCP.

¿Comentarios?

Page 568: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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

Page 569: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 570: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 571: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 572: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 573: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 574: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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"

Page 575: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 576: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 577: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 578: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 579: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 580: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 581: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

'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?

Page 582: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 583: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Actualizacióndereferenciasexternas

Cuandoseabreoimprimeundibujo,AutoCADcargalasreferenciasexternasdeformaqueeldibujoreferidosereflejeenelestadomásreciente.Unavezefectuadaslasmodificacioneseneldibujoreferidoexternamenteyguardadoelarchivo,otrosusuariospodránaccederinmediatamentealasmodificacionescontansólovolveracargarlareferenciaexterna.

¿Comentarios?

Page 584: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 585: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 586: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>Enlacedereferenciasexternas>

Superposicióndereferenciasexternas

Superponeresparecidoaenlazar,exceptocuandoseenlazaosesuperponeundibujo.Cualquierotrasuperposiciónqueestéanidadaseignoray,porlotanto,nosevisualiza.Enotraspalabras,lassuperposicionesanidadasnosecargan.

Parasuperponerunareferenciaexterna,asigneelvalorTRUEalparámetroOverlaydelmétodoAttachExternalReference.

¿Comentarios?

Page 587: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 588: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

MsgBox"Theexternalreferenceisattached."

'Detachtheexternalreferencedefinition

DimnameAsString

name=xrefInserted.name

ThisDrawing.Blocks.Item(name).Detach

MsgBox"Theexternalreferenceisdetached."

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

Page 589: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 590: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

MsgBox"Theexternalreferenceisreloaded."

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

Page 591: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 592: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

MsgBox"Theexternalreferenceisunloaded."

ExitSub

ERRORHANDLER:

MsgBoxErr.Description

EndSub

¿Comentarios?

Page 593: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 594: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 595: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>

Delimitacióndebloquesyreferenciasexternas

ActiveXAutomationnodisponedeningúnmétodoparadelimitarcontornosdebloquesyreferenciasexternas.UtiliceelcomandoXCLIPdeAutoCADoenvíeelcomandoXCLIPaAutoCADutilizandoelmétodoSendCommand.

¿Comentarios?

Page 596: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 597: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 598: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 599: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 600: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 601: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 602: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 603: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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.

Page 604: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 605: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 606: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 607: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 608: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

delcontrolcomosenecesiten.

3. Cuandoterminedetrabajarconelcontrol,regresealcuadrodeherramientasdecontrolyvuelvaahacerclicenelcontrolparaquedejedeestarseleccionado.

¿Comentarios?

Page 609: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>

Utilizacióndecontrolesdeformato

VBAproporcionavarioscontrolesdeformatoqueayudanaajustarlapresentaciónfinaldelformulario.EstoscontrolespuedenhallarseenelmenúFormatodeIDEdeVBA.Permitenalinearcontrolesentresí,hacerquedosomáscontrolestenganelmismotamaño,cambiarladistanciaentreellosycentrarlosenelformulario.

Cuandoutiliceloscontrolesdeformato,recuerdequeesposibleseleccionarvariosalavezpormediodeMAYÚS.

¿Comentarios?

Page 610: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 611: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 612: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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”:

Page 613: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

PublicSubMyAppHide()

UserForm1.Hide

EndSub

¿Comentarios?

Page 614: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 615: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

formulariosecargaautomáticamente.

Hide Ocultaunformulario.Elformularionosedescargadelamemoria.

Cargar Cargaunformularioenmemoria,peronolomuestraenpantalla.

Unload Descargaunformulariodelamemoria.PuedeefectuarsedeformaexplícitadesdeelmétodoUnloadodeformaautomáticaalcerrarlaaplicación.

¿Comentarios?

Page 616: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 617: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 618: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para
Page 619: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 620: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 621: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 622: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 623: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

EndSub

LainstrucciónOnErrorGoTo0cancelaelidentificadordelerroractual.LasinstruccionesOnErrorResumeNextyOnErrorGoToLabelsiguenactivashastaquefinalizalasubrutina,hastaquesedeclaraotrarutinadecontroldeerroresohastaquesecancelalarutinadecontroldeerroresconlainstrucciónOnErrorGoTo0.

¿Comentarios?

Page 624: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 625: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>

RespuestaaerroresdeentradadedatosdelusuariodeAutoCAD

Losmétodosquerequierenlaentradadedeterminadosdatosporpartedelusuarioincorporanciertacantidaddeidentificacióndeerrores.Sielusuariointentaintroducirdatosdistintosdelosespecificados,AutoCADrechazalaentradayvuelveapreguntar.ElusodelmétodoInitializeUserInputproporcionauncontroladicionaldelosdatosintroducidosporelusuario,perotambiénpuedeincluircondicionesadicionalesquesedebenverificarpormediodelaidentificacióndeerrores.Sideseaverunejemplodeidentificacióndeerroresrequeridaconciertostiposdedatosintroducidosporelusuario,consulteSolicituddedatosdeusuario

¿Comentarios?

Page 626: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

CodificacióndemódulosdecódigodeVBA

AunqueVBAnoadmitelacreacióndeejecutables,síofreceprotecciónporcontraseñaparalavisibilidaddelosformulariosdeproyectos,lasclasesylosmódulosenelniveldeproyectos.PuedeencontrarestafuncióndeprotecciónenelmenúdelIDEdeVBA.SeleccioneHerramientas PropiedadesdeproyectoProtección.

¿Comentarios?

Page 627: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 628: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 629: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 630: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 631: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>

Utilizacióndeunestadodecerodocumentos

UnestadodecerodocumentosenAutoCADesaquélenelquenoestáabiertoningúndibujo.DebentenerseencuentavariasconsideracionescuandosetrabajeenVBAenunestadodecerodocumentos:

ElobjetoThisDrawingnoestádefinidocuandoAutoCADseencuentraenunestadodecerodocumentos.SiseintentautilizarThisDrawing,seproduceunerror.

Losobjetosquedependendelosdocumentostampocoestándefinidosenunestadodecerodocumentos.EstosobjetossonaquellosqueestándebajodelobjetoDocumentenelmodelodeobjetosdeAutoCAD.Sepuedetrabajarconobjetosquenodependendedocumentos,comoApplicationoMenuBar.

AutoCADnotienelíneadecomandoenelestadodecerodocumentos.TodointentodeaccederalalíneadecomandodeAutoCADenunestadodecerodocumentosproduceunerror.

¿Comentarios?

Page 632: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 633: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Distribucióndeaplicaciones>

DistribucióndeaplicacionesdeVisualBasic6

LasaplicacionesdeVisualBasic6,asícomootrasaplicacionesexternasalproceso,nopuedenalmacenarseenlosdibujosdeAutoCAD.Estasaplicacionessecompilanenejecutablesindependientes(EXE).

¿Comentarios?

Page 634: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 635: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 636: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 637: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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)

Page 638: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 639: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 640: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

rejilla.

Key32 EspecificaelIDdeobjetodelobjetodeorigenenlaoperaciónCopyObjectsdeunsistemade64bits.

ObjectID32 ObtieneelIDdeobjetodeunsistemade64bits.

ObjectIDtoObject32 ObtieneelobjetoquecorrespondeaundeterminadoIDdeobjetodeunsistemade64bits.

OwnerID32 ObtieneelIDdeobjetodelobjetodepropietario(primario)deunsistemade64bits.

SetBlockAttributeValue32 EstableceelvalordeatributodesdeunaceldadebloqueespecificadaparaelobjetodedefinicióndeatributocontenidoenelbloqueyennContentmedianteelcorrespondienteIDdeobjetode32bits.

SetBlockTableRecordId32 EstableceelregistrodetabladebloquesdelIDdeobjetode32bitsasociadoalaceldatipodelbloqueyanContent.

SetDataLink32 EstableceelIDdeobjetode32bitsdelobjetodevínculodedatos.

SetFieldId32 EstableceelIDdeobjetode32bitsdelobjetodecampoasociadoalaceldaespecificadayanContent.

Page 641: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

SetGridLinetype32 EstableceelIDdeobjetode32bitsdelobjetodetipoderejilla.

Value32 EspecificaelvaloractualdelapropiedadodelIDdeobjetodelobjetoclonadoqueseacabadecrearparaunsistemade64bits.

¿Comentarios?

Page 642: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>

InteracciónconotrasaplicacionesyconlasAPIdeWindows

LatecnologíaActiveXpermiteintercambiarinformaciónfácilmenteconotrasaplicacionesdeAutoCADyconaplicacionescompatiblesconActiveX,comoMicrosoftExceloMicrosoftWord.Enestecapítuloseexponenalgunosprocedimientosbásicosparalainteracciónconotrasaplicaciones.

InteracciónconaplicacionesdeVisualLISPInteracciónconotrasaplicacionesdeWindowsAccesoalasAPIdeWindowsdesdeVBA

¿Comentarios?

Page 643: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 644: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 645: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

elotromodelodeobjetos.

3. EscribaelcódigoutilizandotantoelmodelodeobjetosdeAutoCADcomoelmodelodeobjetosdelasotrasaplicaciones.Aquíserealizaelintercambiodedatos.ReferenciasalabibliotecadeobjetosActiveXdeotrasaplicacionesCreacióndeunainstanciadelaotraaplicaciónProgramaciónconobjetosdeotrasaplicaciones

¿Comentarios?

Page 646: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 647: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

2. BusqueyseleccioneelelementocorrespondientealaaplicaciónalaquedeseaaccederenlalistaReferencias.

3. SeleccioneAceptarparacerrarelcuadrodediálogoconlasmodificacionesrealizadas.

¿Comentarios?

Page 648: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 649: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 650: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 651: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 652: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

EndIf

EndWith

Nextelem

Excel.Application.Quit

EndSub

¿Comentarios?

Page 653: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 654: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 655: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 656: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

<$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?

Page 657: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 658: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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,

Page 659: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 660: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 661: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 662: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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).

Page 663: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 664: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Lasiguienteilustraciónmuestralaformaenlaquelasvariablesobtenidasporgpuserespecificanlasdimensionesdelcamino.

Guardesutrabajo.

¿Comentarios?

Page 665: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 666: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 667: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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)

Page 668: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 669: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 670: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 671: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 672: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Guardesutrabajo.

¿Comentarios?

Page 673: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 674: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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:

Page 675: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

PuedeexperimentarconlamacroGardenpathespecificandocondatosdiferentes.

¿Comentarios?

Page 676: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 677: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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:

Page 678: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 679: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 680: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 681: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

¿Comentarios?

Page 682: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 683: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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:")

Page 684: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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:

Page 685: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

Setcir=ThisDrawing.ModelSpace.AddCircle(pltile,trad)

Cambieestaslíneasparaquedibujenlaformacorrespondientedelosetas,comosemuestraacontinuación:

DrawShape(pltile)'Actualizado

¿Comentarios?

Page 686: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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).

Page 687: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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."

Page 688: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 689: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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?

Page 690: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

ManualdeldesarrolladordeActiveXyVBA>

ComparaciónentreVisualLISPyActiveX/VBA

LamayoríadelasfuncionesdisponiblesenlainterfazdeVisualLISPseencuentrantambiénenlainterfazdeActiveXyVBA.EsteapéndicepretendeservirdereferenciaalosdesarrolladoresqueyaconocenVisualLISP,paraqueconozcanlacorrespondenciadelasfuncionesenActiveXyVBA.

ComparaciónentreVisualLISPyActiveX/VBA

¿Comentarios?

Page 691: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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)

Page 692: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

!=(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.

Page 693: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 694: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 695: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 696: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 697: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 698: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 699: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 700: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 701: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 702: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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

Page 703: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

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.

Page 704: Manual del desarrollador de ActiveX y VBA · Visual Basic para aplicaciones. Visual Basic. ... En este manual se supone que se tienen conocimientos para

wcmatch OperadorLike

while While… Wend

write-char FunciónPrint

write-line FunciónPrint

xdroom Noexiste

xdsize Noexiste

zerop Usar=0sintaxis

¿Comentarios?