View
236
Download
1
Category
Preview:
Citation preview
<$nopage>ActiveXAutomation(interface):proyectosdeautomatización.<$nopage>ÍndicedecoloresdeAutoCAD(números).<$nopage>Color(propiedad):<$nopage>TrueColor(propiedad):<$nopage>VB:proyectosdeautomatización.<$nopage>VBA:proyectosdeautomatización.<$nopage>VisualBasicparaaplicaciones.<$nopage>VisualBasic.Lice<$nopage>proyectosdeautomatización:migraraAutoCAD2004:<$nopage>proyectos:automatización.<$nopage>nombresdecoloresestándar.
ManualdeldesarrolladordeActiveXyVBA>
Introducción
EnestaintroducciónseexplicaelconceptodeexposicióndeobjetosdeAutoCADatravésdeunainterfazdeActiveXAutomationydelaprogramacióndeestosobjetosenelentornodeprogramaciónVisualBasicparaaplicaciones.
PresentacióngeneraldelatecnologíaActiveXdeAutoCADPresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)UsocombinadodeActiveXyVBAenAutoCADOrganizacióndeestemanualParaobtenermásinformaciónCódigodeejemploMigracióndeproyectosdeautomatización
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>
PresentacióngeneraldelatecnologíaActiveXdeAutoCAD
ConAutoCAD®ActiveX®puedemanipularAutoCADmediantelaprogramacióndesdedentroofueradeAutoCAD.EstemétodoconsisteenexponerobjetosdeAutoCADal“mundoexterior.”Unavezexpuestos,sefacilitaelaccesoaellosdesdenumerososentornosylenguajesdeprogramación,asícomodesdeaplicacionestalescomoMicrosoft®WordVBAoExcelVBA.
ADDAX_INTROgraphic
LainclusióndeunainterfazdeActiveXparaAutoCADofrecedosventajas:
ElaccesoprogramáticoalosdibujosdeAutoCADpuederealizarsedesdemuchosotrosentornosdeprogramación.AntesdeActiveXAutomation,losdesarrolladoresdebíanlimitarseaunainterfazAutoLISP®oC++.
LaposibilidaddecompartirinformaciónconotrasaplicacionesparaWindows®,comoMicrosoftExcelyWord,sehafacilitadoenormemente.
LosobjetosconstituyenelbloquedeintegraciónprincipaldetodaslasaplicacionesActiveX.CadaobjetoexpuestorepresentauncomponenteconcretodeAutoCAD.ExistenmultituddetiposdeobjetosdiferentesenlainterfazdeActiveXdeAutoCAD.Porejemplo:
Loselementosgráficoscomolaslíneas,losarcos,eltextoylascotassonobjetos.
Losparámetrosdeestilocomoeltipodelíneayelestilodecotasonobjetos.
Lasestructurasdeorganizacióncomolascapas,losgruposylosbloquessonobjetos.
Laspantallasdedibujo,comovistasyventanasgráficas,sonobjetos.
SeconsideranobjetosinclusoeldibujoylaaplicaciónAutoCAD.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>
PresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)
MicrosoftVBAesunentornodeprogramaciónorientadoaobjetos,concebidoparasuministrarfuncionesavanzadasdedesarrollosimilaresalasdeVisualBasic6(VB).LadiferenciaprincipalentreVBAyVBesqueelprimeroseejecutaenelmismoespaciodeprocesoqueAutoCAD,loqueproporcionaunentornodeprogramaciónmuyrápidoycompatibleconAutoCAD.
VBApermitetambiénlaintegraciónconotrasaplicacionesqueadmitenVBA.LoquesignificaqueAutoCADpuede,mediantelasbibliotecasdeobjetosdeotrasaplicaciones,funcionarcomocontroladordeautomatizacióndeotrasaplicacionescomoMicrosoftWordoExcel.
LasedicionesdedesarrolloindependientesdeVisualBasic6,quedebenadquirirseporseparado,complementanaVBAdeAutoCADconcomponentesadicionales,comounmotordebasededatosexternoyfuncionesdegeneracióndeinformes.
LainclusióndeActiveXparaAutoCADofrececuatroventajas:
VBAysuentornoresultanfácilesdeaprenderydeusar.
VBAseejecutajuntoconAutoCAD.Estosetraduceenunaejecucióndeprogramamuyrápida.
Laconstruccióndecuadrosdediálogosesrápidayeficaz.Estopermitealosdesarrolladoresrealizarprototiposdeaplicacionesyrecibirinformaciónsobrediseñosdeformarápida.
Losproyectospuedenserindependientesoestarincrustadosenlosdibujos.Estaopciónofrecealosdesarrolladoresunagranflexibilidadparaladistribucióndesusaplicaciones.
Nota MicrosoftnosecomprometeaproporcionarbibliotecasSDKdeVBAde64
bits(.dll).Posteriormente,AutoCADde64bitsyanopodráejecutarVBAcomocomponenteduranteelproceso;loscomponentesdeVBAseejecutanahoracomocomponentesCOMfueradeprocesode32bitsyproporcionaunaorganizacióntemporalparalosusuariosdeVBAconAutoCADde64bitsPuedequeestaorganizaciónrequieraalgunoscambiosenelcódigodeVBAexistente.EstaprevisióntemporalnosetendráencuentaenfuturasversionesdeAutoCADyseaconsejaalosusuariosquecambiensucódigoVBAexistenteaunoVB.NET.
CómoestáintegradoVBAenAutoCAD
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>PresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)>
CómoestáintegradoVBAenAutoCAD
VBAenvíamensajesaAutoCADmediantelainterfazdeActiveXAutomationdeAutoCAD.VBAdeAutoCADpermitelaejecuciónsimultáneadeAutoCADyelentornoVBA,yproporcionauncontrolporprogramacióndeAutoCADmediantelainterfazdeActiveXAutomation.EstacooperaciónentreAutoCAD,ActiveXAutomationyVBAconstituyeunainterfazmuyavanzada,nosóloparamanipularobjetosdeAutoCADsinotambiénparaenviarorecuperardatosdeotrasaplicaciones.
ExistentreselementosfundamentalesquedefinenlaprogramaciónActiveXyVBAenAutoCAD.ElprimeroeselpropioAutoCAD,queincluyeunamplioconjuntodeobjetosqueenglobaentidades,datosycomandosdeAutoCAD.PuestoqueAutoCADestádiseñadocomounaaplicacióndearquitecturaabierta,conmultituddenivelesdeinterfaz,elusoeficazdeVBArequiereunciertogradodefamiliaridadconlaprogramaciónenAutoCAD.SitieneexperienciaenelusodeAutoLISPparaelcontrolmedianteprogramacióndeAutoCAD,yaposeeconocimientossuficientesdelasfuncionesdeAutoCAD.Noobstante,elplanteamientodeVBA,basadoenobjetos,esmuydiferentedeldeAutoLISP.
ElsegundoelementoeslainterfazActiveXAutomationdeAutoCAD,queestablecemensajes(comunicación)conlosobjetosdeAutoCAD.LaprogramaciónenVBArequiereunconocimientofundamentaldeActiveXAutomation.PuedeencontrarunadescripcióndelainterfazdeActiveXAutomationdeAutoCADenActiveXandVBAReference.InclusolosprogramadoresavanzadosdeVBencontraránenActiveXAutomationdeAutoCADunainterfazdevalorincalculableparaconocerydesarrollaraplicacionesAutoCADVBA.
EltercerelementoeselentornodeprogramaciónVBA,quecuentaconsupropioconjuntodeobjetos,palabrasclave,constantes,etc.,loscualesfacilitanelflujodelosprogramasysucontrol,depuraciónyejecución.LapropiaAyudade
MicrosoftparaVBAestáincluidaenlaAyudadeAutoCADVBAypuedeaccederseaelladesdeelIDEdeVBAconunodelossiguientesmétodos:
PulsandolateclaF1
EligiendoAyudaenlabarrademenúsdelIDEdeVBA.
HaciendoclicenelsignodeinterrogacióndelabarradeherramientasdelIDEdeVBA.UsodeMicrosoft.NETFrameworkRequisitosyrestricciones
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>PresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)>CómoestáintegradoVBAenAutoCAD>
UsodeMicrosoft.NETFramework
ParatenerunaccesocompletoalosobjetosdeautomatizacióndeAutoCADdesdeMicrosoftVisualStudio®.NET,creereferenciasalossiguientesarchivos:
LabibliotecadetiposdeAutoCAD2008,acax17enu.tlb,ubicadaenc:\Archivosdeprograma\Archivoscomunes\AutodeskShared.
LabibliotecadetiposdeAutoCAD/ObjectDBXCommon17.0,axdb17enu.tlb,ubicadaenc:\Archivosdeprograma\Archivoscomunes\AutodeskShared.
Estasreferenciaslepermitirántenerdisponibleslossiguientesconjuntosprimariosdeinteroperabilidad:Autodesk.AutoCAD.Interop.dll(paratiposespecíficosdeAutoCAD),yAutodesk.AutoCAD.Interop.Common.dll(paratiposcompartidosmediantelasaplicacioneshuespedObjectDBXTM).Losensamblajesdeinteroperabilidadseencuentranenlacachédelensamblajeglobalyasignanobjetosdeautomatizaciónahomólogosde.NET.
Despuésdecrearlasreferenciasalasbibliotecasdetipos,puededeclararvariablesbasadasenAutoCADenMicrosoftVisualStudio.NET,comoenlosejemplossiguientes:
DimobjAcadAsAutodesk.AutoCAD.Interop.AcadApplication
DimobjLineAsAutodesk.AutoCAD.Interop.Common.AcadLine
Puedecargarunaaplicación.NETutilizandoelcomandoNETLOADdeAutoCAD.
Haydisponibleinformaciónadicionalsobreelusodeunaaplicación.NETconAutoCADenlasecciónDeveloperCenterdelsitioWebdeAutodesk
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>PresentacióngeneraldelainterfazentreAutoCADyVisualBasicparaaplicaciones(VBA)>CómoestáintegradoVBAenAutoCAD>
Requisitosyrestricciones
Siinstala,reinstala,odesinstalaMicrosoftOfficeuotrasaplicacionesVBAdespuésdeinstalarAutoCAD,reinstaleAutoCADyreinicieelsistema.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>
UsocombinadodeActiveXyVBAenAutoCAD
LainterfazdeActiveX/VBAdeAutoCADpresentavariasventajassobreotrosentornosAPIdeAutoCAD:
Velocidad.CuandoserealizaunaejecuciónenprocesoconVBA,lasaplicacionesdeActiveXsonmásrápidasquelasdeAutoLISP.
Facilidaddeuso.EllenguajedeprogramaciónyelentornodedesarrollosonfácilesdeusaryvieneninstaladosconAutoCAD.
FuncionamientoconjuntoconWindows.ActiveXyVBAestándiseñadosparasuusoconotrasaplicacionesdeWindowsyconstituyenunaexcelentevíaparalacomunicacióndeinformaciónentredistintasaplicaciones.
Rápidacreacióndeprototipos.LacapacidaddeVBAparaunrápidodesarrollodeinterfacesofreceunentornoóptimoparalacreacióndeaplicacionesprototipo,inclusosidichasaplicacionesenúltimainstanciadeberánserdesarrolladasenotrolenguaje.
Baseparaprogramadores.LatecnologíaVBAyActiveXdeAutoCADproporcionaalosprogramadoresdeVisualBasic6lacapacidaddepersonalizarAutoCADydedesarrollaraplicacionescompatibles.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>
Organizacióndeestemanual
EnestemanualseofreceinformaciónrelativaaldesarrollodeaplicacionesdeActiveXyVBAparausoconAutoCAD.En“ParaempezarconVBA”y“DesarrollodeaplicacionesconVBA”seofreceinformaciónespecíficasobreeldesarrollodeaplicacionesconVBA.LosprogramadoresqueutilicenActiveXenunentornodedesarrolloquenoseaVBApuedenomitirestosdoscapítulos.Noobstante,hayquetenerencuentaqueelcódigodelosejemplosdeestemanualestáescritoenVBA.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>
Paraobtenermásinformación
EnestemanualsesuponequesetienenconocimientosparatrabajarconellenguajedeprogramaciónVisualBasic6.NoseintentaduplicaroremplazarlaabundantedocumentacióndisponiblesobreVisualBasic6.SinecesitamásinformaciónacercadelusodelentornodedesarrollooellenguajeVisualBasic6,consulteelarchivodeAyudadeVisualBasicparaAplicacionesdesarrolladoporMicrosoft,disponibleenelmenúAyudadelentornodedesarrollointeractivo(IDE).
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>
Códigodeejemplo
EstemanualyActiveXandVBAReferencejuntoscontienenmásde800subrutinasdeejemplodeVBAqueconstituyenunademostracióndelusodelosmétodos,propiedadesyeventosdeActiveX.
AutoCADtambiénproporcionamultituddeaplicacionesdeejemploeneldirectorioSampledeAutoCAD.Estasaplicacionesdemuestranelcometidodeunaampliavariedaddefunciones,desdelaextraccióndedatosdedibujosdeAutoCADahojasdecálculoMicrosoftExcel,hastaeldibujoyelanálisisdetensionesenunatorreeléctricadetransmisiones.
EstosejemplostambiénlepermitiránaprenderacombinarlaflexibilidaddelentornodeprogramaciónVisualBasicforApplicationsconlaavanzadainterfazdeActiveXdeAutoCADparacrearaplicacionespersonalizadas.
Demaneraadicional,elcódigodeejemplodelManualdeldesarrolladordeActiveXyVBAyActiveXandVBAReferencesepuedecopiardesdelosarchivosdeayuda,pegarladespuésenelentornoVBAdeAutoCAD,yejecutarlaconunacondición:eldibujoactualactivoenAutoCADdebeserundibujovacíoabiertoalespaciomodelo.
ParaejecutarlosejemplosdelosarchivosdeAyuda
1. CopieelejemplodesdeelarchivodeAyudaaunmódulodecódigodeVBAvacío.
2. VerifiquequeAutoCADtieneabiertoundibujoenblancoenelespaciomodelo.
3. AbraelcuadrodediálogoMacros,ejecutandoelcomandoVBARUN.
4. ElijalamacroquedeseeypulseEjecutar.HaymásinformaciónacercadelaejecucióndemacrosyelcuadrodediálogoMacrosdisponibleeneltema“Ejecutarunamacro”.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>
Migracióndeproyectosdeautomatización
PuedeutilizarlasfuncionesdeAutoCADmediantelosobjetosymétodosañadidosalainterfazdeActiveXAutomation.EnestasecciónseincluyenloscambiosqueseaplicanalosproyectosdeautomatizacióncreadosconVisualBasicparaAplicaciones(VBA),VisualBasic6(VB)yotrosentornoscompatiblesconlaautomatización.
ParaobtenermásinformaciónacercadelusodefuncionesenAutoCAD,véase“UtilizacióndelasfuncionesdeAutoCAD”.
ObjetosnuevosElementosmodificadosCómomigrarproyectos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>Migracióndeproyectosdeautomatización>
Objetosnuevos
LossiguientesobjetossonnuevosenAutoCAD2008.Paraobtenermásinformaciónsobreestosobjetos,véaseActiveXandVBAReferenceyelExaminadordeobjetosenelIDEdeVBA.
SortentsTable.Contieneymanipulalainformacióndeordenacióndelosobjetos.
Table.Añadeymodificatablasenundibujo.
TableStyle.Añadeymodificaformatoenlastablas,comovisibilidadderejilla,grosordelíneaycolor.
Además,AutoCAD2008contieneobjetosparalaautomatizacióndelAdministradordeconjuntosdeplanos.Paraobtenerinformaciónsobreestosobjetos,véaseReferenciaaobjetosdeconjuntodeplanos.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>Migracióndeproyectosdeautomatización>
Elementosmodificados
Enestasecciónsedescribenloselementosexistentesquehancambiado.
Elementosmodificados
AutoCAD2004item
AutoCAD2008item
Descripcióndelcambio
BeginClose(evento)
BeginDocClose(evento)
PuedeutilizareleventoBeginDocCloseparaimpedirqueundibujosecierre.
Layer(objeto) Layer(objeto) AdicióndelapropiedadDescriptionylapropiedadUsed.
Coleccióndecapas
Coleccióndecapas
AdicióndelmétodoGenerateUsageData.
ColeccióndeespaciomodeloColeccióndeespaciopapelBlock(objeto)
ColeccióndeespaciomodeloColeccióndeespaciopapelBlock(objeto)
AdicióndelmétodoAddTableatodaslascoleccionesyalobjeto;adicióndelapropiedadPathalobjetoBlock
MText(objeto),Text(objeto)
MText(objeto),Text(objeto)
AdicióndelapropiedadBackgroundFillalobjetoMText;adicióndelmétodoFieldCodeal
objetoMTextyalobjetoText.
Plot(objeto) Plot(objeto) LapropiedadBatchPlotProgressylapropiedadStartBatchModehanquedadoobsoletas.SerecomiendaelusodeaplicacionesMicrosoft.NETparaeltrazadoporlotes.ElmétodoDisplayPlotPreviewyanoadmitelavistapreliminarparcial.
PreferencesFiles(objeto)
PreferencesFiles(objeto)
AdicióndelapropiedadPlotLogFilePath,lapropiedadPageSetupOverridesTemplateFileylapropiedadQNewTemplateFile.
PreferencesOutput(objeto)
PreferencesOutput(objeto)
AdicióndelapropiedadAutomaticPlotLog,lapropiedadDefaultPlotToFilePathylapropiedadContinuousPlotLog.
Viewport(objeto) Viewport(objeto) AdicióndelapropiedadModelView,lapropiedadSheetView,lapropiedadLabelBlockId,lapropiedadHasSheetViewyelmétodoSyncModelView.
View(objeto) View(objeto) AdicióndelapropiedadCategoryName,lapropiedadLayoutId,lapropiedadLayerStateylapropiedadHasVpAssociation.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Introducción>Migracióndeproyectosdeautomatización>
Cómomigrarproyectos
Engeneral,unproyectodeautomatizacióndeAutoCADcreadoenelIDEdeVBAoconVisualBasic6deberíafuncionarconAutoCAD2008.
LosproyectosdeautomatizacióndeAutoCAD2008utilizanlamismabibliotecadetipos(acax17enu.tlb)quelosproyectosdeautomatizacióndeAutoCAD.LabibliotecadetiposseencuentraenC:\Archivosdeprograma\Archivoscomunes\AutodeskShared.
LosproyectosdeautomatizacióndeAutoCAD2008tambiénutilizanelmismoProgIDdependientedelaversiónparalosmétodosCreateObject,GetObjectyGetInterfaceObject.Porejemplo,siutilizalafunciónCreateObjectenunproyectodeautomatizacióndeAutoCAD,puedeusarCreateObject("AutoCAD.Application.17").SiunproyectodeautomatizaciónutilizaProgIDindependientesdelaversión,cambieelproyectoparautilizarProgIDdependientesdelaversión.
¿Comentarios?
<$nopage>propiedades.<$nopage>objetos:
ManualdeldesarrolladordeActiveXyVBA>
ParaempezarconVBA
EnestecapítulosepresentanlosproyectosVisualBasicparaAplicaciones(VBA)deAutoCADyelentornodedesarrollointeractivo(IDE)deVBA.AunquelamayoríadelosentornosdeVBAtienenuncomportamientosemejante,elIDEdeVBAdeAutoCADposeealgunascaracterísticasexclusivas.PuedenutilizarsealgunoscomandosdeAutoCADparacargaryejecutarproyectosoabrirelIDEdeVBA.EnestecapítulosedescribeelusodeproyectosycomandosdeVBA,asícomodelentornoIDEdeVBAengeneral.
DescripcióndelosproyectosVBAglobaleseincrustadosOrganizacióndelosproyectosconelAdministradordeVBAGestióndemacrosEdicióndeproyectosconelIDEdeVBARealizacióndeunejerciciopreliminarObtencióndemásinformaciónTérminosparaproyectosVBAdeAutoCADComandosVBAdeAutoCAD
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>
DescripcióndelosproyectosVBAglobaleseincrustados
UnproyectoVBAdeAutoCAD®consisteenunconjuntodemódulosdecódigo,módulosdeclaseyformulariosquesecombinanpararealizarunafuncióndeterminada.LosproyectospuedenalmacenarseenundibujodeAutoCADoenunarchivoindependiente.
LosproyectosincrustadossealmacenandentrodeundibujodeAutoCAD.EstosproyectossecarganautomáticamentealabrirenAutoCADeldibujoqueloscontiene,locualfacilitaextraordinariamenteladistribucióndelosproyectos.LosproyectosincrustadosestánlimitadosynopuedenabrirnicerrardibujosdeAutoCADyaquesólofuncionaneneldocumentodonderesiden.Losusuariosdeproyectosincrustadosyanotienenquebuscarycargarlosarchivosdeproyectoantesdeejecutarunprograma.Unejemplodeproyectoincrustadoenundibujoloconstituyeunregistrodetiempoqueseactivaalabrireldibujo.Estamacropermitealosusuariosiniciarunasesiónyregistrareltiempoquehantrabajadoeneldibujo.Elusuariononecesitaacordarsedecargarelproyectoantesdeabrireldibujo,yaqueestosehacedeformaautomática.
Losproyectosglobalessealmacenanenarchivosindependientesysonmásversátiles,yaquepermitenabrirycerrarcualquierdibujodeAutoCAD,asícomotrabajarconél,peronosecargandeformaautomáticacuandoseabreeldibujo.Parapoderejecutarlamacroquenecesitan,losusuariosdebensaberenquéarchivodeproyectoseencuentraycargaresearchivo.Noobstante,losproyectosglobalessonmuchomásfácilesdecompartirconotrosusuarios,ygeneranbibliotecasestupendasdemacroscomunes.Unejemplodeproyectoquepuedealmacenarseenunarchivodeproyectoloconstituyeunamacroquerecopilaunalistadeelementosapartirdevariosdibujos.Lamacropuedeserejecutadaporunadministradoralterminarelciclodetrabajo,afindereunirinformacióndediversosdibujos.
Encualquiermomento,losusuariospuedentenercargadosensusesióndeAutoCADtantoproyectosincrustadoscomoglobales.
&LosproyectosVBAdeAutoCADnosoncompatiblesenformatobinarioconlosproyectosdeVisualBasic6independientes.Noobstante,esposibleintercambiarformularios,módulosyclasesentreproyectosmedianteloscomandosIMPORTARyEXPORTARVBAdelIDEdeVBA.ParaobtenermásinformaciónacercadelIDEdeVBA,véaseEdicióndeproyectosconelIDEdeVBA.
SeadmiteelusodeVisualStudio.NETparadirigirypersonalizarAutoCADmedianteCOMAutomation.
¿Comentarios?
<$nopage>propiedades.<$nopage>objetos:
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>
OrganizacióndelosproyectosconelAdministradordeVBA
PuedeutilizarelAdministradordeVBAparavertodoslosproyectosVBAqueesténcargadosenlasesiónactualdeAutoCAD.ElAdministradordeVBAesunaherramientadeAutoCADquepermitecargar,descargar,guardar,crear,incrustaryextraerproyectosVBA.
ParaabrirelAdministradordeVBA
PuedeabrirelAdministradordeVBAdesdeelmenúHerr.o,enAutoCAD,ejecutandoelcomandoVBAMAN.
CargadeunproyectoexistenteDescargadeunproyectoIncrustacióndeunproyectoenundibujoExtraccióndeunproyectodeundibujoCreacióndeunproyectoGuardadodelproyecto
¿Comentarios?
<$nopage>propiedades.<$nopage>objetos:
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>
Cargadeunproyectoexistente
CuandosecargaunproyectoenAutoCAD,todaslassubrutinaspúblicas,tambiéndenominadasmacros,quedanhabilitadas.Losproyectosincrustadosenundibujosecargansiemprequeeldibujoesabierto.LosproyectosguardadosenarchivosDVBdebencargarsedeformaexplícita.
Enelmomentodecargarunproyecto,todoslosproyectosalosquehagareferenciasecargandeformaautomática.Demaneraadicional,AutoCADcargaautomáticamenteduranteeliniciocualquierarchivodeproyectocuyonombreseaacad.dvb.
ParacargarelarchivodeunproyectoVBAexistente
1. EnelAdministradordeVBA,elijalaopciónCargarparaabrirelcuadrodediálogoAbrirproyectoVBA.
2. EnelcuadrodediálogoAbrir,seleccioneelarchivodeproyectoquedeseeutilizar.EnelcuadrodediálogoAbrirproyectoVBAsólopuedenabrirsearchivosDVBválidos.Siintentaabrirunarchivodeotrotipo,recibiráunmensajedeerror.
3. ElijaAbrir.
Tambiénpuedecargarunarchivodeproyectomedianteunodelosmétodossiguientes:
IntroduzcaelcomandoVBALOAD,queabreelcuadrodediálogoAbrirproyectoVBA.
ArrastreunarchivoDVBdesdeelExploradordeWindowsycolóqueloenundibujoabiertoenlaventanadeAutoCAD.
Alertadevirus
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>Cargadeunproyectoexistente>
Alertadevirus
Cadavezquesecargaunproyecto,sepuedeactivarodesactivarsucódigointernocomoproteccióncontravirus.Siactivaelcódigo,losvirusqueéstepuedacontenercomienzanaejecutarse.Sidesactivaelcódigo,elproyectosecargaperotodosucódigoquedasinejecutar.LaalertadeprotecciónantivirusnoestávisiblecuandoelproyectosecargaarrastrandounarchivoDVBdesdeelExploradordeWindowsycolocándoloenundibujoabiertoenlaventanadeAutoCAD.
Paraobtenermásinformaciónacercadelaalertacontravirus,véasedeopcionesdeproyectos.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>
Descargadeunproyecto
Aldescargarunproyectoseaumentalamemoriadisponibleyseagilizalautilizacióndelalistadeproyectoscargadospuessereducesulongitud.
Noesposibledescargarproyectosincrustadosoproyectosalosquehacenreferenciaotrosproyectoscargados.
ParadescargarunproyectoVBA
PuededescargarunproyectoVBAseleccionándoloyeligiendoDescargar,obienmedianteelcomandoVBAUNLOAD,elcualsolicitaelproyectoquesedeseadescargar.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>
Incrustacióndeunproyectoenundibujo
Cuandoseincrustaunproyectoseintroduceunacopiadelmismoenlabasededatosdedibujos.Elproyectoestarácargadoodescargadosegúnestéabiertoocerradoeldibujoquelocontiene.
Undibujopuedecontenersólounproyectoincrustado.Siundibujotieneyaunproyectoincrustado,debeextraerloantesdepoderincrustarotroproyecto.
ParaincrustarunproyectoenundibujodeAutoCAD
1. AbraelAdministradordeVBAyseleccioneelproyectoquedeseeincrustar.
2. ElijaIncluir.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>
Extraccióndeunproyectodeundibujo
Cuandoseextraeunproyecto,éstequedaeliminadodelabasededatosdedibujos.Tienelaposibilidaddeguardarloenunarchivodeproyectoexterno;sinolohace,losdatosdelproyectoseborrarán.
ParaextraerunproyectodeundibujodeAutoCAD
1. AbraelAdministradordeVBAyseleccioneeldibujodelquedeseeextraerelproyecto.
2. ElijaExtraer.
3. Sideseaguardarlainformacióndelproyectoenunarchivodeproyectoexterno,seleccioneSíenlasolicitud“¿DeseaexportarelproyectoVBAantesdeeliminarlo?”SemostraráelcuadrodediálogoGuardarcomo,enelquepodráguardarelarchivo.Sinodeseaguardarlainformacióndelproyectoenunarchivoexterno,respondaNoalasolicitud“¿DeseaexportarelproyectoVBAantesdeeliminarlo?”Lainformacióndelproyectoseeliminarádeldibujoynoseguardará.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>
Creacióndeunproyecto
Losproyectosnuevossecreancomoproyectosglobalesnoguardados.Unavezcreado,puedeincrustarelproyectoenundibujooguardarloenunarchivodeproyecto.
ParacrearunproyectoVBA
1. AbraelAdministradordeVBA.
2. ElijaNuevo.SecreaunproyectonuevoconelnombrepordefectoACADProject.Sideseacambiarelnombredelproyecto,debeentrarenelIDEdeVBA.ParaobtenermásinformaciónacercadelaasignacióndenombreaproyectosenelIDEdeVBA,véasedenombrealproyecto.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>OrganizacióndelosproyectosconelAdministradordeVBA>
Guardadodelproyecto
Losproyectosincrustadosseguardansiemprequeseguardaeldibujo.LosproyectosglobalesdebenguardarsedesdeelAdministradordeVBAodesdeelIDEdeVBA
ParaguardarunproyectoconelAdministradordeVBA
1. AbraelAdministradordeVBAyseleccioneelproyectoquedeseeguardar.
2. PulseGuardar.SeabriráelcuadrodediálogoGuardarcomo.
3. Seleccioneelnombredearchivoparaelproyectoquedeseeguardar.
4. PulseGuardar.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>
Gestióndemacros
Unamacroesunasubrutina(ejecutable)pública.Porlogeneral,cadaproyectocontienealmenosunamacro.
UsodelcuadrodediálogoMacrosEjecucióndeunamacroEdicióndeunamacroRevisióndeunamacropasoapasodeopcionesdeproyectos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>
UsodelcuadrodediálogoMacros
EnelcuadrodediálogoMacrospuedeejecutar,modificar,suprimirycrearmacros,asícomodefiniropcionesdeproyectosVBA.EnelmenúHerr.deAutoCAD,elijaMacro Macros,oescribaVBARUNenlasolicituddecomandodeAutoCAD.
Losnombresdetodaslasmacrosdentrodelrangoválidosemuestranenestecuadrodediálogo.PuedecambiarelrangoválidoenlalistadesplegableMacrosen:Enestalistaseespecificanlosproyectosodibujosdelasmacrosmostradas.Tambiénpuedeelegirquesemuestrenlasmacrosde:
Todoslosdibujosyproyectos
Todoslosdibujos
Todoslosproyectos
CualquierdibujoqueactualmenteseencuentreabiertoenAutoCAD
CualquierproyectoqueactualmenteseencuentrecargadoenAutoCAD
Allimitarelrangoválidosepuedecontrolarcuantosnombresdemacroaparecenenlalista.Estoleayudaráenloscasosenlosquemuchasmacrosesténdisponiblesenlosdibujosyproyectoscargados.
Paracrearunanuevamacro
1. AbraelcuadrodediálogoMacroseintroduzcaelnombredelanuevamacro.
2. EnlalistadesplegableMacrosen:,seleccioneelproyectodondedeseecrearlamacro.
3. ElijaCrear.
Siyaexisteunamacroconelnombrequehaespecificado,selepreguntarásideseareemplazarlamacroexistente.
SiseleccionaSí,seborraelcódigodelamacroexistenteysecreaunanuevamacrovacíaconelnombreindicado.
SiseleccionaNo,seaccedealcuadrodediálogoMacrosdondedebeindicarunnuevonombreparalamacro.
SiseleccionaCancelar,secierraelcuadrodediálogoMacrosynosecreaningunamacronueva.
Paraborrarunamacro
1. AbraelcuadrodediálogoMacrosyseleccionelamacroquedeseeborrar.
2. ElijaBorrar.Selesolicitaráqueconfirmelasupresión.
3. Enlasolicitud,elijaSíparasuprimirlaoNoparacancelarlaoperación.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>
Ejecucióndeunamacro
Cuandoseactivaunamacro,seejecutaelcódigodelamacrodentrodelcontextodelasesiónactualdeAutoCAD.Eldibujoqueestéactivoenelmomentodeejecutarlamacroseconsideraeldibujoabiertoenelquesedebendesarrollarlasaccionesdelamacro.TodaslasreferenciasdeVBAalobjetoThisDrawing(estedibujo)serefierenaldibujoactivocuandosetratademacrosdeproyectosglobales.Enelcasodelasmacrosdeproyectosincrustados,elobjetoThisDrawingsiempreserefierealdibujoenelqueestéincrustadalamacro
ParaejecutarunamacrodesdeelcuadrodediálogoMacros
1. AbraelcuadrodediálogoMacrosyseleccionelamacroquedeseeejecutar.
2. ElijaEjecutar.
ParaejecutarunamacrodesdeelIDEdeVBA
EnelmenúEjecutar,utilicelaopcióndemenúEjecutarmacro.Sinohayningunamacroniningúnformularioactivos,apareceuncuadrodediálogodondesepuedeelegirlamacroquesedeseaejecutar.Siyahayunamacroactiva(elcursorestáenunprocedimiento),seejecutaesamacro.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>
Edicióndeunamacro
AleditarunamacroseabreelIDEdeVBAconlamacroelegidaabiertaenlaventanadelcódigo.ParaobtenermásinformaciónacercadecómoeditarmacrosenelIDEdeVBA,véaseEdicióndeproyectosconelIDEdeVBA.
Paraeditarunamacro
1. AbraelcuadrodediálogoMacrosyseleccionelamacroquedeseeeditar.
2. PulseEditar.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>
Revisióndeunamacropasoapaso
Estemétodoinicialaejecucióndelamacroyladetieneenlaprimeralíneadecódigo.ElIDEdeVBAseabreconlamacroelegidaabiertaenlaventanadelcódigo,enlalíneadeejecución.
Pararevisarunamacropasoapaso
1. EnelcuadrodediálogoMacros,seleccionelamacroquedeseerevisar.
2. ElijaEntrar.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>Gestióndemacros>
deopcionesdeproyectos
HaytresopcionesquepuedendefinirseparalosproyectosVBAdeAutoCAD:
ActivacióndeIncrustaciónautomática
ActivacióndeInterrupciónenerror
Activacióndelaproteccióncontravirusdemacro
ActivacióndeIncrustaciónautomática
LafuncióndeincrustaciónautomáticacreaunproyectoVBAincrustadoparatodoslosdibujoscuandoseabren.
ActivacióndeInterrupciónenerror
EstaopciónpermitequeseactiveelmododeinterrupcióndeVBAcuandoseencuentreunerror.Elmododeinterrupciónsuponeunasuspensióntemporaldelaejecucióndelprogramaenelentornodedesarrollointeractivo.Enelmododeinterrupciónesposibleexaminar,depurar,restablecer,irpasoapasoocontinuarlaejecucióndelprograma.
Cuandoestaopciónestáactivada,loserroresnogestionadosqueseencuentrandurantelaejecucióndelamacrodeVBAprovocanquesesuspendalaejecucióndelamacroyquemuestreelIDEdeVBAenelpuntodeerrordelamacro.
Cuandoestaopciónestádesactivada,loserroresnolocalizadosqueseencuentrandurantelaejecucióndelamacrodeVBAgeneranunmensajedeavisodelerroryfinalizanlaejecucióndelamacro.
Activacióndelaproteccióncontravirusdemacro
Elmecanismodeprotecciónantivirusmuestraunmensajedeadvertenciaintegradosiemprequeseabreundibujoquepuedatenervirusdemacros.
ParadefinirlasopcionesdeunproyectoVBAdeAutoCAD
1. EnelmenúHerr.,elijaMacro Macrosparaaccederalcuadrodediálogocorrespondiente.
2. EnelcuadrodediálogoMacros,elijaOpcionesparaabrirelcuadrodediálogocorrespondiente.
3. EnelcuadrodediálogoOpciones,seleccionelasopcionesquedeseaactivar.
4. PulseAceptar.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>
EdicióndeproyectosconelIDEdeVBA
UnavezcargadounproyectoenAutoCAD,esposibleeditarelcódigo,losformulariosylasreferenciascorrespondientesmedianteelentornodedesarrollointeractivodeVBA.DesdeelIDEdeVBAtambiénsepuedendepuraryejecutarproyectos.Unavezabierto,elIDEdeVBApermiteaccederatodoslosproyectoscargados.
ParaabrirelIDEdeVBAencualquiermomento
ElIDEdeVBApuedeabrirsedesdelalíneadecomandoodesdelabarrademenús.
IntroduzcaVBAIDEenlalíneadecomando,oelija,desdeelmenúHerr.,Macro EditordeVisualBasic.VisualizacióndeinformaciónsobreproyectosDefinicióndecomponentesdeunproyectoImportacióndecomponentesexistentesEdicióndecomponentesdenombrealproyectoGuardadodelproyectoReferenciasaotrosproyectosVBADefinicióndeopcionesdelIDEdeVBA
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>
Visualizacióndeinformaciónsobreproyectos
ElIDEdeVBAcontieneunaventana,llamadaventanadeproyecto,quepresentaunalistadetodoslosproyectosVBAcargados.Tambiénpresentalosmódulosdecódigo,clasesyformulariosqueestánincluidosenelproyecto,eldocumentoquetieneasociado,todoslosproyectosalosquehacereferenciaylaubicaciónfísicadelproyecto.
Laventanadeproyectotienesupropiabarradeherramientas,quepuedeutilizarparaabrirdiversoscomponentesdelproyectoyeditarlos.PuedeabrirelcódigodeunmóduloseleccionadopulsandoelbotónVercódigo.Estebotónpermitemostrarobjetosconcretoscomoformularios,porejemplo.
Laventanadeproyectoestávisiblepordefecto.Sinoloestá,elijaExploradordeproyectosenelmenúVeropulseCTRL+R.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>
Definicióndecomponentesdeunproyecto
Cadaproyectopuedeincluircomponentesmuydistintos.Puedensercomponentesdeproyectoslosobjetos,losformularios,losmódulosestándar,losmódulosdeclasesylasreferencias.
ObjetosFormulariosMódulosestándarMódulosdeclaseReferenciasAdicióndecomponentesnuevos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>
Objetos
Elcomponenteobjetorepresentaeltipodeobjeto,odocumento,alqueaccederáelcódigodeVBA.EnlosproyectosVBAdeAutoCAD,esteobjetorepresentaeldibujoactualdeAutoCAD.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>
Formularios
Elcomponenteformulariocontieneloscuadrosdediálogopersonalizadosquesehayancreadoparautilizarconelproyecto.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>
Módulosestándar
Elcomponentemódulodecódigocontienelosprocedimientosyfuncionesgenéricos.Losmódulosestándartambiénsedenominanmódulosdecódigo,osimplementemódulos.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>
Módulosdeclase
Elcomponentemódulodeclasecontienetodoslosobjetosdelusuario,queestándefinidoscomoclases.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>
Referencias
Elcomponentereferenciacontienetodaslasreferenciasaotrosproyectosobibliotecas.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Definicióndecomponentesdeunproyecto>
Adicióndecomponentesnuevos
Laadicióndenuevoscomponentescreauncomponentevacíoenelproyecto.Puedeañadirnuevosmódulos,formulariosymódulosdeclasesalproyecto.Elpropiousuariodebeactualizartodaslaspropiedadesdelcomponente(comoelnombre,porejemplo)yrellenarelcódigoapropiado.Cuandoasigneunnombreauncomponentenuevo,tengaencuentaquepodríanutilizarlootrosprogramadoresensusaplicaciones.Sigalasconvencionesdenomenclaturaadoptadasensuequipodeprogramación.
Paraañadiruncomponentenuevoalproyecto
1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoalquedeseeañadirelcomponente.
2. EnelmenúInsertar,elijaUserForm,MódulooMódulodeclaseparaañadirelnuevocomponentealproyecto.Elcomponentenuevoseañadealproyectoysemuestraenlaventanadeproyecto.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>
Importacióndecomponentesexistentes
Laimportaciónpermiteañadiralproyectocomponentesqueyaexisten.Puedeimportarformularios,módulosomódulosdeclases.LosformulariosseimportancomoarchivosFRM,losmóduloscomoarchivosBASylosmódulosdeclasescomoarchivosCLS.
Cuandoseimportaunarchivodecomponentes,seañadealproyectounacopiadelarchivo.Elarchivooriginalquedaintacto.Loscambiosquerealiceenloscomponentesimportadosnoafectaránalarchivooriginal.
Siseimportauncomponenteconelmismonombrequeunoyaexistente,alarchivoqueseañadealproyectoseleasignaunsufijonumérico.
Elcomponenteimportadoseañadealproyectoysemuestraenlaventanadeproyecto.Paramodificarlaspropiedadesdelcomponente,seleccióneloenlaventanadeproyecto.Laspropiedadesdelcomponenteseleccionadosemuestranenunalistaypuedenmodificarseenlaventanadepropiedades.
Paraimportaruncomponenteexistentealproyecto
1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoalquedeseeañadirelcomponente.
2. EnelmenúArchivo,elijaImportararchivoparaabrirelcuadrodediálogocorrespondiente.
3. Enestecuadrodediálogo,seleccioneelarchivoquedeseeimportaryhagaclicenAbrir.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>
Edicióndecomponentes
EnelIDEdeVBApuedenmodificarselosmódulosestándar,losmódulosdeclaseylosformularios.Losmódulosestándarydeclaseseeditanenunaventanadecódigo.LosformulariossemodificanenlaventanaUserFormmedianteuncuadrodeherramientasespecial.
Puedeabrirtantasventanasdecódigocomomódulostenga;deestaformapodráverelcódigodevariosformulariosomódulos,ycopiarypegardatosentreellos.
Paraeditaruncomponentedelproyecto
1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelcomponentequedeseeeditar.
2. AbraunaventanadecódigopulsandoelbotónVercódigodelaventanadeproyecto.
3. AbraunaventanaUserform,conelcuadrodeherramientascorrespondiente,pulsandoelbotónVerobjetodelaventanadeproyecto.
Paraaccederalcódigoasociadoaunformulario
Paraaccederalcódigoasociadoauncontrol,hagadobleclicencualquiercontroldelaventanadeformulario.Elcódigoasociadoseabreenunaventanadecódigo.UsodelaventanadecódigoUsodelaventanaUserform
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Edicióndecomponentes>
Usodelaventanadecódigo
Laventanadecódigocontienedoslistasdesplegables,unabarradedivisión,unabarraindicadorademargenylosiconosVermódulocompletoyVerprocedimiento.
Lasdoslistasdesplegablesdelapartesuperiordelaventanadecódigomuestranelobjetoyelprocedimientoactuales.Puededesplazarseporelproyectosicambiaelobjetooelprocedimientoenestaslistas.
Labarradedivisiónsituadaaladerechadelaventanadecódigopermitedividirlaventanaensentidohorizontal.Sólotienequearrastrarlabarrahaciaabajoparacrearotropaneldeventana.Estafunciónpermiteversimultáneamentedospartesdelcódigodelmismomódulo.Paracerrarelpanel,arrastrelabarradedivisiónhastasuposicióninicial.
Labarraindicadorademargenseencuentraenlaparteizquierdainferiordelaventanadecódigo.Puedeutilizarlaparaverlosindicadoresdemargenqueseutilizandurantelamodificaciónydepuracióndelcódigo.
LosiconosVermódulocompletoyVerprocedimientoseencuentranenlaesquinainferiorizquierdadelaventanadecódigoysirvenparacambiarlavisualizacióndeformaquesemuestreunprocedimientocadavezoelmódulocompleto.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>Edicióndecomponentes>
UsodelaventanaUserform
EnlaventanaUserformpuedecrearcuadrosdediálogopersonalizadosparaunproyecto.
Paraañadiruncontrol,bastaconarrastrarlodesdeelcuadrodeherramientasycolocarloenelformulario.EsposiblealinearloscontrolesconlarejilladelformulariodesdelafichaGeneraldelcuadrodediálogoOpciones.PuedeverlarejilladeformularioydeterminareltamañodelaslíneasdelarejillaenlafichaGeneraldelcuadrodediálogoOpciones.(VéaseDefinicióndeopcionesdelIDEdeVBAparamásinformaciónsobreelcuadrodediálogoOpciones.)
CadaformularioquesediseñaincluyelosbotonesMaximizar,MinimizaryCerrardeformaautomática.Estosbotonesyaestánimplementados.
Paraañadiruncódigoalcontrol,bastaconhacerdobleclicenélcuandosehayacolocadoenelformulario.Deestaformaseabrelaventanadecódigodelcontrol.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>
denombrealproyecto
Elnombredelproyectoyelnombredelarchivo.dvbdondeseguardaelproyectosondistintos.Elnombredelarchivo.dvbseasignaalguardarelproyecto.ElnombredelproyectosedefineenlaventanadepropiedadesdelIDEdeVBA.
Sinodesignaunnombredeproyectoyunnombredearchivo,AutoCADproporcionalossiguientesnombrespordefecto:
Nombredelproyecto:ACADProject
Nombredelarchivo:Project.dvb
Paracambiarelnombredeunproyecto
1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoquedeseecambiar.
2. Enlaventanadepropiedades,cambielapropiedadNombredelproyecto.
Paracambiarelnombredearchivodeunproyecto
1. EnelIDEdeVBA,elijalaopciónGuardardelmenúArchivo.
2. EnelcuadrodediálogoGuardarcomo,escribaelnuevonombreylaubicacióndelarchivodeproyecto.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>
Guardadodelproyecto
AutoCADnotieneuncomandoGUARDARespecíficoparalosproyectosVBA.Enlugardeello,elcomandoGUARDARestáincluidoenelmenúArchivodelIDEyenelAdministradordeVBA.CuandoserealicencambiosenunproyectoVBAseabriráelcuadrodediálogoGuardarproyectoVBAsiseproduceunadeestassituaciones:
HaseleccionadoelcomandoGUARDARenelIDEdeVBA.
HaelegidolaopciónGuardarcomoenelAdministradordeVBA.
LasesióndeAutoCADvaaterminaroacerrarse,peronosehaguardadoelproyectoVBA.
Nota Antesdeguardarunproyecto,seleasignaelnombredearchivopordefectoproject.dvb.Esimportantequeasigneotronombrealproyectocuandologuarde.Siloguardaconelnombredearchivoproject.dvb,yanopodrácrearproyectosnuevosvacíos:cadavezquecreeunproyectonuevo,secargaráelproyectoproject.dvbguardado.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>
ReferenciasaotrosproyectosVBA
LasreferenciasaunproyectoVBAdesdeotrofacilitanalosprogramadoreselusocompartidodelcódigo.Losprogramadorespuedencrearbibliotecasconlasmacrosdeusomásfrecuenteyhacerreferenciaalasbibliotecascuandolasnecesiten.Estopermitequeelcódigocompartidoestécentralizadoyrevisadoyquepuedaserutilizadoporungrannúmerodeprogramadores.
Cuandohayarealizadoconéxitounareferenciaaotroproyecto,observaráquesecreaunacarpetaenlaventanadeproyectodelIDEdeVBA.EstanuevacarpetasellamaReferenciasycontieneelnombredelproyectoalquesehacereferencia.
Unavezcreadalareferenciaaunproyecto,puedeutilizarcualquiercomponentedecódigoodeformulariopúblicoeneseproyecto.
CuandosecargaenAutoCADunproyectoqueutilizareferenciasaotroproyecto,ésteúltimotambiénsecargaenAutoCADdeformaautomática.Elproyectodereferencianopuedecerrarsehastaquenoestécerradoelproyectoprincipal.
Nopuedenestablecersereferenciascirculares.Esdecir,nosepuedehacerreferenciaaunproyectoqueasuveztengaunareferenciaalprimerproyecto.Sisecreaunareferenciacircularporerror,VBAlocomunica.
LautilizacióndereferenciasaproyectosesunafunciónestándardeMicrosoftVBA.EnAutoCADseutilizatalcual,noseharealizadoningunaacciónparaampliarla.Paraobtenermásinformaciónacercadelautilizacióndereferenciasaproyectos,véaselaAyudadeMicrosoftVBA.LaAyudadeMicrosoftVBAsepuedeabrirdesdeelmenúAyudadelIDEdeVBA.
Nota NopuedencrearsereferenciasaproyectosincrustadosniaproyectosVBAdeotrasaplicaciones.
ParacrearunareferenciaaotroproyectoVBA
1. EnlaventanadeproyectodelIDEdeVBA,seleccioneelproyectoalquedeseeañadirlareferencia.
2. EnelmenúHerramientas,elijalaopciónReferenciasparaabrirelcuadrodediálogocorrespondiente.
3. Enestecuadrodediálogo,hagaclicenExaminarparaabrirelcuadrodediálogoAgregarreferencias.
4. Enelcuadrodediálogo,seleccioneelarchivodeproyectoalquedeseehacerreferenciayhagaclicenelbotónAbrir.
5. Enestecuadrodediálogo,seleccioneelarchivodeproyectoalquedeseehacerreferenciayhagaclicenelbotónAbrir.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>
DefinicióndeopcionesdelIDEdeVBA
EsposiblecambiarlascaracterísticasdelIDEdeVBAenelcuadrodediálogoOpciones.Paraabrirestecuadrodediálogo,enelmenúHerramientas,elijaOpciones.
ElcuadrodediálogoOpcionesincluyecuatropestañas:Editor,Formatodeleditor,GeneralyAcoplar.
EditorFormatodeleditorGeneralAcoplar
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>DefinicióndeopcionesdelIDEdeVBA>
Editor
LafichaEditorpermitedefinirlosparámetrosdelasventanasdecódigoydeproyecto.
Entrelosparámetrosdecódigoseincluyen:
Comprobacióndesintaxisautomática
Declaracióndevariablerequerida:
Listademiembrosautomática
Informaciónrápidaautomática
Sugerenciasdedatosautomáticas
Sangríaautomática
Anchodetabulación
Entrelosparámetrosdeventanaseincluyen:
Arrastrarycolocareneleditor
Vistacompletapredeterminadadelmódulo
Separadordeprocedimientos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>DefinicióndeopcionesdelIDEdeVBA>
Formatodeleditor
LafichaFormatodeleditordeterminaelaspectodelcódigo.
Esposible:
Cambiarelcolordelcódigo
Designarloselementosdelalistadetexto
Cambiarelprimerplano
Cambiarelfondo
Cambiarlosindicadoresdemargen
Cambiareltipodeletradeltextoysutamaño
Mostraruocultarelindicadordemargen
Mostraruocultareltextodeejemplodelosparámetros
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>DefinicióndeopcionesdelIDEdeVBA>
General
LafichaGeneralprecisalosvalores,ladetecciónyrecuperacióndeerroresylosparámetrosdecompilacióndelproyectoVBAactual.
Esposible:
Cambiarlosparámetrosdelarejilladelformulario
Mostraruocultarinformacionessobreherramientas
Definirlaocultaciónautomáticadelasventanas
Elegirlarecepcióndenotificacionesdepérdidadeestado
Determinarelmétododegestióndeerrores
Definirelproyectodeformaquesecompilecuandoelusuariolosoliciteoserealicencompilacionesensegundoplano
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>EdicióndeproyectosconelIDEdeVBA>DefinicióndeopcionesdelIDEdeVBA>
Acoplar
Estafichapermiteelegirlasventanasquepuedenacoplarse.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>
Realizacióndeunejerciciopreliminar
AhoraqueyahaconocelosaspectosbásicosdelaprogramaciónenVBAdeAutoCAD,vamosacrearunsencilloejerciciodenominado“Holaatodos”.EnesteejerciciovaacrearundibujodeAutoCADnuevo,vaaañadirleunalíneadetextoyvaaguardarlo,todoellodesdeVBA.
Paracrearelobjetodetexto“Holaatodos”
1. AbraelIDEdeVBAejecutandoelsiguientecomandodesdelalíneadecomandodeAutoCAD:Comando:VBAIDE
2. AbralaventanadecódigoseleccionandolaopciónCódigodelmenúVerenelIDEdeVBA.
3. CreeunprocedimientonuevoenelproyectoseleccionandolaopciónProcedimientoenelmenúInsertarenelIDEdeVBA.
4. Cuandoselesolicitelainformacióndelprocedimiento,escribaunnombre,porejemplo,HolaATodos.AsegúresedequeesténseleccionadoseltipoProcedimientoyelámbitoPúblico.
5. PulseAceptar.
6. Escribaelcódigosiguiente(queabreundibujonuevo)entrelaslíneasPublicSubHolaatodos()yEndSub.
ThisDrawing.Application.Documents.Add
7. Escribaelcódigosiguiente(quecrealacadenadetextoydefineelpuntodondeseinserta)inmediatamentedespuésdelcódigointroducidoenelpaso6.
DiminsPoint(0To2)AsDouble'Declareinsertionpoint
DimtextHeightAsDouble'Declaretextheight
DimtextStrAsString'Declaretextstring
DimtextObjAsAcadText'Declaretextobject
insPoint(0)=2'Setinsertionpointxcoordinate
insPoint(1)=4'Setinsertionpointycoordinate
insPoint(2)=0'Setinsertionpointzcoordinate
textHeight=1'Settextheightto1.0
textString="Hello,World."'Setthetextstring
'CreatetheTextobject
SettextObj=ThisDrawing.ModelSpace.AddText_
(textStr,insPoint,textHeight)
8. Escribaelsiguientecódigo(queguardaeldibujo)inmediatamentedespuésdelcódigointroducidoenelpaso7.
ThisDrawing.SaveAs("Hello.dwg")
9. EjecuteelprogramaseleccionandolaopciónEjecutarSub/UserFormenelmenúEjecutardelIDEdeVBA.Cuandoterminelaejecucióndelprograma,traigalaaplicaciónAutoCADalprimerplano.Deberíavereltexto“Holaatodos”eneldibujo.ElnombredeldibujodebeserHello.dwg.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>
Obtencióndemásinformación
PuedeobtenermásinformaciónacercadelIDEdeVBAydellenguajedeprogramaciónVBAenlosarchivosdeAyudaqueproporcionaMicrosoft.ParaabrirlosarchivosdeAyudadeMicrosoftVisualBasic,elijaAyudadeMicrosoftVisualBasicenelmenúAyudadelIDEdeVBA.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>
TérminosparaproyectosVBAdeAutoCAD
Proyectoglobal
ProyectoVBAguardadoenunarchivo.dvb.
Proyectoincrustado
ProyectodeVBAalmacenadoenundibujodeAutoCAD.
Documentonormal
DibujodeAutoCADquenocontieneproyectosVBAincrustados.
Documentoinformativo
DibujodeAutoCADquecontieneunoomásproyectosVBAincrustados.
Proyectoactual
ProyectoqueseencuentraseleccionadoenelIDEdeVBA
ThisDrawing
TérminodeprogramacióndeVBAutilizadopararepresentareldibujoactual.Enlosproyectosglobales,ThisDrawingsiemprehacereferenciaaldocumentoqueestáactivoenAutoCAD.Enlosproyectosincrustados,ThisDrawingsiemprehacereferenciaaldocumentoquecontieneelproyecto.
IDEdeVBA
EntornodedesarrollointeractivodeVBA.Estaaplicaciónpermiteeditarelcódigoylosformulariosdelproyectoactivo,ocopiarcódigoyformulariodeotrosproyectos.Tambiénpermiteestablecerreferenciasaotrosmodelosdeobjetosdeaplicación.
AdministradordeVBA
ElAdministradordeVBApermitegestionarlosproyectos.Esposiblecrear,borrar,incrustaroextraerproyectos.Tambiénpermiteverlosproyectos
incrustadosenundibujoabiertosiloshay.
CuadrodediálogoMacros
EnelcuadrodediálogoMacrospuedeejecutar,suprimirycrearmacros,asícomoaccederalasopcionesdeproyectosVBA.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ParaempezarconVBA>
ComandosVBAdeAutoCAD
VBAIDE
AbreelIDEdeVBA.ElIDEdeVBApermiteeditar,ejecutarydepurarprogramasdeformainteractiva.AunquesólosepuedeactivarelIDEdeVBAmientrasseejecutaAutoCAD,esposibleminimizarlo,abrirloycerrarloconindependenciadelaventanadeaplicacióndeAutoCAD.
VBALOAD
CargaunproyectoVBAenlasesiónactualdeAutoCAD.
VBARUN
EjecutaunamacrodeVBAdesdeelcuadrodediálogoMacrosodesdelalíneadecomandodeAutoCAD.
VBADESCARGAR
DescargaunproyectoVBAdelasesióndeAutoCADactual.SielproyectoVBAsehamodificadoperonosehaguardado,sepreguntaalusuariosideseaguardarlomedianteelcuadrodediálogoGuardarproyecto(omedianteelequivalentedelalíneadecomando).
VBAMAN
MuestraelAdministradordeVBA,dondepuedever,crear,cargar,cerrar,incrustaryextraerproyectos.
VBAENUN
EjecutaunasecuenciaVBAdesdelalíneadecomandodeAutoCAD.
¿Comentarios?
<$nopage>datosex.<$nopage>raíz(objeto):
ManualdeldesarrolladordeActiveXyVBA>
ConceptosbásicosdeActiveXAutomation
ParahacerunusoeficazdeActiveXAutomationdeAutoCAD,debeestarfamiliarizadoconlosobjetos,entidadesyfuncionesdeAutoCADrelativosaltipodeaplicaciónqueestédesarrollando.Cuantomásconocimientosetengadelaspropiedadesgráficasynográficasdeunobjeto,másfácilserámanipularlosobjetosenActiveXAutomationdeAutoCAD.
SideseaconsultarunarchivodeayudadeActiveXAutomationdeAutoCAD,pulseF1.Sitienealgúnproblemaconunobjeto,métodoopropiedadconcretos,resalteelelementoencuestiónenelIDEdeVBAypulseF1.
ModelodeobjetosdeAutoCADAccesoalajerarquíadeobjetosLosobjetosdecolecciónConceptosbásicossobrepropiedadesymétodosDefinicióndeobjetosanteriores(padre)LocalizacióndelabibliotecadetiposUsodevariantesenmétodosypropiedadesOtroslenguajesdeprogramación
¿Comentarios?
<$nopage>datosex.
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>
ModelodeobjetosdeAutoCAD
LosobjetosconstituyenelbloqueconstructorprincipaldelainterfazdeActiveX®deAutoCAD®.CadaobjetoexpuestorepresentauncomponenteconcretodeAutoCAD.ExistenmultituddetiposdeobjetosdiferentesenlainterfazdeActiveXdeAutoCAD.Porejemplo:
Loselementosgráficoscomolaslíneas,losarcos,eltextoylascotassonobjetos.
Losparámetrosdeestilocomoeltipodelíneayelestilodecotasonobjetos.
Lasestructurasdeorganizacióncomolascapas,losgruposylosbloquessonobjetos.
Lostiposdevisualizacióndedibujoscomolasvistasylasventanasgráficassonobjetos.
SeconsideranobjetosinclusoeldibujoylaaplicaciónAutoCAD.
Losobjetosseestructurandeformajerárquica,siendolaraízelobjetoApplication.AlapresentacióndeestaestructurajerárquicaseledenominaModelodeobjetos.ElModelodeobjetospermiteverelobjetoqueproporcionaaccesoalsiguienteniveldeobjetos.
ElobjetoApplicationElobjetoDocumentObjetosdecolecciónObjetosgráficosynográficosObjetosPreferences,PlotyUtilityUsodelasfuncionesdeAutoCADnuevas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>
ElobjetoApplication
ElobjetoApplicationeslaraízdelModelodeobjetosdeActiveXAutomationdeAutoCAD.Desdeélpuedeobteneraccesoacualquieradelosdemásobjetosoalosmétodosypropiedadesquetenganasignados.
Porejemplo,elobjetoApplicationtieneunapropiedadPreferencesquedevuelveelobjetoPreferences.EstosobjetosjuntosproporcionanaccesoatodaslasopcionesalmacenadasenelregistromedianteelcuadrodediálogoOpciones.(LosparámetrosalmacenadoseneldibujoestáncontenidosenelobjetoDatabasePreferencesquesedescribemásadelante.)OtraspropiedadesdelobjetoApplicationofrecenaccesoadatosespecíficosdelaaplicación,comosunombreyversión,asícomoeltamaño,ubicaciónyvisibilidaddeAutoCAD.LosmétodosdelobjetoApplicationpermitenrealizaraccionesespecíficasdelaaplicación,comoenumeración,cargaydescargadeaplicacionesADSyARX,asícomosalirdeAutoCAD.
ElobjetoApplicationtambiénproporcionavínculosconlosdibujosdeAutoCADatravésdelacolecciónDocuments,conlosmenúsylasbarrasdeherramientasdeAutoCADatravésdelascoleccionesMenuBaryMenuGroups,yconelIDEdeVBAatravésdeunapropiedadllamadaVBE.
ElobjetoApplicationtambiéneselobjetoglobaldelainterfazdeActiveX.Esdecir,todoslosmétodosypropiedadesdelobjetoApplicationestándisponibles
enelespaciodenombresglobal.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>
ElobjetoDocument
ElobjetoDocument,queenrealidadesundibujodeAutoCAD,seencuentraenlacolecciónDocumentsyproporcionaaccesoatodoslosobjetosdeAutoCADgráficosyalamayoríadelosquenosongráficos.Elaccesoalosobjetosgráficos(líneas,círculos,arcos,etc.)serealizaatravésdelascoleccionesModelSpaceyPaperSpace,mientrasqueelaccesoalosobjetosnográficos(capas,tiposdelínea,estilosdetexto,etc.)serealizaatravésdecoleccionesdelmismonombre,comoasLayers,LinetypesyTextStyles.ElobjetoDocumenttambiénproporcionaaccesoalosobjetosPlotyUtility.
Paraaccederalaspropiedadesdeldibujo,utilicelapropiedadSummaryInfodelobjetoDocument.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>
Objetosdecolección
AutoCADagrupalamayoríadelosobjetosencolecciones.Aunqueéstascontienentiposdedatosdistintos,puedenprocesarseaplicandotécnicassimilares.Cadacoleccióntienesumétododeincorporacióndenuevosobjetos.LamayoríautilizaelmétodoAdd.Noobstante,losobjetosentidadnormalmenteseañadenmedianteunmétodollamadoAdd<nombre_entidad>.Porejemplo,paraagregarunalíneaseutilizaríaelmétodoAddLine.
Lascoleccionestambiéncompartenalgunosotrosmétodosypropiedades.PuedeutilizarselapropiedadCountparaobtenereltotalapartirdecerodelosobjetosdeunacolección.ConelmétodoItempuedeobtenersecualquierobjetodeunacolección.
¿Comentarios?
<$nopage>datosex.
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>
Objetosgráficosynográficos
Losobjetosgráficos,tambiénconocidoscomoentidades,sonlosobjetosvisibles(líneas,círculos,imágenesráster,etc.)quecomponenundibujo.Paracrearlos,seutilizaelmétodoAdd<Entidad>apropiado.Paramodificaroconsultarestosobjetos,apliquelosmétodosopropiedadesdelpropioobjeto.LosobjetosgráficostienenmétodosquepermitenqueunaaplicaciónejecutelamayoríadeloscomandosdeedicióndeAutoCADcomoCopiar,Borrar,Desplazar,Simetría,etc.Estosobjetostambiéntienenmétodosparalaconfiguraciónyrecuperacióndedatosextendidos(datosex),elresaltadoylaactualización,ylarecuperacióndelcuadrodelimitadordelobjeto.LosobjetosgráficostienenpropiedadesbásicascomoLayer,Linetype,ColoryHandle.Tambiéntienenpropiedadesespecíficasquedependendeltipodeobjeto,comoCenter,RadiusyArea.
Losobjetosnográficossonlosobjetosinvisibles(informativos)queformanpartedeundibujo,comoLayers,Linetypes,DimStyles,SelectionSets,etc.Paracrearestosobjetos,apliqueelmétodoAdddelobjetoCollectionsuperior.Paramodificaroconsultarestosobjetos,apliquelosmétodosopropiedadesdelpropioobjeto.Losobjetosnográficostienenmétodosypropiedadesespecíficosasupropósito;todoscuentanconmétodosquepermitenestableceryrecuperardatosextendidos(datosex)ysuprimirseasímismos.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>
ObjetosPreferences,PlotyUtility
BajoelobjetoPreferencesexisteunconjuntodeobjetos,cadaunodeloscualescorrespondeaunafichadelcuadrodediálogoOpciones.EstosobjetosjuntosproporcionanaccesoatodaslasopcionesalmacenadasenelregistromedianteelcuadrodediálogoOpciones.LosparámetrosalmacenadoseneldibujoestáncontenidosenelobjetoDatabasePreferences.Lasopciones(ylasvariablesdesistemaquenoformenpartedelcuadrodediálogoOpciones)tambiénpuedenestablecerseymodificarseconlosmétodosSetVariableyGetVariable.Paraobtenermásinformaciónacercadecómodefiniropciones,véaseDefinicióndepreferenciasdeAutoCAD.
ElobjetoPlotproporcionaaccesoalosparámetrosdelcuadrodediálogoImprimirydotaaunaaplicacióndelacapacidaddetrazareldibujocondiversosmétodos.Paraobtenermásinformaciónacercadeltrazado,véaseImpresióndedibujos.
ElobjetoUtilityproporcionaalusuariofuncionesdeentradayconversióndedatos.Lasfuncionesdeentradadelusuariosonmétodosquesolicitanalusuariolaintroduccióndedistintostiposdedatoscomocadenas,enteros,reales,puntosyotros,enlalíneadecomandodeAutoCAD.LasfuncionesdeconversiónsonmétodosqueutilizandeterminadostiposdedatosdeAutoCAD,comolospuntosyángulos,ademásdegestionarcadenasynúmeros.Paraobtenermás
informaciónacercadelasfuncionesdeentrada,véaseSolicituddedatosdeusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>ModelodeobjetosdeAutoCAD>
UsodelasfuncionesdeAutoCADnuevas
SielproyectodeautomatizaciónutilizaunafunciónquenoseencontrabaenunaversiónanteriordeAutoCAD,debedeclararsedeformaexplícitalainterfazdeAutoCADqueseutilizaenelproyecto.
SiunproyectodeautomatizacióncontienedeclaracionesexplícitasdelasinterfacesnuevasdeunadeterminadaversióndeAutoCAD,noutiliceeseproyectoconversionesanterioresdeAutoCAD.
¿Comentarios?
<$nopage>raíz(objeto):
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>
Accesoalajerarquíadeobjetos
EsfácilaccederalajerarquíadeobjetosdesdeVBA.ElaccesoalajerarquíadeobjetosesmuysencillodesdeVBA,yaqueVBAseejecutaconlasesiónactualdeAutoCADencursoynoesprecisoportantorealizarningúnpasoadicionalparaconectarconlaaplicación.
VBAproporcionaunvínculoaldibujoactivoenlasesiónactualdeAutoCADatravésdelobjetoThisDrawing.LautilizacióndeThisDrawingpermiteelaccesoinmediatoalobjetoDocumentactualyatodossusmétodosypropiedades,asícomoatodoslosdemásobjetosdelajerarquía.
Cuandoseutilizaenunproyectoglobal,ThisDrawingsiemprehacereferenciaaldocumentoqueestáactivoenAutoCAD.Enlosproyectosincrustados,sinembargo,ThisDrawingsiemprehacereferenciaaldocumentoquecontieneelproyecto.Porejemplo,lasiguientelíneadecódigodeunproyectoglobalguardaeldibujoqueseencuentreactivoenAutoCAD,seacualsea:
ThisDrawing.Save
ReferenciasaobjetosdelajerarquíadeobjetosAccesoalobjetoApplication
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Accesoalajerarquíadeobjetos>
Referenciasaobjetosdelajerarquíadeobjetos
Sepuedehacerreferenciaalosobjetosdirectamenteoatravésdeunavariabledefinidaporelusuario.Parautilizarunareferenciadirectaaunobjeto,inclúyaloenlajerarquíadelallamada.Porejemplo,lasiguienteinstrucciónañadeunalíneaenelespaciomodelo.ObservequelajerarquíacomienzaconThisDrawing,vaalobjetoModelSpaceyacontinuaciónllamaalmétodoAddLine:
DimstartPoint(0To2)AsDouble,endPoint(0To2)AsDouble
DimLineObjasAcadLine
startPoint(0)=0:startPoint(1)=0:startPoint(2)=0
endPoint(0)=30:endPoint(1)=20:endPoint(2)=0
SetLineObj=ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)
Parahacerreferenciaalosobjetosmedianteunavariabledefinidaporelusuario,definalavariableconeltipodeseadoy,acontinuación,establézcalacomoelobjetoadecuado.Porejemplo,elcódigosiguientedefineunavariable(moSpace)detipoAcadModelSpaceylaestablececomoigualalespaciomodeloactual:
DimmoSpaceAsAcadModelSpace
SetmoSpace=ThisDrawing.ModelSpace
Lasiguienteinstrucciónagregaunalíneaalespaciomodelomediantelavariabledefinidaporelusuario:
DimstartPoint(0To2)AsDouble,endPoint(0To2)AsDouble
DimLineObjasAcadLine
startPoint(0)=0:startPoint(1)=0:startPoint(2)=0
endPoint(0)=30:endPoint(1)=20:endPoint(2)=0
SetLineObj=moSpace.AddLine(startPoint,endPoint)
Recuperacióndelprimerobjetoentidaddelespaciomodelo
Elejemplosiguientedevuelveelprimerobjetoentidaddelespaciomodelo.Estecódigotendríaelmismoefectoenentidadesdelespaciopapel.TengaencuentaquetodoslosobjetosdeldibujosepuedendefinircomoobjetosAcadEntity:
SubCh2_FindFirstEntity()
'Thisexamplereturnsthefirstentityinmodelspace
OnErrorResumeNext
DimentityAsAcadEntity
IfThisDrawing.ModelSpace.count<>0Then
Setentity=ThisDrawing.ModelSpace.Item(0)
MsgBoxentity.ObjectName+_
"isthefirstentityinmodelspace."
Else
MsgBox"Therearenoobjectsinmodelspace."
EndIf
EndSub
¿Comentarios?
<$nopage>raíz(objeto):
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Accesoalajerarquíadeobjetos>
AccesoalobjetoApplication
LapropiedadApplicationdelobjetoDocumentproporcionaaccesoalobjetoApplication.ElobjetoApplicationestáporencimadelobjetoDocumentenlajerarquíadeobjetos.
ElobjetoThisDrawingproporcionaaccesoalobjetoDocument.Porejemplo,lasiguientelíneadecódigoactualizalaaplicación:
ThisDrawing.Application.Update
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>
Losobjetosdecolección
Unobjetodecolecciónesunobjetopredefinidoquecontiene(esunobjetopropietariode)todaslasinstanciasdeunobjetosimilar.Acontinuaciónsemuestraunalistadeobjetosdecolección:
Colección
ContienetodoslosdocumentosabiertosenlasesiónactualdeAutoCAD.
Coleccióndeespaciomodelo
Contienetodoslosobjetosgráficos(entidades)delespaciomodelo.
Coleccióndeespaciopapel
Contienetodoslosobjetosgráficos(entidades)deladisposiciónactivadelespaciopapel.
Objetodebloque
Contienetodaslasentidadesdeunadefinicióndebloqueconcreta.
Coleccióndebloques
Contienetodoslosbloquesdeldibujo.
Coleccióndediccionarios
Contienetodoslosdiccionariosdeldibujo.
Coleccióndeestilosdecotas
Contienetodoslosestilosdeacotacióndeldibujo.
Coleccióndedependenciasdearchivos
Contienetodosloselementosenlalistadedependenciasdearchivos.
Coleccióndegrupos
Contienetodoslosgruposdeldibujo.
Coleccióndehipervínculos
Contienetodosloshipervínculosdeunaentidaddada.
Coleccióndecapas
Contienetodaslascapasdeldibujo.
Coleccióndepresentaciones
Contienetodaslasdisposicionesdeldibujo.
Coleccióndetiposdelínea
Contienetodoslostiposdelíneadeldibujo.
Coleccióndebarrasdemenús
ContienetodoslosmenúsqueactualmentesemuestranenAutoCAD.
Coleccióndegruposdemenús
ContienetodoslosmenúsybarrasdeherramientasqueactualmenteestáncargadosenAutoCAD.
Coleccióndeconfiguracionesdetrazado
Contieneparámetrosdetrazadoguardadoseneldibujo.
Coleccióndeaplicacionesregistradas
Contienetodaslasaplicacionesregistradasdeldibujo.
Coleccióndeconjuntosdeselección
Contienetodoslosconjuntosdeseleccióndeldibujo.
Coleccióndeestilosdetexto
Contienetodoslosestilosdetextodeldibujo.
ColeccióndecoordenadasSCP
Contienetodoslossistemasdecoordenadaspersonales(SCP)deldibujo.
Coleccióndevistas
Contienetodaslasvistasdeldibujo.
Coleccióndeventanasgráficas
Contienetodaslasventanasgráficasdeldibujo.
AccesoaunacolecciónAdicióndemiembrosaunacolecciónIteraciónenunobjetodecolecciónSupresióndemiembrosdeunobjetodecolección
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Losobjetosdecolección>
Accesoaunacolección
PuedeaccederalamayoríadelosobjetosdecoleccionesatravésdelobjetoDocument.DichoobjetocontieneunapropiedadporcadaunodelosobjetosCollection.Porejemplo,elcódigosiguientedefineunavariableyladefinecomolacolecciónLayersdeldibujoactual:
DimlayerCollectionasAcadLayers
SetlayerCollection=ThisDrawing.Layers
PuedeaccederalascoleccionesDocuments,MenuBaryMenuGroupsatravésdelobjetoApplication.Dichoobjetocontieneunapropiedadporcadaunadeestascolecciones.Porejemplo,elcódigosiguientedefineunavariableyladefinecomolacolecciónMenuGroupsdelaaplicación:
DimMenuGroupsCollectionasAcadMenuGroups
SetMenuGroupsCollection=ThisDrawing.Application.MenuGroups
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Losobjetosdecolección>
Adicióndemiembrosaunacolección
Paraagregarunmiembronuevoalacolección,utiliceelmétodoAdd.Porejemplo,elsiguientecódigocreaunacapanuevaylaañadealacoleccióndecapas(Layers).
DimnewLayerasAcadLayer
SetnewLayer=ThisDrawing.Layers.Add("MyNewLayer")
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Losobjetosdecolección>
Iteraciónenunobjetodecolección
UtiliceelmétodoItemparaseleccionarunmiembroconcretodeunobjetodecolección.Dichométodorequiereunidentificadorcomonúmerodeíndicequeespecifiquelaubicacióndelelementoenlacolecciónobiencomounacadenaquerepresentealnombredelelemento.
Itemeselmétodopredeterminadopordefectoparalascolecciones:cuandoelusuarionoindicaunnombredemétodoalmencionarunacolección,seutilizaelmétodoItem.Lassiguientesinstruccionessonequivalentes:
ThisDrawing.Layers.Item("ABC")
ThisDrawing.Layers("ABC")
Nota Noutilicelosmétodosdeedicióndelaentidad(Copy,Array,Mirror,etc.)enunobjetoalavezqueiteraenunacolecciónempleandoelmecanismoForEach.Terminelaiteraciónantesdeintentareditarunobjetodelacolecciónobiencreeunamatriztemporalydefínalacomoigualalacolección.Acontinuaciónpuedeiterarenlamatrizcopiadayefectuarcambios.
Iterarenlacoleccióndecapas
Elejemplosiguienteefectúaiteracionesenunacolecciónypresentalosnombresdetodaslascapasdelacolección:
SubCh2_IterateLayer()
'Iteratethroughthecollection
OnErrorResumeNext
DimIAsInteger
DimmsgAsString
msg=""
ForI=0ToThisDrawing.Layers.count-1
msg=msg+ThisDrawing.Layers.Item(I).Name+vbCrLf
Next
MsgBoxmsg
EndSub
Búsquedadelacapa"MiCapa"
Elsiguienteejemploserefiereaunacapadenominada"MiCapa"ypresentaunmensajesilacapanoexiste:
SubCh2_FindLayer()
'UsetheItemmethodtofindalayernamed"MiCapa"
OnErrorResumeNext
DimABCLayerAsAcadLayer
SetABCLayer=ThisDrawing.Layers("MiCapa")
IfErr<>0Then
MsgBox"Thelayer'MiCapa'doesnotexist."
EndIf
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Losobjetosdecolección>
Supresióndemiembrosdeunobjetodecolección
Parasuprimirunestilodecotaconcreto,utiliceelmétodoDeletequeseencuentraenelobjetomiembro.Porejemplo,lasiguientelíneadecódigosuprimelacapaABC:
DimABCLayerasAcadLayer
SetABCLayer=ThisDrawing.Layers.Item("ABC")
ABCLayer.Delete
Unavezquesesuprimeunobjeto,novuelvaaintentaraccederaélalolargodelprograma.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>
Conceptosbásicossobrepropiedadesymétodos
Cadaobjetollevaasociadossuspropiosmétodosypropiedades.Laspropiedadesdescribenaspectosindividualesdelobjeto;losmétodossonaccionesquepuedenrealizarseconelobjetoconcreto.Unavezcreadoelobjeto,lopuedeconsultarymodificaratravésdesuspropiedadesymétodos.
Porejemplo,unobjetoCircletienelapropiedadCenter.Estapropiedadrepresentalascoordenadas3DdelSCUenelcentrodelcírculo.Paracambiarelcentrodelcírculo,solotienequedefinirestapropiedadconunasnuevascoordenadas.ElobjetoCircletambiéntieneunmétododenominadoOffset.Estemétodocreaunobjetonuevoaunadistanciadedesfaseespecificadaconrespectoalcírculooriginal.ParaverunalistadetodoslosmétodosypropiedadesdelobjetoCircle,véaseelobjetoCircleenActiveXandVBAReferencedeAutoCAD.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>
Definicióndeobjetosanteriores(padre)
Todoslosobjetostienenunobjetoanterioralqueestánvinculadospermanentemente.Todoslosobjetostienencomoorigenunmismoobjetoanteriorllamadoobjetoraíz.Puedeaccederatodoslosobjetosdelainterfazsiguiendolosvínculosqueunenalobjetoraízconlosobjetossubordinados.Asimismo,losobjetostienenunapropiedadllamadaApplicationquelosunedirectamenteconelobjetoraíz.
ElobjetoraízdelainterfazdeAutoCADeslaaplicaciónAutoCAD.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>
Localizacióndelabibliotecadetipos
Losobjetos,métodosypropiedadesexpuestosporobjetosdeautomatizaciónestánincluidosenunabibliotecadetipos.Unabibliotecadetiposesunarchivoopartedeunarchivoquedescribeeltipodeunoomásobjetos.
Lasbibliotecasdetiposnoalmacenanobjetos,sinoinformación.Elaccesoaunabibliotecadetipospermiteaaplicacionesyexploradoresdeterminarcaracterísticasdeunobjetotalescomolasinterfacesqueadmiteolosnombresydireccionesdelosmiembrosdecadainterfaz.
Parapoderutilizarelobjetodeautomatizaciónexpuestoporunaaplicación,debehacerreferenciaasubibliotecadetipos.LareferenciasedefineautomáticamenteenelIDEdeVBA.Enotrosentornosdedesarrollointeractivo,elusuariodebecrearunareferenciaalarchivodebibliotecadetiposdeAutoCAD,acax17enu.tlb,queseencuentraenc:\Archivosdeprograma\Archivoscomunes\AutodeskShared.ParaaccederaobjetosdelAdministradordeconjuntosdeplanosenelIDEdeVBAoenotrosentornos,elusuariodebecrearunareferenciaalarchivodebibliotecadetiposdeAcSmComponents171.0,AcSmComponents17.tlb,queseencuentraenc:\Archivosdeprograma\Archivoscomunes\AutodeskShared.
Puedeutilizarlosobjetosdeunaaplicaciónsinhacerreferenciaalabibliotecadetiposdelamisma.Noobstante,espreferibleañadirlareferenciaalabibliotecadetipos,porlossiguientesmotivos:
Elaccesoalasfuncionesdisponiblesglobalmenteesdirecto,sinnecesidaddecalificación.
Durantelacompilaciónpuedecomprobarsesilaactivacióndefunciones,propiedadesymétodosescorrectay,porlotanto,laejecuciónesmásrápidaentiempodeejecución.
Puedendeclararsevariablesdelostiposdefinidosenlabiblioteca,y
aumentarlafiabilidadylegibilidadentiempodeejecución.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>
Usodevariantesenmétodosypropiedades
ActiveXAutomationutilizavariantesparatransferirmatricesdedatos.Aunqueestopuedeserconfusoparaunusuariosinexperiencia,esmuyfácilunavezaprendidoslosconceptosbásicos.ActiveXAutomationdeAutoCADtambiénproporcionautilidadesparafacilitarlaconversióndelostiposdedatos.
¿QuéesunVariant?UsodeVariant(variantes)enmatricesdedatosConversióndematricesenvariantesInterpretacióndematricesdevariantes
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>
¿QuéesunVariant?
UnVariant(variante)esuntipodedatosespecialquepuedecontenercualquierclasededatosexceptocadenasdelongitudfijaytiposdefinidosporelusuario.UnvariantetambiénpuedecontenerlosvaloresespecialesEmpty,Error,NothingyNULL.EsposibledeterminareltratamientoqueseaplicaalosdatosdeunvarianteutilizandolasfuncionesVarTypeoTypeNamedeVBA.
EltipodedatosVariantsepuedeutilizarensustitucióndelamayoríadetiposdedatos,loqueaportagranflexibilidad.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>
UsodeVariant(variantes)enmatricesdedatos
LasvariantesseutilizanparalaentradaysalidadematricesdedatosdeActiveXAutomationdeAutoCAD.Lamatriz,portanto,debeserunavarianteaceptadaporlosmétodosypropiedadesdeActiveXAutomationdeAutoCAD.Asimismo,lasalidadelosdatosmatricialesdeActiveXAutomationdeAutoCADdebetratarsecomounVariant.
Nota EnAutoCAD,lasmatricesdeentradadeVBAseconviertenenvariantesdeformaautomática.Esdecir,quenoesnecesarioproporcionarunamatrizdevariantescomoentradaalosmétodosypropiedadesdeActiveXAutomationsiseestánutilizandodesdeVBA.Noobstante,todaslasmatricesdesalidaestaránenformadevariantes,porloquenodebeolvidartratarlascomocorresponde.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>
Conversióndematricesenvariantes
AutoCADActiveXAutomationproporcionaunmétodoparaconvertirunamatrizdedatosenunvariante.EstemétodosellamaCreateTypedArrayycreaunvariantequecontieneunamatrizdeenteros,númerosflotantes,dobles,etc.PuedetransferirelvarianteresultanteacualquiermétodoopropiedaddeAutoCADqueaceptecomovarianteunamatrizdenúmeros.
ElmétodoCreateTypedArrayutilizacomoentradaseltipodevaloresqueestánenlamatriz,ylamatrizdedatosquedebeconvertirse.Devuelvecomovariantelamatrizdevalores.
CreacióndeunacurvasplineconelmétodoCreateTypedArray
ElsiguientecódigoconviertetresmatricesmedianteCreateTypedArray:coordenadasdelospuntosdeajustedelaspline,ylatangenteinicialyfinaldelaspline.AcontinuacióntransfierelavariantealmétodoAddSplineparacrearlaspline.
SubCh2_CreateSplineUsingTypedArray()
'Thisexamplecreatesasplineobjectinmodelspace
'usingtheCreateTypedArraymethod.
DimsplineObjAsAcadSpline
DimstartTanAsVariant
DimendTanAsVariant
DimfitPointsAsVariant
DimutilObjAsObject'latebindtheUtilityobject
SetutilObj=ThisDrawing.Utility
'DefinetheSplineObject
utilObj.CreateTypedArray_
startTan,vbDouble,0.5,0.5,0
utilObj.CreateTypedArray_
endTan,vbDouble,0.5,0.5,0
utilObj.CreateTypedArray_
fitPoints,vbDouble,0,0,0,5,5,0,10,0,0
SetsplineObj=ThisDrawing.ModelSpace.AddSpline_
(fitPoints,startTan,endTan)
'Zoominonthenewlycreatedspline
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Usodevariantesenmétodosypropiedades>
Interpretacióndematricesdevariantes
LainformaciónmatricialsetransfieredevueltadesdeActiveXAutomationdeAutoCADcomovariante.Siconoceeltipodedatosdelamatriz,puedeaccederalavariantecomoaunamatriz.Sinoconoceeltipodedatosquecontienelavariante,utilicelasfuncionesVarTypeoTypenamedeVBA.Estasfuncionesdevuelveneltipodedatosdelvariante.Sinecesitaiterarenlamatriz,puedeutilizarladeclaracióndeVBAForEach.
Cálculodeladistanciaentredospuntos
Elcódigosiguientemuestraelmétododecálculodeladistanciaentredospuntosespecificadosporelusuario.Enesteejemplo,eltipodedatosseconoceporquetodaslascoordenadassondobles.Lascoordenadas3Dconsistenenunamatrizdetreselementosdenúmerosdobles,ylascoordenadas2Denunamatrizdedoselementosdenúmerosdobles.
SubCh2_CalculateDistance()
Dimpoint1AsVariant
Dimpoint2AsVariant
'Getthepointsfromtheuser
point1=ThisDrawing.Utility.GetPoint_
(,vbCrLf&"Firstpoint:")
point2=ThisDrawing.Utility.GetPoint_
(point1,vbCrLf&"Secondpoint:")
'Calculatethedistancebetweenpoint1andpoint2
DimxAsDouble,yAsDouble,zAsDouble
DimdistAsDouble
x=point1(0)-point2(0)
y=point1(1)-point2(1)
z=point1(2)-point2(2)
dist=Sqr((Sqr((x^2)+(y^2))^2)+(z^2))
'Displaytheresultingdistance
MsgBox"Thedistancebetweenthepointsis:"_
&dist,,"CalculateDistance"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>
Otroslenguajesdeprogramación
EstemanualseharedactadoparaellenguajedeprogramaciónVBA.LosejemplosdeprogramaciónylasaplicacionesdeejemploestánescritasenVBA.Parapoderutilizarestecódigoenotrosentornosdeprogramacióndebeactualizarseparadichoentorno.
Paraobtenermásinformaciónacercadelaconversióndelcódigodelosejemplos,véaseladocumentacióndelentornodedesarrollo.
Nota LaclavederegistroparaelaccesoalaaplicaciónCOMdeAutoCAD2008esAutoCAD.Application.17.
ConversióndelcódigoVBAaVB
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ConceptosbásicosdeActiveXAutomation>Otroslenguajesdeprogramación>
ConversióndelcódigoVBAaVB
ParaactualizarunejemplodecódigoyutilizarloconVB,primerohayquehacerreferenciaalabibliotecadetiposdeAutoCAD.SideseahacerloenVB,elijalaopciónReferenciasenelmenúProyectoparaabrirelcuadrodediálogocorrespondiente.EnelcuadrodediálogoReferencias,elijalabibliotecadetiposdeAutoCADyhagaclicenAceptar.
Acontinuación,enelejemplodecódigo,reemplacetodaslasreferenciasaThisDrawingconunavariabledefinidaporelusuarioquehagareferenciaaldocumentoactivo.Conestepropósito,definaunavariableparalaaplicacióndeAutoCAD(acadApp)yparaeldocumentoactual(acadDoc).Acontinuación,establezcacomovariabledeaplicaciónlaaplicaciónactualdeAutoCAD.
SiseestáejecutandoAutoCAD,lafunciónGetObjectdeVBrecuperaelobjetoApplicationdeAutoCADcuandoustedespecificaelnúmerodeversióndeAutoCAD.SinoseestáejecutandoAutoCAD,ocurreunerrorque(enelejemplo)sedetectaydespuéssedespeja.Acontinuación,lafunciónCreateObjectintentacrearunobjetoApplicationdeAutoCAD.Siloconsigue,seiniciaAutoCAD;encasocontrario,semuestrauncuadrodemensaje,conunadescripcióndelerror.
DurantelaejecucióndevariassesionessimultáneasdeAutoCAD,lafunciónGetObjectdevuelvelaprimerainstanciadeAutoCADenlatabladeobjetosenejecuciónenWindows.ParaobtenermásinformaciónacercadelaverificacióndelasesióndevueltaporGetObject,consulteladocumentacióndeMicrosoftVBArelativaalatabladeobjetosenejecución(ROT)yalafunciónGetObject.
ParaqueaparezcalaventanadedibujodeAutoCADdebeestablecerenTRUElapropiedadVisibledelaaplicaciónAutoCAD.
SiGetObjectcreaunasesiónnuevadeAutoCAD(esdecir,AutoCADaúnnoestabaejecutándosecuandoseemitióGetObject),alnopoderasignarTRUEa
VisiblelaaplicaciónAutoCADseráinvisibleynisiquieraapareceráenlabarradetareasdeWindows.
Nota UtiliceProgIDsdependientesdelaversión.SiunafunciónCreateObjectoGetObjectutilizaunProgIDdependientedelaversión,cambielafunciónparaqueutiliceunProgIDdependientedelaversión.Porejemplo,siutilizaCreateObject,sustituyaCreateObject("AutoCAD.Application")porCreateObject("AutoCAD.Application.17").Además,siunmétodoGetInterfaceObjectusaunProgIDindependientedelaversión,elmétododebecambiarseparaqueutiliceunProgIDdependientedelaversión.
ConexiónconAutoCADdesdeVisualBasic6
ElsiguienteejemplodecódigoutilizalaspropiedadesClearyDescriptiondeErr.Sielentornodeprogramaciónnoadmiteestaspropiedades,deberámodificarelejemploenconsecuencia:
SubCh2_ConnectToAcad()
DimacadAppAsAcadApplication
OnErrorResumeNext
SetacadApp=GetObject(,"AutoCAD.Application.17")
IfErrThen
Err.Clear
SetacadApp=CreateObject("AutoCAD.Application.17")
IfErrThen
MsgBoxErr.Description
ExitSub
EndIf
EndIf
MsgBox"Nowrunning"+acadApp.Name+_
"version"+acadApp.Version
EndSub
Acontinuación,definalavariabledeldocumentocomoelobjetoDocumentdelaaplicacióndeAutoCAD.DichoobjetoeselquedevuelvelapropiedadActiveDocumentdelobjetoApplication.
DimacadDocasAcadDocument
SetacadDoc=acadApp.ActiveDocument
Enadelante,utilicelavariableacadDocparahacerreferenciaaldibujoactualdeAutoCAD.
EjemplodecódigocomparadoentreVBAyVB
ElsiguientecódigodelejemplomuestracómosecreaunalíneaenVBAyenVB:
CreacióndeunalíneaconVBA:
SubCh2_AddLineVBA()
'Thisexampleaddsaline
'inmodelspace
DimlineObjAsAcadLine
DimstartPoint(0To2)AsDouble
DimendPoint(0To2)AsDouble
'Definethestartandend
'pointsfortheline
startPoint(0)=1
startPoint(1)=1
startPoint(2)=0
endPoint(0)=5
endPoint(1)=5
endPoint(2)=0
'Createthelineinmodelspace
SetlineObj=ThisDrawing._
ModelSpace.AddLine_
(startPoint,endPoint)
'Zoominonthenewlycreatedline
ZoomAll
EndSub
CreacióndeunalíneaconVB:
SubCh2_AddLineVB()
OnErrorResumeNext
'ConnecttotheAutoCADapplication
DimacadAppAsAcadApplication
SetacadApp=GetObject_
(,"AutoCAD.Application.17")
IfErrThen
Err.Clear
SetacadApp=CreateObject_
("AutoCAD.Application.17")
IfErrThen
MsgBoxErr.Description
ExitSub
EndIf
EndIf
'ConnecttotheAutoCADdrawing
DimacadDocAsAcadDocument
SetacadDoc=acadApp.ActiveDocument
'Establishtheendpointsoftheline
DimlineObjAsAcadLine
DimstartPoint(0To2)AsDouble
DimendPoint(0To2)AsDouble
startPoint(0)=1
startPoint(1)=1
startPoint(2)=0
endPoint(0)=5
endPoint(1)=5
endPoint(2)=0
'CreateaLineobjectinmodelspace
SetlineObj=acadDoc.ModelSpace.AddLine_
(startPoint,endPoint)
ZoomAll
acadApp.visible=True
EndSub
¿Comentarios?
<$nopage>métodos.
ManualdeldesarrolladordeActiveXyVBA>
ControldelentornodeAutoCAD
EnestecapítulosedescribenlosconceptosbásicosnecesariosparadesarrollaraplicacionesenAutoCAD.TambiénseexplicacómocontrolarelentornodeAutoCADycómotrabajareficazmenteendichoentorno.
Apertura,guardadoycierrededibujosDefinicióndepreferenciasdeAutoCADControldelaventanadelaaplicaciónControldelasventanasdeldibujoRestablecimientodeobjetosactivosDefiniciónydevolucióndevariablesdesistemaDibujoconprecisiónSolicituddedatosdeusuarioAccesoalalíneadecomandodeAutoCADTrabajosindocumentosabiertosImportacióndeotrosformatosdearchivoExportaciónaotrosformatosdearchivo
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Apertura,guardadoycierrededibujos
LacolecciónDocumentsyelobjetoDocumentproporcionanaccesoalasfuncionesdearchivosdeAutoCAD®.
Paracrearunnuevodibujooabrirunoyaexistente,utilicelosmétodosdelacolecciónDocuments.ElmétodoAddcreaundibujonuevoyloañadealacolecciónDocuments.ElmétodoOpenabreundibujoexistente.LacoleccióndedocumentostambiéncuentaconunmétodoClosequecierratodoslosdibujosabiertosenlasesióndeAutoCAD.
Paraguardarlosdibujos,utilicecualquieradelosmétodosSaveoSaveAsOcasionalmentedesearácomprobarsieldibujoactivotienecambiossinguardar.EsconvenientehacerestoantesdesalirdelasesióndeAutoCADocomenzarunnuevodibujo.UtilicelapropiedadSavedparaasegurarsedequeeldibujoactualnocontienecambiossinguardar.
Paraimportaryexportardibujos,utilicelosmétodosImportyExportdelobjetoDocument.
Aperturadeundibujoexistente
EnesteejemploseutilizaelmétodoOpenparaabrirundibujoexistente.SeusalafunciónDirdeVBAparacomprobarsiexisteelarchivoantesdeintentarabrirlo.CambieelnombredelarchivodedibujoosurutadeaccesoparaespecificarunarchivodedibujodeAutoCADexistenteenelsistema.
SubCh3_OpenDrawing()
DimdwgNameAsString
dwgName="c:\campus.dwg"
IfDir(dwgName)<>""Then
ThisDrawing.Application.Documents.OpendwgName
Else
MsgBox"File"&dwgName&"doesnotexist."
EndIf
EndSub
Creacióndeundibujonuevo
EnesteejemploseutilizaelmétodoAddparacrearundibujobasadoenlaplantillapordefecto.
SubCh3_NewDrawing()
DimdocObjAsAcadDocument
SetdocObj=ThisDrawing.Application.Documents.Add
EndSub
Guardadodeldibujoactivo
Enesteejemploseguardaeldibujoactivoconelnombreactualyunasegundavezconotronombre.
SubCh3_SaveActiveDrawing()
'Savetheactivedrawingunderthecurrentname
ThisDrawing.Save
'Savetheactivedrawingunderanewname
ThisDrawing.SaveAs"MyDrawing.dwg"
EndSub
Comprobacióndeposiblescambiossinguardarenundibujo
Enesteejemplosecompruebasieldibujocontienecambiospendientesdeguardarysepreguntaalusuariosideseaguardarlos(silarespuestaesnegativa,omitaestospasoshastaelfinal).Silarespuestaesafirmativa,utiliceelmétodoSaveparaguardareldibujoactual,comosemuestraacontinuación:
SubCh3_TestIfSaved()
IfNot(ThisDrawing.Saved)Then
IfMsgBox("Doyouwishtosavethisdrawing?",_
vbYesNo)=vbYesThen
ThisDrawing.Save
EndIf
EndIf
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
DefinicióndepreferenciasdeAutoCAD
Haynueveobjetosrelacionadosconlasopciones,cadaunodeellosrepresentadoenunafichadelcuadrodediálogoOpciones.EstosobjetosproporcionanaccesoatodaslasopcionesalmacenadasenelregistromedianteelcuadrodediálogoOpciones.MuchosdelosparámetrosdeAutoCADpuedenadaptarseanecesidadespersonalesatravésdelaspropiedadesdeestosobjetos,quesonlossiguientes:
PreferencesDisplay
PreferencesDrafting
PreferencesFiles
PreferencesOpenSave
PreferencesOutput
PreferencesProfiles
PreferencesSelection
PreferencesSystem
PreferencesUser
PuedeaccederaestosobjetosatravésdelobjetoPreferencesParaaccederalobjetoPreferences,utilicelapropiedadPreferencedelobjetoApplication:
DimacadPrefasAcadPreferences
SetacadPref=ThisDrawing.Application.Preferences
PuedeaccederacualquieradelosobjetosPreferencesmediantelaspropiedadesDisplay,Drafting,Files,OpenSave,Output,Profile,Selection,SystemyUser.
Configuracióndelcursorencruzparapantallacompleta
SubCh2_PrefsSetCursor()
'ThisexamplesetsthecrosshairsoftheAutoCADdrawingcursor
'tofullscreen.
'AccessthePreferencesobject
DimacadPrefAsAcadPreferences
SetacadPref=ThisDrawing.Application.Preferences
'UsetheCursorSizepropertytosetthesizeofthecrosshairs
acadPref.Display.CursorSize=100
EndSub
Visualizacióndelmenúdepantallaylasbarrasdedesplazamiento
SubCh2_PrefsSetCursor()
'Thisexampleenablesthescreenmenuanddisablesthescroll
'barswiththeDisplayScreenMenuandDisplayScrollBars
'properties.
'AccessthePreferencesobject
DimacadPrefAsAcadPreferences
SetacadPref=ThisDrawing.Application.Preferences
'Displaythescreenmenuanddisablescrollbars
acadPref.Display.DisplayScreenMenu=True
acadPref.Display.DisplayScrollBars=False
EndSub
Preferenciasdebasesdedatos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>DefinicióndepreferenciasdeAutoCAD>
Preferenciasdebasesdedatos
Ademásdelosnueveobjetosdepreferencias,existeunobjetollamadoDatabasePreferencesquecontienetodaslasopcionesguardadaseneldibujo.EsteotroobjetosehaideadoparaponerlasopcionesalmacenadasenlosdibujosadisposicióndelasaplicacionesqueaccedanalosdibujosdeAutoCADsininiciaranteselprograma(aplicacionesObjectDBX).
ElobjetoDatabasePreferencesseencuentrabajolajerarquíadelobjetoDocument.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Controldelaventanadelaaplicación
Lacapacidadparacontrolarlaventanadelaaplicaciónofrecealosprogramadoreslaflexibilidadquenecesitanparacrearaplicacioneseficaceseinteligentes.Aveces,porejemplomientrasseestáprocesandocódigoenotraaplicacióncomoExcel,convieneminimizarlaventanadeAutoCAD.Además,podríasernecesarioverificarelestadodelaventanadeAutoCADantesderealizartareascomosolicitarinformaciónalusuario.
Losmétodosylaspropiedadesdelobjetodeaplicaciónpermitencambiarlaposición,eltamañoylavisibilidaddelaventanadelaaplicación.TambiénpuedeutilizarlapropiedadWindowStateparaminimizar,maximizarycomprobarelestadoactualdelaventanadelaaplicación.
Colocaciónyajustedetamañodelaventanadelaaplicación
EnesteejemploseutilizanlaspropiedadesWindowTop,WindowLeft,WidthyHeightparasituarlaventanadelaaplicaciónAutoCADenlaesquinasuperiorizquierdadelapantallayfijarsutamañoen400píxelesdeanchopor400dealto.
SubCh3_PositionApplicationWindow()
ThisDrawing.Application.WindowTop=0
ThisDrawing.Application.WindowLeft=0
ThisDrawing.Application.width=400
ThisDrawing.Application.height=400
EndSub
Paramaximizarlaventanadelaaplicación
SubCh3_MaximizeApplicationWindow()
ThisDrawing.Application.WindowState=acMax
EndSub
Paraminimizarlaventanadelaaplicación
SubCh3_PositionApplicationWindow()
ThisDrawing.Application.WindowState=acMin
EndSub
ParaconocerelestadoactualdelaventanadeAutoCAD
Esteejemploconsultaelestadodelaventanadeaplicaciónylopresentaenuncuadrodemensaje.
SubCh3_CurrentWindowState()
DimCurrWindowStateAsInteger
DimmsgAsString
CurrWindowState=ThisDrawing.Application.WindowState
msg=Choose(CurrWindowState,"normal",_
"minimized","maximized")
MsgBox"Theapplicationwindowis"+msg
EndSub
Paraocultarlaventanadelaaplicación
ElcódigosiguienteutilizalapropiedadVisibleparaocultarlaaplicaciónAutoCADalusuariofinal.
SubCh3_HideWindowState()
ThisDrawing.Application.Visible=False
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Controldelasventanasdeldibujo
ComoenlaventanadelaaplicacióndeAutoCAD,lasventanasdedocumentotambiénsepuedenminimizar,maximizar,cambiardeposiciónycomprobarsuestado.Perotambiénesposiblecambiarlapresentacióndeundibujoenunaventanamediantevistas,ventanasgráficasyajustesdezoom.
ActiveXdeAutoCADofrecevariosmodosparamostrardistintasvistasdeldibujo.Esposiblecontrolarlapresentaciónenpantalladeldibujoydesplazarserápidamenteasusdiferentesáreasaltiempoquesesupervisaelefectogeneraldeloscambios.Puedeutilizarelzoomparacambiarlaampliaciónoelencuadreyvolveracolocarlavistaeneláreagráfica,guardarunavistayrecuperarlacuandonecesitetrazarlaoconsultardetallesconcretos,obien,visualizarvariasvistasalavezdividiendolapantallaenventanasenmosaico.
ColocaciónyajustedetamañodelaventanadeldocumentoUtilizacióndezoomVistasguardadasVentanasenmosaicoActualizacióndelageometríaenlaventanadedocumento
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>
Colocaciónyajustedetamañodelaventanadeldocumento
UtiliceelobjetoDocumentparamodificarlaposiciónyeltamañodecualquierventanadedocumento.LaventanadedocumentosepuedeminimizaromaximizaratravésdelapropiedadWindowState,quetambiénpermiteconocersuestadoactual..
Colocacióndeunaventanadedocumento
EnesteejemploseutilizanlaspropiedadesWidthyHeightparadefinirlaventanadeldocumentoactivoconunaanchurayalturade400x400píxeles.
SubCh3_SizeDocumentWindow()
ThisDrawing.Width=400
ThisDrawing.Height=400
EndSub
Paramaximizarlaventanadeldocumentoactivo
SubCh3_MaximizeDocumentWindow()
ThisDrawing.WindowState=acMax
EndSub
Paraminimizarlaventanadeldocumentoactivo
SubCh3_MinimizeDocumentWindow()
ThisDrawing.WindowState=acMin
EndSub
Paraconocerelestadoactualdelaventanadeldocumentoactivo
SubCh3_CurrentWindowState()
DimCurrWindowStateAsInteger
DimmsgAsString
CurrWindowState=ThisDrawing.WindowState
msg=Choose(CurrWindowState,"normal",_
"minimized","maximized")
MsgBox"Thedocumentwindowis"+msg
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>
Utilizacióndezoom
Unavistaesunaampliación,posiciónyorientaciónespecíficadeundibujo.AutoCADponeasudisposiciónnumerosasopcionesdeZoomqueaumentanoreduceneltamañodelaimagenqueapareceeneláreagráfica.ParaobtenermásinformaciónacercadeampliarelzoomenAutoCAD,véase“Ampliacióndeunavista(hacerzoom)”enelManualdelusuario.
DefinicióndeunaventanadezoomAtribucióndeescalaaunavistaCentradodeobjetosVisualizacióndelímitesyextensionesdeldibujo
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Utilizacióndezoom>
Definicióndeunaventanadezoom
Sepuedeampliarconsumarapidezunáreaespecificandosusesquinas.Paraampliarunáreaespecificandosucontorno,utiliceunodelosmétodosZoomWindowoZoomPickWindowElprimeropermitedefinirmedianteprogramacióndospuntosquerepresentanlaventanazoom.ElmétodoZoomPickWindowrequierequeelusuariodesignedospuntos.Estosdospuntosdedesignaciónconformanlaventanadezoom.
Ampliacióndeldibujoactivoaltamañodeunaventanadefinidapordospuntos
SubCh3_ZoomWindow()
'ZoomWindow
MsgBox"PerformaZoomWindowwith:"&vbCrLf&_
"1.3,7.8,0"&vbCrLf&_
"13.7,-2.6,0",,"ZoomWindow"
Dimpoint1(0To2)AsDouble
Dimpoint2(0To2)AsDouble
point1(0)=1.3:point1(1)=7.8:point1(2)=0
point2(0)=13.7:point2(1)=-2.6:point2(2)=0
ThisDrawing.Application.ZoomWindowpoint1,point2
'ZoomPickWindow
MsgBox"PerformaZoomPickWindow",,"ZoomPickWindow"
ThisDrawing.Application.ZoomPickWindow
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Utilizacióndezoom>
Atribucióndeescalaaunavista
Cuandodeseeaumentaroreducirlaampliaciónenpantalladeunaimagenconformeaunaescaladeterminada,puedeindicarlaescaladetresformasdistintas:
Enrelaciónconloslímitesdeldibujo
Enrelaciónconlavistaactual
Enrelaciónconlasunidadesdelespaciopapel
Paraampliaroreducirunavista,utiliceelmétodoZoomScaledEstemétodoesperadosparámetrosdeentrada:laescalayeltipodeescala.Laescalaessimplementeunnúmero.LainterpretacióndeestenúmeroporpartedeAutoCADdependedeltipodeescalaelegida.
Eltipodelaescaladeterminasisuvalorsecreaconrespectoaloslímitesdeldibujo,alavistaactualoalasunidadesdelespaciopapel.Paraasignarunaescalarelativaaloslímitesdeldibujo,uselaconstanteacZoomScaledAbsolute.Paraajustarlaescaladeunavistaenrelaciónconlavistaactual,uselaconstanteacZoomScaledAbsolute.Paraasignarunaescalarelativaalasunidadesdelespaciopapel,uselaconstanteacZoomScaledRelativePSpace.
Ampliacióndeldibujoactivoaunaescalaespecífica
SubCh3_ZoomScaled()
MsgBox"PerformaZoomScaledusing:"&vbCrLf&_
"ScaleType:acZoomScaledRelative"&vbCrLf&_
"ScaleFactor:2",,"ZoomScaled"
DimscalefactorAsDouble
DimscaletypeAsInteger
scalefactor=2
scaletype=acZoomScaledRelative
ThisDrawing.Application.ZoomScaledscalefactor,scaletype
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Utilizacióndezoom>
Centradodeobjetos
AmpliacióndeldibujoactivoauncentroespecificoPuedemoverunpuntoespecíficodesudibujoparacentrarloeneláreagráfica.ElmétodoZoomCenterresultaespecialmenteútilalahoradereajustareltamañodeunobjetoysituarloenelcentrodelaventanagráfica.ZoomCenterpermiteespecificarlaescalamedianteunaampliaciónrelativaalavistaactual
Ampliacióndeldibujoactivoauncentroespecífico
ElsiguienteejemploilustraelefectodelmétodoZoomCentercuandoseaplicaparamostrarunavistaensutamañorealoaldobledesutamaño:
SubCh3_ZoomCenter()
MsgBox"PerformaZoomCenterusing:"&vbCrLf&_
"Center3,3,0"&vbCrLf&_
"Magnification:10",,"ZoomCenter"
DimCenter(0To2)AsDouble
DimmagnificationAsDouble
Center(0)=3:Center(1)=3:Center(2)=0
magnification=10
ThisDrawing.Application.ZoomCenterCenter,magnification
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Utilizacióndezoom>
Visualizacióndelímitesyextensionesdeldibujo
LosmétodosZoomAll,ZoomExtentsoZoomPreviouspermitenlapresentaciónenpantalladeunavistaenfuncióndeloscontornosodelaextensióndelosobjetosdeldibujo.
ZoomAllmuestraeldibujocompleto.Silosobjetosseextiendenmásalládeloslímites,ZoomAllmuestralaextensióndelosobjetos.Silosobjetosestándibujadosdentrodeloslímites,ZoomAllmuestraloslímites.
ZoomExtenscalculaelfactordeampliacióntomandocomoreferencialaextensióndelaventanagráficaactual,nodelavistaactual.Porlogeneral,laventanagráficaactivaestácompletamentevisible,porloqueelresultadoesobvioyprevisible.Porlogeneral,laventanagráficaactivaestácompletamentevisible,porloqueelresultadoesobvioyprevisible.Sinembargo,cuandoseutilizanlosmétodosZoomenelespaciomodelomientrassetrabajaenunaventanagráficaenelespaciopapel,siseamplíasobrepasandoloscontornosdelaventanagráficaenelespaciopapel,puedequenoseveapartedeláreaampliada.
ZoomExtentscambialavistaparaajustarlasextensionesdeentidadeneldibujoactual.Enalgunoscasos(tantoparaZoomAllcomoparaZoomExtents),estopuedeprovocarlaregeneración.Laregeneraciónnotendrálugarencapasinutilizadasodesactivadas.Sieldibujonocontieneobjetos,ZoomExtentsmuestraloslímitesdeldibujo.
Enlasvistas3D,ZoomAllyZoomExtentstienenelmismoresultado.Laslíneasauxiliaresinfinitas(líneasx)ylosrayosnoinfluyenenningunadelasopciones.
ZoomPreviousamplíalaventanagráficahastalaextensiónanterior.
Paraobtenermásinformaciónacercadelfuncionamientodelzoom,véase“Ampliacióndeunavista(hacerzoom)”enelManualdelusuario.
Ampliacióndeldibujoactivoatodoelcontenidoyalaextensióndeldibujo
SubCh3_ZoomAll()
'ZoomAll
MsgBox"PerformaZoomAll",,"ZoomAll"
ThisDrawing.Application.ZoomAll
'ZoomExtents
MsgBox"PerformaZoomExtents",,"ZoomExtents"
ThisDrawing.Application.ZoomExtents
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>
Vistasguardadas
Esposibleasignarunnombreyguardarcadavistaquedeseevolverautilizar.Cuandoyanolanecesite,puedesuprimirla.
Sideseacrearunavistanueva,utiliceelmétodoAddparaañadirunanuevavistaalacolecciónViewsAlguardareldibujo,seguardatambiénlaposiciónylaescaladelavista.
Elnombredelavistaseleasignaalcrearla.Puedeconstardeuntotalde255caracteresycontenerletras,dígitosyloscaracteresespecialesdólar($),guión(-)ysubrayado(_).
Parasuprimirunavistaguardada,utiliceelmétodoDelete.ElmétodoDeletedelobjetoViewseencuentraendichoobjeto,noenelsuperior.
Adicióndeunobjetodevista
Enelejemplosiguienteseañadeunobjetodevista(viewObj).
SubCh3_AddView()
'Addanamedviewtotheviewscollection
DimviewObjAsAcadView
SetviewObj=ThisDrawing.Views.Add("View1")
EndSub
Supresióndeunobjetodevista
Enelejemplosiguienteseborraunobjetodevista(objetoviewObj).
SubCh3_DeleteView()
DimviewObjAsAcadView
SetviewObj=ThisDrawing.Views("View1")
'Deletetheview
viewObj.Delete
EndSub
Eliminacióndeunavistadelacoleccióndevistas
EnesteejemploseborraunavistaguardadadelacolecciónViews.
SubCh3_DeleteViewFromCollection()
ThisDrawing.Views("View1").Delete
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>
Ventanasenmosaico
AutoCADsueleiniciarcadanuevodibujoenunasolaventanagráficaqueocupatodaeláreagráfica.Silodesea,puededividireláreadedibujoparamostrarvariasventanasdeformasimultánea.Porejemplo,simantienevisiblestantolasvistascompletascomolasdetalladas,resultarámásfácilapreciarlosefectosdeloscambiossutilesintroducidosentodoeldibujo.Lasventanasenmosaicoofrecenlassiguientesposibilidades:
ampliar,reducir,activarlosmodosForzcursor,RejillayelmododeiconoSCP,asícomorestituirvistasguardadaenventanasgráficasindividuales
dibujarenunaventanagráficaydesplazarseaotradurantelaejecucióndeuncomando
asignarnombreaunadisposicióndeventanasdeterminadaparapoderlautilizarenelfuturo.
Esposiblemostrarventanasenmosaicoenvariasdisposiciones.Laformademostrarlasventanasdependeengranmedidadelnúmeroydeltamañodelasvistasquedeseeutilizar.
Paraobtenermásinformacióneilustracionesdelasventanasgráficas,véase“Definicióndelasventanasgráficasdelespaciomodelo”enelManualdelusuario.
DivisióndelaventanagráficaactivaActivacióndeunaventanaenmosaico
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Ventanasenmosaico>
Divisióndelaventanagráficaactiva
LaventanagráficaactivasedivideconelmétodoSplitEstemétodoutilizaunparámetro,eltipodeconfiguración,paraestablecercómosedeseadividirlaventanagráfica.Paraespecificarlaconfiguracióndelaventana,utiliceunadelassiguientesconstantesquecorrespondenalasconfiguracionespordefectoanteriormentemostradas:acViewport2Horizontal,acViewport2Vertical,acViewport3Left,acViewport3Right,acViewport3Horizontal,acViewport3Vertical,acViewport3Above,acViewport3Below,oacViewport4.
Paraobtenermásinformaciónacercadelamodificacióndelaconfiguracióndelasventanasgráficas,véase“Definicióndelasventanasgráficasdelespaciomodelo”enelManualdelusuario.
Divisióndeunaventanagráficaendosventanashorizontales
Enelejemplosiguientesecreaunaventanagráficanuevaque,acontinuación,sedivideendosventanashorizontales.
SubCh3_SplitAViewport()
'Createanewviewport
DimvportObjAsAcadViewport
SetvportObj=ThisDrawing.Viewports.Add("TEST_VIEWPORT")
'SplitvportObjinto2horizontalwindows
vportObj.SplitacViewport2Horizontal
'NowsetvportObjtobetheactiveviewport
ThisDrawing.ActiveViewport=vportObj
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>Ventanasenmosaico>
Activacióndeunaventanaenmosaico
Enlaventanagráficaactivaseintroducenpuntosyseseleccionanobjetos.Paraconvertirunaventanagráficaenlaventanaactual,utilicelapropiedadActiveViewport
Puederepetirlaoperaciónenlasventanasgráficasexistenteshastaencontrarlaquebusca.Paraello,primerodebeidentificarelnombredeladisposicióndeventanasalaquepertenecelaventanaquedeseautilizar,mediantelapropiedadName.Porotraparte,sisetratadeunadisposicióndeventanasdividida,lasventanasindividualespuedenidentificarsemediantelaspropiedadesLowerLeftCorneryUpperRightCorner
LaspropiedadesLowerLeftCorneryUpperRightCornerrepresentanlaubicacióngráficadelaventanaenlapantalla.Estaspropiedadessedefinensegúnseindicaacontinuación(conunadivisióndecuatroventanasamododeejemplo):
Equivalenciasdelejemplo:
Ventana1-LowerLeftCorner=(0,.5),UpperRightCorner=(.5,1)
Ventana2-LowerLeftCorner=(.5,.5),UpperRightCorner=(1,1)
Ventana3-LowerLeftCorner=(.5,0),UpperRightCorner=(1,.5)
Ventana4-LowerLeftCorner=(.5,0),UpperRightCorner=(1,.5)
Divisióndeunaventanagráficaeiteraciónentodaslasventanas
Enesteejemplosedivideunaventanagráficaencuatroventanas.Acontinuaciónseefectúaniteracionesentodaslasventanasgráficasdeldibujoysepresentaelnombredelaventanaylasesquinasinferiorizquierdaysuperiorderechadecadauna.
SubCh3_IteratingViewportWindows()
'Createanewviewportandmakeitactive
DimvportObjAsAcadViewport
SetvportObj=ThisDrawing.Viewports.Add("TEST_VIEWPORT")
ThisDrawing.ActiveViewport=vportObj
'Splitvportinto4windows
vportObj.SplitacViewport4
'Iteratethroughtheviewports,
'highlightingeachviewportanddisplaying
'theupperrightandlowerleftcorners
'foreach.
DimvportAsAcadViewport
DimLLCornerAsVariant
DimURCornerAsVariant
ForEachvportInThisDrawing.Viewports
ThisDrawing.ActiveViewport=vport
LLCorner=vport.LowerLeftCorner
URCorner=vport.UpperRightCorner
MsgBox"Viewport:"&vport.Name&"isnowactive."&_
vbCrLf&"Lowerleftcorner:"&_
LLCorner(0)&","&LLCorner(1)&vbCrLf&_
"Esquinasuperiorderecha:"&_
URCorner(0)&","&URCorner(1)
Nextvport
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Controldelasventanasdeldibujo>
Actualizacióndelageometríaenlaventanadedocumento
MuchasdelasaccionesquellevaacaboatravésdeAutoCADActiveXAutomationmodificanloquesemuestraeneldibujoAutoCAD.Notodasestasaccionesactualizaninmediatamentelavisualizacióndeldibujo.Deestaformaesposibleefectuarvarioscambioseneldibujosintenerqueesperaraqueseactualicelapantalladespuésdecadaacción.Ensulugar,puedeefectuarvarioscambiosconsecutivosy,cuandotermine,realizarunasolallamadaparaactualizarlapantalla.
LosmétodosqueactualizanlapantallasonUpdateyRegen.
ElmétodoUpdateactualizalapresentaciónenpantalladeunsoloobjeto.ElmétodoRegenactualizatodoeldibujoyvuelveacalcularlascoordenadasdepantalladetodoslosobjetos.Tambiénregeneraelíndicedelabasededatosdedibujoparamejorarlavisualizaciónyladesignacióndeobjetos.
Actualizacióndelapresentaciónenpantalladeunsoloobjeto
Esteejemplocreauncírculo.Acontinuación,actualizaelcírculoconelmétodoUpdateparaqueseavisibleenAutoCAD.
SubCh3_UpdateDisplay()
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=1:center(1)=1:center(2)=0
radius=1
'Createthecircle
SetcircleObj=ThisDrawing.ModelSpace.AddCircle(center,radius)
'Updatethecircle
circleObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Restablecimientodeobjetosactivos
Loscambiosqueserealizanenlamayoríadelosobjetosactivos,comolacapaactivaoeltipodelíneaactivo,sevenenpantalladeinmediato.Sinembargo,hayalgunosobjetosactivosquesedebenrestablecerparareflejarloscambiosrealizadosenellos.Setratadelosobjetoscorrespondientesalestilodetextoactivo,alsistemadecoordenadaspersonales(SCP)activoyalaventanagráficaactiva.Siserealizancambiosenalgunodeestosobjetos,esprecisorestablecerelobjetoencuestiónyllamaralmétodoRegenparaqueloscambiosseanvisibles.
Pararestablecerlosobjetos,sóloesnecesariodefinirlapropiedadActiveTextStyle,ActiveUCSoActiveViewportutilizandoelobjetoactualizado.
Restablecimientodelaventanagráficaactiva
Enelejemplosiguientesecambialapresentacióndelarejillaenlaventanagráficaactivaydespuésserestablececomoventanagráficaactivaparamostrarelcambio.
SubCh3_ResetActiveViewport()
'Togglethesettingofthegriddisplay
'fortheactiveviewport
ThisDrawing.ActiveViewport.GridOn=_
Not(ThisDrawing.ActiveViewport.GridOn)
'Resettheactiveviewport
ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Definiciónydevolucióndevariablesdesistema
ElobjetoDocumentproporcionalosmétodosSetVariableyGetVariableparalaconfiguraciónyrecuperacióndevariablesdesistemadeAutoCAD.Porejemplo,paraasignarunenteroalavariabledesistemaMAXSORT,utiliceelsiguientecódigo:
ThisDrawing.SetVariable"MAXSORT",100
¿Comentarios?
<$nopage>métodos.
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Dibujoconprecisión
ConAutoCADpuedecrearsusdibujosconunageometríaprecisasinrealizarlargoscálculos.Amenudosepuedenindicarpuntosconcretossinconocerlascoordenadas.Tambiénsepuedenrealizarcálculossobreeldibujoypresentarenpantallavariostiposdeinformacióndeestadosinsalirdelapantalladedibujo.
Enlaactualidad,ActiveXAutomationdeAutoCADnodisponedemétodospararealizarlassiguientesfuncionesdeAutoCAD:
Definicióndereferenciasaobjetos
Especificacióndeintervalosgraduadosenobjetosodivisióndeobjetosensegmentos.AlineacióndelaresoluciónylarejillaUtilizacióndelmodoOrtoTrazadodelíneasauxiliaresCálculodepuntosyvaloresCálculodeáreas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>
Alineacióndelaresoluciónylarejilla
PuedeutilizarlarejillacomoguíavisualyactivarelmodoForzcursorparalimitarelmovimientodelcursor.Ademásdedeterminarelintervalo,puedeajustarlaalineacióndelarejillaylamalla.Puedegirarlaalineaciónobiendefinirlaparasuutilizacióncondibujosisométricos
Siesnecesariodibujarconunaalineaciónespecíficaoenunciertoángulo,sepuederotarelángulodelamalla.Elpuntocentralderotacióndelángulodelamallaeselpuntobasedelamalla.Sinecesitaalinearunpatróndesombreado,puedecambiarestepunto,quehabitualmentesedefinecomo0,0.
Pararotarelángulodelamalla,utilicelapropiedadSnapRotationAngleSinecesitacambiarelpuntobasederotacióndelángulodelamalla,utilicelapropiedadSnapBasePoint
Nota AmbaspropiedadesrequierenunallamadaalmétodoUpdateparaactualizarlapantalladeAutoCAD.
Paraobtenermásinformaciónacercadelusoyestablecimientodemallasyrejillas,véase“Ajustedelarejillaylareferenciarejilla”enelManualdelusuario.
Modificacióndelpuntobasedelamalladeresoluciónydelánguloderotación
Enesteejemplosecambiaelpuntobasedelamalladeresolucióna(1,1)yelánguloderotacióndelamallaa30grados.Larejillaseactivaparaqueloscambiosseanvisibles.
SubCh3_ChangeSnapBasePoint()
'Turnonthegridfortheactiveviewport
ThisDrawing.ActiveViewport.GridOn=True
'Changethesnapbasepointto1,1
DimnewBasePoint(0To1)AsDouble
newBasePoint(0)=1:newBasePoint(1)=1
ThisDrawing.ActiveViewport.SnapBasePoint=newBasePoint
'Changethesnaprotationangleto30degrees(0.575radians)
DimrotationAngleAsDouble
rotationAngle=0.575
ThisDrawing.ActiveViewport.SnapRotationAngle=rotationAngle
'resettheviewport
ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>
UtilizacióndelmodoOrto
Cuandodibujalíneasomueveobjetos,puedeutilizarelmodoOrtopararestringirelcursoralejehorizontalovertical.LaalineaciónortogonaldependedelángulodeforzadodelcursorodelSCP.ElmodoOrthofuncionaconactividadesquerequierenqueseespecifiqueunsegundopunto.NosólosepuedeutilizarelmodoOrthoparaestablecerlaalineaciónverticaluhorizontal,sinotambiénparaasegurarelparalelismooparacreardesfasesregulares.
AlpermitiraAutoCADimponerlimitacionesortogonales,seconsiguedibujarconmayorrapidez.Porejemplo,puedecrearunaseriedelíneasperpendicularessiactivaelmodoOrtoantesdeempezaradibujar.Dadoquelaslíneasselimitaránalosplanoshorizontalyvertical,sepuedendibujarmásrápidoconlaseguridaddequeseránperfectamenteperpendiculares.
Amedidaquedesplazaelcursor,unalíneaelásticaquedeterminaeldesplazamientoveráforzadasutrayectoriaalejehorizontaloalvertical,dependiendodecuálestémáspróximoalcursor.ElmodoOrtonotienevalidezenlasvistasenperspectivaenAutoCAD,cuandoseintroducencoordenadasenlalíneadecomandoocuandoseespecificaunareferenciaaunobjeto.
ParaactivarodesactivarelmodoOrto,utilicelapropiedadOrthoOnEstapropiedadnecesitaunaentradaBooleana.DefínalacomoTRUEparaactivarelmodoOrtoycomoFALSEparadesactivarlo.Porejemplo,lasiguienteinstrucciónactivaelmodoOrtoenlaventanagráficaactiva:
ThisDrawing.ActiveViewport.OrthoOn=True
¿Comentarios?
<$nopage>métodos.
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>
Trazadodelíneasauxiliares
Puedecrearlíneasauxiliaresqueseprolonguenhastaelinfinitoenunaoambasdirecciones:laslíneasauxiliaresqueseextiendenenunadirecciónseconocencomorayos.LaslíneasauxiliaresqueseextiendenenambasdireccionesseconocentambiéncomolíneasX.Estaslíneasauxiliarespuedenutilizarsecomoreferenciaparacrearotrosobjetos.Porejemplo,puedeutilizarlíneasauxiliaresparaencontrarelcentrodeuntriángulo,prepararvistasmúltiplesdelmismoelemento,ocrearinterseccionestemporalesquepuedenutilizarseparalasreferenciasaobjetos.
CreacióndelíneasauxiliaresConsultadelíneasauxiliaresCreaciónderayosConsultaderayos
¿Comentarios?
<$nopage>métodos.
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Trazadodelíneasauxiliares>
Creacióndelíneasauxiliares
Lalíneasauxiliaressepuedencolocarencualquierlugardelespacio3Dyseextiendenhastaelinfinitoenambasdirecciones.Paracrearunalíneaauxiliar,utiliceelmétodoAddXLineConestemétodoseutilizalatécnicadedospuntosparaprecisarlalínea:elusuariointroduceodesignadospuntosparadefinirlaorientación.Elprimerpunto,elpuntoraíz,seconsiderarácomoelpuntomediodelalíneaauxiliar.
Adicióndeunalíneaauxiliar
ElsiguientecódigodelejemplocreaunobjetoXLinemediantelosdospuntos(5,0,0)y(1,1,0).
SubCh3_AddXLine()
DimxlineObjAsAcadXline
DimbasePoint(0To2)AsDouble
DimdirectionVec(0To2)AsDouble
'Definethexline
basePoint(0)=2#:basePoint(1)=2#:basePoint(2)=0#
directionVec(0)=1#:directionVec(1)=1#:directionVec(2)=0#
'Createthexlineinmodelspace
SetxlineObj=ThisDrawing.ModelSpace.AddXLine_
(basePoint,directionVec)
ThisDrawing.Application.ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Trazadodelíneasauxiliares>
Consultadelíneasauxiliares
Unavezcreadaunalíneaauxiliar,puedeutilizarlapropiedadBasePointparaconsultarsuprimerpunto.Elsegundopuntoutilizadoenlacreacióndelalíneaauxiliarnosealmacenaconelobjeto.Ensulugar,utilicelapropiedadDirectionVectorparaobtenerelvectordedireccióndelalíneaauxiliar.
Consultadeunalíneaauxiliar
EnesteejemplosebuscanelpuntodebaseyelvectordedireccióndelalíneaauxiliarcreadaenAdicióndeunalíneaauxiliar
DimBPointAsVariant
DimVectorAsVariant
BPoint=xlineObj.basePoint
Vector=xlineObj.DirectionVector
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Trazadodelíneasauxiliares>
Creaciónderayos
Unrayoesunalíneaenespacio3Dquecomienzaenunpuntodadoyseextiendehastaelinfinito.AdiferenciadelaslíneasauxiliaresX,queseextiendenendosdirecciones,losrayossóloseextiendenenunadirección.Enconsecuencia,losrayosayudanareducirlaconfusiónvisualqueseproducecuandohaymuchaslíneasauxiliares.
Aligualqueocurreconlaslíneasauxiliares,loscomandosquemuestranlaextensióndeldibujonotienenencuentalosrayos.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Trazadodelíneasauxiliares>
Consultaderayos
Unavezcreadoelrayo,puedeutilizarlapropiedadBasePointparaconsultarsuprimerpunto.Elsegundopuntoutilizadoenlacreacióndelrayonosealmacenaconelobjeto.Ensulugar,utilicelapropiedadDirectionVectorparaobtenerelvectordedireccióndelrayo.
Adición,consultayedicióndeunobjetoRay
ElcódigodelejemplosiguientecreaunobjetoRayutilizandolospuntos(5,0,0)y(1,1,0).Acontinuación,consultaelpuntobaseyelvectordedirecciónactivosypresentalosresultadosenuncuadrodemensajes.Porúltimo,cambiaelvectordedirecciónyconsultaymuestraenpantallaelnuevovectoryelpuntodebase.
SubCh3_EditRay()
DimrayObjAsAcadRay
DimbasePoint(0To2)AsDouble
DimsecondPoint(0To2)AsDouble
'Definetheray
basePoint(0)=3#:basePoint(1)=3#:basePoint(2)=0#
secondPoint(0)=4#:secondPoint(1)=4#:secondPoint(2)=0#
'CreatesaRayobjectinmodelspace
SetrayObj=ThisDrawing.ModelSpace.AddRay_
(basePoint,secondPoint)
ThisDrawing.Application.ZoomAll
'FindthecurrentstatusoftheRay
MsgBox"Thebasepointoftherayis:"&_
rayObj.basePoint(0)&","&_
rayObj.basePoint(1)&","&_
rayObj.basePoint(2)&vbCrLf&_
"Thedirectionalvectorfortherayis:"&_
rayObj.DirectionVector(0)&","&_
rayObj.DirectionVector(1)&","&_
rayObj.DirectionVector(2),,"EditRay"
'Changethedirectionalvectorfortheray
DimnewVector(0To2)AsDouble
newVector(0)=-1
newVector(1)=1
newVector(2)=0
rayObj.DirectionVector=newVector
ThisDrawing.RegenFalse
MsgBox"Thebasepointoftherayis:"&_
rayObj.basePoint(0)&","&_
rayObj.basePoint(1)&","&_
rayObj.basePoint(2)&vbCrLf&_
"Thedirectionalvectorfortherayis:"&_
rayObj.DirectionVector(0)&","&_
rayObj.DirectionVector(1)&","&_
rayObj.DirectionVector(2),,"EditRay"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>
Cálculodepuntosyvalores
LosmétodosqueproporcionaelobjetoUtilitypermitenresolverrápidamenteunproblemamatemáticoolocalizarpuntoseneldibujo.ConlosmétodosdelobjetoUtilitypuederealizarlosiguiente:
calcularelánguloqueformaunalíneaconelejeX,medianteelmétodoAngleFromXAxis
convertirunánguloenformadecadenaenunvalorreal(doble),medianteelmétodoAngleToReal
convertirunánguloenformadevalorreal(doble)enunacadena,medianteelmétodoAngleToString
convertirunadistanciaenformadecadenaenunvalorreal(doble),medianteelmétodoDistanceToReal
crearunvariantequecontieneunamatrizdeenteros,númerosflotantes,dobles,etc.conelmétodoCreateTypedArray
calcularelpuntosituadoenunánguloyaunadistanciaconcretosdeunpuntodeterminado,conelmétodoPolarPoint
convertirunpuntodeunsistemadecoordenadasaotro,medianteelmétodoTranslateCoordinates
calcularladistanciaentredospuntosespecificadosporelusuario,conelmétodoGetDistance
CálculodeladistanciaentredospuntosconelmétodoGetDistance
EnesteejemploseutilizaelmétodoGetDistanceparaobtenerlascoordenadasdelpuntoylafunciónMsgBoxparamostrarladistanciacalculada.
SubCh3_GetDistanceBetweenTwoPoints()
DimreturnDistAsDouble
'Returnthevalueenteredbyuser.Apromptisprovided.
returnDist=ThisDrawing.Utility.GetDistance_
(,"Picktwopoints.")
MsgBox"Thedistancebetweenthetwopointsis:"&returnDist
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>
Cálculodeáreas
CálculodeláreadefinidaporlospuntosintroducidosporelusuarioPuedeconocereláreadeunarco,círculo,elipse,polilíneaoptimizada,polilínea,regiónocurvassplineplanas-cerradasmediantelapropiedadÁrea.
Sinecesitacalculareláreacombinadademásdeunobjeto,puedemanteneruntotalcuandoañadeousaelmétodoBooleanenunaseriederegionesparaobtenerunasolaregiónquerepresenteeláreadeseada.DesdeestaúnicaregiónpuedeutilizarlapropiedadAreaparaobtenersuárea.
Eláreadelcálculovaríaenfuncióndeltipodeobjetodesignado.Paraobtenerinformaciónacercadecómosecalculaeláreadecadatipodeobjeto,véase“Obtencióndeinformacióndeárea”enelManualdelusuario.
Cálculodeunáreadefinida
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Dibujoconprecisión>Cálculodeáreas>
Cálculodeunáreadefinida
CálculodeláreadefinidaporlospuntosintroducidosporelusuarioObtieneeláreaespecificadaporlospuntosintroducidosporelusuario.Puedemedirunaregióncerradaarbitrariadelimitadaporlospuntos2Do3Despecificadosporelusuario.Lospuntosdebensercoplanares.
Paraobtenereláreadesignadaporpuntosdelusuario
1. UtiliceelmétodoGetPointenunbucleparaobtenerlospuntosdelusuario.
2. Creeunapolilíneaoptimizadaapartirdelospuntosfacilitadosporelusuario.UtiliceelmétodoAddLightweightPolylineparacrearlapolilínea.
3. UtilicelapropiedadAreaparaobtenereláreadelapolilíneareciéncreada.
4. BorrelapolilíneaconelmétodoErase.
Cálculodeláreadefinidaporlospuntosintroducidosporelusuario
Enesteejemplo,sepidealusuarioquedesignecincopuntos.Despuéssecreaunapolilíneaapartirdelospuntos.Lapolilíneaescerradaysuáreasemuestraenuncuadrodemensaje.
SubCh3_CalculateDefinedArea()
Dimp1AsVariant
Dimp2AsVariant
Dimp3AsVariant
Dimp4AsVariant
Dimp5AsVariant
'Getthepointsfromtheuser
p1=ThisDrawing.Utility.GetPoint(,vbCrLf&"Firstpoint:")
p2=ThisDrawing.Utility.GetPoint(p1,vbCrLf&"Secondpoint:")
p3=ThisDrawing.Utility.GetPoint(p2,vbCrLf&"Thirdpoint:")
p4=ThisDrawing.Utility.GetPoint(p3,vbCrLf&"Fourthpoint:")
p5=ThisDrawing.Utility.GetPoint(p4,vbCrLf&"Fifthpoint:")
'Createthe2Dpolylinefromthepoints
DimpolyObjAsAcadLWPolyline
Dimvertices(0To9)AsDouble
vertices(0)=p1(0):vertices(1)=p1(1)
vertices(2)=p2(0):vertices(3)=p2(1)
vertices(4)=p3(0):vertices(5)=p3(1)
vertices(6)=p4(0):vertices(7)=p4(1)
vertices(8)=p5(0):vertices(9)=p5(1)
SetpolyObj=ThisDrawing.ModelSpace.AddLightWeightPolyline_
(vertices)
polyObj.Closed=True
ThisDrawing.Application.ZoomAll
'Displaytheareaforthepolyline
MsgBox"Theareadefinedbythepointsis"&_
polyObj.Area,,"CalculateDefinedArea"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Solicituddedatosdeusuario
ElobjetoUtility,unsubordinadodelobjetoDocument,definelosmétodosdeentradadeinformaciónporpartedelusuario.DichosmétodospresentanunasolicitudenlalíneadecomandodeAutoCADypidenentradasdediversostipos.Estetipodeentradadelusuarioesmuyútilparalaintroduccióninteractivadecoordenadasdepantalla,seleccióndeentidadesyvaloresdecadenacortaonuméricos.Siunaaplicaciónrequierelaintroduccióndevariosvaloresuopciones,puedesermásprácticoproporcionaruncuadrodediálogoquepresentarsolicitudesindividuales.
CadamétodopresentaunasolicitudenlalíneadecomandodeAutoCADydacomoresultadounvalorespecíficodeltipodeentradasolicitada.Porejemplo,GetStringdevuelveunacadena,GetPointdevuelveunavariante(quecontieneunamatrizdedoblesdetreselementos)yGetIntegerdevuelveunvalorentero.TambiénpuedecontrolarlaentradadelusuarioconelmétodoInitializeUserInputPorejemplo,estemétodopermitecontrolarlaentradaNULL(pulsandolateclaINTRO),laintroduccióndeceroonúmerosnegativosyladevaloresdetextoarbitrarios.
Sideseaquelasolicitudsemuestreenunalíneaaparte,incluyalaconstantederetornodecarro/saltodelínea(vbCrLf)alprincipiodelacadenadelasolicitud.
MétodoGetStringMétodoGetPointMétodoGetKeywordControldeentradasdelusuario
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Solicituddedatosdeusuario>
MétodoGetString
ElmétodoGetStringpidealusuariolaintroduccióndeunacadenaenlasolicituddecomandodeAutoCAD.Estemétodoadmitedosparámetros.Elprimerparámetrocontrolalainsercióndeespaciosenlacadenadeentrada.Siseestableceen0,losespaciosnosepermiten(BARRAESPACIADORAterminalaentrada);siseledaelvalor1,lacadenapuedecontenerespacios(debepulsarseINTROparaterminarlaentrada).Elsegundoparámetroeslacadenadelasolicitud.
ObtencióndelvalordeunacadenadelusuarioenlalíneadecomandodeAutoCAD
EnelejemplosiguientesemuestralasolicitudEnterYourNameyseindicaalusuarioquepulseENTERparaterminarlaentrada(lacadenadeentradaadmitelainclusióndeespacios).ElvalordelacadenaseguardaenlavariableretValysemuestraenuncuadrodemensaje.
SubCh3_GetStringFromUser()
DimretValAsString
retVal=ThisDrawing.Utility.GetString_
(1,vbCrLf&"Enteryourname:")
MsgBox"ThenameenteredWad:"&retal
EndSub
ElmétodoGetStringnorespetaunallamadaanterioralmétodoInitializeUserInput
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Solicituddedatosdeusuario>
MétodoGetPoint
ElmétodoGetStringsolititaalusuarioquedesigneunpuntoenlasolicituddecomandodeAutoCAD.Estemétodoadmitedosparámetros,unpuntoFromopcionalylacadenadesolicitud.SiseproporcionaelpuntoFrom,AutoCADtrazaunalíneaelásticadesdedichopunto.Paracontrolarlaentradadelusuario,puedeanteponerseaestemétodounallamadaalmétodoInitializeUserInput
Obtencióndeunpuntoelegidoporelusuario
Enelejemplosiguientesesolicitaalusuariolaseleccióndedospuntos,inicialyfinal,paradibujarunalíneaentreellos.
SubCh3_GetPointsFromUser()
DimstartPntAsVariant
DimendPntAsVariant
Dimprompt1AsString
Dimprompt2AsString
prompt1=vbCrLf&"Enterthestartpointoftheline:"
prompt2=vbCrLf&"Entertheendpointoftheline:"
'Getthefirstpointwithoutenteringabasepoint
startPnt=ThisDrawing.Utility.GetPoint(,prompt1)
'Usethepointenteredaboveasthebasepoint
endPnt=ThisDrawing.Utility.GetPoint(startPnt,prompt2)
'Createalineusingthetwopointsentered
ThisDrawing.ModelSpace.AddLinestartPnt,endPnt
ThisDrawing.Application.ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Solicituddedatosdeusuario>
MétodoGetKeyword
ElmétodoGetKeywordpidealusuariolaintroduccióndeunapalabraclaveenlasolicituddecomandodeAutoCAD.Estemétodoadmitesólounparámetro:lacadenadelasolicitud.LaspalabrasclaveylosparámetrosdeentradasedefinenconunallamadaalmétodoInitializeUserInput
ObtencióndeunapalabraclaveintroducidaporelusuarioenlalíneadecomandodeAutoCAD
Enelejemplosiguienteseinstaalusuarioaescribirunapalabraclave,estableciendoelprimerparámetrodeInitializeUserInputen1,loquedesactivalaentradaNULL(alpulsarINTRO).Elsegundoparámetroestablecelalistadepalabrasclaveválidas.
SubCh3_KeyWord()
DimkeyWordAsString
ThisDrawing.Utility.InitializeUserInput1,"LineCircleArc"
keyWord=ThisDrawing.Utility.GetKeyword_
(vbCrLf&"Enteranoption(Line/Circle/Arc):")
MsgBoxkeyWord,,"GetKeywordExample"
EndSub
UnasolicituddepalabraclavemássencillaparalosusuariosproporcionaunvalorpordefectocuandoelusuariopulseINTRO(entradaNULL).Observelaspequeñasmodificacionesrealizadasenelsiguienteejemplo:
SubCh3_KeyWord2()
DimkeyWordAsString
ThisDrawing.Utility.InitializeUserInput0,"LineCircleArc"
keyWord=ThisDrawing.Utility.GetKeyword_
(vbCrLf&"Enteranoption(Line/Circle/<Arc>):")
IfkeyWord=""ThenkeyWord="Arc"
MsgBoxkeyWord,,"GetKeywordExample"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>Solicituddedatosdeusuario>
Controldeentradasdelusuario
PuedeutilizarelmétodoInitializeUserInputparadefinirpalabrasclaveorestringireltipodeentradasenelmétododeintroduccióndeinformaciónporpartedelusuario.ElusoylosvaloresdelosparámetrossonsimilaresalafuncióndeAutoLISPinitget.InitializeUserInputpuedeutilizarseconlossiguientesmétodos:GetAngle,GetCorner,GetDistance,GetInteger,GetKeyword,GetOrientation,GetPoint,yGetReal.InitializeUserInputnopuedeutilizarseconelmétodoGetString.UtiliceelmétodoGetInputpararecuperarelvalordecadena(palabraclaveoentradaalazar)cuandoelmétododeentradasdelusuarionodevuelvaunvalordecadena.
ElmétodoInitializeUserInputadmitedosparámetros.Elprimerparámetroesunvalorentero,expresadoenbits,quedeterminalasopcionesdeentradadelmétododeintroduccióndeinformaciónporpartedelusuario.Elsegundoparámetroesunacadenaquedefinelaspalabrasclaveválidas.
ObtencióndeunvalorenteroodeunapalabraclaveenlalíneadecomandodeAutoCAD
Enelejemplosiguientesesolicitaalusuarioladesignacióndeunvalorenteropositivoounapalabraclave:
SubCh3_UserInput()
'ThefirstparameterofInitializeUserInput(6)
'restrictsinputtopositiveandnon-negative
'values.Thesecondparameteristhelistof
'validkeywords.
ThisDrawing.Utility.InitializeUserInput6,"BigSmallRegular"
'Setthepromptstringvariable
DimpromptStrAsString
promptStr=vbCrLf&"Enterthesizeor(Big/Small/<Regular>):"
'AttheGetIntegerprompt,enteringakeywordorpressing
'ENTERwithoutenteringavalueresultsinanerror.Toallow
'yourapplicationtocontinueandcheckfortheerror
'description,youmustsettheerrorhandlertoresumeonerror.
OnErrorResumeNext
'Getthevalueenteredbytheuser
DimreturnIntegerAsInteger
returnInteger=ThisDrawing.Utility.GetInteger(promptStr)
'Checkforanerror.Iftheerrornumbermatchesthe
'oneshownbelow,thenuseGetInputtogetthereturned
'string;otherwise,usethevalueofreturnInteger.
IfErr.Number=-2145320928Then
DimreturnStringAsString
Debug.PrintErr.Description
returnString=ThisDrawing.Utility.GetInput()
IfreturnString=""Then'ENTERreturnsnullstring
returnString="Regular"'Settodefault
EndIf
Err.Clear
Else'Otherwise,
returnString=returnInteger'Usethevalueentered
EndIf
'Displaytheresult
MsgBoxreturnString,,"InitializeUserInputExample"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
AccesoalalíneadecomandodeAutoCAD
ElmétodoSendCommandpermiteenviarcomandosdirectamentealalíneadecomandodeAutoCAD.Estemétodoenvíaunacadenasimplealalíneadecomando.Esnecesarioquelosargumentosdelcomandoenlacadenaesténenelordenqueesperalasecuenciadesolicituddelcomandoejecutado.UnespacioenblancooelequivalenteASCIIdeunretornodecarroenlacadenaequivaleapulsarlateclaINTRO.AdiferenciadelentornoAutoLISP,aquínosepuedellamaralmétodoSendCommandsinargumentos.
EnvíodeuncomandoalalíneadecomandodeAutoCAD
Enelejemplosiguientesecreauncírculoderadio4concentroen(2,2,0).Despuésseaplicaelzoomatodalageometríadeldibujo.ObserveelespacioalfinaldelacadenaquerepresentaelINTROfinalparainiciarlaejecucióndelcomando.
SubCh3_SendACommandToAutoCAD()
ThisDrawing.SendCommand"_Circle2,2,04"
ThisDrawing.SendCommand"_zooma"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Trabajosindocumentosabiertos
AutoCADsiemprearrancaconundocumentonuevoounoexistenteabiertos.Durantelasesión,noobstante,sepuedencerrartodoslosdocumentos.
SicierratodoslosdocumentosenlainterfazdelusuariodeAutoCADobservaráalgunoscambiosenlaventanadelaaplicación.LosmenúsdisponiblesquedanreducidosaArchivo,Ver,VentanayAyuda.Lasopcionesdeestosmenústambiénvenreducidosunúmero.Asimismo,lalíneadecomandodesaparece.
Deformasimilar,cuandonohaydocumentosabiertoslainterfazdeActiveXsólopermitelasaccionessiguientes:
abrirundocumento.
crearundocumento.
importarundocumento.
salirdeAutoCAD.
TodasestasaccionesseencuentrandisponiblesenlacolecciónDocuments.LosmétodosylaspropiedadesdelacolecciónDocuments,juntoconunconjuntolimitadodemétodosypropiedadesdelobjetoApplication,constituyenlaúnicainterfazválidacuandonohaydocumentosabiertos.Siserealizacualquierotraacción,porejemplo,intentaraccederaopcionesdelusuario,elresultadoseráfallido.
UtilicelapropiedadCountdelacolecciónDocumentsparadeterminarsiAutoCADestáenunestadodecerodocumentos.SiDocuments.Count=0,significaqueAutoCADtieneunestadodecerodocumentos.SiDocuments.Count>0,indicaquehayundocumentoabiertocomomínimo.
TambiénesimportantetenerencuentaqueenVBAelobjetoThisDrawingno
sedefinecuandoAutoCADestáenestadodedocumentocero.Estoeslógico,puestoqueThisDrawingserefieregeneralmentealdibujoactivoyenestadodedocumentoceronohaydocumentosabiertos.SiseintentaejecutarunamacroqueutilizaThisDrawingelresultadoseráunerrorentiempodeejecución.PuedeevitaresteerrorsiutilizalafunciónGetObjectdeVBAyespecificalaversióndeAutoCADparaconectarseconAutoCADcuandonohaydocumentosabiertos.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Importacióndeotrosformatosdearchivo
Sepuedenempleardibujosoimágenesdeotrasaplicacionesabriéndolosenformatosespecíficos.AutoCADescapazderealizarciertaconversiónparaarchivosDXFTMdeintercambiodedibujos,SATyWMF.Independientementedelaversiónqueestéempleando,puedeimportarelarchivoutilizandoelmétodoImport.Estemétodorequieretresvaloresdeentrada:elnombredelarchivoquesedebeimportar,elpuntodeinsercióneneldibujodondesecolocaráelarchivoyelfactordeescalaquedebeemplearsealcolocareldibujoimportado.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ControldelentornodeAutoCAD>
Exportaciónaotrosformatosdearchivo
SideseautilizarundibujodeAutoCADenotraaplicación,puedeconvertirloaunformatoespecíficopormediodelmétodoExport.EstemétodopermiteexportarlosdibujosdeAutoCADalformatoWMF,SAT,EPS,DXFoBMP.ElmétodoExportrequieretresvaloresdeentrada:elnombredelarchivoquesecreará,laextensióndelnuevoarchivoyelconjuntodeseleccióndeobjetosparaexportar.
CuandorealiceunaexportaciónaformatosWMF,SAToBMP,debeproporcionarunconjuntodeselecciónquenoestévacío.Elconjuntodeseleccióndesignalosobjetosdeldibujoquesedeseaexportar.Sinoseprecisaunconjuntodeselecciónnoseexportanada,yelresultadoesunerrorinterceptabledeargumentonoválido.
CuandoseexportaalosformatosEPSoDXF,Exportnoconsidera,aunquelorequiere,elargumentodelconjuntodeselección.Seexportaautomáticamentetodoeldibujo.
ParaexportarundibujocomoarchivoDXFyvolverloaimportar
Enesteejemplosecreauncírculoeneldibujoactual.DespuésseexportaeldibujoaunarchivollamadoDXFExprt.DXF.Acontinuación,seabreundibujonuevoyseimportaelarchivo.TengapresentequeaExportseleproporcionacomoargumentounconjuntodeselecciónvacío.AunqueelmétodoExportomitelainformacióndelconjuntodeselecciónalexportarunarchivoDXF,produciríaunerrorsinoseincluyeraelargumento.
SubCh3_ImportingAndExporting()
'Createthecircleforvisualrepresentation
DimcircleObjAsAcadCircle
DimcenterPt(0To2)AsDouble
DimradiusAsDouble
centerPt(0)=2:centerPt(1)=2:centerPt(2)=0
radius=1
SetcircleObj=ThisDrawing.ModelSpace.AddCircle_
(centerPt,radius)
ThisDrawing.Application.ZoomAll
'Createanemptyselectionset
DimssetAsAcadSelectionSet
Setsset=ThisDrawing.SelectionSets.Add("NEWSSET")
'ExportthecurrentdrawingtoaDXFfileinthe
'AutoCADtemporaryfiledirectory
DimtempPathAsString
DimexportFileAsString
ConstdxfnameAsString="DXFExprt"
tempPath=_
ThisDrawing.Application.preferences.Files.TempFilePath
exportFile=tempPath&dxfname
ThisDrawing.ExportexportFile,"DXF",sset
'Deletetheemptyselectionset
ThisDrawing.SelectionSets.Item("NEWSSET").Delete
'Openanewdrawing
ThisDrawing.Application.Documents.Add"acad.dwt"
'Definetheimport
DimimportFileAsString
DiminsertPoint(0To2)AsDouble
DimscalefactorAsDouble
importFile=tempPath&dxfname&".dxf"
insertPoint(0)=0:insertPoint(1)=0:insertPoint(2)=0
scalefactor=2#
'Importthefile
ThisDrawing.ImportimportFile,insertPoint,scalefactor
ThisDrawing.Application.ZoomAll
EndSub
¿Comentarios?
<$nopage>rellenosólido(áreas):<$startrange>conjuntosdeselección:filtros(listas),<$startrange>filtros(listas),<$startrange>filtrar:conjuntosdeselección,DXF(códigos),ytiposdefiltros(tabla),filtros(tipos),ycódigosDXF(tabla),<$startrange>filtros(listas):códigodeejemplo,SelectionSet(objeto):códigodeejemplo,filtrar:códigodeejemplo,<$endrange>conjuntosdeselección:filtros(listas),<$endrange>filtros(listas),<$endrange>filtrar:conjuntosdeselección,<$endrange>filtros(listas):códigodeejemplo,conjuntosdeselección:eliminarobjetos,objetos:eliminardeconjuntosdeselección,RemoveItems(método):enconjuntosdeselección,Clear(método):enconjuntosdeselección,Erase(método):enconjuntosdeselección,Delete(método):enconjuntosdeselección,objetos:existentes(modificar),Update(método):volveradibujarobjetos,objetos2D:editar,editar:objetos2D,nográficos(objetos),editar,editar:objetosnográficos,objetosguardados:especificar,objetos:guardados(especificar),objetosguardados:limpiar,limpiar(objetosguardados),PurgeAll(método):códigodeejemplo,objetosguardados:cambiarnombre,objetosguardados:longituddecaracteres,Name(propiedad):códigodeejemplo,Add(método):capas,códigodeejemplo,Layer(objeto):códigodeejemplo,copiar:desfasar,copiar:reflejar,copiar:usarmatrices,desfasar,objetos,reflejar:objetos,disponerenmatrices,patrones,Copy(método),copiar:objetoúnico,CopyObjects(método),copiar:variosobjetos,copiar:deundibujoaotro,copiar:objetosaotrosdibujos,CopyObjects(método):códigodeejemplo,Circle(objeto):códigodeejemplo,CopyObjects(método):códigodeejemplo,copiar:deundibujoaotro,copiar:objetosaotrosdibujos,objetos:desfasar,Offset(método),AddLightweightPolyline(método):códigodeejemplo,LightweightPolyline(objeto):códigodeejemplo,Offset(método):códigodeejemplo,Offset(método):códigodeejemplo,Mirror(método),reflejar:condoscoordenadas,Mirror(método):ilustración,Erase(método),MIRRTEXT(variabledesistema),Text(objeto):reflejartexto,reflejar:objetosText,reflejar:códigodeejemplo,LightweightPolyline(objeto):códigodeejemplo,Mirror(método):códigodeejemplo,matrices:matricespolares,matrices:matricesrectangulares,ArrayPolar(método):crearmatrices,matricespolares:crear,matricespolares:puntocentral(especificar),matricespolares:referencia(puntos),referencia(puntosenmatricespolares),matricespolares:códigodeejemplo,ArrayRectangular(método),matrices:rectangulares,matricesrectangulares,ánguloderotaciónderesolución:matricesrectangulares,matricesrectangulares:ánguloderotaciónderesolución,SnapRotationAngle(propiedad),matricesrectangulares:códigodeejemplo,vectores:desplazarobjetos,objetos:desplazaralolargodeunvector,Move(método):vectores,vectordedesplazamiento,Move(objeto):ilustración,Move(objeto):códigodeejemplo,girarobjetos:ilustración,puntobase,girar
objetos,Rotate(método),girarobjetos,Rotate(método):códigodeejemplo,Delete(método):colecciones,aplicarescala:objetos,objetos:aplicarescala,ScaleEntity(método),factordeescala:dimensionesdeobjeto,objetos:factordeescala,factordeescala:ilustración,ScaleEntity(método):códigodeejemplo,TransformBy(método),objetos:transformar,<$nopage>matriz:<$nopage>capa(propiedades),guardar.<$endrange>capa(parámetros):almacenar,capa(parámetros):guardar:códigodeejemplo,capa(parámetros):cambiarnombreaparámetrosguardados:códigodeejemplo,capa(parámetros):suprimirparámetrosguardados:códigodeejemplo,capa(parámetros):restablecerparámetrosguardados,capa(parámetros):restablecerparámetrosguardados:códigodeejemplo,capa(parámetros):exportarparámetrosguardados,capa(parámetros):importarparámetrosguardados,Export(método):paraparámetrosdecapaguardados,Import(método):paraparámetrosdecapaguardados,capa(parámetros):exportarparámetrosguardados:códigodeejemplo,capa(parámetros):importarparámetrosguardados:códigodeejemplo,Text(objeto):utilizadoendibujos,Text(objeto):textodeunalínea,Text(objeto):textoM,textoM:endibujos,dibujos:texto(estilos),texto(estilos):propiedades(tabla),texto(estilos):actual,texto(estilos):pordefecto,texto(estilos):crear,Add(método):texto(estilos),TextStyles(colección),TextStyle(objeto),TextStyle(objeto):propiedades(lista),FontFile(propiedad),BigFontFile(propiedad):TextStyle(objeto),Height(propiedad),Width(propiedad),ObliqueAngle(propiedad),TextGenerationFlag(propiedad),texto(estilos):cambiarpropiedades,Regen(método):paraestilosdetexto,Update(método):paraestilosdetexto,tiposdeletra:asignarendibujos,TextGenerationFlag(propiedad),GetFont(método):códigodeejemplo,SetFont(método):códigodeejemplo,tiposdeletra:TrueType,(fuentes):SHX(tiposdeletra),tiposdeletra:exportarendibujos,tiposdeletra:TEXTFILL(variabledesistema),TrueType(tiposdeletra),SHX(tiposdeletra),TEXTFILL(variabledesistema),tiposdeletra:Unicode,tiposdeletraUnicode,tiposdeletra:archivosdetiposdeletragrandes,archivosdetiposdeletragrandes,FontFile(propiedad),BigFontFile(propiedad):códigodeejemplo,FontFile(propiedad):códigodeejemplo,TextStyle(objeto):códigodeejemplo,Text(objeto):parámetrosdealtura,TrueType(tiposdeletra):parámetrosdealtura,Height(propiedad),Height(propiedad):códigodeejemplo,Text(objeto):códigodeejemplo,AddText(método):códigodeejemplo,Text(objeto):ángulos,parámetros,ángulosderotación,ángulosdeoblicuidad,entexto:ilustración,ObliqueAngle(propiedad),Text(objeto):ObliqueAngle(propiedad),TextGenerationFlag(propiedad):códigodeejemplo,Text(objeto):indicadordegeneracióndetexto,Text(objeto):mostrarhacialaizquierda,Text(objeto):mostrarbocaabajo,TextGenerationFlag
(propiedad),TextGenerationFlag(propiedad):códigodeejemplo,Text(objeto):códigodeejemplo,Text(objeto):textodeunalínea(crear),Text(objeto):aplicarformato,StyleName(propiedad),Text(objeto):propiedades(lista),Alignment(propiedad),InsertionPoint(propiedad),ObliqueAngle(propiedad),Rotation(propiedad),ScaleFactor(propiedad),TextAlignmentPoint(propiedad),TextGenerationFlag(propiedad),TextString(propiedad),Update(método):Text(objeto),Alignment(propiedad):entexto,Text(objeto):alinearendibujos(ilustración),Text(objeto):códigodeejemplo,SetVariable(método):códigodeejemplo,Alignment(propiedad):códigodeejemplo,TextAlignmentPoint(propiedad):códigodeejemplo,Text(objeto):modificar,MIRRTEXT(variabledesistema),Text(objeto):métodos(lista),ArrayPolar(método):Text(objeto),ArrayRectangular(método):Text(objeto),Copy(método),Erase(método),Mirror(método),Move(método),Rotate(método),textoM:usos,textoM:modificar,<$nopage>textodelíneasmúltiples.
ManualdeldesarrolladordeActiveXyVBA>
CreaciónyedicióndeentidadesdeAutoCAD
ConAutoCADpodrácrearunaampliavariedaddeobjetos,desdelíneasycírculoshastacurvasspline,elipsesyáreasdesombreadoasociativo.Porlogeneral,seañadenobjetosalespaciomodeloutilizandounodelosmétodosAdd.Tambiénsepuedencrearobjetosenespaciopapeloenunbloque.
Unavezcreadounobjeto,sepuedecambiarlacapa,elcoloryeltipodelíneadelmismo.Tambiénsepuedeañadirtextoparaincluirnotaseneldibujo.
CreacióndeobjetosTrabajoconconjuntosdeselecciónModificacióndeobjetosUsodecapas,coloresytiposdelíneaAlmacenamientoyrestablecimientodeparámetrosdecapasAdicióndetextoadibujos
¿Comentarios?
<$nopage>rellenosólido(áreas):
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>
Creacióndeobjetos
AunqueexistendiferentesformasdecrearelmismoobjetográficoenAutoCAD®,ActiveXAutomationsóloofreceunmétododecreaciónparacadaobjeto.Porejemplo,existenenAutoCADcuatromanerasdiferentesdecrearuncírculo:(1)especificandoelpuntocentralyelradio,(2)mediantedospuntosquedefineneldiámetro,(3)mediantetrespuntosquedefinanlacircunferencia,o(4)mediantedostangentesyelradio.Sinembargo,enActiveXAutomationsólosecreancírculosconelmétodoqueutilizaelcentroyelradio.
Nota LosmétodosdecreacióndeobjetosdeVByVBAqueutilizanCreateObjectoDimconlapalabraclaveNewsólopermitencrearelobjetoApplicationdeAutoCAD.TodoslosdemásobjetosdeAutoCADdebencrearsemediantelosmétodosAddoAdd<nombreobjeto>queproporcionalainterfazdeAutoCAD.
DetermineDeterminacióndelobjetocontenedorCreacióndelíneasCreacióndeobjetoscurvosCreacióndeobjetosPointCreacióndeáreasconrellenosólidoTrabajoconregionesCreacióndesombreados
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>
DetermineDeterminacióndelobjetocontenedor
LosobjetosgráficossecreanenlascoleccionesModelSpaceyPaperSpace,yenlosobjetosBlock.
LacolecciónModelSpaceladevuelvelapropiedadModelSpace,mientrasquelapropiedadPaperSpacedevuelvelacolecciónPaperSpace.
Lareferenciaaestosobjetossepuederealizardirectamenteoatravésdeunavariabledefinidaporelusuario.Parautilizarunareferenciadirectaaunobjeto,inclúyaloenlajerarquíadelallamada.Porejemplo,lasiguienteinstrucciónagregaunalíneaalespaciomodelo:
SetlineObj=ThisDrawing.ModelSpace.AddLine(startPoint,endPoint)
Parahacerreferenciaalosobjetosmedianteunavariabledefinidaporelusuario,asignealavariableeltipoAcadModelSpaceoAcadPaperSpaceydespuésdefínalacomolapropiedadapropiadadeldocumentoactivo.Enelsiguienteejemplosedefinendosvariables,queseestablecenigualquelosespaciosmodeloypapelactivos,respectivamente:
DimmoSpaceAsAcadModelSpace
DimpaSpaceAsAcadPaperSpace
SetmoSpace=ThisDrawing.ModelSpace
SetpaSpace=ThisDrawing.PaperSpace
Lasiguienteinstrucciónagregaunalíneaalespaciomodelomediantelavariabledefinidaporelusuario:
SetlineObj=moSpace.AddLine(startPoint,endPoint)
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>
Creacióndelíneas
LalíneaeselobjetomássencillodeAutoCAD.Puedencrearsediversaslíneas,líneasindividualesyvariossegmentosdelíneaconosinarcos.Engeneral,laslíneassedibujandesignandopuntosdecoordenadas.EltipodelíneapordefectoesCONTINUOUS(líneacontinua),perohayvariostiposdelíneaposiblesqueutilizanpuntosyrayas.
Paracrearunalínea,utiliceunodelosmétodossiguientes:
AddLine
Creaunalíneaquepasapordospuntos.
AddLightweightPolyline
Creaunapolilíneaoptimizada2Dapartirdeunalistadevértices.
AddMLine
Creaunalíneamúltiple.
AddPolyline
Creaunapolilínea2Do3D.
LaslíneasestándarylaspolilíneassecreanenelplanoXYdelsistemadecoordenadasuniversales.LaspolilíneasylaspolilíneasoptimizadassecreanenelSistemadecoordenadasdeobjeto(SCO).ParaobtenerinformaciónacercadelaconversióndecoordenadasSCO,véaseConversióndecoordenadas.
CreacióndeunobjetoPolyline
EsteejemploaplicaelmétodoAddLightweightPolylineparacrearunapolilíneasencilladedossegmentosutilizandolascoordenadas2D(2,4),(4,2)y(6,4).
SubCh4_AddLightWeightPolyline()
DimplineObjAsAcadLWPolyline
Dimpoints(0To5)AsDouble
'Definethe2Dpolylinepoints
points(0)=2:points(1)=4
points(2)=4:points(3)=2
points(4)=6:points(5)=4
'CreatealightweightPolylineobjectinmodelspace
SetplineObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
ThisDrawing.Application.ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>
Creacióndeobjetoscurvos
ConAutoCADpodrácrearunaampliavariedaddeobjetoscurvos,incluidoscírculos,arcos,elipsesycurvasspline.TodaslascurvassecreanenelplanoXYdelSCUactual.
Paracrearunacurva,utiliceunodelosmétodossiguientes:
AddArc
Creaunarcocontandoconelcentro,elradioylosángulosinicialyfinal.
AddCircle
Creauncírculoconelradioycentrodados.
AddEllipse
Creaunaelipsecontandoconelpuntocentral,unpuntoenelejemayorylaproporcióndelradio.
AddSpline
CreaunacurvaNURBS(B-splineracionalnouniforme)cuadráticaocúbica.
CreacióndeunobjetoSpline
Enesteejemplosecreaunacurvasplineenespaciomodeloapartirdetrespuntos(0,0,0),(5,5,0)y(10,0,0).Lacurvatienelastangentesinicialyfinalde(0,5,0,5,0,0).
SubCh4_CreateSpline()
'Thisexamplecreatesasplineobjectinmodelspace.
'Declarethevariablesneeded
DimsplineObjAsAcadSpline
DimstartTan(0To2)AsDouble
DimendTan(0To2)AsDouble
DimfitPoints(0To8)AsDouble
'Definethevariables
startTan(0)=0.5:startTan(1)=0.5:startTan(2)=0
endTan(0)=0.5:endTan(1)=0.5:endTan(2)=0
fitPoints(0)=1:fitPoints(1)=1:fitPoints(2)=0
fitPoints(3)=5:fitPoints(4)=5:fitPoints(5)=0
fitPoints(6)=10:fitPoints(7)=0:fitPoints(8)=0
'Createthespline
SetsplineObj=ThisDrawing.ModelSpace.AddSpline_
(fitPoints,startTan,endTan)
ZoomAll
EndSub
Paraobtenermásinformaciónacercadelascurvasspline,véaseladocumentacióndelobjetoSplineyelmétodoAddSplineenActiveXandVBAReferencedeAutoCAD.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>
CreacióndeobjetosPoint
Losobjetosdepuntopuedenserdemuchautilidad,porejemplo,comopuntosdereferenciaodenodohacialoscualespodráforzarelcursorodesfasarlosobjetos.Silodesea,podráespecificarelestilodelpunto,asícomosutamaño,enrelaciónconlapantallaoenunidadesabsolutas.
LasvariablesdesistemaPDMODEyPDSIZEcontrolanelaspectodelosobjetosdepunto.Losvalores0,2,3y4dePDMODEseleccionanunafiguraquedebedibujarseatravésdelpunto.Elvalor1establecequenosevisualicenada.
Añada32,64o96alvaloranteriorparaseleccionarunaformaquedebedibujarsealrededordelpuntoademásdelaquesedibujaparaatravesarlo:
PDSIZEcontrolaeltamañodelasfigurasdepunto,salvoenlosvalores0y1dePDMODE.AlestablecerPDSIZEen0segeneraelpuntoal5%delaalturadeláreagráfica.UnvalorpositivodePDSIZEespecificauntamañoabsolutoparalasfigurasdepunto.Unvalornegativoseinterpretacomounporcentajedeltamañodelaventanagráfica.Eltamañodetodoslospuntosvuelveacalcularsealregenerareldibujo.
DespuésdecambiarPDMODEyPDSIZE,lapróximavezqueseregenereeldibujocambiaráelaspectodelospuntosexistentes.
ParadefinirPDMODEyPDSIZE,utiliceelmétodoSetVariable.
CreacióndeunobjetoPointymodificacióndesuaspecto
ElcódigosiguientecreaunobjetoPointenlascoordenadas(5,5,0)delespaciomodelo.DespuésseactualizanlasvariablesdesistemaPDMODEyPDSIZE.
SubCh4_CreatePoint()
DimpointObjAsAcadPoint
Dimlocation(0To2)AsDouble
'Definethelocationofthepoint
location(0)=5#:location(1)=5#:location(2)=0#
'Createthepoint
SetpointObj=ThisDrawing.ModelSpace.AddPoint(location)
ThisDrawing.SetVariable"PDMODE",34
ThisDrawing.SetVariable"PDSIZE",1
ZoomAll
EndSub
¿Comentarios?
<$nopage>rellenosólido(áreas):
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>
Creacióndeáreasconrellenosólido
Esposiblecrearáreastriangularesycuadriláterasrellenasdeuncolor.Paraobtenerresultadosmásrápidos,estasáreasdebencrearseconlavariabledesistemaFILLMODEdesactivada,yactivardenuevoFILLMODEpararellenareláreaterminada.
Cuandosecreaunáreaderellenosólidocuadrangular,lasecuenciadelospuntosterceroycuartodeterminasuforma.Comparelasfigurassiguientes:
Losdosprimerospuntosdefinenunladodelpolígono.Eltercerpuntosedefinediagonalmentecontrarioalsegundo.Sielcuartopuntosedefineigualqueeltercero,secreauntriángulorelleno.
Paracrearunáreaderellenosólido,utiliceelmétodoAddSolid.
Paraobtenermásinformaciónacercadelrellenodesólidos,véase“Creacióndeáreasderellenosólido”enelManualdelusuario.
Creacióndeunobjetoconrellenosólido
Elcódigodelejemplosiguientecreauncuadriláterosólidoenlascoordenadas(0,0,0),(5,0,0),(5,8,0)y(8,8,0)delespaciomodelo.
SubCh4_CreateSolid()
DimsolidObjAsAcadSolid
Dimpoint1(0To2)AsDouble
Dimpoint2(0To2)AsDouble
Dimpoint3(0To2)AsDouble
Dimpoint4(0To2)AsDouble
'Definethesolid
point1(0)=0#:point1(1)=0#:point1(2)=0#
point2(0)=5#:point2(1)=0#:point2(2)=0#
point3(0)=5#:point3(1)=8#:point3(2)=0#
point4(0)=0#:point4(1)=8#:point4(2)=0#
'Createthesolidobjectinmodelspace
SetsolidObj=ThisDrawing.ModelSpace.AddSolid_
(point1,point2,point3,point4)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>
Trabajoconregiones
Lasregionessonáreascerradasdedosdimensionesqueelusuariocreaapartirdeformascerradasobucles.Unbucleesunacurvaounasecuenciadecurvasconectadasquedefineunáreadeunplanoconuncontornoquenointersectaconsigomismo.Losbuclespuedenestarconstituidosporunacombinacióndelíneas,polilíneasoptimizadas,círculos,arcos,elipses,arcoselípticos,splines,caras3D,trazosysólidos.Losobjetosqueconformanlosbuclesdebenserobjetoscerradosoformaráreascerradascuyospuntosfinalescompartanconotrosobjetos.Losobjetoshandeserademáscoplanarios(situadosenelmismoplano).Losbuclesqueconformanunaregiónhandeestardefinidoscomomatrizdeobjetos.
Paraobtenermásinformaciónacercadelasregiones,véase“Creaciónycombinacióndeáreas(regiones)”enelManualdelusuario.
CreaciónderegionesCreaciónderegionescompuestasUniónderegionesCálculodelainterseccióndedosregiones
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Trabajoconregiones>
Creaciónderegiones
Paracrearunaregión,utiliceelmétodoAddRegionEstemétodocreaunaregiónapartirdetodoslosbuclescerradosformadosconlamatrizdeentradadecurvas.AutoCADconviertelaspolilíneas2Dcerradasylas3Dplanasenregionesdistintasy,acontinuación,conviertelaspolilíneas,líneasycurvasqueformanbuclesplanoscerrados.Simásdedoscurvascompartenunpuntofinal,puedequelaregiónresultanteseaarbitraria.Porestarazón,esposiblequealgunasregionesenrealidadsecreencuandoseutiliceelmétodoAddRegion.Utiliceunavariantequecontengalareciéncreadamatrizderegiones.
PuedecalculareltotaldeobjetosderegióncreadosmediantelasfuncionesUBoundyLBounddeVBA,comoilustraelsiguienteejemplo:
UBound(objRegions)-LBound(objRegions)+1
dondeobjRegionsesunvariantequecontieneelvalorderetornodeAddRegion.Estainstruccióncalculaelnúmerototalderegionescreadas.
Creacióndeunaregiónsimple
Elcódigodelejemplosiguientecreaunaregiónapartirdeuncírculo.
SubCh4_CreateRegion()
'Defineanarraytoholdthe
'boundariesoftheregion.
Dimcurves(0To0)AsAcadCircle
'Createacircletobecomea
'boundaryfortheregion.
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2
center(1)=2
center(2)=0
radius=5#
Setcurves(0)=ThisDrawing.ModelSpace.AddCircle_
(center,radius)
'Createtheregion
DimregionObjAsVariant
regionObj=ThisDrawing.ModelSpace.AddRegion(curves)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Trabajoconregiones>
Creaciónderegionescompuestas
Sepuedencrearregionescompuestasmediantelasustracción,combinaciónolocalizacióndelaintersecciónderegionesosólidos3D.Acontinuación,sepuedenextruirogirarlasregionescompuestasparacrearsólidoscomplejos.Paracrearunaregióncompuesta,utiliceelmétodoBoolean.
Cuandosesustraeunaregióndeotra,sellamaalmétodoBooleandesdelaregiónprimera.Estaeslaregióndelaquedeberealizarlasustracción.Porejemplo,sideseacalcularlosmetrosdealfombradoquenecesitaparaunsuelo,llamealmétodoBooleandesdeelcontornoexteriordelsueloyutilicelaszonasquenoiráncubiertasconmoqueta,comoeselcasodelespacioqueocupanlascolumnasolosmostradores,comoobjetodelalistadeparámetrosdeBoolean.
Creacióndeunaregióncompuesta
SubCh4_CreateCompositeRegions()
'Createtwocircles,onerepresentingaroom,
'theotherapillarinthecenteroftheroom
DimRoomObjects(0To1)AsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=4
center(1)=4
center(2)=0
radius=2#
SetRoomObjects(0)=ThisDrawing.ModelSpace._
AddCircle(center,radius)
radius=1#
SetRoomObjects(1)=ThisDrawing.ModelSpace._
AddCircle(center,radius)
'Createaregionfromthetwocircles
DimregionsAsVariant
regions=ThisDrawing.ModelSpace.AddRegion(RoomObjects)
'Copytheregionsintotheregionvariablesforeaseofuse
DimRoundRoomObjAsAcadRegion
DimPillarObjAsAcadRegion
Ifregions(0).Area>regions(1).AreaThen
'Thefirstregionistheroom
SetRoundRoomObj=regions(0)
SetPillarObj=regions(1)
Else
'Thefirstregionisthepillar
SetPillarObj=regions(0)
SetRoundRoomObj=regions(1)
EndIf
'Subtractthepillarspacefromthefloorspaceto
'getaregionthatrepresentsthetotalcarpetarea.
RoundRoomObj.BooleanacSubtraction,PillarObj
'UsetheAreapropertytodeterminethetotalcarpetarea
MsgBox"Thecarpetareais:"&RoundRoomObj.Area
EndSub
CalculeeláreadelaregiónresultanteconlapropiedadArea.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Trabajoconregiones>
Uniónderegiones
Paraunificarregiones,llamealmétodoBooleaneintroduzcaenlaoperaciónlaconstanteacUnionenlugardeacSubtraction.Puedecombinarencualquierordenlasregionesquedeseeunir.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Trabajoconregiones>
Cálculodelainterseccióndedosregiones
Paralocalizarlainterseccióndedosregiones,seutilizalaconstanteacIntersection.Puedecombinarencualquierordenlasregionesquedeseeintersectar.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>
Creacióndesombreados
Elsombreadorellenaunáreaprecisadeundibujoconunpatrón.
Alcrearunsombreado,eláreaquedeberellenarsenoseespecificaalprincipio.PrimerodebecrearelobjetoHatch(desombreado).Unavezhechoesto,puedeespecificarelbucleexterior,queeselcontornomásexternodelsombreado.Puedecontinuarespecificandocualquierbucleinternoqueexistaenelsombreado.
Paraobtenermásinformaciónacercadelossombreados,véase“Introducciónalospatronesdesombreadoylosrellenos”enelManualdelusuario.
CreacióndeobjetosHatchAsociacióndesombreadosAsignacióndenombreytipodelpatróndesombreadoDefinicióndecontornosdesombreado
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Creacióndesombreados>
CreacióndeobjetosHatch
CuandocreeunobjetoHatch,especifiqueeltipodelpatróndesombreado,elnombredelpatróndesombreadoylaasociatividad.UnavezcreadoelobjetoHatch,nopodrácambiarsuasociatividad.
ParacrearunobjetoHatch,utiliceelmétodoAddHatch.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Creacióndesombreados>
Asociacióndesombreados
Sepuedencrearsombreadosasociativosynoasociativos.Lossombreadosasociativossevinculanasuscontornosyseactualizanalmodificaréstos.Lossombreadosnoasociativossonindependientesdesuscontornos.
Laasociatividadsólopuedeestablecersealcrearelsombreado.Unavezcreadoelsombreado,suasociatividadpuederomperse,peronopuedevolverseaasociar.
Parahacerqueunsombreadoseaasociativo,definaelparámetroAssociativitydelmétodoAddHatchcomoTRUE.Paraquenoseaasociativo,definaelparámetroAssociativitydelmétodoAddHatchcomoFALSE.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Creacióndesombreados>
Asignacióndenombreytipodelpatróndesombreado
AutoCADproporcionaunrellenosólidoymásdecincuentapatronesdesombreadoestándar.Lospatronesdesombreadoresaltanunacaracterísticaparticularounáreadeterminadadeldibujo.Lospatronespueden,porejemplo,ayudaradiferenciarloscomponentesdeunobjeto3Dorepresentarlosmaterialesdelosqueestáhecho.
PuedeaplicarunpatrónsuministradoporAutoCADotomarunodeunabibliotecaexternadepatrones.ParaverunatabladelospatronesdesombreadosuministradosconAutoCAD,véaselaListadecomandosdeAutoCAD
Paraespecificarunpatrónconcreto,alcrearelobjetoHatchindiqueuntipoyunnombredepatrón.Eltipodepatrónindicadóndelocalizarelnombredelpatrón.Cuandointroduzcaeltipodepatrón,utiliceunadelassiguientesconstantes:
acHatchPatternTypePredefined
Seleccionaelnombredelpatrónentrelosdefinidosenelarchivoacad.pat.
acHatchPatternTypeUserDefined
Defineunpatróndelíneasqueutilizaeltipodelíneaactual.
acHatchPatternTypeCustomDefined
SeleccionaelnombredelpatrónenunarchivoPATquenoesacad.pat.
Cuandoindiqueelnombredelpatrón,utiliceunnombreválidoparaelarchivoespecificadoporeltipodepatrón.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Creacióndeobjetos>Creacióndesombreados>
Definicióndecontornosdesombreado
UnavezcreadoelobjetoHatch,puedeañadirleloscontornos.Uncontornopuedesercualquiercombinacióndelíneas,arcos,círculos,polilíneas2D,elipses,splinesyregiones.
Elprimercontornoañadidodebeserelexterior,quedefineloslímitesexternosqueserellenaránconelsombreado.Paraagregarelcontornoexterior,utiliceelmétodoAppendOuterLoop.
Unavezdefinidoelcontornoexterior,puedeañadirlosinteriores.AgreguecontornosinterioresconelmétodoAppendInnerLoop.
Loscontornosinterioresdefinenislasdentrodelsombreado,queelobjetoHatchmanejasegúnlosparámetrosdelapropiedadHatchStyle.LapropiedadHatchStylepuededefinirseconunadelassiguientescondiciones:
Definicionesdeestilosdesombreado
HatchStyle Condición Descripción
Normal Especificaelestiloestándaronormal.Estaopciónsombreaelinteriordesdeelcontornodeláreamásexterior.SiAutoCADencuentrauncontornointerno,desactivaelsombreadohastaqueencuentraotrocontorno.Esteeselvalor
pordefectodelapropiedadHatchStyle.
Exterior Rellenasolamentelasáreasmásexternas.Esteestilosombreatambiénelinteriordesdeelcontornodelárea,perodesactivaelsombreadosiencuentrauncontornointernoynolovuelveaactivar.
Ignorar Ignoralaestructurainterna.Estaopciónsombreatodoslosobjetosinternos.
Unavezterminadaladefinicióndelsombreado,debeevaluarseantesdequepuedaverse.UtiliceparaelloelmétodoEvaluate.
CreacióndeunobjetoHatch
Esteejemplocreaunsombreadoasociadoenespaciomodelo.Unavezcreado,puedecambiareltamañodelcírculoconelqueestáasociadoelsombreado.Elsombreadocambiaparaadaptarsealtamañodelcírculoactual.
SubCh4_CreateHatch()
DimhatchObjAsAcadHatch
DimpatternNameAsString
DimPatternTypeAsLong
DimbAssociativityAsBoolean
'Definethehatch
patternName="ANSI31"
PatternType=0
bAssociativity=True
'CreatetheassociativeHatchobject
SethatchObj=ThisDrawing.ModelSpace.AddHatch_
(PatternType,patternName,bAssociativity)
'Createtheouterboundaryforthehatch.(acircle)
DimouterLoop(0To0)AsAcadEntity
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=3:center(1)=3:center(2)=0
radius=1
SetouterLoop(0)=ThisDrawing.ModelSpace._
AddCircle(center,radius)
'Appendtheouterboundarytothehatch
'object,anddisplaythehatch
hatchObj.AppendOuterLoop(outerLoop)
hatchObj.Evaluate
ThisDrawing.RegenTrue
EndSub
¿Comentarios?
<$startrange>conjuntosdeselección:filtros(listas),<$startrange>filtros(listas),<$startrange>filtrar:conjuntosdeselección,DXF(códigos),ytiposdefiltros(tabla),filtros(tipos),ycódigosDXF(tabla),<$startrange>filtros(listas):códigodeejemplo,SelectionSet(objeto):códigodeejemplo,filtrar:códigodeejemplo,<$endrange>conjuntosdeselección:filtros(listas),<$endrange>filtros(listas),<$endrange>filtrar:conjuntosdeselección,<$endrange>filtros(listas):códigodeejemplo,conjuntosdeselección:eliminarobjetos,objetos:eliminardeconjuntosdeselección,RemoveItems(método):enconjuntosdeselección,Clear(método):enconjuntosdeselección,Erase(método):enconjuntosdeselección,Delete(método):enconjuntosdeselección,">
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>
Trabajoconconjuntosdeselección
Unconjuntodeselecciónpuedeserunúnicoobjeto,opuedecontenerunagrupamientocomplejo:porejemplo,elconjuntodeobjetosdeunacapadeterminada.
Elprocesodedefinicióndeunconjuntodeselecciónconstadedospasos.Enprimerlugar,debecrearunconjuntodeselecciónnuevoyañadirloalacolecciónSelectionSets.Acontinuación,debellenarelconjuntodeselecciónconlosobjetosquedeseeprocesar
CreacióndeconjuntosdeselecciónAdicióndeobjetosaconjuntosdeselecciónDefinicióndenormasparaconjuntosdeselecciónPresentacióndeinformaciónsobreunconjuntodeselecciónEliminacióndeobjetosdeunconjuntodeselección
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>
Creacióndeconjuntosdeselección
Paracrearunconjuntodeselecciónconnombre,utiliceelmétodoAdd.Estemétodorequierelaentradadeunsoloparámetro:elnombredelconjuntodeselección.
Siyaexisteunconjuntodeseleccióndelmismonombre,AutoCADpresentaunmensajedeerror.Esunabuenaprácticadeprogramaciónborrarlosconjuntosdeselecciónencuantodejendesernecesarios.UtiliceelmétodoDelete,comoenelsiguienteejemplo,paraborrarlos:
ThisDrawing.SelectionSets.Item("NewSelectionSet").Delete
Creacióndeunconjuntodeselecciónvacío
Esteejemplocreaunconjuntodeselecciónnuevo.
SubCh4_CreateSelectionSet()
DimselectionSet1AsAcadSelectionSet
SetselectionSet1=ThisDrawing.SelectionSets._
Add("NewSelectionSet")
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>
Adicióndeobjetosaconjuntosdeselección
Sepuedenañadirobjetosalconjuntodeselecciónactivomedianteunodelossiguientesmétodos:
AddItems
Añadeunoomásobjetosalconjuntodeselecciónindicado.
Select
Seleccionaobjetosyloscolocaenelconjuntodeselecciónactivo.Sepuedenseleccionartodoslosobjetos,losobjetosincluidosoqueatraviesanunárearectangularopoligonal,todoslosobjetosqueatraviesanunbordedeselección,elobjetocreadoenúltimolugar,losobjetosdelconjuntodeselecciónmásreciente,losobjetosdeunaventanaolosqueestánincluidosenunpolígonodeventana.
SelectAtPoint
Seleccionalosobjetosquepasanmásalládeunpuntodeterminadoyloscolocaenelconjuntodeselecciónactivo.
SelectByPolygon
Seleccionalosobjetosqueencierraunbordeylosincluyeenelconjuntodeselecciónactivo.
SelectOnScreen
Solicitaalusuarioquedesigneobjetosdelapantallaylosañadaalconjuntodeselecciónactivo.
Adicióndeobjetosdesignadosaunconjuntodeselección
Esteejemplosolicitaalusuarioqueseleccioneobjetos,paradespuésañadirlosal
conjuntodeselección.
SubCh4_AddToASelectionSet()
'Createanewselectionset
DimssetAsAcadSelectionSet
Setsset=ThisDrawing.SelectionSets.Add("SS1")
'Prompttheusertoselectobjects
'andaddthemtotheselectionset.
'Tofinishselecting,pressINTRO.
sset.SelectOnScreen
EndSub
¿Comentarios?
<$startrange>conjuntosdeselección:filtros(listas),<$startrange>filtros(listas),<$startrange>filtrar:conjuntosdeselección,DXF(códigos),ytiposdefiltros(tabla),filtros(tipos),ycódigosDXF(tabla),<$startrange>filtros(listas):códigodeejemplo,SelectionSet(objeto):códigodeejemplo,filtrar:códigodeejemplo,<$endrange>conjuntosdeselección:filtros(listas),<$endrange>filtros(listas),<$endrange>filtrar:conjuntosdeselección,<$endrange>filtros(listas):códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>
Definicióndenormasparaconjuntosdeselección
Puedelimitarlosconjuntosdeselecciónporpropiedadoportipodeobjetoutilizandolistasdefiltros.Porejemplo,puedecopiarsolamentelosobjetosazulesenundibujodeunaplacadecircuitos,osolamentelosobjetosdeunacapadeterminada.Tambiénpuedecombinarloscriteriosdeseleccióndeunalistadefiltros.Porejemplo,puedeindicaraAutoCADqueincluyaunobjetoenunaselecciónsolosisetratadeuncírculoazulenunacapaespecífica.SepuedenespecificarlistasdefiltrosparalosmétodosSelect,SelectAtPoint,SelectByPolygon,ySelectOnScreen.
Nota Elprocesodefiltradoidentificatansólolostiposdelíneaquehayansidoasignadosexplícitamenteaobjetos,noaquéllosquehayansidoheredadosporlacapa.
UsodelistasdefiltrosparadefinirnormasdeconjuntosdeselecciónEspecificacióndevarioscriteriosenunalistadefiltrosdeunconjuntodeselecciónAdicióndecondicionesalalistadefiltrosUsodepatronescomodínenloscriteriosdefiltrosdeconjuntosdeselecciónFiltroparadatosextendidos
¿Comentarios?
<$startrange>filtros(listas):códigodeejemplo,SelectionSet(objeto):códigodeejemplo,filtrar:códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>
Usodelistasdefiltrosparadefinirnormasdeconjuntosdeselección
Laslistasdefiltrossecomponendeparejasdeargumentos.Elprimerargumentorepresentaeltipodefiltro(unobjeto,porejemplo),yelsegundoargumentoespecificaelvalorqueseestáfiltrando(círculos,porejemplo).EltipodefiltroconsisteenuncódigodegrupoDXFqueindicaeltipodefiltroqueseaplicará.Acontinuaciónsepresentanlostiposdefiltroquemásseutilizan.
CódigosDXFparafiltroscomunes
CódigoDXF Tipodefiltro
0 Tipodeobjeto(cadena)Como“Line,”“Circle,”“Arc”etc.
2 Nombredeobjeto(cadena)Elnombredetabla(asignado)deunobjetoguardado.
8 Nombredecapa(cadena)Como“Layer0.”.
60 Visibilidaddelobjeto(entero)
Use0=visible,1=invisible.
62 Númerodecolor(entero)Valoresdeíndicenuméricosdesdeel0al256.CeroindicaBAYBLOCK.256indicaBALAYER.Unvalornegativoindicaquelacapaestádesactivada.
67 Indicadordeespaciomodelo/papel(entero)0uomisión=espaciomodelo,1=espaciopapel.
ParaobtenerunalistacompletadeloscódigosdegrupoDXF,véaseTiposdevaloresdecódigosdegrupoenelDXFReference.
Losargumentosdelosfiltrossedeclarancomomatrices.Eltipodefiltrosedeclaracomoenteroyelvalordefiltroesunavariante.Cadatipodefiltrodebeteneremparejadounvalordefiltro.Porejemplo:
FilterType(0)=0'Indicatesfilterreferstoanobjecttype
FilterData(0)="Circle"'Indicatestheobjecttypeis"Circle"
Especificacióndeunsolocriteriodeselecciónparaunconjuntodeselección
Elsiguientecódigosolicitaalusuarioqueseleccionelosobjetosquedebeincluirunconjuntodeselección,perosólolosañadesisetratadeunobjetoCircle:
SubCh4_FilterMtext()
DimsstextAsAcadSelectionSet
DimFilterType(0)AsInteger
DimFilterData(0)AsVariant
Setsstext=ThisDrawing.SelectionSets.Add("SS2")
FilterType(0)=0
FilterData(0)="Circle"
sstext.SelectOnScreenFilterType,FilterData
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>
Especificacióndevarioscriteriosenunalistadefiltrosdeunconjuntodeselección
Paraespecificarvarioscriteriosdeselección,declareunamatrizquecontengaelementossuficientespararepresentarcadacriterio,yasigneuncriterioacadaelemento.
Seleccióndeobjetosquecumplentrescriterios
Elcódigosiguienteespecificadoscriterios:elobjetodebeseruncírculo,ydeberesidirenlacapa0.ElcódigodeclaraFilterTypeyFilterDatacomomatricesdedoselementosyasignacadacriterioaunelemento:
SubCh4_FilterBlueCircleOnLayer0()
DimsstextAsAcadSelectionSet
DimFilterType(1)AsInteger
DimFilterData(1)AsVariant
Setsstext=ThisDrawing.SelectionSets.Add("SS4")
FilterType(0)=0
FilterData(0)="Circle"
FilterType(1)=8
FilterData(1)="0"
sstext.SelectOnScreenFilterType,FilterData
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>
Adicióndecondicionesalalistadefiltros
Cuandoseespecificanvarioscriteriosdeselección,AutoCADsuponequeelobjetoseleccionadodebecumplirtodosellos.Loscriterios,noobstante,puedencalificarsedeotrasformas.Encuantoaloselementosnuméricos,sepuedenespecificaroperacionesrelacionales(porejemplo,queelradiodeuncírculoseamayoroigualque5.0).Paratodosloselementos,sepuedenespecificaroperacioneslógicas(porejemplo,TextoMtext).
Paraindicarunoperadorrelacionalenladefinicióndelfiltro,utiliceuncódigoDXFde-4.Especifiqueeloperadorcomocadena.Enlasiguientetablasemuestranlosoperadoresrelacionalesquepuedenutilizarse.
Operadoresrelacionalesparalaslistasdefiltrosdeconjuntosdeselección
Operador Descripción
"*" Comodíngenérico(siempreverdadero)
"=" Iguala
"!=" Distintode
"/=" Distintode
"<>" Distintode
"<" Menorque
"<=" Menoroigualque
">" Mayorque
">=" Mayoroigualque
"&" ANDbinario(sologruposdeenteros)
"&=" Iguala,conmáscarabinaria(sologruposdeenteros)
Losoperadoreslógicosdelaslistasdefiltrostambiénseindicanconuncódigodegrupo–4ydebenserunacadena,perotienenqueestaremparejados.Eloperadordeaperturavaprecedidodeunsímbolodemenorque(<),yeldecierredeunsímbolodemayorque(>).Enlasiguientetablasemuestranlosoperadoreslógicosquepuedenutilizarse.
Operadoresdeagrupamientológicosparalaslistasdefiltrosdeconjuntosdeselección
Operadorinicial
operadorEncierra
Ending
operador
"<AND" Unoomásoperandos
"AND>"
"<OR" Unoomásoperandos
"OR>"
"<XOR" Dosoperandos "XOR>"
"<NOT" Unoperando "NOT>"
Seleccióndeuncírculocuyoradioseamayoroigualque5.0.
Elsiguientecódigoindicaqueelobjetoseleccionadodebeseruncírculocuyoradioseamayoroigualque5.0:
SubCh4_FilterRelational()
DimsstextAsAcadSelectionSet
DimFilterType(2)AsInteger
DimFilterData(2)AsVariant
Setsstext=ThisDrawing.SelectionSets.Add("SS5")
FilterType(0)=0
FilterData(0)="Circle"
FilterType(1)=-4
FilterData(1)=">="
FilterType(2)=40
FilterData(2)=5#
sstext.SelectOnScreenFilterType,FilterData
EndSub
SeleccióndeTextoMtext
EnelsiguienteejemploseespecificaquesepuedanseleccionarobjetosTextoMtext:
SubCh4_FilterOrTest()
DimsstextAsAcadSelectionSet
DimFilterType(3)AsInteger
DimFilterData(3)AsVariant
Setsstext=ThisDrawing.SelectionSets.Add("SS6")
FilterType(0)=-4
FilterData(0)="<or"
FilterType(1)=0
FilterData(1)="TEXT"
FilterType(2)=0
FilterData(2)="MTEXT"
FilterType(3)=-4
FilterData(3)="or>"
sstext.SelectOnScreenFilterType,FilterData
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>
Usodepatronescomodínenloscriteriosdefiltrosdeconjuntosdeselección
Losnombresdesímbolosycadenasdelaslistasdefiltrospuedenincluirpatronescomodín.
EnlasiguientetablaseincluyenloscaracterescomodínquereconoceAutoCADysufunciónenelcontextodeunacadena:
Caracterescomodín
Carácter Descripción
#
(almohadilla)Equivaleacualquiernúmerodeunasolacifra.
@(arroba) Equivaleacualquiercarácteralfabético(solouno).
.(punto) Equivaleacualquiercarácternoalfanumérico.
*(asterisco) Equivaleacualquiersecuenciadecaracteres,incluidaslassecuenciasvacías,ypuedeutilizarseencualquierlugardelpatróndebúsqueda:alprincipio,medioofinal
?(signodeinterrogación)
Equivaleacualquiercarácter(solouno).
~(tilde) Cuandoeselprimercarácterdelpatrón,equivaleacualquiercarácterdistintodelpatrón.
[...] Equivaleacualquieradeloscaracteresincluidos.
[~...] Equivaleacualquiercarácternoincluido(unosolo).
-(guión) Seutilizaentreparéntesisparaespecificarunrangodeunsolocarácter.
,(coma) Separadospatrones.
`(comillainversa)
Omiteloscaracteresespeciales(leeelcaráctersiguiente).
Utilicelacomillasimple(`)paraindicarqueuncarácternosedebetratarcomocomodín,sinocomocarácterliteral.Porejemplo,paraestablecerqueelconjuntodeselecciónsoloincluyaunbloqueanónimodenominado“*U2”,utilicelossiguientesargumentosdefiltro:
FilterType(0)=2
FilterData(0)="`*U2"
SeleccióndeMtextdondeaparezcaunapalabraespecíficaeneltexto
ElsiguientecódigodefineloscriteriosdeseleccióncomocualquierMtextcuyacadenadetextocontengalapalabra“La”.EnesteejemplosemuestratambiénelusodelmétododeselecciónSelectByPolygon:
SubCh4_FilterPolygonWildcard()
DimsstextAsAcadSelectionSet
DimFilterType(1)AsInteger
DimFilterData(1)AsVariant
DimpointsArray(0To11)AsDouble
DimmodeAsInteger
mode=acSelectionSetWindowPolygon
pointsArray(0)=-12#:pointsArray(1)=-7#:pointsArray(2)=0
pointsArray(3)=-12#:pointsArray(4)=10#:pointsArray(5)=0
pointsArray(6)=10#:pointsArray(7)=10#:pointsArray(8)=0
pointsArray(9)=10#:pointsArray(10)=-7#:pointsArray(11)=0
Setsstext=ThisDrawing.SelectionSets.Add("SS10")
FilterType(0)=0
FilterData(0)="MTEXT"
FilterType(1)=1
FilterData(1)="*La*"
sstext.SelectByPolygonmode,pointsArray,FilterType,FilterData
EndSub
¿Comentarios?
<$endrange>conjuntosdeselección:filtros(listas),<$endrange>filtros(listas),<$endrange>filtrar:conjuntosdeselección,<$endrange>filtros(listas):códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>Definicióndenormasparaconjuntosdeselección>
Filtroparadatosextendidos
Sepuedenutilizaraplicacionesexternasparaasociardatostalescomocadenasdetexto,valoresnuméricos,puntos3D,distanciasynombresdecapaaobjetosdeAutoCAD.EstossonlosdenominadosdatosextendidosodatoseX.Sepuedencrearfiltrosdeentidadesquecontengandatosextendidosdeunaaplicaciónespecífica.
Paraobtenermásinformaciónacercadelosdatosextendidos,véaseFiltroparadatosextendidos.
Seleccióndecírculosquecontienendatosextendidos
Enelsiguienteejemplo,sefiltranloscírculosquecontienendatosextendidosprocedentesdelaaplicación“MI_APL”.
SubCh4_FilterXdata()
DimsstextAsAcadSelectionSet
DimmodeAsInteger
DimpointsArray(0To11)AsDouble
mode=acSelectionSetWindowPolygon
pointsArray(0)=-12#:pointsArray(1)=-7#:pointsArray(2)=0
pointsArray(3)=-12#:pointsArray(4)=10#:pointsArray(5)=0
pointsArray(6)=10#:pointsArray(7)=10#:pointsArray(8)=0
pointsArray(9)=10#:pointsArray(10)=-7#:pointsArray(11)=0
DimFilterType(1)AsInteger
DimFilterData(1)AsVariant
Setsstext=ThisDrawing.SelectionSets.Add("SS9")
FilterType(0)=0
FilterData(0)="Circle"
FilterType(1)=1001
FilterData(1)="MI_APL"
sstext.SelectByPolygonmode,pointsArray,FilterType,FilterData
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>
Presentacióndeinformaciónsobreunconjuntodeselección
Sideseareferirseaunconjuntodeseleccióncuyonombreconoce,utilicesunombre.Enelsiguienteejemplo,sehacereferenciaaunconjuntodeseleccióndenominado“SS10”:
SubGetObjInSet()
DimselsetAsAcadSelectionSet
Setselset=ThisDrawing.SelectionSets("SS10")
MsgBox("Selectionset"&selset.Name&"contains"&_
selset.Count&"items")
EndSub
LosconjuntosdeseleccióndeundibujosonmiembrosdelacolecciónSelectionSets.SepuedeutilizarlainstrucciónForEachparaiterarentodalacolecciónSelectionSetsdeundibujoyrecogerinformaciónacercadecadaconjunto.
Presentacióndelnombredelosconjuntosdeseleccióndeundibujo
Elsiguientecódigomuestraelnombredetodoslosconjuntosdeseleccióndeundibujo,juntoconeltipodelosobjetosincluidosencadauno.
SubListSelectionSets()
DimselsetCollectionAsAcadSelectionSets
DimselsetAsAcadSelectionSet
DimentAsObject
Dimi,jAsInteger
SetselsetCollection=ThisDrawing.SelectionSets
'Findeachselectionsetinthedrawing
i=0
ForEachselsetInselsetCollection
MsgBox"Selectionset"&CStr(i)&"is:"&selset.Name
'Nowfindeachobjectintheselectionset,andsaywhatitis
j=0
ForEachentInselset
MsgBox"Item"&CStr(j+1)&"in"&selset.Name_
&"is:"&ent.EntityName
j=j+1
Next
i=i+1
Next
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Trabajoconconjuntosdeselección>
Eliminacióndeobjetosdeunconjuntodeselección
Unavezcreadounconjuntodeselección,puedeoptarporeliminaralgunosdelosobjetosdelconjuntootodoslosquelocomponen.Porejemplo,puedeseleccionarungrupocompletodeobjetostorpementeagrupadosyeliminaralgunosobjetosconcretosdelgrupo,dejandosóloaquéllosquedeseaqueformenpartedelconjunto.
Paraeliminarelementosdelconjuntodeselección,utilicelossiguientesmétodos:
RemoveItems
ElmétodoRemoveItemseliminaunoomáselementosdelconjuntodeselección.Loselementoseliminadossiguenexistiendo,aunqueyanoresidanenelconjuntodeselección.
Clear
ElmétodoClearvacíaelconjuntodeselección.Elconjuntodeselecciónsigueexistiendo,perosinelementos.Loselementosqueresidíanenelconjuntodeselecciónsiguenexistiendo,peroyanoresidenenél.
Erase
ElmétodoEraseborratodosloselementosdeunconjuntodeselección.Elconjuntodeselecciónsigueexistiendo,perosinelementos.Loselementosqueresidíanenelconjuntodeselecciónyanoexisten.
Delete
ElmétodoDeletesuprimeunconjuntodeselecciónytodosloselementosquelocomponen.TrasunallamadaalmétodoDelete,tantoelconjuntodeseleccióncomoloselementosqueincluíadejandeexistir.
¿Comentarios?
<$nopage>matriz:
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>
Modificacióndeobjetos
Paramodificarunobjetoexistente,puedeutilizarlosmétodosylaspropiedadesquetieneasociados.Simodificaunapropiedadvisibledeunobjetográfico,utiliceelmétodoUpdateparavolveradibujarloenlapantalla.
Enestasecciónsedescribecómoeditarobjetos2D.ObjetosguardadosCopiadeobjetosDesfasedeobjetosReflexiónensimetríadeobjetosDisposicióndeobjetosenmatricesDesplazamientodeobjetosRotacióndeobjetosSupresióndeobjetosAplicarunaescalaalosobjetosTransformacióndeobjetosAlargamientoyrecortedeobjetosDescomposicióndeobjetosEdicióndepolilíneasModificacióndesplinesEdicióndesombreados
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Objetosguardados
AdemásdelosobjetosgráficosqueutilizaAutoCAD,enlosarchivosdedibujosealmacenantambiénotrostiposdeobjetosnográficos.Estosobjetostienendesignacionesdescriptivasasociadas,comosonlosbloques,capas,gruposyestilosdecotas.Enlamayoríadeloscasos,alosobjetosselesasignaunnombrecuandosecrean,yselescambiamásadelante.Losnombressealmacenanentablasdesímbolos.Cuandoseespecificaunobjetoguardado,sehacereferenciaalnombreyalosdatosasociadosdelobjetoquefiguraenlatabladesímbolos.
LimpiezadeobjetosguardadosCambiodenombredelosobjetos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Objetosguardados>
Limpiezadeobjetosguardados
Puedelimpiareldibujodeobjetosnoutilizadosnireferenciadosencualquiermomentodeunasesióndeedición.Lalimpiezareduceeltamañodeldibujo.Ahorabien,noesposiblelimpiarlosobjetosalosquesehacereferenciadesdeotrosobjetos.Porejemplo,unarchivodetiposdeletrapuedeserreferenciadoporunestilodetexto.Alascapashacenreferenciasuspropiosobjetos.
Paralimpiarundibujo,utiliceelmétodoPurgeAll,comoseindicaacontinuación:
ThisDrawing.PurgeAll
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Objetosguardados>
Cambiodenombredelosobjetos
Amedidaquelosdibujossehacenmáscomplicados,esaconsejablecambiarelnombredelosobjetosparafacilitarsuidentificaciónyevitarconflictosconlosnombresutilizadosendibujosinsertados.
SepuedecambiarelnombredecualquierobjetoguardadoexceptodeaquellosqueAutoCADdenominapordefecto,comolacapa0oeltipodelíneaCONTINUOUS.
Losnombrespuedentenerunalongituddehasta255caracteres.Ademásdeletrasynúmeros,puedencontenerespacios(aunqueAutoCADeliminalosespaciosalprincipioyalfinaldelosnombres)ycualquiercarácterespecialquenoseutiliceenMicrosoftWindowsoAutoCADparaotrosfines.Entreloscaracteresespecialesquenopuedenutilizarseseincluyenlossímbolosdemayorymenorque(<>),barrasoblicuasycontrabarras(/\),comillas("),signosdedospuntos(:),signosdepuntoycoma(;),signosdeinterrogación(?),comas(,),asteriscos(*),barrasverticales(|),signosdeigual(=)ycomillassimples(').TampocopuedenutilizarsecaracteresespecialescreadoscontiposdeletraUnicode.
Paracambiardenombreunobjeto,utilicelapropiedadNamedelobjeto.
Cambiodenombredecapas
Enesteejemplosecreaunacapadenominada“NewLayer”yacontinuaciónsecambiasunombrea“MyLayer”.
SubCh4_RenamingLayer()
'Createalayer
DimlayerObjAsAcadLayer
SetlayerObj=ThisDrawing.Layers.Add("NewLayer")
'Changethenameofthelayer
layerObj.Name="MyLayer"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Copiadeobjetos
Sepuedecopiarunoovariosobjetosdentrodeldibujoactivo.Aldesfasarobjetossecreanotrosnuevosaunadistanciaespecíficarespectoalosobjetosdesignadosoatravésdeunpuntoespecífico.Lafuncióndesimetríacreaunaimagensimétricadelosobjetosenunejedesimetríadefinido.Ladisposicióndelosobjetoscopiadosenformadematrizcreaconjuntosdecopiasenunpatróncircularorectangular.
Paraobtenerinformaciónacercadelacopiadeobjetos,véase“Copia,desfaseyreflejodeobjetos”enelManualdelusuario.
Nota Losmétodosdecopianosepuedenutilizarmientrasserealizaunaiteraciónenunacolección.Unaiteraciónabreelespaciodetrabajoparaunaoperacióndesólolecturaalavezqueestosmétodosintentanrealizarunaoperacióndelectura/escritura.Terminecualquieriteracióndeunacolecciónantesdellamaraestosmétodos.
CopiadeobjetosenlamismaubicaciónCopiadevariosobjetos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Copiadeobjetos>
Copiadeobjetosenlamismaubicación
Paracopiarunobjeto,utiliceelmétodoCopydelmismoobjeto.Estemétodocreaunobjetonuevoqueseráunduplicadodeloriginal.Elobjetonuevosesitúaenlamismaposiciónqueeloriginalyeselresultadodelmétodo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Copiadeobjetos>
Copiadevariosobjetos
Paracopiarvariosobjetos,utiliceelmétodoCopyObjectsobiencreeunamatrizdeobjetosparautilizarlaconelmétodoCopy.(paracopiarlosobjetosdeunconjuntodeselección,itereenelconjuntodeselecciónyguardelosobjetosenunamatriz).Itereenlamatriz,copiandocadaobjetoporseparado,yreúnaenunasegundamatrizlosobjetosreciéncreados.
Paracopiarvariosobjetosenundibujodistinto,utiliceelmétodoCopyObjectsyajusteelparámetroOwnerenelespaciomodelodeldibujo.
Copiadedosobjetoscirculares
Enesteejemplo,secreandosobjetosdecírculoyseutilizaelmétodoCopyObjectsparacrearunacopiadelosmismos.
SubCh4_CopyCircleObjects()
DimDOC1AsAcadDocument
DimcircleObj1AsAcadCircle
DimcircleObj2AsAcadCircle
DimcircleObj1CopyAsAcadCircle
DimcircleObj2CopyAsAcadCircle
DimcenterPoint(0To2)AsDouble
Dimradius1AsDouble
Dimradius2AsDouble
Dimradius1CopyAsDouble
Dimradius2CopyAsDouble
DimobjCollection(0To1)AsObject
DimretObjectsAsVariant
'DefinetheCircleobject
centerPoint(0)=0:centerPoint(1)=0:centerPoint(2)=0
radius1=5#:radius2=7#
radius1Copy=1#:radius2Copy=2#
'Createanewdrawing
SetDOC1=ThisDrawing.Application.Documents.Add
'Addtwocirclestothedrawing
SetcircleObj1=DOC1.ModelSpace.AddCircle_
(centerPoint,radius1)
SetcircleObj2=DOC1.ModelSpace.AddCircle_
(centerPoint,radius2)
ZoomAll
'Puttheobjectstobecopiedintoaform
'compatiblewithCopyObjects
SetobjCollection(0)=circleObj1
SetobjCollection(1)=circleObj2
'Copyobjectandgetbackacollectionof
'thenewobjects(copies)
retObjects=DOC1.CopyObjects(objCollection)
'Getnewlycreatedobjectandapply
'newpropertiestothecopies
SetcircleObj1Copy=retObjects(0)
SetcircleObj2Copy=retObjects(1)
circleObj1Copy.radius=radius1Copy
circleObj1Copy.Color=acRed
circleObj2Copy.radius=radius2Copy
circleObj2Copy.Color=acRed
ZoomAll
EndSub
Copiadeobjetosenundibujodistinto
EsteejemplocreaobjetosCircleydespuésutilizaelmétodoCopyObjectsparacopiarloscírculosenundibujonuevo.
SubCh4_Copy_to_New_Drawing()
DimDOC0AsAcadDocument
DimcircleObj1AsAcadCircle,circleObj2AsAcadCircle
DimcenterPoint(0To2)AsDouble
Dimradius1AsDouble,radius2AsDouble
Dimradius1CopyAsDouble,radius2CopyAsDouble
DimobjCollection(0To1)AsObject
DimretObjectsAsVariant
'DefinetheCircleobject
centerPoint(0)=0:centerPoint(1)=0:centerPoint(2)=0
radius1=5#:radius2=7#
radius1Copy=1#:radius2Copy=2#
'Addtwocirclestothecurrentdrawing
SetcircleObj1=ThisDrawing.ModelSpace.AddCircle_
(centerPoint,radius1)
SetcircleObj2=ThisDrawing.ModelSpace.AddCircle_
(centerPoint,radius2)
ThisDrawing.Application.ZoomAll
'Savepointertothecurrentdrawing
SetDOC0=ThisDrawing.Application.ActiveDocument
'Copyobjects
'
'Firstputtheobjectstobecopiedintoaformcompatible
'withCopyObjects
SetobjCollection(0)=circleObj1
SetobjCollection(1)=circleObj2
'Createanewdrawingandpointtoitsmodelspace
DimDoc1MSpaceAsAcadModelSpace
DimDOC1AsAcadDocument
SetDOC1=Documents.Add
SetDoc1MSpace=DOC1.ModelSpace
'Copytheobjectsintothemodelspaceofthenewdrawing.A
'collectionofthenew(copied)objectsisreturned.
retObjects=DOC0.CopyObjects(objCollection,Doc1MSpace)
DimcircleObj1CopyAsAcadCircle,circleObj2CopyAsAcadCircle
'Getthenewlycreatedobjectcollectionandapplynew
'propertiestothecopies.
SetcircleObj1Copy=retObjects(0)
SetcircleObj2Copy=retObjects(1)
circleObj1Copy.radius=radius1Copy
circleObj1Copy.Color=acRed
circleObj2Copy.radius=radius2Copy
circleObj2Copy.Color=acRed
ThisDrawing.Application.ZoomAll
MsgBox"Circlescopied."
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Desfasedeobjetos
Eldesfasedeunobjetocreaunonuevoaunadistanciadedesfaseespecificadaconrespectoaloriginal.Sepuedendesfasararcos,círculos,elipses,líneas,polilíneas,polilíneasoptimizadas,splinesylíneasauxiliares.
Paradesfasarunobjeto,utiliceelmétodoOffsetdelobjeto.Laúnicaentradaquerequiereestemétodoesladistanciaalaquesedeseadesplazarelobjeto.Sielvalordeladistanciaesnegativo,AutoCADsuponequesepretendecrearunacurva“máspequeña”;unarco,porejemplo,sedesplazaríahastaunradiomenor(queseríaladistanciaproporcionada)queelradiodelacurvainicial.Si“máspequeña”notienesentido,AutoCADaplicaundesfaseenladireccióndelascoordenadasSCUX,Y,Zmáspequeñas.Siladistanciadedesfasenoesválida,devuelveunerror.
Enmuchosobjetos,estaoperacióntendrácomoresultadounanuevacurvasencilla(quepuedenoserdelmismotipoquelacurvaoriginal).Porejemplo,aldesfasarunaelipseseobtieneunasplineyaqueelresultadoseajustaalaecuacióndeunaelipse.Avecespuedesernecesarioqueelresultadodeldesfaseseanvariascurvas.Porestarazón,elmétododevuelveelnuevoobjeto,omatrizdeobjetos,comovariante.
Paraobtenerinformaciónacercadeldesfasedeobjetos,véase“Copia,desfaseyreflejodeobjetos”enelManualdelusuario.
Desfasedeunapolilínea
Esteejemplocreaunapolilíneaoptimizadaydespuésladesfasa.
SubCh4_OffsetPolyline()
'Createthepolyline
DimplineObjAsAcadLWPolyline
Dimpoints(0To11)AsDouble
points(0)=1:points(1)=1
points(2)=1:points(3)=2
points(4)=2:points(5)=2
points(6)=3:points(7)=2
points(8)=4:points(9)=4
points(10)=4:points(11)=1
SetplineObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
plineObj.Closed=True
ZoomAll
'Offsetthepolyline
DimoffsetObjAsVariant
offsetObj=plineObj.Offset(0.25)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Reflexiónensimetríadeobjetos
Elreflejodeobjetoscreaunacopiaqueeslaimagenreflejadadeunobjetoconrespectoaunejeolíneadesimetría.Sepuedenreflejartodoslosobjetosdedibujo.
Parareflejarunobjeto,utiliceelmétodoMirror.Estemétodorequierelaentradadedoscoordenadas.Lasdoscoordenadasespecificadasseconviertenenpuntosfinalesdelalíneadesimetríaalrededordelacualsereflejaelobjetodebase.En3D,estalíneaorientaunplanodesimetríaperpendicularalplanoXYdelSCPquecontieneunejedesimetríaespecificado.
AdiferenciadelcomandodesimetríadeAutoCAD,estemétodositúaeneldibujolaimagenreflejadaymantieneelobjetooriginal.Sideseaeliminarelobjetooriginal,utiliceelmétodoErase.
Paracontrolarlaspropiedadesdesimetríadeobjetosdetexto,utilicelavariabledesistemaMIRRTEXT.ElvalorpordefectodeMIRRTEXTesactivada(1),conelquelasimetríadelosobjetosdetextoseobtienecomoladelosdemásobjetos.CuandoMIRRTEXTestádesactivada(0),nosegeneranimágenessimétricasdetexto.UtilicelosmétodosGetVariableySetVariableparaconsultaryestablecerelparámetroMIRRTEXT.
Puedeobtenerunaimagensimétricadeunobjetodeventanagráficaenespacio
papel,aunqueellonoafectaalavistadelosobjetosenelespaciomodelonialosobjetosdedichoespacio.
Paraobtenerinformaciónacercadelreflejodeobjetos,véase“Copia,desfaseyreflejodeobjetos”enelManualdelusuario.
Reflexióndeunapolilíneaconrespectoauneje
Esteejemplocreaunapolilíneaoptimizadaylareflejaconrespectoaunejedesimetría.Lanuevapolilíneaesdecolorazul.
SubCh4_MirrorPolyline()
'Createthepolyline
DimplineObjAsAcadLWPolyline
Dimpoints(0To11)AsDouble
points(0)=1:points(1)=1
points(2)=1:points(3)=2
points(4)=2:points(5)=2
points(6)=3:points(7)=2
points(8)=4:points(9)=4
points(10)=4:points(11)=1
SetplineObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
plineObj.Closed=True
ZoomAll
'Definethemirroraxis
Dimpoint1(0To2)AsDouble
Dimpoint2(0To2)AsDouble
point1(0)=0:point1(1)=4.25:point1(2)=0
point2(0)=4:point2(1)=4.25:point2(2)=0
'Mirrorthepolyline
DimmirrorObjAsAcadLWPolyline
SetmirrorObj=plineObj.Mirror(point1,point2)
DimcolAsNewAcadAcCmColor
Callcol.SetRGB(125,175,235)
mirrorObj.TrueColor=col
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Disposicióndeobjetosenmatrices
ConAutoCADesposiblecopiarunobjetodispuestoenmatricespolaresorectangulares.Enelcasodelasmatricespolares,puedecontrolarelnúmerodecopiasdelobjetoyelánguloderellenodelamatriz.Encuantoalasmatricesrectangulares,puededeterminarelnúmerodefilasycolumnasyladistanciaquedebeexistirentreellas.
Paraobtenermásinformaciónacercadelasmatrices,“Creacióndeunamatrizdeobjetos”enelManualdelusuario.
CreacióndematricespolaresCreacióndematricesrectangulares
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Disposicióndeobjetosenmatrices>
Creacióndematricespolares
Sepuedendisponerenunamatriztodoslosobjetosdedibujo.Paracrearunamatrizpolar,utiliceelmétodoArrayPolardelobjeto.Estemétodorequierelaentradadelnúmerodeobjetosquesedeseancrear,losgradosdelánguloyelpuntocentraldelamatriz.Elnúmerodeobjetosdebeserunenteropositivomayorque1,yelánguloarellenardebecompletarseenradianes.Unvalorpositivoprecisaunarotaciónensentidocontrarioalasagujasdelreloj.Unvalornegativoprecisaunarotaciónenelsentidodelasagujasdelreloj.Unánguloiguala0devuelveunerror.Elcentroesunamatrizdevariantesquecontienetresdobles.Estosdoblesrepresentanlascoordenadas3DdelSCUqueindicanelcentrodelamatrizpolar
AutoCADdeterminaladistanciaentreelcentrodelamatrizyunpuntodereferenciadelobjetooriginal.Elpuntodereferenciautilizadodependedeltipodeobjeto.AutoCADutilizaelcentrodeuncírculooarco,elpuntodeinsercióndeunbloqueoforma,elpuntoinicialdeltextoyunpuntofinaldeunalíneaotrazo.
EstemétodonoadmitelaopciónGirarobjetosamedidaquesecopiandelcomandoMATRIZdeAutoCAD.
Creacióndeunamatrizpolar
Esteejemplocreauncírculoydespuéscreaunamatrizpolardelcírculo.Deestaformasecreancuatrocírculosquerellenan180gradosalrededordeunpuntobasede(4,4,0).
SubCh4_ArrayingACircle()
'Createthecircle
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2#:center(1)=2#:center(2)=0#
radius=1
SetcircleObj=ThisDrawing.ModelSpace._
AddCircle(center,radius)
ZoomAll
'Definethepolararray
DimnoOfObjectsAsInteger
DimangleToFillAsDouble
DimbasePnt(0To2)AsDouble
noOfObjects=4
angleToFill=3.14'180degrees
basePnt(0)=4#:basePnt(1)=4#:basePnt(2)=0#
'Thefollowingexamplewillcreate4copies
'ofanobjectbyrotatingandcopyingitabout
'thepoint(3,3,0).
DimretObjAsVariant
retObj=circleObj.ArrayPolar_
(noOfObjects,angleToFill,basePnt)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Disposicióndeobjetosenmatrices>
Creacióndematricesrectangulares
Paracrearunamatrizrectangular2Do3D,utiliceelmétodoArrayRectangulardelobjeto.Estemétodorequierequeseespecifiqueelnúmerodefilasycolumnas,ladistanciaentrefilasyladistanciaentrecolumnas.Alcrearunamatriz3Dtambiénhayqueprecisarelnúmerodenivelesyladistanciaentreellos.
Lasmatricesrectangularesseconstruyenreproduciendoelobjetodelconjuntodeselecciónelnúmerodevecesnecesario.Ladefinicióndeunafilaimplicalaespecificacióndemásdeunacolumna,yviceversa.
Sesuponequeelobjetooriginalseencuentraenlaesquinainferiorizquierda,porloquelamatrizsegeneraarribayaladerecha.Cuandoladistanciaentrefilasesunnúmeronegativo,lasfilasseañadenhaciaabajo.Siladistanciaentrecolumnasesunnúmeronegativo,lascolumnasseañadenhacialaizquierda.
AutoCADconstruyelamatrizrectangularalolargodelalíneabasedefinidaporelánguloderotaciónderesoluciónactual.Pordefecto,dichoángulovienedefinidoconelvalor0,loquesuponequelasfilasycolumnasdeunamatrizrectangularseanortogonalesconrespectoalosejesXeYdeldibujo.PuedecambiaresteánguloycrearunamatrizrotadasidefineelánguloderotacióndeForzcursorconunvalordistintodecero.Paraello,utilicelapropiedadSnapRotationAngle.
Creacióndeunamatrizrectangular
Enesteejemplosecreauncírculoy,acontinuación,unamatrizrectangulardelcírculoconcincofilasycincocolumnasdecírculos.
SubCh4_ArrayRectangularExample()
'Createthecircle
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2#:center(1)=2#:center(2)=0#
radius=0.5
SetcircleObj=ThisDrawing.ModelSpace._
AddCircle(center,radius)
ZoomAll
'Definetherectangulararray
DimnumberOfRowsAsLong
DimnumberOfColumnsAsLong
DimnumberOfLevelsAsLong
DimdistanceBwtnRowsAsDouble
DimdistanceBwtnColumnsAsDouble
DimdistanceBwtnLevelsAsDouble
numberOfRows=5
numberOfColumns=5
numberOfLevels=2
distanceBwtnRows=1
distanceBwtnColumns=1
distanceBwtnLevels=1
'Createthearrayofobjects
DimretObjAsVariant
retObj=circleObj.ArrayRectangular_
(numberOfRows,numberOfColumns,numberOfLevels,_
distanceBwtnRows,distanceBwtnColumns,distanceBwtnLevels)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Desplazamientodeobjetos
Sepuededesplazarobjetosalolargodeunvectorsinmodificarsuorientaciónnisutamaño.Tambiénsepuedegirarobjetosentornoaunpuntobase.
Paraobtenermásinformaciónacercadeldesplazamientodeobjetos,véase“Desplazamientodeobjetos”enelManualdelusuario.
Desplazamientodeobjetosalolargodeunvector
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Desplazamientodeobjetos>
Desplazamientodeobjetosalolargodeunvector
Todoslosobjetosdedibujoylosobjetosdereferenciadeatributospuedendesplazarseporunvectordefinido.
Paradesplazarunobjeto,utiliceelmétodoMovedelobjeto.Estemétodorequierelaentradadedoscoordenadas.Estascoordenadasdefinenunvectordedesplazamientoqueindicaladistanciaalaquedebetrasladarseelobjetoyenquédirección.
Desplazamientodeuncírculoalolargodeunvector
Enesteejemplosecreauncírculoy,acontinuación,sedesplazadosunidadesalolargodelejeX.
SubCh4_MoveCircle()
'Createthecircle
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2#:center(1)=2#:center(2)=0#
radius=0.5
SetcircleObj=ThisDrawing.ModelSpace._
AddCircle(center,radius)
ZoomAll
'Definethepointsthatmakeupthemovevector.
'Themovevectorwillmovethecircle2units
'alongthexaxis.
Dimpoint1(0To2)AsDouble
Dimpoint2(0To2)AsDouble
point1(0)=0:point1(1)=4.25:point1(2)=0
point2(0)=2:point2(1)=4.25:point2(2)=0
'Movethecircle
circleObj.Movepoint1,point2
circleObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Rotacióndeobjetos
Puederotartodoslosobjetosdedibujoytodoslosobjetosdereferenciadeatributos.
Pararotarunobjeto,utiliceelmétodoRotatedelobjeto.Estemétodorequierelaentradadeunpuntobaseydeunánguloderotación.Elpuntobaseesunamatrizdevariantescontresdobles.Estosdoblesrepresentanlascoordenadas3DdelSCUqueindicanelpuntosobreelqueestádefinidoelejederotación.Elánguloderotaciónsedesignaenradianesydeterminacuántorotaunobjetoalrededordelpuntobaserespectodesuposiciónactual.
Paraobtenermásinformaciónacercadelarotacióndeobjetos,véase“Rotacióndeobjetos”enelManualdelusuario.
Rotacióndeunapolilíneaconrespectoaunpuntobase
Esteejemplocreaunapolilíneaoptimizadacerradaydespuéslagira45gradosconrespectoalpuntobase(4,4.25,0).
SubCh4_RotatePolyline()
'Createthepolyline
DimplineObjAsAcadLWPolyline
Dimpoints(0To11)AsDouble
points(0)=1:points(1)=2
points(2)=1:points(3)=3
points(4)=2:points(5)=3
points(6)=3:points(7)=3
points(8)=4:points(9)=4
points(10)=4:points(11)=2
SetplineObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
plineObj.Closed=True
ZoomAll
'Definetherotationof45degreesabouta
'basepointof(4,4.25,0)
DimbasePoint(0To2)AsDouble
DimrotationAngleAsDouble
basePoint(0)=4:basePoint(1)=4.25:basePoint(2)=0
rotationAngle=0.7853981'45degrees
'Rotatethepolyline
plineObj.RotatebasePoint,rotationAngle
plineObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Supresióndeobjetos
LosobjetosindividualessesuprimenconelmétodoDelete.
Nota LosobjetosCollectiondeActiveXAutomationtienenunmétodoDeletedebidoalmodoenqueestosobjetosestándefinidosenlabibliotecadetipos.Noobstante,losobjetosCollectioncomocoleccionesModelSpace,LayersyDictionariesnodebensuprimirsenunca.Siseintentasuprimirunacolección,seproduceunerror.
Creaciónysupresióndeunapolilínea
Esteejemplocreaunapolilíneaoptimizadaydespuéslaborra.
SubCh4_DeletePolyline()
'Createthepolyline
DimlwpolyObjAsAcadLWPolyline
Dimvertices(0To5)AsDouble
vertices(0)=2:vertices(1)=4
vertices(2)=4:vertices(3)=2
vertices(4)=6:vertices(5)=4
SetlwpolyObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(vertices)
ZoomAll
'Erasethepolyline
lwpolyObj.Delete
ThisDrawing.RegenacActiveViewport
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Aplicarunaescalaalosobjetos
Sepuedeatribuirunaescalaaunobjetosiseindicanunpuntobaseyunalongitud,queseutilizarácomofactordeescalaenfuncióndelasunidadesdedibujoactuales.Puedeajustarlaescaladetodoslosobjetosdedibujo,asícomoladetodoslosobjetosdereferenciadeatributos.
Paraajustarelfactordeescaladeunobjeto,utiliceelmétodoScaleEntitydelobjeto.EstemétodoajustalamismaescalaparaelobjetoenlasdireccionesX,YyZ.Aceptacomoentradaelpuntobasedelaescalayunfactordeescala.Elpuntobaseesunamatrizdevariantescontresdobles.Estosdoblesrepresentanlascoordenadas3DdelSCUqueindicanelpuntodondecomienzalaescala.Elfactordeescalaeselvalorsobreelqueseajustalaescaladelobjeto.Lascotasdelobjetosemultiplicanporelfactordeescala.Unfactordeescalasuperioralvalor1amplíaelobjeto.Unfactordeescalaentre0y1reduceelobjeto.
Paraobtenermásinformaciónacercadelaaplicacióndeescala,véase“Ajustedeltamañoolaformadelosobjetos”enelManualdelusuario.
Cambiodelaescaladeunapolilínea
Esteejemplocreaunapolilíneaoptimizadacerradaydespuésajustasuescalaconunfactor0.5.
SubCh4_ScalePolyline()
'Createthepolyline
DimplineObjAsAcadLWPolyline
Dimpoints(0To11)AsDouble
points(0)=1:points(1)=2
points(2)=1:points(3)=3
points(4)=2:points(5)=3
points(6)=3:points(7)=3
points(8)=4:points(9)=4
points(10)=4:points(11)=2
SetplineObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
plineObj.Closed=True
ZoomAll
'Definethescale
DimbasePoint(0To2)AsDouble
DimscalefactorAsDouble
basePoint(0)=4:basePoint(1)=4.25:basePoint(2)=0
scalefactor=0.5
'Scalethepolyline
plineObj.ScaleEntitybasePoint,scalefactor
plineObj.Update
EndSub
¿Comentarios?
<$nopage>matriz:
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Transformacióndeobjetos
Unobjetosepuededesplazar,cambiardeescalaorotarconunamatrizdetransformaciónde4por4utilizandoelmétodoTransformBy.
Enlatablasiguientesemuestralaconfiguracióndelamatrizdetransformación,dondeR=rotaciónyT=transformación.
Configuracióndelamatrizdetransformación
R00 R01 R02 T0
R10 R11 R12 T1
R20 R21 R22 T2
0 0 0 1
Paratransformarunobjeto,esnecesarioinicializaranteslamatrizdetransformación.Enelsiguienteejemplosemuestraunamatrizdetransformación,asignadaalavariabletMatrix,querotaunaentidad90gradosalrededordelpunto(0,0,0):
tMatrix(0,0)=0.0
tMatrix(0,1)=-1.0
tMatrix(0,2)=0.0
tMatrix(0,3)=0.0
tMatrix(1,0)=1.0
tMatrix(1,1)=0.0
tMatrix(1,2)=0.0
tMatrix(1,3)=0.0
tMatrix(2,0)=0.0
tMatrix(2,1)=0.0
tMatrix(2,2)=1.0
tMatrix(2,3)=0.0
tMatrix(3,0)=0.0
tMatrix(3,1)=0.0
tMatrix(3,2)=0.0
tMatrix(3,3)=1.0
Unavezterminadalamatrizdetransformación,debeaplicarsealobjetoconelmétodoTransformBy.Lasiguientelíneadecódigoesunademostracióndecómoseaplicaunamatriz(tMatrix)aunobjeto(anObj):
anObj.TransformBytMatrix
Rotacióndeunalíneamedianteunamatrizdetransformación
Esteejemplocreaunalíneaylagira90gradosaplicandounamatrizdetransformación.
SubCh4_TransformBy()
'Createaline
DimlineObjAsAcadLine
DimstartPt(0To2)AsDouble
DimendPt(0To2)AsDouble
startPt(2)=0
startPt(1)=1
startPt(2)=0
endPt(0)=5
endPt(1)=1
endPt(2)=0
SetlineObj=ThisDrawing.ModelSpace._
AddLine(startPt,endPt)
ZoomAll
'InitializethetransMatvariablewitha
'transformationmatrixthatwillrotate
'anobjectby90degreesaboutthepoint(0,0,0)
DimtransMat(0To3,0To3)AsDouble
transMat(0,0)=0#:transMat(0,1)=-1#
transMat(0,2)=0#:transMat(0,3)=0#
transMat(1,0)=1#:transMat(1,1)=0#
transMat(1,2)=0#:transMat(1,3)=0#
transMat(2,0)=0#:transMat(2,1)=0#
transMat(2,2)=1#:transMat(2,3)=0#
transMat(3,0)=0#:transMat(3,1)=0#
transMat(3,2)=0#:transMat(3,3)=1#
'Transformthelineusingthedefinedtransformationmatrix
lineObj.TransformBytransMat
lineObj.Update
EndSub
Acontinuaciónsepresentanotrosejemplosdematricesdetransformación:
Matrizderotación:90gradosalrededordelpunto(0,0,0)
0.0 -1.0 0.0 0.0
1.0 0.0 0.0 0.0
0.0 0.0 1.0 0.0
0.0 0.0 0.0 1,0
Matrizderotación:45gradosalrededordelpunto(5,5,0)
0.707107 -0.707107 0.0 5.0
0.707107 0.707107 0.0 -2.071068
0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0
Matrizdetraslación:mueveunaentidaden(10,10,0)
1.0 0.0 0.0 10.0
0.0 1.0 0.0 10.0
0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0
Matrizdeajustedeescala:ajustedeescalade10,10enelpunto(0,0,0)
10.0 0.0 0.0 0.0
0.0 10.0 0.0 0.0
0.0 0.0 10.0 0.0
0.0 0.0 0.0 1.0
Matrizdeajustedeescala:ajustedeescalade10,10enelpunto(2,2,0)
10.0 0.0 0.0 -18.0
0.0 10.0 0.0 -18.0
0.0 0.0 10.0 0.0
0.0 0.0 0.0 1.0
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Alargamientoyrecortedeobjetos
Sepuedecambiarelángulodelosarcosylalongituddelaslíneasabiertas,arcos,polilíneasabiertas,arcoselípticosysplinesabiertas.Seobtieneunresultadomuyparecidoaldelalargamientoyrecortedeobjetos.
Losobjetossepuedenalargaryrecortarsisemodificansuspropiedades.Porejemplo,paraalargarunalínea,cambielascoordenadasdelaspropiedadesStartPointoEndPoint.Paracambiarelángulodeunarco,modifiquelaspropiedadesStartAngleoEndAngledelarco.Despuésdemodificarpropiedadesdeunobjeto,debeutilizarseelmétodoUpdateparaverloscambioseneldibujo.
Paraobtenermásinformaciónacercadelalargamientoyrecortedeobjetos,véase“Ajustedeltamañoolaformadelosobjetos”enelManualdelusuario.
Alargarunalínea
Enesteejemplosecreaunalíneaysecambiasupuntofinal,conloqueaumentasulongitud.
SubCh4_LengthenLine()
'Defineandcreatetheline
DimlineObjAsAcadLine
DimstartPoint(0To2)AsDouble
DimendPoint(0To2)AsDouble
startPoint(0)=0
startPoint(1)=0
startPoint(2)=0
endPoint(0)=1
endPoint(1)=1
endPoint(2)=1
SetlineObj=ThisDrawing.ModelSpace._
AddLine(startPoint,endPoint)
lineObj.Update
'Lengthenthelinebychangingthe
'endpointto4,4,4
endPoint(0)=4
endPoint(1)=4
endPoint(2)=4
lineObj.endPoint=endPoint
lineObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Descomposicióndeobjetos
Ladescomposicióndeobjetosfragmentalosobjetosindividualesensuspartesconstitutivas,perosusefectosnosonvisiblesenlapantalla.Porejemplo,ladescomposicióndeformasdelugaralíneasyarcosapartirdepolígonos3D,polilíneas,mallaspoligonalesyregiones.Sustituyeunareferenciaabloqueconcopiasdelosobjetossimplesquecomponenelbloque.
Paraobtenerinformaciónacercadeladescomposicióndeobjetos,véase“Disociacióndeobjetoscompuestos(Descomponer)”enelManualdelusuario.
Descomposicióndeunapolilínea
Esteejemplocreaunobjetodepolilíneaoptimizada.Despuésladescomponeenvariosobjetos.Elejemplorealizaunbucleenlosobjetosresultantesymuestrauncuadrodemensajequecontieneelnombredetodoslosobjetosysuíndiceenlalistadeobjetosdescompuestos.
SubCh4_ExplodePolyline()
DimplineObjAsAcadLWPolyline
Dimpoints(0To11)AsDouble
'Definethe2Dpolylinepoints
points(0)=1:points(1)=1
points(2)=1:points(3)=2
points(4)=2:points(5)=2
points(6)=3:points(7)=2
points(8)=4:points(9)=4
points(10)=4:points(11)=1
'CreatealightweightPolylineobject
SetplineObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
'Setthebulgeononesegmenttovarythe
'typeofobjectsinthepolyline
plineObj.SetBulge3,-0.5
plineObj.Update
'Explodethepolyline
DimexplodedObjectsAsVariant
explodedObjects=plineObj.Explode
'Loopthroughtheexplodedobjects
'anddisplayamessageboxwith
'thetypeofeachobject
DimIAsInteger
ForI=0ToUBound(explodedObjects)
explodedObjects(I).Update
MsgBox"ExplodedObject"&I&":"&_
explodedObjects(I).ObjectName
explodedObjects(I).Update
Next
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Edicióndepolilíneas
Laspolilíneas2Dy3D,losrectángulos,lospolígonosylasmallaspoligonales3Dsonvariantesdepolilíneasyseeditandelamismamaneraqueellas.
AutoCADreconocetantolaspolilíneasajustadascomolaspolilíneasajustadasenformadesplines.Unapolilíneaajustadaenformadesplineutilizaunajustedecurva,similaraunaB-spline.Existendostiposdepolilíneasajustadasenformadespline:cuadráticasycúbicas.LasdospolilíneasestáncontroladasporlavariabledesistemaSPLINETYPE.Unapolilíneaajustadautilizacurvasestándarparaelajustedecurvasycualquierdireccióntangentedefinidaenunvérticedeterminado.
Paramodificarunapolilínea,utilicelaspropiedadesylosmétodosdelosobjetosLightweightPolylineoPolyline.Paraabrirocerrarunapolilínea,cambiarlascoordenadasdeunvérticedepolilíneaoagregarunvértice,utilicelossiguientesmétodosypropiedades:
Closed(propiedad)
Abreocierralapolilínea.
Coordinates(propiedad)
Especificalascoordenadasdecadavérticedelapolilínea.
AddVertex(método)
Añadeunvérticeaunapolilíneaoptimizada.
Utilicelossiguientesmétodosparaactualizarlacurvaturaolaanchuradeunapolilínea:
SetBulge
Definelacurvaturadeunapolilínea,dadoelíndicedesegmentos.
SetWidth
Definelasanchurasinicialyfinaldeunapolilínea,dadoelíndicedesegmentos.
Paraobtenermásinformaciónacercadelamodificacióndepolilíneas,véase“Modificaciónounióndepolilíneas”enelManualdelusuario.
Modificacióndeunapolilínea
Esteejemplocreaunapolilíneaoptimizada.Despuésañadeunacurvaturaaltercersegmentodelapolilínea,añadeunvértice,cambialaanchuradelúltimosegmentoy,porúltimo,lacierra.
SubCh4_EditPolyline()
DimplineObjAsAcadLWPolyline
Dimpoints(0To9)AsDouble
'Definethe2Dpolylinepoints
points(0)=1:points(1)=1
points(2)=1:points(3)=2
points(4)=2:points(5)=2
points(6)=3:points(7)=2
points(8)=4:points(9)=4
'CreatealightweightPolylineobject
SetplineObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
'Addabulgetosegment3
plineObj.SetBulge3,-0.5
'Definethenewvertex
DimnewVertex(0To1)AsDouble
newVertex(0)=4:newVertex(1)=1
'Addthevertextothepolyline
plineObj.AddVertex5,newVertex
'Setthewidthofthenewsegment
plineObj.SetWidth4,0.1,0.5
'Closethepolyline
plineObj.Closed=True
plineObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Modificacióndesplines
Utilicelassiguientespropiedadesmodificablesparacambiarcurvasspline:
ControlPoints
Especificalospuntosdeapoyodelaspline.
EndTangent
Establecelatangentefinaldelasplinecomovectordedirección.
FitPoints
Especificatodoslospuntosdeajustedelaspline.
FitTolerance
VuelveaajustarlacurvaSplinealospuntosexistentesconlosvaloresdetolerancianuevos.
Knots
Especificaelvectornodaldelaspline.
StartTangent
Especificalatangenteinicialdelaspline.
Tambiénpuedeutilizarestosmétodosparaeditarsplines:
AddFitPoint
Agregaunpuntodeajustealasplineenelíndiceindicado.
DeleteFitPoint
Suprimeelpuntodeajustedeunasplineenelíndiceindicado.
ElevateOrder
Elevaelordendelasplinehastaelordenindicado.
GetFitPoint
Defineelpuntodeajusteenelíndiceindicado(sólounpuntodeajuste.(Sólounpuntodeajuste.Paraconsultartodoslospuntosdeajustedelaspline,utilicelapropiedadFitPoints).
Invertir
Invierteladireccióndelaspline.
SetControlPoint
Defineelpuntodeapoyodelasplineenelíndiceindicado.
SetFitPoint
Defineelpuntodeajusteenelíndiceindicado.(Sólounpuntodeajuste.Paraconsultartodoslospuntosdeajustedelaspline,utilicelapropiedadFitPoints).
SetWeight
Defineelgrosordelpuntodeapoyoenuníndicedado.
Utilicelassiguientespropiedadesdesólolecturaparaconsultarsplines:
Area
Obtieneeláreacerradadeunaspline.
Closed
Indicasilasplineestáabiertaocerrada.
Degree
Obtieneelgradodelarepresentaciónpolinómicadelaspline.
IsPeriodic
Especificasilasplinedadaesperiódica.
IsPlanar
Especificasilasplinedadaesplana.
IsRational
Especificasilasplinedadaesracional.
NumberOfControlPoints
Obtieneelnúmerodepuntosdeapoyodelaspline.
NumberOfFitPoints
Obtieneelnúmerodepuntosdeajustedelaspline.
Paraobtenermásinformaciónacercadelamodificacióndecurvasspline,véase“Modificacióndesplines”enelManualdelusuario.
Modificacióndeunpuntodeapoyoenunacurvaspline
Esteejemplocreaunacurvasplineycambiasuprimerpuntodeapoyo.
SubCh4_ChangeSplineControlPoint()
'Createthespline
DimsplineObjAsAcadSpline
DimstartTan(0To2)AsDouble
DimendTan(0To2)AsDouble
DimfitPoints(0To8)AsDouble
startTan(0)=0.5:startTan(1)=0.5:startTan(2)=0
endTan(0)=0.5:endTan(1)=0.5:endTan(2)=0
fitPoints(0)=1:fitPoints(1)=1:fitPoints(2)=0
fitPoints(3)=5:fitPoints(4)=5:fitPoints(5)=0
fitPoints(6)=10:fitPoints(7)=0:fitPoints(8)=0
SetsplineObj=ThisDrawing.ModelSpace._
AddSpline(fitPoints,startTan,endTan)
splineObj.Update
'Changethecoordinateofthefirstfitpoint
DimcontrolPoint(0To2)AsDouble
controlPoint(0)=0
controlPoint(1)=3
controlPoint(2)=0
splineObj.SetControlPoint0,controlPoint
splineObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>
Edicióndesombreados
Sepuedeneditartantoloscontornoscomolospatronesdesombreado.Sisemodificaelcontornodeunsombreadoasociativo,elpatrónseactualizarásiempreycuandoelprocesodeedicióndécomoresultadouncontornoválido.Lossombreadosasociativosseactualizaninclusosifiguranencapasinutilizadas.AutoCADpermitemodificarlospatronesdesombreadooelegirpatronesnuevosparalossombreadosexistentes,perolaasociatividadsólopuededefinirseunavezqueelobjetoestécreado.PuedeutilizarlapropiedadAssociativeHatchparaverificarsiunobjetoHatchestáasociado.(paraobtenermásinformaciónacercadelacreacióndeunsombreado,véaseelmétodo)AddHatch.
Paraverloscambiosdesombreadoefectuados,sedebevolveraevaluarelsombreadoconelmétodoEvaluate.
Paraobtenermásinformaciónsobrelamodificacióndesombreados,véase“Modificacióndesombreadosyáreasderellenosólido”enelManualdelusuario.
ModificacióndecontornosdesombreadoEdicióndepatronesdesombreado
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Edicióndesombreados>
Modificacióndecontornosdesombreado
Sepuedenagregaroinsertarbuclesenloscontornosdelsombreado.Lossombreadosasociativosseactualizanparaigualarsealoscambiosefectuadosensuscontornos.Lossombreadosnoasociativosnoseactualizan.
Paraeditaruncontornodesombreado,utiliceunodelosmétodossiguientes:
AppendInnerLoop
Añadeunbucleinterioralsombreado.
AppendOuterLoop
Añadeunbucleexterioralsombreado.
InsertLoopAt
Insertaunbucleenuníndicedadodeunsombreado.
Adicióndeunbucleinterioraunsombreado.
Esteejemplocreaunsombreadoasociativo.Despuéscreauncírculoyloañadecomobucleinternodelsombreado.
SubCh4_AppendInnerLoopToHatch()
DimhatchObjAsAcadHatch
DimpatternNameAsString
DimPatternTypeAsLong
DimbAssociativityAsBoolean
'Defineandcreatethehatch
patternName="ANSI31"
PatternType=0
bAssociativity=True
SethatchObj=ThisDrawing.ModelSpace._
AddHatch(PatternType,patternName,bAssociativity)
'Createtheouterloopforthehatch.
DimouterLoop(0To1)AsAcadEntity
Dimcenter(0To2)AsDouble
DimradiusAsDouble
DimstartAngleAsDouble
DimendAngleAsDouble
center(0)=5:center(1)=3:center(2)=0
radius=3
startAngle=0
endAngle=3.141592
SetouterLoop(0)=ThisDrawing.ModelSpace._
AddArc(center,radius,startAngle,endAngle)
SetouterLoop(1)=ThisDrawing.ModelSpace._
AddLine(outerLoop(0).startPoint,outerLoop(0).endPoint)
'Appendtheouterlooptothehatchobject
hatchObj.AppendOuterLoop(outerLoop)
'Createacircleastheinnerloopforthehatch.
DiminnerLoop(0)AsAcadEntity
center(0)=5:center(1)=4,5:center(2)=0
radius=1
SetinnerLoop(0)=ThisDrawing.ModelSpace._
AddCircle(center,radius)
'Appendthecircleasaninnerlooptothehatch
hatchObj.AppendInnerLoop(innerLoop)
'Evaluateanddisplaythehatch
hatchObj.Evaluate
ThisDrawing.RegenTrue
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Modificacióndeobjetos>Edicióndesombreados>
Edicióndepatronesdesombreado
PuedemodificarelánguloyelespaciadodeunpatróndesombreadoexistenteosustituirloporunrellenosólidooporunodelospatronespredefinidosprovistosporAutoCAD.LaopciónPatróndelcuadrodediálogoSombreadopermiteverunalistadelospatrones.Parareducireltamañodelarchivo,elsombreadosedefineeneldibujocomounsoloobjetográfico.
Utilicelossiguientesmétodosypropiedadesparamodificarlospatronesdesombreado:
PatternAngle
Determinaelángulodelpatróndesombreado.
PatternDouble
Indicasielsombreadodefinidoporelusuarioesunsombreadodoble.
PatternName
Especificaelnombredelpatróndesombreado(nocambiaeltipodelpatrón).
PatternScale
Determinalaescaladelospatronesdesombreado.
PatternSpace
Especificaelespaciadodelpatróndesombreadodefinidoporelusuario.
SetPattern
Defineelnombreyeltipodelpatróndesombreado.
Modificacióndelintervalodelpatróndeunsombreado
Esteejemplocreaunsombreado.Despuésañadedosalespaciadodelpatrónactualdelsombreado.
SubCh4_ChangeHatchPatternSpace()
DimhatchObjAsAcadHatch
DimpatternNameAsString
DimPatternTypeAsLong
DimbAssociativityAsBoolean
'Definethehatch
patternName="ANSI31"
PatternType=0
bAssociativity=True
'CreatetheassociativeHatchobject
SethatchObj=ThisDrawing.ModelSpace._
AddHatch(PatternType,patternName,bAssociativity)
'Createtheouterloopforthehatch.
DimouterLoop(0To0)AsAcadEntity
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=5
center(1)=3
center(2)=0
radius=3
SetouterLoop(0)=ThisDrawing.ModelSpace._
AddCircle(center,radius)
hatchObj.AppendOuterLoop(outerLoop)
hatchObj.Evaluate
'Changethespacingofthehatchpatternby
'adding2tothecurrentspacing
hatchObj.patternSpace=hatchObj.patternSpace+2
hatchObj.Evaluate
ThisDrawing.RegenTrue
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>
Usodecapas,coloresytiposdelínea
Lascapassonsuperposicionestransparentesenlascualesseorganizanyseagrupandistintostiposdedatosdeldibujo.Losobjetosquesecreantienenpropiedadescomunescomocapas,coloresytiposdelínea.Elcolorcontribuyeaestablecerlasdiferenciasoportunasentreelementossimilaresquecomponeneldibujo,ylostiposdelíneasirvenparadistinguirfácilmentelosdistintoselementosdeldibujo,comolaslíneasdecentroolaslíneasocultas.Laorganizaciónencapasdelascapasylosobjetosfacilitaelmanejodelainformacióndelosdibujos.
Paraobtenermásinformaciónacercadeestetema,véase“Controldelaspropiedadesdelosobjetos”enelManualdelusuario.
TrabajarconcapasTrabajoconcoloresTrabajocontiposdelíneaAsignacióndecapas,coloresytiposdelíneaaobjetos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>
Trabajarconcapas
Siempresedibujaenunacapa.Puedeserlacapapordefectoounacapaquehayacreadoelusuarioyalaquehayaasignadounnombre.Cadacapatieneuncoloryuntipodelíneaasociados.Porejemplo,sepuedecrearunacapaparadibujarsololíneasdecentro,yasignarleacontinuaciónelcolorazulyeltipodelíneaCENTER.Apartirdeentonces,siemprequevayaadibujarunalíneadecentropuedepasaralacapadelíneasdecentroycomenzaradibujar.
Todoslostiposdelíneaylascapaspermanecenenlosobjetosdesuscoleccionessuperiores.LascapassemantienenenlacolecciónLayers,mientrasquelostiposdelíneaestánenlacolecciónLinetypes.
Paraobtenermásinformaciónacercadelascapas,véase“Utilizacióndecapas“enelManualdelusuario.
OrdenacióndecapasytiposdelíneaCreaciónydenominacióndecapasConversióndeunacapaenactivaActivaciónydesactivacióndecapasInutilizaciónyreutilizacióndecapasBloqueoydesbloqueodecapasAsignacióndecoloraunacapaAsignacióndeuntipodelíneaaunacapaSupresióndecapas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Ordenacióndecapasytiposdelínea
SepuedeiterarenlascoleccionesLayersyLinetypesparaencontrartodaslascapasytiposdelíneadeldibujo.
Iteraciónenlacoleccióndecapas
ElsiguientecódigoefectúaiteracionesenlacolecciónLayersparaobtenerlosnombresdetodaslascapasdeldibujo.Losnombressemuestranenuncuadrodemensajes.
SubCh4_IteratingLayers()
DimlayerNamesAsString
DimentryAsAcadLayer
layerNames=""
ForEachentryInThisDrawing.Layers
layerNames=layerNames+entry.Name+vbCrLf
Next
MsgBox"Thelayersinthisdrawingare:"+_
vbCrLf+layerNames
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Creaciónydenominacióndecapas
Sepuedecrearcapasnuevasyasignarlespropiedadesdecolorytipodelínea.TodaslascapasindividualesformanpartedelacolecciónLayers.Paracrearuncapanuevayañadirlaalacoleccióndecapas,utiliceelmétodoAdd.
Elnombredelascapasselesasignaalcrearlas.Sidespuésdecrearunacapadeseacambiarsunombre,utilicelapropiedadName.Losnombresdecapapuedenconstardeuntotalde31caracteresycontenerletras,númerosylossignosespecialesdedólar($),guión(–)ysubrayado(_),peronopuedencontenerespaciosenblanco.
Paraobtenermásinformaciónacercadelacreacióndecapas,véase“Creaciónydenominacióndecapas”enelManualdelusuario.
Paracrearunacapanueva,asignarleelcolorrojoyagregarleunobjeto
Elcódigodelejemplosiguientecreauncírculoyunacapanueva.Seasignaelcolorrojoalanuevacapa.Elcírculoseasignaalacapaysucolorcambiaenconsecuencia.
SubCh4_NewLayer()
'Createacircle
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2:center(1)=2:center(2)=0
radius=1
SetcircleObj=ThisDrawing.ModelSpace._
AddCircle(center,radius)
'Createacolorobject
DimcolAsNewAcadAcCmColor
col.ColorMethod=AutoCAD.acColorMethodForeground
'Setthelayertothecolor
DimlayColorAsAcadAcCmColor
SetlayColor=
AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
CalllayColor.SetRGB(122,199,25)
ThisDrawing.ActiveLayer.TrueColor=layColor
col.ColorMethod=AutoCAD.acColorMethodByLayer
'Assignthecirclethecolor"ByLayer"so
'thatthecirclewillautomaticallypick
'upthecolorofthelayeronwhichitresides
circleObj.Color=acByLayer
circleObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Conversióndeunacapaenactiva
Eldibujosiempreserealizaenlacapaactiva.Cuandounacapaseactiva,sepuedencrearobjetosnuevosenella.Siseactivaunacapadistinta,losnuevosobjetossecrearánenlanuevacapaactivayutilizaránsucolorytipodelínea.Lascapasinutilizadasnopuedenactivarse.
Paraconvertirunacapaenactiva,utilicelapropiedadActiveLayer.Estapropiedadsedefineeneldibujoactivo.Porejemplo:
DimnewlayerAsAcadLayer
Setnewlayer=ThisDrawing.Layers.Add("LAYER1")
ThisDrawing.ActiveLayer=newlayer
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Activaciónydesactivacióndecapas
Lascapasdesactivadasseregeneranconeldibujo,peronosevisualizannitrazan.Aldesactivarlas,seevitatenerqueregenerareldibujocadavezquesereutilizaunacapa.Alactivarunacapaquesehadesactivado,AutoCADvuelveadibujarlosobjetosdeesacapa.
Paraactivarydesactivarcapas,utilicelapropiedadLayerOn.SileasignaelvalorTRUE,lacapaseactiva.SileasignaelvalorFALSE,lacapasedesactiva.
Desactivacióndeunacapa
Esteejemplocreaunacapanueva,leañadeuncírculoyladesactivaparaqueelcírculonoestévisible.
SubCh4_LayerInvisible()
'Createacircle
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2:center(1)=2:center(2)=0
radius=1
SetcircleObj=ThisDrawing.ModelSpace._
AddCircle(center,radius)
'Createanewlayercalled"ABC"
DimlayerObjAsAcadLayer
SetlayerObj=ThisDrawing.Layers.Add("ABC")
'Assignthecircletothe"ABC"layer
circleObj.Layer="ABC"
circleObj.Update
'Turnofflayer"ABC"
layerObj.LayerOn=False
ThisDrawing.RegenacActiveViewport
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Inutilizaciónyreutilizacióndecapas
Puedeinutilizarcapasparaaumentarlavelocidaddeloscambiosenpantalla,mejorarelrendimientodeladesignacióndeobjetosyreducireltiempoderegeneracióndedibujoscomplejos.AutoCADnomuestra,regeneranitrazaobjetosenlascapasinutilizadas.Inutilicelascapasquequieraqueseaninvisiblesdurantelargosperiodosdetiempo.Al“reutilizar”unacapainutilizada,AutoCADregeneraymuestralosobjetosdedichacapa.
Parainutilizaroreutilizarunacapa,utilicelapropiedadFreeze.SiintroduceunvalordeTRUEenestapropiedad,lacapaseinutiliza.SileasignaelvalorFALSE,lacapasereutiliza.
Inutilizacióndeunacapa
Enesteejemplosecreaunanuevacapallamada“ABC”y,acontinuación,seinutiliza.
SubCh4_LayerFreeze()
'Createanewlayercalled"ABC"
DimlayerObjAsAcadLayer
SetlayerObj=ThisDrawing.Layers.Add("ABC")
'Freezelayer"ABC"
layerObj.Freeze=True
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Bloqueoydesbloqueodecapas
Losobjetosdispuestosenunacapabloqueadanopuedeneditarse,peropermanecenvisiblessilacapaestáactivadaynoestáinutilizada.Tambiénesposibleconvertirenactualunacapabloqueadayañadirleobjetos.Sepuedeinutilizarydesactivarcapasbloqueadasasícomocambiarsuspropiedadesasociadasdecolorytiposdelínea.
Parabloquearodesbloquearunacapa,utilicelapropiedadLock.SiintroduceunvalordeTRUEenestapropiedad,lacapasebloquea.SileasignaelvalorFALSE,lacapasedesbloquea.
Bloqueodeunacapa
Enesteejemplosecreaunanuevacapallamada“ABC”y,acontinuación,sebloquea.
SubCh4_LayerLock()
'Createanewlayercalled"ABC"
DimlayerObjAsAcadLayer
SetlayerObj=ThisDrawing.Layers.Add("ABC")
'Locklayer"ABC"
layerObj.Lock=True
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Asignacióndecoloraunacapa
Sepuedeasignarcoloraunacapa.LoscoloresseidentificanmedianteelobjetoAcCmColor.EsteobjetopuedecontenerunvalorRGB,unnúmeroACI(unenterocomprendidoentre1y255)ouncolorguardado.
Paraasignarcoloraunacapa,utilicelapropiedadTrueColor.
SehanproporcionadolasconstantesparalossietecoloresestándarylasdesignacionesBYBLOCKyBYLAYER.
SiutilizaacByBlock,AutoCADdibujalosobjetosnuevosconelcolorpordefecto(blancoonegro,segúnlaconfiguración)hastaquequedanagrupadosenunbloque.Alinsertarestebloqueeneldibujo,losobjetosadoptanelparámetroactual.
SiseleccionaacByLayer,losobjetosnuevosadoptanelcolordelacapasobrelaquesehandibujado.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Asignacióndeuntipodelíneaaunacapa
Cuandosedefinencapas,lostiposdelíneaconstituyenotramaneradeofrecerinformaciónvisual.Untipodelíneaesunpatrónrepetidodetrazos,puntosyespaciosenblancoquesirveparadiferenciarlafinalidaddecadalínea.
Elnombreyladefinicióndeltipodelíneadescribenlasecuenciaparticulartrazo-puntoylaslongitudesrelativasdelostrazos,espaciosenblancoylascaracterísticasdecualquiertextooformaincluido.
Paraasignaruntipodelíneaaunacapa,utilicelapropiedadLinetype.Estapropiedadutilizacomoentradaelnombredeltipodelínea.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajarconcapas>
Supresióndecapas
Parasuprimirunacapa,utiliceelmétodoDelete.
Puedesuprimirunacapaencualquiermomentodelasesióndedibujo.Nosepuedensuprimirlacapaactual,lacapa0niunacapaquedependadeunareferenciaexternaoquecontengaobjetos.
Nota TampocosepuedensuprimirlascapasalasqueserefierendefinicionesdebloquenilacapaespecialllamadaDEFPOINTS,aunquenocontenganobjetosvisibles.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>
Trabajoconcolores
SepuedenasignarcoloresverdaderosaobjetosindividualesdeundibujomedianteelAcCmColor.SiseutilizaunvalorRGBenelobjetoAcCmColor,podráelegirentremillonesdecoloresparadefinirelcolordelaslíneas,deloscírculosydeotrosobjetosindividuales.ElobjetoAcCmColortambiéncontienemétodosypropiedadesparaespecificarnombresdecolores,librosdecolores,índicesdecolores,valoresdecoloresymétodosdecolores.
Tambiénsepuedenasignarcoloresacapas.CadacolorpuedeestaridentificadoporunnombreounnúmerodelÍndicedecoloresdeAutoCAD(ACI),unenteroentre1y255.Nohaylímiteparaelnúmerodeobjetosycapasquepuedenutilizarelmismonúmerodecolor.Sepuedeutilizarelmismonúmerodecolorentodoslosobjetosycapasqueseanecesario.
Cuandoseespecificauncolor,sepuedeintroducirsunombreosunúmeroACI.ElíndiceACIproporciona255númerosdecolores.Sólolossieteprimeroscolorestienenunnombreestándar.
Coloresdel1al7
Númerodecolor
Nombredecolor
1 Rojo
2 Amarillo
3 Verde
4 Cián
5 Azul
6 Magenta
7 Negro/Blanco
Loscoloresdel8al255debenasignarsepornúmerososeleccionandoelcolorenelcuadrodediálogo.Elcolorpordefecto(7)puedeserblancoonegro,segúnelcolordefondo.
Paraobtenermásinformaciónacercadelusodeloscolores,véase“Utilizacióndecolores”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>
Trabajocontiposdelínea
Untipodelíneaesunpatróndetrazos,puntosyespaciosenblancoqueserepite.Untipodelíneacomplejoesunapatrónrepetidodesímbolos.Parautilizaruntipodelíneaesindispensablecargarloprimeroeneldibujo.Estoquieredecirqueladefinicióndedichotipodelíneadebeestarincluidaenelarchivodebiblioteca.LINparapodercargarloeneldibujo.Paracargaruntipodelíneaeneldibujo,utiliceelmétodoLoad
Paraobtenermásinformaciónacercadelusodelostiposdelíneas,véase“Introducciónalostiposdelíneas”enelManualdelusuario.
Nota LostiposdelíneautilizadosinternamenteporAutoCADnodebenconfundirseconlostiposdelíneadeimpresoraproporcionadosporalgunostrazadores.Losdostiposdelíneaatrazosproducenresultadossimilares.Sinembargo,nodebenutilizarselosdostiposalmismotiempo,yaquelosresultadospuedenserimprevisibles.
CargadetiposdelíneaenAutoCAD
Enesteejemploseintentacargareltipodelínea“CENTER”delarchivoacad.lin.Siestetipodelíneayaexiste,osielarchivonoexiste,semuestraunmensaje.
SubCh4_LoadLinetype()
OnErrorGoToERRORHANDLER
DimlinetypeNameAsString
linetypeName="CENTER"
'Cargaeltipodelínea"CENTER"desdeelarchivoacad.lin
ThisDrawing.Linetypes.LoadlinetypeName,"acad.lin"
ExitSub
ERRORHANDLER:
MsgBoxErr.Description
EndSub
ConversióndeuntipodelíneaenactivoCambiodenombredetiposdelíneaSupresióndetiposdelíneaCambiodedescripcionesdetiposdelíneaDesignacióndelaescaladeltipodelínea
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>
Conversióndeuntipodelíneaenactivo
Sideseautilizaruntipodelíneaparadibujarenlacapaactual,debeactivarlo.Todoslosobjetosreciéncreadossetrazanconeltipodelíneaactivo.
Nota Lostiposdelíneaquedependendereferenciasexternasnopuedenconvertirseenactivos.
Paraconvertiruntipodelíneaenactivo,utilicelapropiedadActiveLinetypeEstapropiedadsedefineeneldibujoactivo.Porejemplo:
ThisDrawing.ActiveLinetype=ThisDrawing._
Linetypes.Item("CONTINUOUS")
Paraobtenermásinformaciónacercadelaactivacióndeuntipodelínea,véase“Definicióndeltipodelíneaactual”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>
Cambiodenombredetiposdelínea
Paracambiardenombreuntipodelínea,utilicelapropiedadName.Alcambiardenombreuntipodelínea,sólosecambiaelnombredeladefinicióndeltipodelíneadeldibujo.ElnombrecontenidoenelarchivodebibliotecaLINnoseactualizaparareflejarelnuevonombre.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>
Supresióndetiposdelínea
Parasuprimiruntipodelínea,utiliceelmétodoDelete.Elusuariopuedesuprimiruntipodelíneacuandolodeseeduranteunasesióndedibujo;noobstante,entrelostiposdelíneaquenopuedensuprimirseseincluyenBALAYER,BAYBLOCK,CONTINUOUS,eltipodelíneaactualylostiposdelíneaquedependendereferenciasexternas.Asimismo,lostiposdelíneareferenciadospordefinicionesdebloquenosepuedensuprimiraunquenolosestéutilizandoningúnobjeto.
Paraobtenermásinformaciónacercadelaeliminacióndeuntipodelínea,véase“Definicióndeltipodelíneaactual”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>
Cambiodedescripcionesdetiposdelínea
Lostiposdelíneapuedentenerunadescripciónasociada.LadescripciónproporcionaunarepresentaciónASCIIdeltipodelínea.SepuedeasignarocambiarladescripcióndelostiposdelíneaconlapropiedadDescription.
Ladescripcióndeuntipodelíneapuedetenerunalongitudmáximade47caracteres.Puedeseruncomentarioounaseriedecaracteresdesubrayado,puntos,trazosyespaciosquesirvacomounamerarepresentacióndelpatróndeltipodelínea.Porejemplo:
ThisDrawing.ActiveLinetype.Description="ExteriorWall"
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Trabajocontiposdelínea>
Designacióndelaescaladeltipodelínea
Sepuedeespecificarlaescaladeltipodelíneaparalosobjetosquesecreen.Cuantomenoreslaescala,másserepetiráelpatróndeltipodelíneaporunidaddedibujo.Pordefecto,AutoCADaplicaunaescalaglobalde1.0,queequivaleaunaunidaddedibujo.Sepuedecambiarlaescaladeltipodelíneadetodoslosobjetosdedibujo,lasreferenciasdeatributosylosgrupos.
Paracambiarlaescaladeltipodelínea,utilicelapropiedadLinetypeScale.
LavariabledesistemaCELTSCALEestablecelaescaladeltipodelíneaparalosobjetosdenuevacreación.Sideseamodificarglobalmentelaescaladeltipodelíneadeobjetosexistentes,utiliceLTSCALE.ParacambiarlosvaloresdevariablesdesistemaconActiveXAutomationdeAutoCAD,utiliceelmétodoSetVariable.
Paraobtenermásinformaciónacercadelasescalasdeltipodelínea,véase“Controldelaescaladeltipodelínea“enelManualdelusuario.
Modificacióndelaescaladeltipodelíneadeuncírculo
SubCh4_ChangeLinetypeScale()
'Savethecurrentlinetype
SetcurrLineType=ThisDrawing.ActiveLinetype
'ChangetheactivelinetypetoBorder,sothescalechangewill
'bevisible.
'FirstseeiftheBorderlinetypeisalreadyloaded
OnErrorResumeNext'Turnonerrortrapping
ThisDrawing.ActiveLinetype=ThisDrawing.Linetypes.Item("BORDER")
IfErr.Number=-2145386476Then
'Errorindicateslinetypeisnotcurrentlyloaded,soloadit.
ThisDrawing.Linetypes.Load"BORDER","acad.lin"
ThisDrawing.ActiveLinetype=_
ThisDrawing.Linetypes.Item("BORDER")
EndIf
OnErrorGoTo0'Turnofferrortrapping
'Createacircleobjectinmodelspace
Dimcenter(0To2)AsDouble
DimradiusAsDouble
DimcircleObjAsAcadCircle
center(0)=2
center(1)=2
center(2)=0
radius=4
SetcircleObj=ThisDrawing.ModelSpace.AddCircle(center,radius)
circleObj.Update
MsgBox("Hereisthecirclewiththeoriginallinetype")
'Setthelinetypescaleofacircleto3
circleObj.LinetypeScale=3#
circleObj.Update
MsgBox("Hereisthecirclewiththenewlinetype")
'Restoreoriginalactivelinetype
ThisDrawing.ActiveLinetype=currLineType
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>
Asignacióndecapas,coloresytiposdelíneaaobjetos
Despuésdedefinircapas,coloresytiposdelínea,puedenasignarseaobjetosdeldibujo.Laasignacióndeobjetosacapaspermiteagruparloscomponentesasociadosdeundibujo.Secontrolalavisibilidad,elcoloryeltipodelíneadelacapayseespecificasilosobjetosdeunacapapuedeneditarse.Sepuedendesplazarobjetosdeunacapaaotraycambiarelnombredelacapa.
Elnúmerodecapasdeundibujoyelnúmerodeobjetosporcadacapasonprácticamenteilimitados.Sepuedeasignarunnombreacadacapayseleccionarlavisualizacióndecualquiercombinacióndecapas.
Losbloquessedefinenapartirdeobjetosdibujadosoriginalmenteendiferentescapascondistintoscoloresytiposdelínea.Sepuedeconservarlainformaciónsobrelacapa,elcoloryeltipodelíneadeunbloque.Estopermitequecadavezqueseinserteelbloque,losobjetosdelmismosedibujenensucapaoriginalconsucolorytipodelíneaoriginales.
CambiodelacapadeunobjetoCambiodelcolordeunobjetoCambiodeltipodelíneadeunobjeto
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Asignacióndecapas,coloresytiposdelíneaaobjetos>
Cambiodelacapadeunobjeto
Alcrearunobjetoyasignarlepropiedadesdecapa,colorytipodelínea,puedecambiarlacapadelobjeto.Estecambioresultaútilsisehacreadoporerrorunobjetoenunacapaequivocadaosimástardesedecidecambiarlaorganizacióndecapas.
Paracambiarlacapadeunobjeto,utilicelapropiedadLayerdelobjeto.Estapropiedadutilizacomoentradaelnombredelacapa.
Trasladodeunobjetoaotracapa
Enesteejemplosecreauncírculoenlacapaactivay,acontinuación,secreaunacapanuevallamada“ABC”.Acontinuación,desplazaelcírculoalanuevacapa.
SubCh4_MoveObjectNewLayer()
'Createacircle
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2:center(1)=2:center(2)=0
radius=1
SetcircleObj=ThisDrawing.ModelSpace._
AddCircle(center,radius)
'Createanewlayercalled"ABC"
DimlayerObjAsAcadLayer
SetlayerObj=ThisDrawing.Layers.Add("ABC")
'Assignthecircletothe"ABC"layer
circleObj.Layer="ABC"
circleObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Asignacióndecapas,coloresytiposdelíneaaobjetos>
Cambiodelcolordeunobjeto
Paracambiarelcolordeunobjeto,utilicelapropiedadTrueColordelobjeto.Sepuedenasignarcoloresaobjetosconcretosdeundibujo.CadacolorestáidentificadoporunobjetoAcCmColor.EsteobjetopuedecontenerunvalorRGB,unnúmeroACI(unenterocomprendidoentre1y255)ouncolorguardado.MediantelosvaloresRGBsepuedeelegirentremillonesdecolores.
Alasignaruncoloralobjetoseignoraelcoloractualdelacapaenlaqueresideelobjeto.Sisedeseaconservarunobjetoenunadeterminadacapaperosinquecompartaelcolordelamisma,sepuedecambiarelcolorconcretodelobjeto.
Cambiodelcolordeuncírculo
Esteejemplocreauncírculoydespuésleasignaelcolorazul.
SubCh4_ColorCircle()
DimcolorAsAcadAcCmColor
Setcolor=_
AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Callcolor.SetRGB(80,100,244)
DimcircleObjAsAcadCircle
DimcenterPoint(0To2)AsDouble
DimradiusAsDouble
centerPoint(0)=0#:centerPoint(1)=0#:centerPoint(2)=0#
radius=5#
SetcircleObj=_
ThisDrawing.ModelSpace.AddCircle(centerPoint,radius)
circleObj.TrueColor=color
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Usodecapas,coloresytiposdelínea>Asignacióndecapas,coloresytiposdelíneaaobjetos>
Cambiodeltipodelíneadeunobjeto
Pordefecto,losobjetosutilizaneltipodelíneadelacapaenlaquesecrean.Paracambiareltipodelíneadeunobjeto,utilicelapropiedadLinetypedelobjeto.Estapropiedadutilizacomoentradaelnombredeltipodelíneaquesedeseaasignaralobjeto.
Nota Parapoderasignaruntipodelíneaaunobjeto,eltipodelíneadebeencontrarsecargadoeneldibujoactual.Paracargaruntipodelíneaeneldibujo,utiliceelmétodoLoad.
Paraobtenermásinformaciónacercadelostiposdelínea,véase“Introducciónalostiposdelíneas”enelManualdelusuario.
Cambiodeltipodelíneadeuncírculo
Esteejemplocreauncírculo.Acontinuación,seintentacargareltipodelínea“CENTER”delarchivoacad.lin.Siestetipodelíneayaexiste,osielarchivonoexiste,semuestraunmensaje.Porúltimo,seestableceeltipodelíneadelcírculoen“CENTER.”.
SubCh4_ChangeCircleLinetype()
OnErrorResumeNext
'Createacircle
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2:center(1)=2:center(2)=0
radius=1
SetcircleObj=ThisDrawing.ModelSpace._
AddCircle(center,radius)
DimlinetypeNameAsString
linetypeName="CENTER"
'Cargaeltipodelínea"CENTER"desdeelarchivoacad.lin
ThisDrawing.Linetypes.LoadlinetypeName,"acad.lin"
IfErr.Description<>""ThenMsgBoxErr.Description
'Assignthecirclethelinetype"CENTER"
circleObj.Linetype="CENTER"
circleObj.Update
EndSub
¿Comentarios?
<$nopage>capa(propiedades),guardar.<$endrange>capa(parámetros):almacenar,capa(parámetros):guardar:códigodeejemplo,capa(parámetros):cambiarnombreaparámetrosguardados:códigodeejemplo,capa(parámetros):suprimirparámetrosguardados:códigodeejemplo,capa(parámetros):restablecerparámetrosguardados,capa(parámetros):restablecerparámetrosguardados:códigodeejemplo,capa(parámetros):exportarparámetrosguardados,capa(parámetros):importarparámetrosguardados,Export(método):paraparámetrosdecapaguardados,Import(método):paraparámetrosdecapaguardados,capa(parámetros):exportarparámetrosguardados:códigodeejemplo,capa(parámetros):importarparámetrosguardados:códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>
Almacenamientoyrestablecimientodeparámetrosdecapas
Sepuedenguardarlosparámetrosdelascapas,yrestablecerloscuandoseanecesario.Deestaforma,sepuedenrestituirlosparámetrosgeneralesdefinidosparalascapasenlasdiversasetapasderealizacióndeldibujoodesuimpresióneneltrazador.
Losparámetrosdecapaindicansilacapaestáonoactivada,inutilizada,bloqueada,impresaeneltrazadoroinutilizadaautomáticamenteenlasventanasnuevas;tambiéndeterminanelcolor,eltipodelínea,elgrosordelíneayelestilodetrazadodelacapa.Sepuedenespecificarlosparámetrosquesedeseanalmacenardeundibujo,einclusoguardarlosengrupos.
UnobjetoespecialdenominadoLayerStateManagerproporcionafuncionesparatrabajarconlosparámetrosdecapaenActiveX.
Paraobtenermásinformaciónacercadelalmacenamientodeparámetrosdecapas,véase“Guardadoyrestablecimientodeparámetrosdecapas“enelManualdelusuario.
Conceptosbásicosdelalmacenamientodeparámetrosdecapasen
AutoCADUsodeLayerStateManagerparagestionarparámetrosdecapa
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>
ConceptosbásicosdelalmacenamientodeparámetrosdecapasenAutoCAD
AutoCADguardalosparámetrosdecapasenundiccionariodeextensionesdelacolecciónLayersdeundibujo.Cuandoseguardanparámetrosdecapadeundibujoporprimeravez,AutoCADprocedecomoseindicaacontinuación:
Creaundiccionariodeextensionesenlacoleccióndecapas.
CreaunobjetoDictionarydenominadoACAD_LAYERSTATEeneldirectoriodeextensiones.
AlmacenalaspropiedadesdetodaslascapasdeldibujoenunobjetoXRecorddeldiccionarioACAD_LAYERSTATE.AutoCADalmacenatodoslosparámetrosdecapasincluidosenXRecord,peroidentificaaquellosparámetrosqueelusuarioeligióguardar.Cuandoserestablecenlosparámetrosdelascapas,AutoCADrestituyesólolosqueelusuarioeligióguardar.
Cadavezqueseguardaotroparámetrodecapaeneldibujo,AutoCADcreaotroobjetoXRecordconladescripcióndelosparámetrosguardadosyalmacenaXRecordeneldiccionarioACAD_LAYERSTATE.Elsiguientediagramailustraesteproceso.
Noesnecesario(ytampocodebeintentarse)interpretarlosobjetosXrecordcuandosetrabajaconparámetrosdecapaenActiveX.UtilicelasfuncionesdelobjetoLayerStateManagerparaaccederalosparámetrosdecapaguardados.
Listadodelosparámetrosdecapaguardadosenundibujo
Siseguardaronlosparámetrosdecapaeneldibujoactual,elsiguientecódigoextraeunalistaconlosnombresdetodoslosparámetrosdecapaguardados:
SubCh4_ListStates()
OnErrorResumeNext
DimoLSMDictAsAcadDictionary
DimXRecAsObject
DimlayerstateNamesAsString
layerstateNames=""
'GettheACAD_LAYERSTATESdictionary,whichisinthe
'extensiondictionaryintheLayersobject.
SetoLSMDict=ThisDrawing.Layers._
GetExtensionDictionary.Item("ACAD_LAYERSTATES")
'Listthenameofeachsavedlayersetting.Settingsare
'storedasXRecordsinthedictionary.
ForEachXRecInoLSMDict
layerstateNames=layerstateNames+XRec.Name+vbCrLf
NextXRec
MsgBox"Thesavedlayersettingsinthisdrawingare:"+_
vbCrLf+layerstateNames
EndSub
¿Comentarios?
<$endrange>capa(parámetros):almacenar,capa(parámetros):guardar:códigodeejemplo,capa(parámetros):cambiarnombreaparámetrosguardados:códigodeejemplo,capa(parámetros):suprimirparámetrosguardados:códigodeejemplo,capa(parámetros):restablecerparámetrosguardados,capa(parámetros):restablecerparámetrosguardados:códigodeejemplo,capa(parámetros):exportarparámetrosguardados,capa(parámetros):importarparámetrosguardados,Export(método):paraparámetrosdecapaguardados,Import(método):paraparámetrosdecapaguardados,capa(parámetros):exportarparámetrosguardados:códigodeejemplo,capa(parámetros):importarparámetrosguardados:códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>
UsodeLayerStateManagerparagestionarparámetrosdecapa
ElobjetoLayerStateManager,aligualqueelobjetoUtilitydeAutoCAD,proporcionaunconjuntodefuncionesdemanipulacióndedatos.Estasfuncionessonmétodosparatrabajarconparámetrosdecapaguardados.UselossiguientesmétodosLayerStateManagerparatrabajarconparámetrosdecapaguardados:
Delete
Suprimeunparámetrodecapaguardado.
Export
Exportaaunarchivoelparámetrodecapaguardadoquesehayaindicado.
Import
Importaunparámetrodecapaguardadodesdeelarchivoindicado.
Rename
Cambiaelnombredeunparámetrodecapaguardado.
Restore
Restableceeneldibujoactualelparámetrodecapaindicado.
Save
Guardalosestadosypropiedadesdelacapaindicada.
SetDataBase
AsociaunabasededatosdeAutoCADalobjetoLayerStateManager.
ParaaccederalobjetoLayerStateManager,utiliceelmétodoGetInterfaceObject.
DimoLSMAsAcadLayerStateManager
SetoLSM=ThisDrawing.Application._
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
UnavezrecuperadoelobjetoLayerStateManager,sehadeasociaraunabasededatosparateneraccesoasusmétodos.UtiliceelmétodoSetDatabaseparaasociarunabasededatosalobjetoLayerStateManager.
oLSM.SetDatabaseThisDrawing.Database
GuardadodeparámetrosdecapasRestitucióndeparámetrosdecapaExportacióneimportacióndeparámetrosdecapaguardados
¿Comentarios?
<$endrange>capa(parámetros):almacenar,capa(parámetros):guardar:códigodeejemplo,capa(parámetros):cambiarnombreaparámetrosguardados:códigodeejemplo,capa(parámetros):suprimirparámetrosguardados:códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>UsodeLayerStateManagerparagestionarparámetrosdecapa>
Guardadodeparámetrosdecapas
UtiliceelmétodoSaveparaguardarunconjuntodeparámetrosdecapadeundibujo.ElmétodoSaveaceptadosparámetros.Elprimerparámetroconsisteenunacadenaconelnombredelosparámetrosdecapaquesedebenguardar.Elsegundoparámetroidentificalaspropiedadesdecapaquedeseanutilizarse.Utilicelasconstantesdelasiguientetablaparaidentificarpropiedadesdecapa.
Constantesdepropiedadesdecapa
Nombredeconstante Layer(propiedad)
acLsAll Todoslosparámetrosdecapa
acLsColor Color
acLsFrozen Inutilizadaoreutilizada
acLsLineType Linetype
acLsLineWeight Grosordelínea
acLsLocked Bloqueadaodesbloqueada
acLsNewViewport Capasinutilizadasoreutilizadasenventanasnuevas
acLsNone Ninguna
acLsOn Activadaodesactivada
acLsPlot Trazadoactivadoodesactivado
acLsPlotStyle Estilodetrazado
Lasconstantespuedenañadirsejuntasparaprecisarvariaspropiedades.
Siintentaguardarparámetrosdecapaconunnombrequeyaexiste,apareceunerror.Parapoderreutilizarunnombre,esnecesariosuprimirocambiardenombrelosparámetrosdecapaguardadosyaexistentes.
Guardadodelosparámetrosdecolorytipodelíneadeunacapa
ElsiguientecódigoguardalosparámetrosdecolorytipodelíneadelacapaactualbajoelnombreColorLinetype.
SubCh4_SaveLayerColorAndLinetype()
DimoLSMAsAcadLayerStateManager
'AccesstheLayerStateManagerobject
SetoLSM=ThisDrawing.Application._
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
'AssociatethecurrentdrawingdatabasewithLayerStateManager
oLSM.SetDatabaseThisDrawing.Database
oLSM.Save"ColorLinetype",acLsColor+acLsLineType
EndSub
Cambiodenombredeunparámetrodecapaguardado
ElsiguientecódigocambiaelnombredelosparámetrosdecapaColorLinetypeporelnombreOldColorLinetype.
SubCh4_RenameLayerSettings()
DimoLSMAsAcadLayerStateManager
SetoLSM=ThisDrawing.Application._
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabaseThisDrawing.Database
oLSM.Rename"ColorLinetype","OldColorLinetype"
EndSub
Supresióndeunparámetrodecapaguardado
ElsiguientecódigosuprimelosparámetrosdecapaqueseguardaronbajoelnombreColorLinetype.
SubCh4_DeleteColorAndLinetype()
DimoLSMAsAcadLayerStateManager
SetoLSM=ThisDrawing.Application._
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabaseThisDrawing.Database
oLSM.Delete"ColorLinetype"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>UsodeLayerStateManagerparagestionarparámetrosdecapa>
Restitucióndeparámetrosdecapa
ElmétodoRestorerestablecelosvaloresqueseguardaronconanterioridadentodoslosparámetrosdecapadeldibujoactual.Porejemplo,siguardalosparámetrosdecolorydetipodelíneaconelnombre“ColorLinetype”yposteriormentecambialosparámetros,alrestablecer“ColorLinetype”serestituyenloscoloresylostiposdelíneaqueteníanlascapasalguardar“ColorLinetype”.Lascapasnuevasqueseagreguenaldibujodespuésdeguardar“ColorLinetype”nosevenafectadasporlarestituciónde“ColorLinetype.”.
Restitucióndelosparámetrosdecolorytipodelíneadelascapasdeundibujo
Elsiguientecódigodeejemplo,quepresuponequelosparámetrosdecolorytipodelíneadelascapasdeldibujoactualseguardaronconelnombre“ColorLinetype,”,restablecelosparámetrosdecolorytipodelíneadetodaslascapasdeldibujoconelvalorqueteníancuandoseguardó“ColorLinetype,”.
SubCh4_RestoreLayerSettings()
DimoLSMAsAcadLayerStateManager
SetoLSM=ThisDrawing.Application._
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabaseThisDrawing.Database
oLSM.Restore"ColorLinetype"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Almacenamientoyrestablecimientodeparámetrosdecapas>UsodeLayerStateManagerparagestionarparámetrosdecapa>
Exportacióneimportacióndeparámetrosdecapaguardados
Sepuedenexportareimportarparámetrosdecapaguardadosparautilizarlosenotrosdibujos.ConelmétodoExportdelobjetoLayerStateManager,losparámetrosdecapaseguardanenunarchivo;conelmétodoImport,seimportanaundibujo.
Nota Laimportacióndeparámetrosdecapanoimplicasurestitución;esnecesarioutilizarelmétodoRestoreparaquelascapasdeldibujoadquieranlosparámetrosimportados.
ElmétodoExportadmitedosparámetros.Elprimerparámetroconsisteenunacadenaidentificativadelosparámetrosdecapaquesedeseenexportar.Elsegundoparámetroeselnombredelarchivoalquesedeseenexportar.Sinoseindicaunaruta,elarchivoseguardaeneldirectoriodeinstalacióndeAutoCAD.Siyaexisteunarchivoconelnombreespecificado,elnuevonombresustituyealanterior.Alguardarlosarchivos,utilicelaextensión.las;estaextensiónpermiteaAutoCADreconocerlosarchivosdeparámetrosdecapaexportados.
ElmétodoImportaceptaunparámetro:unacadenaqueseñaleelnombredelarchivoquecontienelosparámetrosdecapaquesedeseaimportar.
Durantelaimportacióndeparámetrosdecapa,puedeproducirseunacondicióndeerrorsilaspropiedadesalasquerefierenlosparámetrosguardadosnoestándisponibleseneldibujodestinodelaimportación.Laimportacióntermina,noobstante,yseutilizanlaspropiedadespordefecto.Porejemplo,cuandoenunacapaexportadaseestableceuntipodelíneaquenoestácargadoeneldibujodestinodelaimportación,seproduceunacondicióndeerroryeltipodelíneapordefectodeldibujoquedareemplazado.Elcódigoqueseescribadebetenerencuentaestacondicióndeerrorycontinuarconelprocesosiseproduce.
Sielarchivoimportadodefineparámetrosdecapasquenoexisteneneldibujoactual,secreandichascapas.CuandoseutilizaelmétodoRestore,laspropiedadesqueseespecificaronalguardarlosparámetrosseasignanalascapasnuevas;todaslasdemáspropiedadesdelascapasnuevasadquierenlosparámetrosestablecidospordefecto.
Exportacióndeparámetrosdecapaguardados
ElsiguientecódigoexportalosparámetrosdecapaguardadosaunarchivodenominadoColortype.las.
SubCh4_ExportLayerSettings()
DimoLSMAsAcadLayerStateManager
SetoLSM=ThisDrawing.Application._
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabaseThisDrawing.Database
oLSM.Export"ColorLinetype","c:\mydocuments\ColorLType.las"
EndSub
Importacióndeparámetrosdecapaguardados
ElsiguientecódigoimportalosparámetrosdecapaguardadosdesdeunarchivodenominadoColortype.las.
SubCh4_ImportLayerSettings()
DimoLSMAsAcadLayerStateManager
SetoLSM=ThisDrawing.Application._
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabaseThisDrawing.Database
'Ifthedrawingyou'reimportingtodoesnotcontain
'allthelinetypesreferencedinthesavedsettings,
'anerrorisreturned.Theimportiscompleted,though,
'andthedefaultlinetypeisused.
OnErrorResumeNext
oLSM.Import"c:\mydocuments\ColorLType.las"
IfErr.Number=-2145386359Then
'Errorindicatesalinetypeisnotdefined
MsgBox("Oneormorelinetypesspecifiedintheimported"+_
"settingsisnotdefinedinyourdrawing")
EndIf
OnErrorGoTo0
EndSub
¿Comentarios?
<$nopage>textodelíneasmúltiples.
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>
Adicióndetextoadibujos
Eltextodelosdibujosproporcionaalusuarioinformaciónderelevancia.Así,puedeempleartextoparaloscuadrosdetítulosparaasignaretiquetasaldibujo,indicarcaracterísticasoincluiranotaciones.
AutoCADponeasudisposicióndistintastécnicasparacreartexto.Paraentradasbrevesysencillas,utilicetextodeunalínea.Sideseaescribirtextodeproporcionesmayoresconformato,utilicetextodelíneasmúltiples(textoM).Aunquetodotextoqueseintroduzcausaelestilodetextoactual,queestableceeltipodeletraylosparámetrosdeformatopordefecto,esposibleutilizarvariosmétodosparapersonalizarsuaspecto.
Paraobtenermásinformaciónacercadelusodetexto,véase“Creacióndetexto”enelManualdelusuario.
UtilizacióndelosestilosdetextoUsodeltextoenunalínea(Text)Usodeltextodelíneasmúltiples(Mtext)UsodecaracteresUnicode,códigosdecontrolycaracteresespecialesSustitucióndetiposdeletraCorrecciónortográfica
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>
Utilizacióndelosestilosdetexto
EltextodelosdibujosdeAutoCADtieneunestiloasociado.Alescribirtexto,AutoCADempleaelestilodetextoactual,quedeterminaeltipodeletra,eltamaño,elángulo,laorientaciónyotrascaracterísticasdeltexto.Puedeutilizaromodificarelestilopordefectoocrearycargarunnuevoestilo.Unavezquehayacreadounestilopuedemodificarsusatributosoborrarlocuandoyanolonecesite.
CreaciónymodificacióndeestilosdetextoAsignacióndetiposdeletraTiposdeletraTrueTypeTiposdeletraUnicodeyGrandesAjustedealturadeltextoAjustedelángulodeoblicuidadEstablecimientodeindicadoresdegeneracióndetexto
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>
Creaciónymodificacióndeestilosdetexto
Cuandosecreauntexto,AutoCADasumelaspropiedadesdelestilodetextoactual,entrelasqueseincluyelaaltura,larelaciónanchura/altura,elángulodeoblicuidadylaspropiedadesdegeneracióndetexto.Sideseacrearunestilodetexto,utiliceelmétodoAddparacrearunobjetoTextStylenuevoyañadirloalacolecciónTextStyles.ElmétodoAddutilizacomoentradaunnombredeTextStyle.Unavezcreado,elnombredelosestilosdetextonosepuedecambiarconActiveXAutomationdeAutoCAD.
Losnombresdeestilopuedencontenerletras,númerosyloscaracteresespecialesdelsignodedólar($),subrayado(_)yguión(–).AutoCADpasaloscaracteresamayúsculas.Sinoseespecificaunnombredeestilo,AutoCADleasignaautomáticamenteelnombreEstilon,dondenesunnúmeroqueempiezaen1.Cadanuevoestilopresentaunincrementode1.
LosestilosexistentessepuedenmodificarsisecambianlaspropiedadesdelobjetoTextStyle.Tambiénpuedeactualizartextoexistentedeesetipodeestiloparaqueloscambiosquedenreflejados.ParamodificarunobjetoTextStyle,utilicelassiguientespropiedades:
FontFile
Especificaelarchivoasociadoauntipodeletra(estilodecarácter).
BigFontFile
EspecificaelarchivodedefinicióndeformasespecialesempleadoenconjuntosdecaracteresnoASCII.
Height
Especificalaalturadeloscaracteres.
Width
Especificalaexpansiónocompresióndeloscaracteres.
ObliqueAngle
Especificalainclinacióndeloscaracteres.
TextGenerationFlag
Especificasieltextodebegenerarsehacialaizquierda,bocaabajooenambossentidos.
Almodificareltipodeletraolaorientacióndeunestiloexistente,todoeltextoqueempleedichoestilocambiaparareflejareltipodeletraolaorientaciónnuevos.Alcambiarlaalturadeltexto,larelaciónanchura/alturaoelángulodeoblicuidadnosemodificaeltextoexistente,perosíafectaalosobjetosdetextoquesecreenposteriormente.
Nota LlameaunodelosmétodosRegenoUpdateparaverloscambiosefectuadosenlaspropiedadesanteriores.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>
Asignacióndetiposdeletra
Lostiposdeletradefinenlasformasdeloscaracteresdetextoqueconstituyenlosjuegosdecaracteres.Untipodeletrapuedeserutilizadoenmásdeunestilo.Paraasignaruntipodeletraaunestilodetexto,utilicelapropiedadFontFiledelobjetoTextStyle.Puedeasignaruntipodeletracompilado(SHX)propiodeAutoCADalestilodetexto,especificandoelarchivodetipodeletraquelocontenga.
Establecimientodelostiposdeletradeltexto
Enesteejemploseobtienenlosvaloresdetipodeletradelestilodetextoactivoysecambiaalafamiliadetipos“PlayBill.”DespuésestableceelnuevotipodeletramedianteelmétodoSetFont.Paravercómoafectaelcambiodetipodeletraaltexto,añadaunobjetoMtextoTextaldibujoactualantesdeejecutarelejemplo.Recuerdeque,sielsistemanodisponedeltipodeletraPlayBill,debesustituirloporalgúntipoquetengainstaladosusistema;delocontrario,elcódigodeejemplonofuncionará.
SubCh4_UpdateTextFont()
MsgBox("Lookatthetextnow...")
DimtypeFaceAsString
DimSavetypeFaceAsString
DimBoldAsBoolean
DimItalicAsBoolean
DimcharSetAsLong
DimPitchandFamilyAsLong
'Getthecurrentsettingstofillinthe
'defaultvaluesfortheSetFontmethod
ThisDrawing.ActiveTextStyle.GetFonttypeFace,_
Bold,Italic,charSet,PitchandFamily
'Changethetypefaceforthefont
SavetypeFace=typeFace
typeFace="PlayBill"
ThisDrawing.ActiveTextStyle.SetFonttypeFace,_
Bold,Italic,charSet,PitchandFamily
ThisDrawing.RegenacActiveViewport
MsgBox("Nowseehowitlooksafterchangingthefont...")
'Restoretheoriginaltypeface
ThisDrawing.ActiveTextStyle.SetFontSavetypeFace,_
Bold,Italic,charSet,PitchandFamily
ThisDrawing.RegenacActiveViewport
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>
TiposdeletraTrueType
LostiposdeletraTrueTypeaparecensiemprerellenosenlosdibujos;sinembargo,cuandosetraza,lavariabledesistemaTEXTFILLcontrolasilostiposdeletraserellenanono.Pordefecto,elvalordeTEXTFILLes1,paratrazartiposdeletrarellenos.SiexportaeldibujoalformatoPostScript®conelmétodoExportyloimprimeenundispositivoPostScript,eltipodeletrasetrazarátalcomosehayadiseñado.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>
TiposdeletraUnicodeyGrandes
AutoCADadmiteelestándardecodificacióndecaracteresUnicode.UntipodeletraUnicodepuedecontener65.535caracteres,conformasparamuchosidiomas.TodoslostiposdeletradeAutoCADconlaextensión.SHXseconsiderantiposdeletraUnicode.
LosarchivosdetextodealgunosalfabetoscontienenmilesdecaracteresquenosonASCII.Parapermitirdichotexto,AutoCADadmiteuntipoespecialdedefinicióndeformaconocidocomoarchivoBigFont.PuededefinirunestiloparausartantoarchivosnormalescomoBigFont.EspecifiquefuentesnormalesutilizandolapropiedadFontFile.EspecifiqueBigFontsutilizandolapropiedadBigFontFile.
Nota Elnombredelosarchivosdetiposdeletranodebeincluircomas.
AutoCADponeasudisposiciónlosmétodosnecesariosparallevaracabolasustitucióndeuntipodeletraporotrooladefinicióndeuntipodeletrapordefecto.Paraobtenermásinformación,véaseSustitucióndetiposdeletra.
Cambiodelosarchivosdetiposdeletra
EsteejemplocambialaspropiedadesFontFileyBigFontFile.Debereemplazarlainformaciónderutadeaccesodeesteejemploconlosnombresdearchivoyrutaapropiadosensusistema.
SubCh4_ChangeFontFiles()
ThisDrawing.ActiveTextStyle.BigFontFile=_
"C:/AutoCAD/Fonts/bigfont.shx"
ThisDrawing.ActiveTextStyle.fontFile=_
"C:/AutoCAD/Fonts/italic.shx"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>
Ajustedealturadeltexto
Laalturadeltextodeterminaeltamañodeloscaracteresdeltipodeletrautilizadoenunidadesdedibujo.Elvalorsuelerepresentareltamañodelasletrasmayúsculas,exceptuandolostiposdeletraTrueType.
EnelcasodelostiposdeletraTrueType,esposiblequeelvalordelaalturadeltextonorepresentelaalturadelasletrasmayúsculas.Laalturaespecificadarepresentalaalturadelasletrasmayúsculasmásunáreadeacentosreservadaparatildesyotrasmarcasutilizadasenidiomasquenosoninglés.Lapartedeáreaproporcionalasignadaalasletrasmayúsculasyaloscaracteresacentuadosestádeterminadaporeldiseñadordeltipodeletraenelmomentodecrearloyvaríadeuntipoaotro.
Ademásdelaalturadelasletrasmayúsculasydeláreaascendentequeincluyelaalturaespecificadaporelusuario,lostiposdeletraTrueTypetienenunáreadescendenteparaaquellaspartesdeloscaracteresquesobrepasenpordebajolalíneadeinsercióndetexto.Algunosejemplosdeestoscaracteressony,j,p,g,q.
LaalturadeltextoseprecisamediantelapropiedadHeight.Estapropiedadsóloadmitenúmerospositivos.
ModificacióndelaalturadeunobjetoText
Esteejemplocreaunalíneadetextoydespuéscambialaalturadeltexto.
SubCh4_ChangeTextHeight()
DimtextObjAsAcadText
DimtextStringAsString
DiminsertionPoint(0To2)AsDouble
DimheightAsDouble
'Definethetextobject
textString="Hello,World."
insertionPoint(0)=3
insertionPoint(1)=3
insertionPoint(2)=0
height=0,5
'Createthetextobjectinmodelspace
SettextObj=ThisDrawing.ModelSpace._
AddText(textString,insertionPoint,height)
'ChangethevalueoftheHeightto1
textObj.height=1
textObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>
Ajustedelángulodeoblicuidad
Elángulodeoblicuidaddeterminaelgradodeinclinacióndeltexto.Elángulorepresentaeldesfasedesdeelejevertical(90grados).Paraestablecerelángulodeoblicuidad,utilicelapropiedadObliqueAngle.Elánguloseespecificaenradianes.Unángulopositivodenotaunainclinaciónhacialaderechayalosvaloresnegativosselessuma2*PIparaconvertirlosensuequivalentepositivo.
Creacióndetextooblicuo
EsteejemplocreaunobjetoTextyleaplicaunángulodeoblicuidadde45grados.
SubCh4_ObliqueText()
DimtextObjAsAcadText
DimtextStringAsString
DiminsertionPoint(0To2)AsDouble
DimheightAsDouble
'Definethetextobject
textString="Hello,World."
insertionPoint(0)=3
insertionPoint(1)=3
insertionPoint(2)=0
height=0,5
'Createthetextobjectinmodelspace
SettextObj=ThisDrawing.ModelSpace._
AddText(textString,insertionPoint,height)
'ChangethevalueoftheObliqueAngle
'to45degrees(.707radians)
textObj.ObliqueAngle=0.707
textObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Utilizacióndelosestilosdetexto>
Establecimientodeindicadoresdegeneracióndetexto
Elindicadordegeneracióndetextodeterminasieltextosemuestrareflejadohacialaizquierdaobocaabajo.Paraestablecerelindicadordegeneracióndetexto,utilicelapropiedadTextGenerationFlag.IntroduzcaacTextFlagBackwardenlapropiedadsideseaqueeltextosegenerehacialaizquierda,oacTextFlagUpsideDownparaquesereflejehaciaabajo.Paraqueeltextosemuestrereflejadohacialaizquierdaybocaabajo,añadalasdosconstantesalavez,especificandoacTextFlagBackward+acTextFlagUpsidedowncomovalordeestapropiedad.
Presentacióndeltextoreflejadohacialaizquierda
Enesteejemplosecreaunalíneadetextoy,mediantelapropiedadTextGenerationFlag,seestablecequesemuestrehacialaizquierda.
SubCh4_ChangingTextGenerationFlag()
DimtextObjAsAcadText
DimtextStringAsString
DiminsertionPoint(0To2)AsDouble
DimheightAsDouble
'Createthetextobject
textString="Hello,World."
insertionPoint(0)=3
insertionPoint(1)=3
insertionPoint(2)=0
height=0,5
SettextObj=ThisDrawing.ModelSpace._
AddText(textString,insertionPoint,height)
'ChangethevalueoftheTextGenerationFlag
textObj.TextGenerationFlag=acTextFlagBackward
textObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>
Usodeltextoenunalínea(Text)
Eltextoqueseañadealosdibujosincluyeunagranvariedaddeinformación.Puedetratarsedeunaespecificacióndetallada,uncuadroderotulación,unaetiquetaoinclusounapartedeundibujo.Paralasentradasbrevesquenorequieranvariostiposdeletraovariaslíneas,creeeltextodelalíneamedianteelobjetoText.Eltextoenunalíneaesmásadecuadoparalasetiquetas.
CreacióndelíneasdetextoFormatodeltextoenlíneaAlineacióndeltextodeunalíneaModificacióndeltextodeunalínea
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextoenunalínea(Text)>
Creacióndelíneasdetexto
Cuandoseutilizaestafuncióndetexto,cadalíneadetextoesunobjetoindependiente.LosobjetosdetextoenunalíneasecreanconelmétodoAddText.Estemétodorequieretresvaloresdeentrada:lacadenadetexto,elpuntodeinserción,ylaalturadeltexto.
Lacadenadetextoeseltextorealquesedeseamostrar.SepuedeutilizarUnicode,códigodecontrolycaracteresespeciales.Elpuntodeinserciónesunamatrizdevariantescontresdoblesqueindicanlascoordenadas3DdelSCUdeldibujodondeseincluiráeltexto.Laalturadeltextoesunnúmeropositivoquerepresentalaalturadeloscaracteresenmayúscula.Laalturaseindicaenlaunidaddemedidaactiva.
Creacióndelíneasdetexto
Elcódigosiguientecreaunalíneadetextoenespaciomodelo,enlascoordenadas(2,2,0).
SubCh4_CreateText()
DimtextObjAsAcadText
DimtextStringAsString
DiminsertionPoint(0To2)AsDouble
DimheightAsDouble
'Createthetextobject
textString="Hello,World."
insertionPoint(0)=2
insertionPoint(1)=2
insertionPoint(2)=0
height=0,5
SettextObj=ThisDrawing.ModelSpace._
AddText(textString,insertionPoint,height)
textObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextoenunalínea(Text)>
Formatodeltextoenlínea
LosobjetosTextquesecreanutilizanelestilodetextoactivo.PuedecambiarelformatodelobjetoTextmodificandoelestilodetextoquetengaasociadoobieneditandolaspropiedadesdelobjetoText.Nosepuedenaplicarformatosapalabrasocaracteresindividuales.
ParacambiarelestilodetextoasociadoaunobjetoTextconcreto,definalapropiedadStyleNameconunestilodetextonuevo.Unavezcambiadoelestilo,utiliceelmétodoUpdatedelobjetoTextparaverloscambioseneldibujo.
EntrelaspropiedadesquepuedencambiarseenunobjetoTextseincluyen,ademásdelaspropiedadesestándarmodificablesdelasentidades(color,capa,tipodelínea,etc.):
Alignment
Determinalaalineaciónhorizontalyverticaldeltexto.
InsertionPoint
Determinaelpuntodeinsercióndeltexto.
ObliqueAngle
DeterminaelángulodeoblicuidaddelobjetoTextindividual.
Rotation
Determinaelánguloderotacióndeltexto,enradianes.
ScaleFactor
Determinaelfactordeescaladeltexto.
TextAlignmentPoint
Determinaelpuntodealineacióndeltexto.
TextGenerationFlag
Especificasieltextosemuestrareflejadohacialaizquierda,bocaabajoolasdoscosasalavez.
TextString
Especificalacadenadetextoquemostrarálapantalla.
Siemprequesemodificaunapropiedad,debeutilizarseelmétodoUpdateparaverloscambioseneldibujo.
Nota Paraobtenerunalistacompletadelosmétodosypropiedades,véaseladocumentacióndelobjetoTextenAutoCADActiveXandVBAReference.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextoenunalínea(Text)>
Alineacióndeltextodeunalínea
Puedejustificartextodelíneahorizontalyverticalmente.Laalineaciónpordefectoeslaizquierda.Paraestablecerlasopcionesdealineaciónhorizontalyvertical,utilicelapropiedadAlignment.
Modificacióndelaalineacióndeltexto
EsteejemplocreaunobjetoTextyunobjetoPoint.ElobjetoPointseestablececomoelpuntodealineacióndeltextoysecambiaporuncursorencruzrojoparaqueestévisible.Secambialaalineacióndeltextoysemuestrauncuadrodemensajeparaindicarquelaejecucióndelamacroestádetenida.Estopermiteverquéocurrealcambiarlaalineacióndeltexto.
SubCh4_TextAlignment()
DimtextObjAsAcadText
DimtextStringAsString
DiminsertionPoint(0To2)AsDouble
DimheightAsDouble
'DefinethenewTextobject
textString="Hello,World."
insertionPoint(0)=3
insertionPoint(1)=3
insertionPoint(2)=0
height=0,5
'CreatetheTextobjectinmodelspace
SettextObj=ThisDrawing.ModelSpace._
AddText(textString,insertionPoint,height)
'Createapointoverthetextalignmentpoint,
'sowecanbettervisualizethealignmentprocess
DimpointObjAsAcadPoint
DimalignmentPoint(0To2)AsDouble
alignmentPoint(0)=3
alignmentPoint(1)=3
alignmentPoint(2)=0
SetpointObj=ThisDrawing.ModelSpace._
AddPoint(alignmentPoint)
pointObj.Color=acRed
'Setthepointstyletocrosshair
ThisDrawing.SetVariable"PDMODE",2
'AlignthetexttotheLeft
textObj.Alignment=acAlignmentLeft
ThisDrawing.RegenacActiveViewport
MsgBox"TheTextobjectisnowalignedleft"
'AlignthetexttotheCenter
textObj.Alignment=acAlignmentCenter
'Alignthetexttothepoint(necessaryfor
'allbutleftalignedtext.)
textObj.TextAlignmentPoint=alignmentPoint
ThisDrawing.RegenacActiveViewport
MsgBox"TheTextobjectisnowcentered"
'AlignthetexttotheRight
textObj.Alignment=acAlignmentRight
ThisDrawing.RegenacActiveViewport
MsgBox"TheTextobjectisnowalignedright"
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextoenunalínea(Text)>
Modificacióndeltextodeunalínea
Comocualquierotroobjeto,losobjetosTextsepuedendesplazar,girar,borrarycopiar.Tambiénsepuedecrearsimetríadetexto.Sinodeseaqueeltextofiguredeformainversaalreflejarloensimetría,asigneelvalor0alavariableMIRRTEXT.
EnlalistasiguientefiguranalgunosdelosmétodosdelosquedisponenlosobjetosTextparalaedición.Paraobtenerunalistacompleta,véaseladocumentaciónsobreobjetosTextenlaActiveXandVBAReferencedeAutoCAD.
ArrayPolar
Creaunamatrizpolar.
ArrayRectangular
Creaunamatrizrectangular.
Copy
CopiaelobjetoText.
Erase
BorraelobjetoText.
Mirror
ReflejaelobjetoTextensimetría.
Move
DesplazaelobjetoText.
Rotate
GiraelobjetoText.
¿Comentarios?
<$nopage>textodelíneasmúltiples.
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>
Usodeltextodelíneasmúltiples(Mtext)
Paraentradaslargasycomplejas,creeuntextodelíneasmúltiples(textoM).Eltextodelíneasmúltiplesseajustaaunaanchuradeterminada,sibienverticalmentesulongitudpuedeextenderseindefinidamente.DentrodeunobjetotextoMsepuedeasignarformatoporpalabrasoporcaracteres.
ParacreartextodelíneasmúltiplesFormatodeltextodelíneasmúltiples
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextodelíneasmúltiples(Mtext)>
Paracreartextodelíneasmúltiples
Puedecrearunobjetodetextodevariaslíneas(objetotextoM)conelmétodoAddMText.Estemétodorequieretresvaloresdeentrada:lacadenadetexto,elpuntodeinsercióndeldibujoenelquecolocareltexto,ylaanchuradelprismadecontorno.
Lacadenadetextoeseltextorealquesedeseamostrar.SepuedeutilizarUnicode,códigodecontrolycaracteresespeciales.Elpuntodeinserciónesunamatrizdevariantescontresdoblesqueindicanlascoordenadas3DdelSCUdeldibujodondeseincluiráeltexto.Laanchuradeltextoesunnúmeropositivoquerepresentalaanchuradelacajaquecontieneeltexto.Laanchurasemideenlaunidaddemedidaactual.
UnavezcreadoelobjetoTextdelíneasmúltiples,puedeaplicarlelaalturadeltexto,lajustificación,elánguloderotaciónyelestiloobienaplicarunformatoacaracteresindividuales.
ParaobtenerunalistadelosmétodosylaspropiedadesrelacionadosconelobjetoMText,véaselaentradasobreMTextdelaActiveXandVBAReference.
Paracreartextodelíneasmúltiples
ElcódigosiguientecreaunobjetoMtextenlascoordenadas(2,2,0)delespaciomodelo.
SubCh4_CreateMText()
DimmtextObjAsAcadMText
DiminsertPoint(0To2)AsDouble
DimwidthAsDouble
DimtextStringAsString
insertPoint(0)=2
insertPoint(1)=2
insertPoint(2)=0
width=4
textString="Thisisatextstringforthemtextobject."
'CreateatextObjectinmodelspace
SetmtextObj=ThisDrawing.ModelSpace._
AddMText(insertPoint,width,textString)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Usodeltextodelíneasmúltiples(Mtext)>
Formatodeltextodelíneasmúltiples
Eltextonuevoadquieredeformaautomáticaelestilodetextoactivo.ElestilodetextopordefectoesESTANDAR.PuedeignorarelestilodetextopordefectoaplicandoelementosdeformatoacaracteresindividualesyaplicandopropiedadesalobjetoText.Tambiénsepuedenindicarelformatoocaracteresespecialesconlosmétodosdescritosenestasección.
Lasopcionesdeorientacióncomoelestilo,lajustificación,laanchuraylarotaciónafectanatodoeltextoincluidoenelcontornodeuntextodelíneasmúltiples,ynosóloaunaspalabrasocaracteresdeterminados.UtilicelapropiedadAttachmentPointparacambiarlajustificacióndelobjetoMTextylapropiedadRotationparadeterminarelánguloderotacióndelcontornodeltexto.
LapropiedadStyleNameestablecelostiposdeletraylosaspectosdeformatopordefectodelnuevotexto.Conformesecreatexto,sepuedeseleccionarelestiloquedeseautilizarseenlalistadeestilosexistentes.CuandosecambiaelestilodeunobjetoTextdelíneasmúltiplesconatributosdeformatodecaracteresasignadosacualquierpartedeltexto,elestiloseaplicaatodoelobjetoyesposiblequenoseconservetodoelformatodeloscaracteres.Porejemplo,cambiarunestiloTrueTypeporunestiloqueutilizauntipodeletraSHXuotrotipoTrueTypeconllevalasustitucióndeltipodeletraentodoelobjetodetextoylapérdidadelformatoparticularquepuedantenerasignadoalgunoscaracteres.
Lasopcionesdeformatocomoelsubrayado,eltextoapiladooeltipodeletrapuedenaplicarsedeformaindividualaloscaracteresopalabrasqueconformanunpárrafo.Tambiénpuedecambiarelcolor,eltipodeletraylaalturadeltexto.Puedemodificarelespacioentreloscaracteresdetextooaumentarlaanchuradeloscaracteres.
Utilicellaves({})paraidentificareltextoalquedeseeaplicarelcambiode
formato.Lasllavespuedenanidarsehastaalcanzar8niveles.
TambiénsepuedeintroducirelequivalenteASCIIdecódigosdecontrolenlaslíneasolospárrafosparaindicarcaracteresdeformatooespeciales,comosímbolosdetoleranciaydeacotación.
Puedeutilizarloscaracteresdecontrolsiguientesparacreareltextodelailustración.(PuedeverelequivalenteASCIIdeestacadenaenelejemploquesigue).
{{\H1.5x;Bigtext}\A2;overtext\A1;/\A0;undertext}
Paraobtenermásinformaciónacercadedarformatoalíneasmúltiples,véase“Aplicacióndeformatoaloscaracteresdetextodelíneasmúltiples”enelManualdelusuario.
Utilizacióndecaracteresdecontrolparadarformatoaltexto
Enesteejemplosecreaunobjetodelíneasmúltiplesyseleasignaformato.
SubCh4_FormatMText()
DimmtextObjAsAcadMText
DiminsertPoint(0To2)AsDouble
DimwidthAsDouble
DimtextStringAsString
insertPoint(0)=2
insertPoint(1)=2
insertPoint(2)=0
width=4
'DefinetheASCIIcharactersforthecontrolcharacters
DimOBAsLong'OpenBracket{
DimCBAsLong'CloseBracket}
DimBSAsLong'BackSlash\
DimFSAsLong'ForwardSlash/
DimSCAsLong'Semicolon;
OB=Asc("{")
CB=Asc("}")
BS=Asc("\")
FS=Asc("/")
SC=Asc(";")
'Assignthetextstringthefollowinglineofcontrol
'charactersandtextcharacters:
'{{\H1.5x;Bigtext}\A2;overtext\A1;/\A0;undertext}
textString=Chr(OB)+Chr(OB)+Chr(BS)+"H1.5x"_
+Chr(SC)+"Bigtext"+Chr(CB)+Chr(BS)+"A2"_
+Chr(SC)+"overtext"+Chr(BS)+"A1"+Chr(SC)_
+Chr(FS)+Chr(BS)+"A0"+Chr(SC)+"undertext"_
+Chr(CB)
'CreateatextObjectinmodelspace
SetmtextObj=ThisDrawing.ModelSpace._
AddMText(insertPoint,width,textString)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>
UsodecaracteresUnicode,códigosdecontrolycaracteresespeciales
PuederepresentarsímbolosenlascadenasdetextomediantecaracteresUnicode,códigosdecontrolycaracteresespeciales.(TodosloscaracteresquenoseantextodebenespecificarsemediantesuequivalenteASCII).
Paracrearcaracteresespeciales,sepuedeintroducirlassiguientescadenasdecaracteresUnicode:
DescripcióndeloscaracteresUnicode
CarácterUnicode Descripción
\U+00B0 Símbolodegrado
\U+00B1 Símbolodetoleranciamás/menos
\U+2205 Símbolodecotadediámetro
Loscaracteresespecialessepuedenespecificar,ademásdeconcaracteresUnicode,incluyendoinformacióndecontrolenlacadenadetexto.Utiliceunpardesignosdeporcentaje(%%)delantedecadasecuenciadecontrol.Porejemplo,elsiguientecódigodecontrolutilizauntextodeAutoCADestándarytiposde
letraPostScriptparadibujarelnúmerodecarácternnn:
%%nnn
EnunacadenadetextodeVBoVBA,elejemploanteriorseescribiríacomo:
DimpercentasLong
percent=ASC("%")
TextString=chr(percent)+chr(percent)+"nnn"
EstoscódigosdecontrolsólofuncionanconlostiposdeletradetextoestándardeAutoCAD:
Descripcióndeloscódigosdecontrol
Códigodecontrol Descripción
%%o Activaydesactivaelmododesuprarrayado.
%%u Activaydesactivaelmododesubrayado.
%%d Dibujaelsímbolodegrados.
%%p Dibujaunsímbolodetoleranciamás/menos.
%%c Dibujaelsímbolodecotadediámetro.
%%% Dibujaelsignodeporcentaje(unosolo).
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>
Sustitucióndetiposdeletra
PuededesignartiposdeletraparaqueseansustituidosporotrosoparaquesirvancomotiposdeletrapordefectocuandoAutoCADnopuedaencontraruntipodeletraespecificadoenundibujo.
SiAutoCADnopuedelocalizaruntipodeletraespecificadoenundibujo,sepuedendesignarquétiposdeletrasdeterminadossesustituyenporotrosoporlostipospordefecto.
Lostiposdeletraempleadoseneltextodelosdibujosestándeterminadosporelestilodeltextoy,enelcasodetextodelíneasmúltiples,porlosformatosdetiposdeletraindividualesaplicadosadeterminadaspartesdeltexto.Sepuedenutilizartablasdeasignacióndetiposdeletraparaasegurarsedequeeldibujosóloempleadeterminadostiposdeletra,oparaconvertirlostiposdeletraempleadosenuntipodeletradistinto.AutoCADincorporaunatabladeasignacióndetiposdeletrapordefecto.EstearchivopuedeeditarseutilizandouneditordetextoASCII.SepuedenespecificarotrastablasdeasignacióndetiposmediantelapropiedadFontFileMapdelobjetoPreferences.
Paraobtenermásinformaciónacercadelastablasdeasignacióndetiposdeletraylasustitucióndetipos,véase“Tiposdeletraalternativos”enelManualdelusuario.
Definicióndeuntipodeletraalternativopordefecto
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>Sustitucióndetiposdeletra>
Definicióndeuntipodeletraalternativopordefecto
Sieldibujoespecificauntipodeletraquenofiguraenelsistema,AutoCADprocedeasusustituciónporeltipodesignadoatalefecto.AutoCADutilizapordefectoelarchivosimplex.shx.Noobstante,silonecesita,puedeindicarotrotipodeletra.UtilicelapropiedadAltFontFiledelobjetoPreferencescuandodeseedefinirelnombredelarchivodetiposdeletraalternativos.
Siutilizaunaestilodetextoqueempleauntipodeletragrande,puedeasignarloaotrotipodeletraconlapropiedadAltFontFile.Estavariabledesistemautilizadosarchivosdetiposdeletrapordefecto,txt.shxybigfont.shx.
SiAutoCADnopuedeabrirunarchivodefuentealabrirundibujo,aplicaunconjuntopordefectodereglasdesustitución.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>CreaciónyedicióndeentidadesdeAutoCAD>Adicióndetextoadibujos>
Correcciónortográfica
Durantelacomprobaciónortográfica,AutoCADestablececorrespondenciasentrepalabrasdeldibujoylasdeldiccionarioprincipaldeesemomento.Laspalabrasqueañadasealmacenaráneneldiccionariopersonalizadoqueseencuentreenusoenelmomentodelaverificaciónortográfica.Porejemplo,puedeañadirnombrespropiosparaqueAutoCADlosreconozca.
Sideseacomprobarlaortografíadeuntextoredactadoenotroidioma,utiliceeldiccionarioprincipalcorrespondiente.
ActiveXAutomationdeAutoCADnodisponedeningúnmétododerevisiónortografía.Noobstante,sepuedeespecificarundiccionarioprincipaldistintoconlapropiedadMainDictionary,uotrodiccionariopersonalizadomediantelapropiedadCustomDictionarydelobjetoPreferences.
Paraobtenermásinformaciónacercadelacomprobaciónortográfica,véase“Correcciónortográfica”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>
Cotasytolerancias
Lascotasagreganmedidasalosdibujos.Lastoleranciasestablecenlavariaciónposibledeunacota.MedianteActiveXAutomationsepuedengestionarcotasconestilosymodificacionesdecota.
ConceptossobrecotasCreacióndecotasEdicióndecotasTrabajoconestilosdecotaAcotaciónenespaciomodeloyenespaciopapelCreacióndedirectricesyanotacionesUsodetoleranciasgeométricas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>
Conceptossobrecotas
Lascotasindicanlasmedidasgeométricasdeobjetos,lasdistanciasoángulosentreobjetosolascoordenadasXyYdeunacaracterística.AutoCAD®ofrecetrestiposbásicosdeacotación:lineal,radialyangular.Lascotaslinealesincluyencotasalineadas,rotadasydecoordenadas.
Sepuedenacotarlíneas,líneasmúltiples,arcos,círculosysegmentosdepolilínea,obiencrearcotasindependientes.
AutoCADdibujalascotasenlacapaactiva.Todaslascotastienenunestiloasociado,quepuedeserelestablecidopordefectoounodefinidoporelusuario.Elestilocontrolaaspectoscomoelcolor,elestilodetextoylaescaladetiposdelínea.Losdatosdealturadelobjetonoseconsideran.Lafamiliadeestilospermiterealizarligerasmodificacionesenlosdiferentestiposdecotasapartirdeunestilobase.Lassustituciones,porsuparte,permitenmodificarelestilodecotasdeterminadas.
Paraobtenermásinformaciónsobrecotas,véase“Modificacióndeobjetosexistentes”enelManualdelusuario.
PartesdeunacotaDefinicióndevariablesdesistemaparalaacotación.Definicióndeestilosdeltextodecota
ConceptosbásicosdelaslíneasdirectricesConceptosbásicosdelascotasasociativas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>
Partesdeunacota
Estaseccióndescribebrevementelaspartesdeunacota
Unalíneadecotaconsisteenunalíneaqueindicaladirecciónylaextensióndeunacota.Enlascotasangulares,lalíneadecotaesunarco.Laslíneasdereferencia,tambiénllamadaslíneasdeextensiónodeproyección,seextiendendesdelacaracterísticaqueseestáacotandohastalalíneadecota.Losextremosdecota,tambiénllamadossímbolosdeterminaciónofinalización,seañadenencadaextremodelalíneadecota.Eltextodecotaesunacadenadetextoquenormalmenteindicalamedidaactual.Untextotambiénpuedeincluirprefijos,sufijosytolerancias.Unadirectrizesunalíneacontinuaqueuneunaanotaciónylacaracterísticaalaquehacereferencia.Unamarcadecentroesunapequeñacruzqueindicaelcentrodeuncírculoodeunarco.Laslíneasdecentrosonlíneasdiscontinuasqueindicanelcentrodeuncírculoodeunarco.
Paraobtenermásinformaciónacercadelaspartesdeunacota,véase“Partesdeunacota”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>
Definicióndevariablesdesistemaparalaacotación.
Lasvariablesdelsistemacontrolanlaaparienciadelascotas.LasvariablesdelsistemadecotasincluyenDIMAUNIT,DIMUPT,DIMTOFL,DIMFIT,DIMTIH,DIMTOH,DIMJUST,yDIMTAD.PuededefinirestasvariablesutilizandoelmétodoSetVariablePorejemplo,lasiguientelíneadecódigoestablecelavariabledesistemaDIMAUNIT(elformatodelasunidadesdelascotasangulares)enradianes(3):
ThisDrawing.SetVariable"ACOUNANG",3
Paraobtenerinformaciónacercadelasvariablesdesistemaparalaacotación,véase“Utilizacióndeestilosdecotas”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>
Definicióndeestilosdeltextodecota
Eltextodecotaesunacadenadecaracteresasociadaaunacota,quepuedeincluirmedidas,tolerancias(lateralesygeométricas),prefijos,sufijosynotasdetextoenunalíneaoenunpárrafo.EltextodecotapuedeincluirlamedidaqueAutoCADcalculapordefectoocualquiertextoqueproporcioneelusuario;tambiénsepuedesuprimirtodoeltextodecota.Eltextodecotapuedeutilizarseparaagregarinformación,yaseanprocedimientosespecialesdefabricaciónoindicacionesdeensamblaje.
EltextodecotaenunalíneautilizaelestilodetextoactivoquedesignalapropiedadActiveTextStyleLospárrafosdetextoutilizanelestilodetextoactivocontodaslasmodificacionesqueserealicenenlacadenadetexto.
Paraobtenermásinformaciónacercadeltextodecota,véase“Controldeltextodelacota”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>
Conceptosbásicosdelaslíneasdirectrices
Unalíneadirectrizpordefectoesunalínearectaconunextremodecota(cabezadeflecha)quehacereferenciaaunacaracterísticadeundibujo.Porreglageneral,lafuncióndeunadirectrizesconectarlaanotaciónconlacaracterísticaanotada.Enestecaso,anotaciónsignificatextodepárrafo,bloquesomarcosdecontroldecaracterísticas.EstaslíneasdirectricessondiferentesdelaslíneasdirectricessencillasqueAutoCADcreaautomáticamenteparalascotasradiales,dediámetroylineales,cuyotextonoseajustaentrelaslíneasdereferencia.
Losobjetosdirectricesseasocianaunaanotación,porloquealeditarlaanotaciónladirectrizseactualizaenconsonancia.Sepuedecopiarunaanotacióndecualquierpuntodeundibujoyañadirlaaunadirectrizocrearunaanotaciónnueva.Tambiénsepuedencreardirectricessinanotaciones.
Paraobtenermásinformaciónacercadelasdirectrices,véase“Introducciónalacreacióndetextoydirectrices”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Conceptossobrecotas>
Conceptosbásicosdelascotasasociativas
Lascotasasociativasajustanautomáticamentesusubicaciones,orientacionesymedidascuandosemodificanlosobjetosgeométricosasociadosconellas.LavariabledesistemaDIMASSOCcontrolalascotasasociativas.EstablezcaDIMASSOCen2paraactivarlascotasasociativas.
Paraobtenermásinformaciónsobrecotasasociativas,véase“Cotasasociativas”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>
Creacióndecotas
Puedecrearcotaslineales,radiales,angularesydecoordenadas.
Cuandosecreancotas,seutilizaelestilodecotaactivo.Unavezcreadalalíneadereferencia,puedemodificarsuorigen,suubicaciónyelcontenidodeltextodecota,asícomosuánguloconrespectoalalíneadecota.Tambiénsepuedemodificarelestiloqueutilizalacota.
Paraobtenermásinformaciónacercadelacreacióndecotas,véase“Modificacióndeobjetosexistentes”enelManualdelusuario.
CreacióndecotaslinealesCreacióndecotasradialesCreacióndecotasangularesCreacióndecotasporcoordenadas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndecotas>
Creacióndecotaslineales
Lascotaslinealespuedenestaralineadasogiradas.Lascotasalineadastienenlalíneadecotaparalelaalalíneadondeseencuentreelorigendelalíneadereferencia.Enelcasodelascotasgiradas,lalíneadecotasecolocaenánguloconrespectoalorigendelalíneadereferencia.
Paracrearunacotalineal,utiliceelmétodoAddDimAlignedoAddDimRotated.Unavezcreadaslascotaslinealessepuedemodificareltexto,elángulodeltextoyelángulodelalíneadecota.Enlassiguientesfiguras,sedesignadeformaexplícitaelorigendelaslíneasdereferencia.Semuestralaubicaciónfinaldelalíneadecota:
ParacrearunacotaalineadautiliceelmétodoAddDimAligned.Estemétodorequieretrescoordenadasdeentrada:elorigendeambaslíneasdecotaylaposicióndeltexto.
Paracrearunacotagirada,utiliceelmétodoAddDimRotated.Estemétodorequierelaentradadetrescoordenadasydelángulodelalíneadecota.Lastrescoordenadassonelorigendeambaslíneasdereferenciaylaposicióndeltexto.Elángulodebeproporcionarseenradianesyrepresentaelánguloderotacióndelalíneadecota.
Paraobtenermásinformaciónacercadelacreacióndecotaslineales,véase“Creacióndecotaslineales”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndecotas>
Creacióndecotasradiales
Lascotasradialesmidenlosradiosylosdiámetrosdearcosycírculos.Paracrearunacotaradial,utiliceelmétodoAddDimRadial.
Secreantiposdecotasdistintossegúneltamañodelcírculodelarco,lapropiedadTextPositionylosvaloresdelasvariablesdelsistemadecotasDIMUPT,DIMTOFL,DIMFIT,DIMTIH,DIMTOH,DIMJUSTyDIMTAD.(LasvariablesdelsistemasepuedenconsultaroconfigurarconlosmétodosGetVariableySetVariable
Paraeltextodecotashorizontales,sielángulodelalíneadecotaradialconrespectoalahorizontaltienemásde15gradosyestáfueradelcírculooarco,AutoCADdibujaunalíneadeconexión,tambiénllamadadequiebrooaterrizaje.Lalíneadeconexióntienelalongituddeunextremodecotayseubicajuntoaltextodelacota,comomuestranlassiguientesilustraciones:
Paracrearcotasradiales,utilicelosmétodosAddDimRadialoAddDimDiametric.Estosmétodosrequierentresvaloresdeentrada:lacoordenadadelcírculoodelcentrodelarco,lacoordenadaparaelenlacedeladirectrizylalongituddeladirectriz.
EstosmétodosutilizanelparámetroLeaderLengthcomodistanciadesdeel
puntodecuerdahastaelpuntodondelacotarealizaunalíneadeconexiónhorizontalaltextodeanotación(osedetienesilalíneadeconexiónnoesnecesaria).
Paraobtenermásinformaciónacercadelacreacióndecotaslineales,véase“Creacióndecotasradiales”enelManualdelusuario.
Creacióndeunacotaradial
Esteejemplocreaunacotaradialenespaciomodelo.
SubCh5_CreateRadialDimension()
DimdimObjAsAcadDimRadial
Dimcenter(0To2)AsDouble
DimchordPoint(0To2)AsDouble
DimleaderLenAsInteger
'Definethedimension
center(0)=0
center(1)=0
center(2)=0
chordPoint(0)=5
chordPoint(1)=5
chordPoint(2)=0
leaderLen=5
'Createtheradialdimensioninmodelspace
SetdimObj=ThisDrawing.ModelSpace._
AddDimRadial(center,chordPoint,leaderLen)
ZoomAll
EndSub
Nota ElparámetroLeaderLengthsóloseutilizaenlacreacióndelascotas,yúnicamentesiestádefinidoconelvalorpordefectodeposicióndeltexto.Cuandolacotasecierraporprimeravez,elcambiodelvalordeLeaderLengthnoafectaalapresentacióndelacota,peroelnuevoparámetroquedaalmacenadoysemuestraenlasaplicacionesDXF,LISPyADSRX.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndecotas>
Creacióndecotasangulares
Lascotasangularesmidenelánguloformadopordoslíneasotrespuntos.Sepuedenutilizar,porejemplo,paramedirelánguloqueformandosradiosdeuncírculo.Lalíneadecotaformaunarco.
Paracrearunacotaangular,utiliceelmétodoAddDimAngular.Estemétodorequieretresvaloresdeentrada:elvérticedelángulo,losorígenesdelaslíneasdereferenciaylaubicacióndeltexto.ElAngleVertexeselcentrodelcírculooarco,oelvérticecomúnalasdoslíneasqueseestánacotando.Elorigendelaslíneasdereferenciaestáenlospuntosporlosquepasanambaslíneas.
ElAngleVertexpuedecoincidirconunodelospuntosdelorigen.Laslíneasdereferenciaseañadendeformaautomáticacuandosenecesitan.
Paraobtenermásinformaciónacercadelacreacióndecotasangulares,véase“Creacióndecotasangulares”enelManualdelusuario.
Creacióndeunacotaangular
Esteejemplocreaunacotaangularenespaciomodelo.
SubCh5_CreateAngularDimension()
DimdimObjAsAcadDimAngular
DimangVert(0To2)AsDouble
DimFirstPoint(0To2)AsDouble
DimSecondPoint(0To2)AsDouble
DimTextPoint(0To2)AsDouble
'Definethedimension
angVert(0)=0
angVert(1)=5
angVert(2)=0
FirstPoint(0)=1
FirstPoint(1)=7
FirstPoint(2)=0
SecondPoint(0)=1
SecondPoint(1)=3
SecondPoint(2)=0
TextPoint(0)=3
TextPoint(1)=5
TextPoint(2)=0
'Createtheangulardimensioninmodelspace
SetdimObj=ThisDrawing.ModelSpace._
AddDimAngular(angVert,FirstPoint,SecondPoint,TextPoint)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndecotas>
Creacióndecotasporcoordenadas
Lascotasdecoordenadas,odereferencia,midenladistanciaperpendiculardesdeunpuntodeorigenllamadopuntodereferenciahastaunacaracterísticaacotadacomo,porejemplo,elagujerodeunapieza.Laacotaciónporcoordenadasevitaloserroresdeescala,almantenerdesfasesexactosdelosobjetosconrespectoalpuntodereferencia.
LascotasdecoordenadasestánformadasporlascoordenadasXoYyunalíneadirectriz.LascotasdecoordenadasdereferenciaXindicanladistanciadeunelementodesdelacotadereferenciaalolargodelejeX.LascotasdecoordenadasdereferenciaYmidenlamismadistanciaalolargodelejeY.AutoCADutilizaelorigendelsistemadecoordenadaspersonales(SCP)actualparadeterminarlascoordenadasmedidas.Seutilizaelvalorabsolutodelascoordenadas.
Eltextosealineaconlalíneadirectrizdelacoordenadasinconsiderarlaorientacióndetextodefinidaenelestilodecotaactivo.Sepuedeaceptareltextopordefectooescribirunonuevo.
Paracrearunacotadecoordenadas,utiliceelmétodoAddDimOrdinate.Estemétodorequieretresvaloresdeentrada:unacoordenadaquedetermineelpuntoquesedeseaacotar(A),unacoordenadaquedetermineelfinaldelalíneadirectriz(B)yunaseñalbooleanaquedeterminesiesunacotadecoordenadadereferenciaXoY.SiintroduceTRUEcomovalordelaseñalbooleana,elmétodocrearáunacotadecoordenadadereferenciaX.SiintroduceFALSE,crearáunacotadecoordenadadereferenciaY.
Paraobtenermásinformaciónacercadelacreacióndecotasporcoordenadas,véase“Creacióndecotasporcoordenadas”enelManualdelusuario.
Creacióndeunacotadecoordenadas
Esteejemplocreaunacotadecoordenadasenespaciomodelo.
SubCh5_CreatingOrdinateDimension()
DimdimObjAsAcadDimOrdinate
DimdefiningPoint(0To2)AsDouble
DimleaderEndPoint(0To2)AsDouble
DimuseXAxisAsLong
'Definethedimension
definingPoint(0)=5
definingPoint(1)=5
definingPoint(2)=0
leaderEndPoint(0)=10
leaderEndPoint(1)=5
leaderEndPoint(2)=0
useXAxis=5
'Createanordinatedimensioninmodelspace
SetdimObj=ThisDrawing.ModelSpace._
AddDimOrdinate(definingPoint,_
leaderEndPoint,useXAxis)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>
Edicióndecotas
AligualqueocurreconotrosobjetosgráficosdeAutoCAD,lascotaspuedenmodificarsepormediodelosmétodosypropiedadesestándarpropiosdelobjeto.
Lamayoríadelosobjetosdeacotacióndisponendelassiguientespropiedades:
Rotation
Determinaelánguloderotacióndelalíneadecota,enradianes.
StyleName
Designaelnombredelestilodeacotación.
TextOverride
Determinalacadenadetextodelacota.
TextPosition
Determinalaposicióndeltextodecota.
TextRotation
Determinaelánguloderotacióndeltextodecota.
Measurement
Designalamedidarealdelacota.
Algunosobjetosdeacotacióntambiéncuentanconpropiedadesparaeditarelorigendelaslíneasdereferenciasylalongituddelasdirectrices.
Encuantoalaedicióndelosobjetosdeacotación,seincluyenlossiguientesmétodos:
ArrayPolar
Creaunamatrizpolar.
ArrayRectangular
Creaunamatrizrectangular.
Copy
Copiaelobjetodecota.
Erase
Borraelobjetodecota.
Mirror
Reflejaelobjetodecota.
Move
Mueveelobjetodecota.
Rotate
Giraelobjetodecota.
ScaleEntity
Cambialaescaladelobjetodecota.
Paraobtenermásinformaciónacercadelamodificacióndecotas,véase“Modificacióndecotasexistentes”enelManualdelusuario.
Sustitucióndeltextodecota
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Edicióndecotas>
Sustitucióndeltextodecota
ElvalordecotamostradopuedereemplazarsemediantelapropiedadTextOverride.Estapropiedadpermitereemplazarcompletamenteelvalormostradodelacotaoañadirletexto.
Modificacióndeltextodecota
Esteejemploañadetextoalvalorparaquesemuestrentantolacadenacomoelvalordelacota.
SubCh5_OverrideDimensionText()
DimdimObjAsAcadDimAligned
Dimpoint1(0To2)AsDouble
Dimpoint2(0To2)AsDouble
Dimlocation(0To2)AsDouble
'Definethedimension
point1(0)=5#:point1(1)=3#:point1(2)=0#
point2(0)=10#:point2(1)=3#:point2(2)=0#
location(0)=7.5:location(1)=5#:location(2)=0#
'Createanaligneddimensionobjectinmodelspace
SetdimObj=ThisDrawing.ModelSpace._
AddDimAligned(point1,point2,location)
'Changethetextstringforthedimension
dimObj.TextOverride="Thevalueis<>"
dimObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>
Trabajoconestilosdecota
Unestilodeacotaciónesunconjuntodeparámetrosquedeterminanelaspectodeunacota.Mediantelosestilosdecotamemorizados,elusuariopuedeestablecereimponerestándaresparalosbocetos.
Todaslascotasquesecreanutilizanelestilodetextoactivo.Siantesdecrearunacotanosedefineniseaplicaningúnestilo,AutoCADaplicaelestilopordefectoSTANDARD.Paraestablecerelestilodeacotaciónactivo,utilicelapropiedadActiveDimStyle
Paraestablecerunestilodecotasuperior,primerosedebeguardaryasignarnombreaunestilo.Enelmomentodecrearse,elnuevoestiloesunacopiadelactual,peroposteriormenteseincluyentodaslasmodificacionesrealizadasenlapresentacióndelaspiezasacotadas,enlaubicacióndeltextodecotayenelaspectodelaanotación.Enestecaso,laanotaciónincluyeunidadesprincipalesyalternativas,toleranciasytexto.
Paraobtenermásinformaciónacercadelosestilosdecota,véase“Utilizacióndeestilosdecotas”enelManualdelusuario.
Creación,modificaciónycopiadeestilosdecotaSustitucióndelestilodecota
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Trabajoconestilosdecota>
Creación,modificaciónycopiadeestilosdecota
Paracrearunestilodecotanuevo,utiliceelmétodoAdd.Estemétodorequierelaentradadelnombredelnuevoestilodecota.
ActiveXAutomationdeAutoCADpermiteagregarnuevosestilosdecotaymodificarelestilodecotaactivo.Tambiénsepuedecambiarelestilodecotaasociadoacadacota,conelmétodoStyleName
Asímismo,sepuedecopiarunestiloounconjuntodevaloresyaexistentes.UtiliceelmétodoCopyFromparacopiarunestilodecotadeunobjetodeorigenenunnuevoestilodecota.ElobjetodeorigenpuedeserotroobjetoDimStyle,unacota,unobjetoToleranceoLeader,oinclusounobjetoDocumentCuandosecopianlosparámetrosdeestilodeotracota,elestiloseduplicaconexactitud.SilosparámetrosdeestilosecopiandeunacotaodeunobjetoToleranceoLeader,enelnuevoestilosecopianlosparámetrosactuales,incluidaslasmodificacionesdelobjeto.SisecopiaelestilodeunobjetoDocument,enelnuevoestilosecopianelestilodecotaactivoytodaslasmodificacionesdeldibujo.
Copiadeestilosdecotaymodificaciones
Enesteejemplosecreantresestilosdecotanuevosysecopianrespectivamenteencadaunolosparámetrosactualesdeldocumento,unestilodecotadeterminadoyunacotaconcreta.Sisigueelprocesodeconfiguraciónadecuadoantesdeejecutarestecódigodeejemplo,comprobaráquesecreanvariosestilosdecotadiferentes.
1. Creeunnuevodibujoyseleccióneloparaqueseaeldibujoactivo.
2. Creeunacotalinealenelnuevodibujo.Lacotadebeserelúnicoobjetodeldibujo.
3. Cambieelcolordelalíneadecotaaamarillo.
4. CambielavariabledesistemaDIMCLRDa5(azul).
5. Ejecuteelsiguienteejemplo:
SubCh5_CopyDimStyles()
DimnewStyle1AsAcadDimStyle
DimnewStyle2AsAcadDimStyle
DimnewStyle3AsAcadDimStyle
SetnewStyle1=ThisDrawing.DimStyles.Add_
("Style1copiedfromadim")
CallnewStyle1.CopyFrom(ThisDrawing.ModelSpace(0))
SetnewStyle2=ThisDrawing.DimStyles.Add_
("Style2copiedfromStyle1")
CallnewStyle2.CopyFrom(ThisDrawing.DimStyles.Item_
("Style1copiedfromadim"))
SetnewStyle2=ThisDrawing.DimStyles.Add_
("Style3copiedfromtherunningdrawingvalues")
CallnewStyle2.CopyFrom(ThisDrawing)
EndSub
AbraelcuadrodediálogoDIMSTYLE.Ahoradeberíatenertresestilosdecotaenlalista.Elestilo1debetenerunalíneadecotaamarilla.Elestilo2deberserigualalestilo1,yelestilo3debetenerlalíneadecotaazul.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Trabajoconestilosdecota>
Sustitucióndelestilodecota
Entodaslascotasesposibleignorarlosparámetrosdesuestilodeacotación.Lamayoríadelosobjetosdeacotacióndisponendelassiguientespropiedades:
AltRoundDistance
Especificaelredondeodelasunidadesalternativas.
AngleFormat
Estableceelformatodelasunidadesdelascotasangulares.
Arrowhead1Block,Arrowhead2Block
Designaelbloquequeseutilizacomoextremodecotapersonalizadodelaslíneasdecota.
Arrowhead1Type,Arrowhead2Type
Designaeltipodeextremodecotadelaslíneasdecota.
ArrowheadSize
Especificaeltamañodelosextremosdecotadelaslíneasdecota,losextremosdecotadelaslíneasdirectricesylaslíneasdeconexión
CenterMarkSize
Especificaeltamañodelamarcacentraldelascotasradialesydediámetro.
CenterType
Especificaeltipodelamarcacentraldelascotasradialesydediámetro.
DecimalSeparator
Especificaelcarácterutilizadocomoseparadordecimalenlosvaloresdecotaydetoleranciadecimales.
DimensionLineColor
Determinaelcolordelalíneadecotadeunobjetodecota,directrizotolerancia.
DimensionLineWeight
Determinaelgrosordelaslíneasdecota.
DimLine1Suppress,DimLine2Suppress
Designanlasupresióndelaslíneasdecota.
DimLineInside
Especificalapresentacióndelíneasdecotasolamentedentrodelaslíneasdereferencia.
ExtensionLineColor
Designaelcolordelaslíneasdereferenciadecota.
ExtensionLineExtend
Especificaladistanciadelalíneadereferenciaquesobrepasaalalíneadecota.
ExtensionLineOffset
Determinaladistanciaquesedesvíanlaslíneasdereferenciaconrespectoasuspuntosdeorigen.
ExtensionLineWeight
Determinaelgrosordelaslíneasdereferencia.
ExtLine1EndPoint,ExtLine2EndPoint
Determinaelpuntofinaldelaslíneasdereferencia.
ExtLine1StartPoint,ExtLine2StartPoint
Especificaelpuntoinicialdelaslíneasdereferencia.
ExtLine1Suppress,ExtLine2Suppress
Determinalasupresióndelaslíneasdereferencia.
Ajustar
Especificalaubicacióndeltextoylosextremosdecotafueraodentrodelaslíneasdereferencia.
ForceLineInside
Determinasiunalíneadecotasedibujaentrelaslíneasdereferencia,inclusocuandoeltextoestásituadofueradedichaslíneas.
FractionFormat
Especificaelformatodelosvaloresfraccionariosenlascotasylastolerancias.
HorizontalTextPosition
Designalajustificaciónhorizontaldeltextodelacota.
LinearScaleFactor
Especificaunfactordeescalaglobalparalamedicióndecotaslineales.
PrimaryUnitsPrecision
Designaelnúmerodeposicionesdecimalesmostradasparalasunidadesprincipalesdeunacotaounatolerancia.
SuppressLeadingZeros,SuppressTrailingZeros
Especificalasupresióndeloscerosaladerechayalaizquierdaenlosvaloresdelascotas.
SuppressZeroFeet,SuppressZeroInches
Especificalasupresióndeunamedidadeceropiesyceropulgadasenlosvaloresdelascotas.
TextColor
Designaelcolordeltextodelosobjetosdecotaydetolerancia.
TextGap
Especificaladistanciaentreeltextodelacotaylalíneadecotacuandosedividelalíneaparaincluireltexto.
TextHeight
Determinalaalturadeltextodelacotaolatolerancia.
TextInside
Especificasieltextodelacotadebedibujarsedentrodelaslíneasdereferencia.
TextInsideAlign
Especificalaposicióndeltextodelacotadentrodelaslíneasdereferenciaparatodoslostiposdeacotacionesexceptolasdecoordenadas.
TextMovement
Indicacómosedibujaeltextodelacotacuandoeltextosedesplaza.
TextOutsideAlign
Especificalaposicióndeltextodelacotafueradelaslíneasdereferenciaparatodoslostiposdeacotacionesexceptolasdecoordenadas.
TextPosition
Determinalaposicióndeltextodecota.
TextPrecision
Indicalaprecisióndeltextodelascotasangulares.
TextPrefix
Designaelprefijodelvalordelacota.
TextRotation
Determinaelánguloderotacióndeltextodecota.
TextSuffix
Designaelsufijodelvalordelacota.
ToleranceDisplay
Especificasisemuestranlastoleranciasjuntoconeltextodelacota.
ToleranceHeightScale
Especificaunfactordeescalaparalaalturadeltextodelosvaloresdetoleranciaconrespectoalaalturadeltextodelacota.
ToleranceJustification
Designalajustificaciónverticaldelosvaloresdetoleranciaconrespectoaltextodecotanominal.
ToleranceLowerLimit
Especificaellímitedetoleranciamínimadeltextodelascotas.
TolerancePrecision
Indicalaprecisióndelosvaloresdetoleranciaenlascotasprincipales.
ToleranceSuppressLeadingZeros
Especificalasupresióndeloscerosalaizquierdaenlosvaloresdetolerancia.
ToleranceSuppressTrailingZeros
Especificalasupresióndeloscerosaladerechaenlosvaloresdecota.
ToleranceUpperLimit
Especificaellímitedetoleranciamáximadeltextodelascotas.
UnitsFormat
Designaelformatodelasunidadesdelastodaslascotasexceptolasangulares.
VerticalTextPosition
Designalaposiciónverticaldeltextoconrespectoalalíneadecota.
Introduccióndeunsufijodefinidoporelusuarioparautilizarloenunacotaalineada
EsteejemplocreaunacotaalineadaenespaciomodeloyutilizalapropiedadTextSuffixparapermitirqueelusuariocambieelsufijodeltextodelacota.
SubCh5_AddTextSuffix()
DimdimObjAsAcadDimAligned
Dimpoint1(0To2)AsDouble
Dimpoint2(0To2)AsDouble
Dimlocation(0To2)AsDouble
DimsuffixAsString
'Definethedimension
point1(0)=1.3:point1(1)=7.8:point1(2)=0
point2(0)=5:point2(1)=5:point2(2)=0
location(0)=5:location(1)=7:location(2)=0
'Createanaligneddimensionobjectinmodelspace
SetdimObj=ThisDrawing.ModelSpace._
AddDimAligned(point1,point2,location)
ThisDrawing.Application.ZoomAll
'Allowtheusertochangethetextsuffixforthedimension
suffix=InputBox("Enteranewtextsuffixforthedimension"_
,"SetDimensionSuffix",":SUFFIX")
'Applythechangetothedimension
dimObj.TextSuffix=suffix
ThisDrawing.RegenacAllViewports
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>
Acotaciónenespaciomodeloyenespaciopapel
Sepuedendibujarcotastantoenespaciopapelcomoenespaciomodelo.Noobstante,silageometríaqueseestáacotandoestáenelespaciomodelo,convienedibujarlascotasendichoespacio,yaqueAutoCADsitúalospuntosdedefinicióndelascotasenelespaciodondeestádibujadalageometría.
Cuandosedibujaenespaciopapelunacotaquedescribelageometríadeunmodelo,lacotanocambiacuandoseutilizancomandosdeediciónosemodificaelfactordeampliacióndelaventanagráficadelespaciomodelo.Tampocosealteralaposicióndelascotasdeespaciopapelcuandosecambiaunavistadelespaciopapelalespaciomodelo.
Sidibujacotasenelespaciopapelyelfactordeescalaglobalparaacotaciónlineal(valordelavariabledesistemaDIMLFAC)esmenorquecero,ladistanciamedidasemultiplicaporelvalorabsolutodeDIMLFAC.Sisedibujancotasenelespaciomodelo,seutilizaelvalor1.0aunqueDIMLFACseamenorquecero.AutoCADcalculaunvalorparaDIMLFACsimodificalavariableenlasolicitudAcotaryseleccionalaopciónVentana.AutoCADcalculalaescaladeespaciomodeloaespaciopapelyasignaestevalorconsignonegativoalavariableDIMLFAC.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>
Creacióndedirectricesyanotaciones
Unadirectrizesunalíneaqueconectaanotacionesconunacaracterísticadeundibujo.Lasdirectricesysusanotacionestienencarácterasociativo,porloquealmodificarunaanotaciónsudirectrizseactualizaconsecuentemente.ElobjetoLeadernosedebeconfundirconlaslíneasdirectricesqueAutoCADgeneraautomáticamentecomopartedeunalíneadecota.
Paraobtenermásinformaciónacercadelasdirectrices,véase“Creacióndetextocondirectrices”enelManualdelusuario.
CreacióndelíneasdirectricesAdicióndeunaanotaciónaunalíneadirectrizAsociatividaddelasdirectricesModificacióndelaasociatividaddelasdirectricesEdicióndedirectrices
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>
Creacióndelíneasdirectrices
Puedecrearunalíneadirectrizdesdecualquierpuntoocaracterísticadeundibujoycontrolarlosparámetrosquedeterminansuaspectoduranteelprocesodecreación.Unalíneadirectrizpuedeconsistirenunaseriedesegmentosdelínearectaoenunasuavecurvaspline.Elcolordeladirectrizsecontrolamedianteelcolordelalíneadecotaactual.Laescaladeladirectrizsecontrolaconlaescalageneraldecotasquetengadefinidaelestilodecotaactivo.Eltipoytamañodelosextremosdecotas(flechas),sisedesignaalguno,secontrolamedianteelprimerextremoquesehayadefinidoenelestiloactivo.
Porlogeneral,ladirectrizylaanotaciónseconectanmedianteunapequeñalíneaconocidacomolíneadeconexión.LaslíneasdeconexiónaparecenconcuadrosdecontroldecaracterísticasyMTextcuandoelúltimosegmentodeladirectriztieneunángulomayorde15gradosdesdelahorizontal.Lalongituddelalíneadeconexiónesigualaladeunasolaflecha.Cuandoladirectriznotieneanotaciones,tampococuentaconlíneadeconexión.
Paracrearunalíneadirectriz,utiliceelmétodoAddLeader.Estemétodorequieretresvaloresdeentrada:lamatrizdecoordenadasqueespecificandóndecrearladirectriz,elobjetodeanotación(oNULLsilalíneadirectriznotieneanotación,yeltipodedirectrizquesevaacrear.Eltipodeterminasiladirectrizseráunalínearectaounacurvasplinesuave.Tambiéndeterminasitendráflechasono.Useunadelasconstantessiguientesparaespecificareltipodedirectriz:acLineNoArrow,acLineWithArrow,acSplineNoArrow,oacSplineWithArrow.Estasconstantesseexcluyenmutuamente.
Creacióndeunalíneadirectriz
Esteejemplocreaunalíneadirectrizenespaciomodelo.Ladirectriznotieneasociadasanotaciones.
SubCh5_CreateLeader()
DimleaderObjAsAcadLeader
Dimpoints(0To9)AsDouble
DimleaderTypeAsInteger
DimannotationObjectAsAcadObject
points(0)=0:points(1)=0:points(2)=0
points(3)=4:points(4)=4:points(5)=0
points(6)=4:points(7)=5:points(8)=0
leaderType=acLineWithArrow
SetannotationObject=Nothing
'Createtheleaderobjectinmodelspace
SetleaderObj=ThisDrawing.ModelSpace._
AddLeader(points,annotationObject,leaderType)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>
Adicióndeunaanotaciónaunalíneadirectriz
UnaanotacióndedirectrizpuedeserunobjetoTolerance,MTextoBlockRef.Sepuedecrearunaanotaciónnuevaoutilizarlacopiadeunayaexistente,perosóloseañadealadirectrizunavezcreada.
Paraañadirunaanotaciónmientrassecreaunadirectriz,introduzcalanotaenelmétodoAddLeader.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>
Asociatividaddelasdirectrices
Debidoaquelasdirectricesseasocianconsuanotación,cuandolaanotaciónsemueveelpuntofinaldeladirectrizsemueveconella.Conformesedesplazaelrectángulodetoleranciayeltextodelaanotación,elsegmentofinaldelalíneadirectrizalternalaconexiónentrelascarasizquierdayderechadelaanotación,segúnlarelacióndelaanotaciónconelpenúltimopunto(elsegundoporelfinal)deladirectriz.Sielpuntomediodelaanotaciónseencuentraaladerechadelpenúltimopuntodeladirectriz,éstaseenlazaaladerecha;delocontrario,elenlaceserealizaalaizquierda.
CuandoseeliminaunobjetodeldibujomediantelosmétodosErase,Add(paraagregarunbloque)oWBlock,serompelaasociatividad.Cuandoladirectrizysuanotaciónsecopianjuntasenunamismaoperación,lanuevacopiaesasociativa.Noesasociativasisecopianporseparado.Silaasociatividadserompe,porejemploporcopiarsóloelobjetoLeaderoborrarlaanotación,lalíneadeconexióndeladirectrizdesaparece.
Asociacióndeunalíneadirectrizaunaanotación
EnesteejemplosecreaunobjetoMText.DespuéssecreaunalíneadirectrizutilizandoelobjetoMTextcomoanotación.
SubCh5_AddAnnotation()
DimleaderObjAsAcadLeader
DimmtextObjAsAcadMText
Dimpoints(0To9)AsDouble
DiminsertionPoint(0To2)AsDouble
DimwidthAsDouble
DimleaderTypeAsInteger
DimannotationObjectAsObject
DimtextStringAsString,msgAsString
'CreatetheMTextobjectinmodelspace
textString="Hello,World."
insertionPoint(0)=5
insertionPoint(1)=5
insertionPoint(2)=0
width=2
SetmtextObj=ThisDrawing.ModelSpace._
AddMText(insertionPoint,width,textString)
'DataforLeader
points(0)=0:points(1)=0:points(2)=0
points(3)=4:points(4)=4:points(5)=0
points(6)=4:points(7)=5:points(8)=0
leaderType=acLineWithArrow
'CreatetheLeaderobjectinmodelspaceandassociate
'theMTextobjectwiththeleader
SetannotationObject=mtextObj
SetleaderObj=ThisDrawing.ModelSpace._
AddLeader(points,annotationObject,leaderType)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>
Modificacióndelaasociatividaddelasdirectrices
Salvoenlorelativoalarelacióndeasociatividad,ladirectrizysuanotaciónsonobjetostotalmenteindependientesdeldibujo.Igualquelamodificacióndeunadirectriznoafectaalaanotación,laedicióndeéstatampocoafectaalaprimera.
AunquelaanotacióndetextosecreautilizandolasvariablesdesistemaDIMCLRT,DIMTXTyDIMTXSTYparadefinirsucolor,alturayestilo,estasvariablesnopuedenemplearseparaeditarlaanotación,yaquenosetratadeunverdaderoobjetodecota.LaanotacióndetextodebeeditarsecomocualquierotroobjetoMtext.
UtiliceelmétodoEvaluateparaevaluarlarelacióndeladirectrizconlaanotaciónquetieneasociada.Siespreciso,estemétodoactualizalageometríadirectriz.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Creacióndedirectricesyanotaciones>
Edicióndedirectrices
Cualquiermodificaciónrealizadaenunaanotacióndedirectrizquecambiesuposiciónafectaalaposicióndelextremodeladirectrizasociada.Deigualforma,alrotarlaanotacióntambiéngiralalíneadirectriz(siexiste).
Sideseaajustareltamañodeunadirectriz,puedeatribuirleunfactordeescala.Cuandoseatribuyeunaescalasóloseactualizaelobjetodesignado.Porejemplo,siseajustalaescaladeladirectriz,laanotaciónpermaneceenlamismaposiciónrespectodelpuntofinaldeladirectriz,peronocambiadeescala.
Lasdirectrices,ademásdeampliarseoreducirse,tambiénsepuedendesplazar,reflejaryrotar.UtilicelosmétodosScaleEntity,Move,MirroryRotateparamodificardirectrices.ElestilodetextoquetieneasociadounaanotacióntambiénsepuedecambiarmediantelapropiedadStyleName.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>
Usodetoleranciasgeométricas
Lastoleranciasgeométricasindicanlasdesviacionesdeforma,perfil,orientación,ubicaciónyoscilacióndeunacaracterística.Lastoleranciasgeométricasseañadenalosrectángulosdetolerancia.Estosrectánguloscontienentodalainformaciónsobrelatoleranciadeunasolacota.
Paraobtenermásinformaciónacercadelusoderectángulosdetoleranciayeltrabajocontoleranciasgeométricas,véaselasección“Adicióndetoleranciasgeométricas”enelManualdelusuario.
CreacióndetoleranciasgeométricasModificacióndetolerancias
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Usodetoleranciasgeométricas>
Creacióndetoleranciasgeométricas
Paracrearunatoleranciageométrica,utiliceelmétodoAddTolerance.Estemétodorequierelaintroduccióndetresvalores:lacadenadetextoquecontieneelsímbolodetolerancia,laubicacióndeldibujodondesesituarálatoleranciayunvectordedirecciónparadeterminarladireccióndelatolerancia.Lastoleranciastambiénsepuedencopiar,desplazar,borrar,ampliaroreduciryrotar.
Creacióndeunatoleranciageométrica
Esteejemplocreaunatoleranciageométricasencillaenespaciomodelo.
SubCh5_CreateTolerance()
DimtoleranceObjAsAcadTolerance
DimtextStringAsString
DiminsertionPoint(0To2)AsDouble
Dimdirection(0To2)AsDouble
'Definethetoleranceobject
textString="HereistheFeatureControlFrame"
insertionPoint(0)=5
insertionPoint(1)=5
insertionPoint(2)=0
direction(0)=1
direction(1)=1
direction(2)=0
'Createthetoleranceobjectinmodelspace
SettoleranceObj=ThisDrawing.ModelSpace._
AddTolerance(textString,insertionPoint,direction)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Cotasytolerancias>Usodetoleranciasgeométricas>
Modificacióndetolerancias
Lastoleranciasestáninfluidasporvariasvariablesdesistema:DIMCLRDcontrolaelcolordelrectángulodetolerancia,DIMCLRTcontrolaelcolordeltextodelatolerancia,DIMGAPcontrolaelespacioentreelrectángulodetoleranciayeltexto,DIMTXTcontrolaeltamañodeltextodelatoleranciayDIMTXTSTYcontrolaelestilodetextodelatolerancia.UtiliceelmétodoSetVariableparaajustarlosvaloresdelasvariablesdelsistema.
¿Comentarios?
<$nopage>MenuGroups(colección):<$nopage>menú(objetos):<$startrange>InsertInMenuBar(método):códigodeejemplo,separadores:añadiramenús,PopupMenuItem(objeto):AddSeparator(método),AddSeparator(método),utilizarlapropiedadType,Label(propiedad):teclarápida,PopupMenuItem(objeto):teclasrápidas,asignar,submenús:añadir,submenús:colocar,PopupMenu(objeto):crearsubmenús,menús:crearsubmenús,<$nopage>cascada(menús).<$endrange>InsertInMenuBar(método):códigodeejemplo,menús:suprimir,PopupMenu(objeto):suprimirelementosdemenú,PopupMenuItem(objeto):suprimirelementosdemenú,Delete(método):códigodeejemplo,PopupMenuItem(objeto):Tag(propiedad),PopupMenuItem(objeto):Label(propiedad),PopupMenuItem(objeto):Caption(propiedad),PopupMenuItem(objeto):Macro(propiedad),PopupMenuItem(objeto):HelpString(propiedad),PopupMenuItem(objeto):Enable(propiedad),PopupMenuItem(objeto):Check(propiedad),menús:activar,menús:desactivar,menús:verificar,menús:colocar,PopupMenuItem(objeto):Index(propiedad),PopupMenuItem(objeto):Type(propiedad),PopupMenuItem(objeto):Submenu(propiedad),PopupMenuItem(objeto):Parent(propiedad),PopupMenuItem(objeto):Parent(propiedad),menús:tipodeelementodemenú,menús:devolversubmenús,menús:asignarelementosdemenú,menús:macrosdemenús,caracteresespeciales,InsertInMenuBar(método):códigodeejemplo,Toolbars(colección):Add(método),Toolbars(colección):Name(propiedad),Name(propiedad):barrasdeherramientas,Toolbar(objeto):asignarnombre,Add(método):barrasdeherramientas,códigodeejemplo,Toolbar(objeto):códigodeejemplo,AddToolbarButton(método),Toolbar(objeto):AddToolbarButton(método),ToolbarItem(objeto),ToolbarItem(objeto):colocarbotonesdebarrasdeherramientas,ToolbarItem(objeto):Name(propiedad),Name(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):HelpString(propiedad),HelpString(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Macro(propiedad),Macro(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):crearbotóndesplegable,botóndesplegable,Toolbar(objeto):códigodeejemplo,AddToolbarButton(método):códigodeejemplo,ToolbarItem(objeto):códigodeejemplo,Toolbar(objeto):AddSeparator(método),Toolbar(objeto):usarlapropiedadType,separadores:añadirabarrasdeherramientas,SetBitmaps(método),ToolbarItem(objeto):SetBitmaps(método),GetBitmaps(método),ToolbarItem(objeto):GetBitmaps,SetBitmaps(método):SmallIconName(parámetro),SetBitmaps(método):LargeIconName(parámetro),Type(propiedad):códigodeejemplo,GetBitmaps(método):códigodeejemplo,ToolbarItem(objeto):códigodeejemplo,iconosdesplegables,barrasdeherramientas:AddToolbarButton(método),AddToolbarButton(método):crear
barrasdeherramientasdesplegables,Toolbar(objeto):barrasdeherramientasdesplegables(crear),AddToolbarButton(método):códigodeejemplo,Toolbar(objeto):códigodeejemplo,ToolbarItem(objeto):códigodeejemplo,iconosdesplegables,barrasdeherramientas:códigodeejemplo,AttachToolbarToFlyout(método),códigodeejemplo,Visible(propiedad):códigodeejemplo,Toolbar(objeto):Float(método),Float(método):barrasdeherramientasflotantes,Toolbar(objeto):Dock(método),Dock(método):anclarbarrasdeherramientas,Toolbar(objeto):Docked(propiedad),Dock(método):códigodeejemplo,Toolbar(objeto):códigodeejemplo,ToolbarItem(objeto):suprimir,ToolbarItem(objeto):Tag(propiedad),Tag(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Name(propiedad),Name(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Macro(propiedad),Macro(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):HelpString(propiedad),HelpString(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Index(propiedad),Index(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Type(propiedad),Type(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Flyout(propiedad),Flyout(propiedad):ToolbarItem(objeto),ToolbarItem(objeto):Parent(propiedad),Parent(propiedad):ToolbarItem(objeto),PopupMenuItem(objeto):escribirmacros,ToolbarItem(objeto):escribirmacros,macros:enmenús,macros:enbarrasdeherramientas,macros:directricesdeescritura,PICKAUTO(variabledesistema),PICKADD(variabledesistema),macros:caracteresespeciales(tabla),macrosdemenú:caracteresespeciales(tabla),macrosdebarrasdeherramientas:caracteresespeciales(tabla),macros:terminar,terminarmacros:ejemplosdecódigo,macros:datosdelusuario,entradadeusuario,interrumpirmacros,CAPA(comando):macros,macros:CAPA(comando),DESIGNA(comando):macros,macros:DESIGNA(comando),contrabarra(\\):macros,macros:contrabarra,carácter,macros:retardos(lista),interrumpirmacros:retardos(lista),macros:cancelarcomandos,macros:manipulacióndecomandos,macros:usodelarepetición,macros:designacióndeobjetosúnicos,designacióndeobjetosúnicosenmacros,BORRA(comando):macros,macros:BORRA(comando),ToolbarItem(objeto):mensajedeayudaenlalíneadeestado,PopupMenuItem(objeto):mensajedeayudaenlalíneadeestado,ayudaenlalíneadeestado,paramenúsybarrasdeherramientas,Ayuda,líneadeestado:paramenúsybarrasdeherramientas,InsertInMenuBar(método):códigodeejemplo,cursor(menús):ShortcutMenu(propiedad),cursor(menús):añadirelementosnuevos,<$nopage>menúcontextual.
ManualdeldesarrolladordeActiveXyVBA>
Personalizacióndebarrasdeherramientasymenús
ActiveXAutomationdeAutoCADpermiteunaltogradodecontrolsobrelapersonalizacióndemenúsybarrasdeherramientasenlasesiónactualdeAutoCAD.
ConAutoCADActiveX/VBA,puedemodificaroincrementarlaestructurademenúsexistente,obienreemplazarlaporcompleto.Tambiénpuederealizarcambiosenlasbarrasdeherramientasyenlosmenúscontextuales.
Lapersonalizacióndemenúspuedeaumentarelrendimiento,yaquepermiteexponertareasespecíficasdeunaaplicaciónoconcentrartareasdemuchospasosenunasencillaopcióndemenú.
Paraobtenerinformaciónadicionalsobrepersonalizacióndemenúsybarrasdeherramientas,consulteelManualdepersonalización.
ConceptosbásicossobrelascoleccionesMenuBaryMenuGroupsCargadegruposdemenúsCambiodelabarrademenúsCreaciónymodificacióndemenúsdesplegablesycontextualesCreaciónymodificacióndebarrasdeherramientasCreacióndemacrosCreacióndemensajesdeayudaenlalíneadeestadoparaelementosdemenúsydebarrasdeherramientasAdicióndeentradasalmenúcontextual
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>
ConceptosbásicossobrelascoleccionesMenuBaryMenuGroups
AutoCAD®ActiveX®ofrecevariosobjetosrelacionadosconlosmenús.LosdosmásimportantessonlacolecciónMenuBarylacolecciónMenuGroups.LacolecciónMenuBarcontienetodoslosmenúsquesemuestranenlabarrademenúsdeAutoCAD.
LacolecciónMenuGroupsincluyelosgruposdemenúsquesecarganenlasesiónactivadeAutoCAD.EstosgruposcontienentodoslosmenúsqueestándisponiblesenlasesióndeAutoCADenlabarrademenússepuedenmostrartodoslosmenúsopartedeellos.Ademásdelosmenús,losgruposdemenúsincluyentambiéntodaslasbarrasdeherramientasqueestándisponiblesenlasesiónactivadeAutoCAD.Losgruposdemenústambiénrepresentanmenúsenmosaico,menúsdepantallaomenúsdetablero.
TodoslosgruposdemenúscontienenunacolecciónPopupMenusyotraToolbars.LacolecciónPopupMenusincluyetodoslosmenúsdelgrupodemenús.Deigualforma,lacolecciónToolbarscontienetodaslasbarrasdeherramientasdelgrupodemenús.
CadaPopupMenuesenrealidadunacolecciónquecontieneunobjetoindividualporcadaelementodemenúqueapareceenelmismo.Deigualforma,cadaToolbaresunacolecciónqueconstadeunobjetoindividualporcadaelementodelabarradeherramientas.
¿Comentarios?
<$nopage>MenuGroups(colección):
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>
Cargadegruposdemenús
LosgruposdemenússecarganenAutoCADmedianteelmétodoLoad.Porejemplo,elsiguientecódigocargaelarchivodepersonalizaciónacad.cui:
ThisDrawing.Application.MenuGroups.Load"acad.cui"
Cuandoutilicedichométodo,asignealparámetroBaseMenuelvalorTRUEparacargarungrupodemenúsnuevoalabarrademenús.ElgrupodemenússecargarácomomenúbasedelamismamaneraqueelcomandoMENUenAutoCAD.
Paracargarcomomenúparcialungrupodemenúsnuevo,omitaelparámetroBaseMenu.ElgrupodemenússecargarádelamismamaneraqueelcomandoMENULOADenAutoCAD.UnavezcargadosenlacolecciónMenuGroups,losmenúsparcialespuedenañadirsealabarrademenúsmediantelosmétodosInsertMenuInMenuBaroInsertInMenuBar.
Despuésdecargarungrupodemenús,todoslosmenúsybarrasdeherramientasdefinidosporélestarándisponibles.Esposible:
Añadirnuevosmenúsalabarrademenús
Eliminarmenúsdelabarrademenús
Reorganizarlosmenúsenlabarrademenús
Añadirnuevoselementosaunmenúounabarradeherramientasexistente
Eliminarelementosdeunmenúounabarradeherramientasexistente
Crearnuevosmenúsybarrasdeherramientas
Dejarlasbarrasdeherramientasflotantesofijas
Activarodesactivarelementosdemenúobarradeherramientas
Seleccionaroquitarlaseleccióndeunelementodemenú
Cambiarelidentificador,laetiquetaolacadenadebúsquedadeunelementodemenúobarradeherramientas
Volveraasignarlasmacrosasociadasaelementosdemenúsobarrasdeherramientas
Nota SólosepuedenmodificarmenúsdesplegablesybarrasdeherramientasmedianteActiveXAutomation.Noobstante,sepuedeutilizarActiveXAutomationparacagarydescargarotrostiposdemenús,comoelementosdemenúsdesímbolos,menúsdepantallaodetablero.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>
Cambiodelabarrademenús
Comohapodidocomprobar,labarrademenúspuedereemplazarseporungrupodemenúsnuevosiésteseencuentracargadocomomenúbase.Tambiénsepuedenañadir,eliminaryredistribuirmenúsindividualesenlabarrademenús.
InsercióndemenúsenlabarrademenúsEliminacióndemenúsdelabarrademenúsReorganizacióndeopcionesdemenúenlabarrademenús
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Cambiodelabarrademenús>
Insercióndemenúsenlabarrademenús
Paraincluirunmenúexistenteenlabarrademenús,utilicelosmétodosInsertMenuInMenuBaroInsertInMenuBar.Ambosmétodoscumplenelmismoobjetivo:insertarunmenúexistenteenlabarrademenús.
Ladiferenciaentreestosdosmétodosradicaenelobjetodesdeelquesellaman.ElmétodoInsertMenuInMenuBarsellamadesdelacolecciónPopupMenus.Conestemétodosepuedeninsertarlosmenúsdeunacolecciónenunaubicaciónespecíficadelabarrademenús.Requierecomoentradaelnombredelmenúquesedeseainsertarylaposicióndelabarrademenúsdondesedeseacolocar.
ElmétodoInsertInMenuBarsellamadirectamentedesdeelobjetoPopupMenuquesedeseainsertar.Laúnicaentradaquerequiereestemétodoeslaposiciónenlabarrademenús.Noesnecesariointroducirelnombredelmenúyaqueseestállamandoalmétododirectamentedesdeelobjeto.
Utiliceelmétodoqueseamásidóneoparalaaplicaciónqueestéutilizando.
Insercióndemenúsenlabarrademenús
EsteejemplocreaunmenúllamadoTestMenueinsertaenélunelementodemenú.SeasignaalelementoelcomandoABRIR.Despuéssemuestraelmenúenlabarrademenús.
SubCh6_InsertMenu()
'Defineavariableforthecurrentmenugroup
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application._
MenuGroups.Item(0)
'Createanewmenu
DimnewMenuAsAcadPopupMenu
SetnewMenu=currMenuGroup.Menus.Add("TestMenu")
'Declarethevariablesforthemenuitem
DimnewMenuItemAsAcadPopupMenuItem
DimopenMacroAsString
'AssignthemacrostringtheVBequivalentof
'"ESCESC_open"andcreatethemenuitem
openMacro=Chr(3)+Chr(3)+"_open"
SetnewMenuItem=newMenu.AddMenuItem(newMenu.Count+1,_
"Open",openMacro)
'Displaythemenuonthemenubar
currMenuGroup.Menus.InsertMenuInMenuBar"TestMenu",""
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Cambiodelabarrademenús>
Eliminacióndemenúsdelabarrademenús
Paraeliminarunmenúdelabarrademenús,utilicelosmétodosRemoveMenuFromMenuBaroRemoveFromMenuBar.Ambosmétodoscumplenelmismoobjetivo:eliminarunmenúdelabarrademenús.
Ladiferenciaentreestosdosmétodosradicaenelobjetodesdeelquesellaman.ElmétodoRemoveMenuFromMenuBarsellamadesdelacolecciónPopupMenus.Requierecomoentradaelnombredelmenúquesedeseaeliminarolaposicióndondeseencuentradentrodelabarrademenús.Porejemplo,lassiguientesinstruccioneseliminanelmenúqueseañadióenelapartadoInsercióndemenúsenlabarrademenús:
currMenuGroup.Menus.RemoveMenuFromMenuBar("TestMenu")
ElmétodoRemoveFromMenuBarsellamadirectamentedesdeelobjetoPopupMenuquesedeseaeliminar.Estemétodonorequiereningunaentrada.Noesnecesariointroducirelnombredelmenúyaqueseestállamandoalmétododirectamentedesdeelmismoobjetoquesedeseaeliminar.
Utiliceelmétodoqueseamásidóneoparalaaplicaciónqueestéutilizando.
Nota Losmenúsqueseeliminandelabarrademenúspermanecendisponiblesensugrupodemenús,aunqueocultosalavistadelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Cambiodelabarrademenús>
Reorganizacióndeopcionesdemenúenlabarrademenús
Paraorganizarlosmenúsdelabarrademenús,inserteyeliminelosquenecesitehastaobtenerlaconfiguracióndeseada.
Desplazamientodelprimermenúalfinaldelabarrademenús
Esteejemploeliminaelprimermenúdelabarrademenúsyloinsertacomoúltimomenúdelabarra.
SubCh6_MoveMenu()
'Defineavariabletoholdthemenutobemoved
DimmoveMenuAsAcadPopupMenu
DimMyMenuBarAsAcadMenuBar
SetMyMenuBar=ThisDrawing.Application.menuBar
'SetmoveMenuequaltothefirstmenudisplayed
'onthemenubar
SetmoveMenu=MyMenuBar.Item(0)
'Removethefirstmenufromthemenubar
MyMenuBar.Item(0).RemoveFromMenuBar
'Addthemenubackintothemenubar
'inthelastpositiononthebar
moveMenu.InsertInMenuBar(MyMenuBar.count)
EndSub
¿Comentarios?
<$nopage>menú(objetos):<$startrange>InsertInMenuBar(método):códigodeejemplo,separadores:añadiramenús,PopupMenuItem(objeto):AddSeparator(método),AddSeparator(método),utilizarlapropiedadType,Label(propiedad):teclarápida,PopupMenuItem(objeto):teclasrápidas,asignar,submenús:añadir,submenús:colocar,PopupMenu(objeto):crearsubmenús,menús:crearsubmenús,<$nopage>cascada(menús).<$endrange>InsertInMenuBar(método):códigodeejemplo,menús:suprimir,PopupMenu(objeto):suprimirelementosdemenú,PopupMenuItem(objeto):suprimirelementosdemenú,Delete(método):códigodeejemplo,PopupMenuItem(objeto):Tag(propiedad),PopupMenuItem(objeto):Label(propiedad),PopupMenuItem(objeto):Caption(propiedad),PopupMenuItem(objeto):Macro(propiedad),PopupMenuItem(objeto):HelpString(propiedad),PopupMenuItem(objeto):Enable(propiedad),PopupMenuItem(objeto):Check(propiedad),menús:activar,menús:desactivar,menús:verificar,menús:colocar,PopupMenuItem(objeto):Index(propiedad),PopupMenuItem(objeto):Type(propiedad),PopupMenuItem(objeto):Submenu(propiedad),PopupMenuItem(objeto):Parent(propiedad),PopupMenuItem(objeto):Parent(propiedad),menús:tipodeelementodemenú,menús:devolversubmenús,menús:asignarelementosdemenú,menús:macrosdemenús,caracteresespeciales,InsertInMenuBar(método):códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>
Creaciónymodificacióndemenúsdesplegablesycontextuales
AutoCADActiveX/VBAtienelacapacidaddepersonalizardostiposdemenúsdeAutoCAD:menúsdesplegablesycontextuales(avecesdenominadosmenúsdecursor).Ambossemuestrancomomenúsencascada.Elmenúcontextualpermiteaccederconrapidezaelementosdemenúdeusofrecuente,comolosmodosdereferenciaaobjetos.
Unmenúdesplegablepuedecontenerhasta999elementosdemenú.Unmenúcontextualpuedecontenerhasta499elementosdemenú.Amboslímites
incluyenatodoslosmenúsdelajerarquía.Sielnúmerodeelementosdeunmenúexcededichoslímites,AutoCADignoraloselementossobrantes.Siunmenúdesplegableocontextualsobrepasaelespaciodisponibleenlapantallagráfica,setruncaparaajustarloalapantalla.
Losmenúsdesplegablessiempresedespliegandesdelabarrademenús,mientrasqueloscontextualessiempresemuestranenlaposicióndelospunterosencruzdelapantallagráfica,ocercadeellos.Elmanejodeambostiposdemenúseselmismo,exceptoqueeltítulodelmenúcontextualnoestáincluidoenlabarrademenús.Simplementenosemuestra.Elaccesoalmenúcontextualserealizaatravésdeunmenúúnicosituadoenelgrupodemenúsbase.ElmenúcontextualsepuedeidentificarconlapropiedadShortcutMenu.SiestapropiedaddevuelveTRUE,elmenúconsultadoeselmenúcontextualdelgrupo.
CreacióndemenúsnuevosAdicióndenuevoselementosdemenúaunmenúAdicióndeseparadoresaunmenúAsignacióndeteclarápidaaunaopcióndemenúCreacióndesubmenúsencascadaEliminacióndeopcionesdemenúsExamendepropiedadesdeelementosdemenú
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>
Creacióndemenúsnuevos
Paracrearunmenúnuevo,agregueunobjetoPopupMenualacolecciónPopupMenusconelmétodoAdd.
Paracrearunmenúcontextual,primerodebeeliminarunoyaexistente.Sólopuedehaberunmenúcontextualencadagrupodemenús.Sinohayotromenúcontextual,puedeañadirunoconlaetiqueta“POP0”.AsíindicaráaAutoCADquedeseacrearunmenúdeestetipo.
ElmétodoAddrequierecomoentradaelnombre(etiqueta)delmenúquesedeseaañadir.Estenombreseráeltítulodelmenúcuandosecargueenlabarrademenús.Además,elnombreeslamaneramásfácildeidentificarelmenúenlacolección.
Elnombredeunmenúpuedeserunasimplecadenadetextoocontenercódigosespeciales.Losnombresdelosmenússepuedencambiardespuésdesucreación.Paracambiarelnombredeunmenúexistente,utilicelapropiedadNamedelmenú.
Creacióndeunmenúemergente
Enesteejemplosecreaunnuevomenúemergentellamado“TestMenu”enelprimergrupodemenúsdelacolecciónMenuGroups.
SubCh6_CreateMenu()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Createthenewmenu
DimnewMenuAsAcadPopupMenu
SetnewMenu=currMenuGroup.Menus.Add("TestMenu")
EndSub
¿Comentarios?
<$nopage>menú(objetos):<$startrange>InsertInMenuBar(método):códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>
Adicióndenuevoselementosdemenúaunmenú
Paraagregarnuevoselementosaunmenú,utiliceelmétodoAddMenuItem.EstemétodocreaunnuevoobjetoPopupMenuItemyloañadealmenúindicado.
ElmétodoAddMenuItemrequierecuatroparámetrosdeentrada:Index,Label,TagyMacro.
EspecificarelparámetroIndexEspecificarelparámetroLabelEspecificarelparámetroTagEspecificarelparámetroMacro
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>
EspecificarelparámetroIndex
ElparámetroIndex,oíndice,esunnúmeroenteroquedeterminalaposicióndelnuevoelementoenelmenú.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenelmenúdespuésdeltítulo.Paraañadirelnuevoelementoalfinaldeunmenú,asignealparámetroIndexelvalordelapropiedadCountdelmenú(lapropiedadCountdelmenúindicaelnúmerototaldeelementosquecontieneelmenú).(LapropiedadCountdelmenúrepresentaelnúmerototaldeelementosdemenúenesemenú.)
Laprimeraposicióndelíndiceescero(0)yquelosseparadoresaparecencomoelementosdemenúindividualesconsupropionúmerodeíndice.LapropiedadCountdelmenúdelailustraciónseríaseis(6).ParaañadirunelementodemenúentreTileHorizontallyyTileVertically,asignealparámetroIndexelvalordos(2),queeselnúmerodeíndicedelelementodemenúTileVertically.Elnuevoelementodemenúseinsertaenelnúmerodeíndicedos(2)yempujaatodoslosdemáselementosunaposiciónhaciaabajo.
Unavezcreadaunaopcióndemenú,suíndicenosepuedecambiarconlapropiedadIndex.Paracambiarelnúmerodeíndicedeunaopcióndemenúexistente,debeborrarlaopciónyvolveraañadirlaenunaposicióndiferente,oañadirosuprimirlasopcionescircundanteshastaalcanzarlaposiciónadecuada.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>
EspecificarelparámetroLabel
Unaetiqueta(Label)esunacadenaquedefineelcontenidoyelformatodelasopcionesdemenú.LasetiquetasdeelementosdemenúpuedencontenerexpresionesdecadenaDIESELcondicionalesquelasalterencadavezquesevisualicen.
AdemásdelasexpresionesdecadenaDIESEL,laetiquetapuedecontenercódigosespeciales.Porejemplo,unsigno&colocadojustoantesdeuncarácterindicaquedichocaráctereslateclarápidadelelemento.
Eltextoqueelusuarioveenpantallacomoopcióndemenúsedenomina'leyenda'yprocededelainterpretacióndetodaslasexpresionesdecadenaDIESELycódigosespecialesincluidosenlaetiqueta.Porejemplo,laetiqueta“&Edit”producelaleyenda“Editar.”.
Sideseacambiarlaetiquetadespuésdecrearlaopcióndemenú,utilicelapropiedadLabel.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>
EspecificarelparámetroTag
Elidentificador,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodentrodeundeterminadomenú.
Sideseacambiarelidentificadordespuésdecrearlaopcióndemenú,utilicelapropiedadTagString.
¿Comentarios?
<$startrange>InsertInMenuBar(método):códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>Adicióndenuevoselementosdemenúaunmenú>
EspecificarelparámetroMacro
Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunmenú.Lasmacrosdemenúspuedensersimplesregistrosdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandos,AutoLISP,DIESEL,ocódigodeprogramacióndeActiveX.
Sideseacambiarlamacrodespuésdecrearlaopcióndemenú,utilicelapropiedadMacro.
Adicióndeopcionesaunmenúemergente
Enesteejemplosecreaunnuevomenúllamado“TestMenu”yseinsertaenelmismounaopcióndemenú.Laopcióndemenúrecibeelnombre“Open”ylamacroqueseleasignaeselcomandoOPEN.
SubCh6_AddAMenuItem()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Createthenewmenu
DimnewMenuAsAcadPopupMenu
SetnewMenu=currMenuGroup.Menus.Add("TestMenu")
'Addamenuitemtothenewmenu
DimnewMenuItemAsAcadPopupMenuItem
DimopenMacroAsString
'AssignthemacrotheVBAequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetnewMenuItem=newMenu.AddMenuItem_
(newMenu.count+1,"Open",openMacro)
'Displaythemenuonthemenubar
newMenu.InsertInMenuBar_
(ThisDrawing.Application.menuBar.count+1)
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>
Adicióndeseparadoresaunmenú
Paraañadirunseparadoraunmenú,utiliceelmétodoAddSeparator.EstemétodocreaunnuevoobjetoPopupMenuItemyloañadealmenúindicado.AestaclasedeobjetoPopupMenuItemseleasignaeltipoacSeparator.EltipodeelementodemenúsepuedeconocerconlapropiedadType.
ElmétodoAddSeparatorutilizacomoúnicaentradaelparámetroIndex.ElparámetroIndex,oíndice,esunnúmeroenteroqueespecificalaposicióndelseparadordentrodelmenú.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenelmenúdespuésdeltítulo.
Paraobtenerunejemplodecómoañadirseparadoresaunmenú,véaseActivaciónydesactivacióndeopcionesdemenú.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>
Asignacióndeteclarápidaaunaopcióndemenú
ParaasignarlateclarápidaaunelementodemenúmedianteAutoCADActiveX/VBA,utilicelapropiedadLabeldeeseelemento.Paraespecificarunateclarápida,inserteelequivalenteASCIIdeunsigno&enlaetiquetajustoantesdelcarácterqueseutilizarácomoacelerador.Porejemplo,laetiquetaChr(Asc("&"))+"Edit"semostrarácomo“Editar”,conelcarácter“E”utilizadocomoteclarápida.
Adicióndeteclasrápidasamenús
EnesteejemploserepiteelejemplodeAdicióndeopcionesaunmenúemergente,conlaadicióndelasteclasrápidasalosmenús“TestMenu”y“Open”.La“s”yla“O”seutilizanrespectivamentecomoteclasrápidasdelosmenús“TestMenu”y“Open”.
SubCh6_AddAMenuItem()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Createthenewmenu
DimnewMenuAsAcadPopupMenu
SetnewMenu=currMenuGroup.Menus.Add_
("Te"+Chr(Asc("&"))+"stMenu")
'Addamenuitemtothenewmenu
DimnewMenuItemAsAcadPopupMenuItem
DimopenMacroAsString
'AssignthemacrotheVBAequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetnewMenuItem=newMenu.AddMenuItem_
(newMenu.count+1,Chr(Asc("&"))_
+"Open",openMacro)
'Displaythemenuonthemenubar
newMenu.InsertInMenuBar_
(ThisDrawing.Application.menuBar.count+1)
EndSub
¿Comentarios?
<$nopage>cascada(menús).<$endrange>InsertInMenuBar(método):códigodeejemplo,">
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>
Creacióndesubmenúsencascada
Paraagregarunsubmenúencascada,creeelsubmenúconelmétodoAddSubmenu.EstemétodocreaunnuevoobjetoPopupMenuItemyloañadealmenúindicado.AestaclasedeobjetoPopupMenuItemseleasignaeltipoacSubmenu.
ElmétodoAddSubmenurequieretresparámetrosdeentrada:Index,LabelyTag.
ElparámetroIndex,oíndice,esunnúmeroenteroquedeterminalaposicióndelnuevoelementoenelmenú.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenelmenúdespuésdeltítulo.Paraañadirelnuevoelementoalfinaldeunmenú,asignealparámetroIndexelvalordelapropiedadCountdelmenú(lapropiedadCountdelmenúindicaelnúmerototaldeelementosquecontieneelmenú).(LapropiedadCountdelmenúrepresentaelnúmerototaldeelementosdemenúenesemenú.)
ElparámetroLabel,oetiqueta,esunacadenaquedefineelcontenidoyelformatodeloselementosdemenú.Eltextoqueelusuarioveenpantallacomoopcióndemenúsedenomina'leyenda'yprocededelainterpretacióndetodaslasexpresionesdecadenaDIESELycódigosespecialesincluidosenlaetiqueta.Porejemplo,laetiqueta“&Edit”producelaleyenda“Editar.”.
ElparámetroTag,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodentrodeundeterminadomenú.
ElmétodoAddSubmenunodacomoresultadoelobjetoPopupMenuItemquecrea,sinoquedevuelveelnuevomenúalqueapuntaelsubmenú.Ensulugar,
devuelveelnuevomenúalqueapuntaelsubmenú.Elnuevomenú,devueltocomoobjetoPopupMenu,podrárellenarsecomocualquierotromenúnormal.Paraobtenerinformaciónsobrecómorellenarunmenú,véaseAdicióndenuevoselementosdemenúaunmenú.
Creaciónyrellenodeunsubmenú
Enesteejemplo,secreaunnuevomenúdenominado“TestMenu”yseagregaaunsubmenúdenominado“OpenFile.”Acontinuaciónelsubmenúserellenaconunaopcióndemenúdenominada“Open,”,que,alejecutarla,abreundibujo.Porúltimo,semuestraelmenúenlabarrademenús.
SubCh6_AddASubMenu()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Createthenewmenu
DimnewMenuAsAcadPopupMenu
SetnewMenu=currMenuGroup.Menus.Add("TestMenu")
'Addthesubmenu
DimFileSubMenuAsAcadPopupMenu
SetFileSubMenu=newMenu.AddSubMenu("","OpenFile")
'Addamenuitemtothesubmenu
DimnewMenuItemAsAcadPopupMenuItem
DimopenMacroAsString
'AssignthemacrotheVBequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetnewMenuItem=FileSubMenu.AddMenuItem_
(newMenu.count+1,"Open",openMacro)
'Displaythemenuonthemenubar
newMenu.InsertInMenuBar_
(ThisDrawing.Application.menuBar.count+1)
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>
Eliminacióndeopcionesdemenús
Paraeliminarelementosdeunmenú,utiliceelmétodoDeletedelelementodemenú.
Advertencia Sisuprimeunaopcióndemenú,noinvoqueotrosmétodosopropiedadesquedirectaoindirectamentevuelvanacargarelmismoarchivoIUPdentrodelamismamacro.Porejemplo,despuésdesuprimirunaopcióndemenú,noutiliceelmétodoMenuGroupLoadnilapropiedadPreferences.Profiles.ActiveProfile,niutiliceelcomando“Menuload”usandoelmétodoDocument.SendCommand.EstasopcionescausandirectaoindirectamentelacargadearchivosIUP.Solodebeusarestosmétodosopropiedadesenunamacroseparada.
Eliminacióndeunaopcióndeunmenú
Esteejemploañadeunelementodemenúalfinaldelúltimomenúmostradoenlabarrademenús.Despuéseliminaelelemento.
SubCh6_DeleteMenuItem()
DimLastMenuAsAcadPopupMenu
SetLastMenu=ThisDrawing.Application.menuBar._
Item(ThisDrawing.Application.menuBar.count-1)
'Addamenuitem
DimnewMenuItemAsAcadPopupMenuItem
DimopenMacroAsString
'AssignthemacrotheVBequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetnewMenuItem=LastMenu.AddMenuItem_
(LastMenu.count+1,"Open",openMacro)
'Removethemenuitemfromthemenu
newMenuItem.Delete
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndemenúsdesplegablesycontextuales>
Examendepropiedadesdeelementosdemenú
Lassiguientespropiedadesestánpresentesentodaslasopcionesdemenús:
TagString
Elidentificador,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodentrodeundeterminadomenú.Losidentificadoresdenotanlasteclasrápidas(secuenciasdepulsacióndeteclas)correspondientesacadaopcióndemenú.UtilicelapropiedadTagStringparaleeroescribirelvalordelosidentificadores.
Label
Unaetiqueta(Label)esunacadenaquedefineelcontenidoyelformatodelasopcionesdemenú.LasetiquetasdeelementosdemenúpuedencontenerexpresionesdecadenaDIESELcondicionalesquelasalterencadavezquesevisualicen.UtilicelapropiedadLabelparaleeroescribirelvalordelasetiquetas.
Caption
Unaleyendaeseltextoqueelusuariovecomonombredelmenú.EsunapropiedaddesólolecturaqueprocededelapropiedadLabelunavezqueseeliminanlasexpresionesdecadenaDIESEL.UtilicelapropiedadCaptionparaleeroescribirelvalordelasleyendas.
Macro
Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunmenú.Lasmacrosdemenúspuedensersimples
registrosdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandos,AutoLISP,DIESEL,ocódigodeprogramacióndeActiveX.UtilicelapropiedadMacroparaleeroescribirelvalordelasmacrosdemenú.
HelpString
Lacadenadeayuda(HelpString)eslasecuenciadetextoqueapareceenlalíneadeestadodeAutoCADcuandounusuarioresaltaunaopciónparaseleccionarla.UtilicelapropiedadHelpStringparaescribiroleerelvalordeunacadenadeayuda.
Enable
UtilicelapropiedadEnableparaactivarodesactivarunaopcióndemenú.TambiénpuedeleerlapropiedadEnableparadeterminarsiunelementodemenúestáseleccionadoono.Cuandoseutilizaestapropiedadparaactivarodesactivarunaopcióndemenú,quedansustituidoslosparámetrosdeactivaciónquetengalaexpresiónDIESELdelaopción.Paraobtenerunejemplodedesactivacióndeelementosdemenú,véaseExamendepropiedadesdeelementosdemenú.
Check
UtilicelapropiedadCheckparaseleccionaroretirarlaseleccióndeunaopcióndemenú.TambiénpuedeleerlapropiedadCheckparadeterminarsiunelementodemenúestáseleccionadoono.Cuandoseutilizaestapropiedadparaseleccionaroretirarlaseleccióndeunaopcióndemenú,quedansustituidoslosparámetrosdeselecciónquetengalaexpresiónDIESELdelaopción.
Index
Elíndicedeunaopcióndemenúdeterminasuposicióndentrodelmenúalquepertenece.Laposicióndelíndicedeunmenúsiempreesla0.Porejemplo,siunelementoeselprimerodeunmenú,devuelveunaposicióndeíndice0.Sieselsegundoelemento,devuelvelaposicióndeíndice1yasísucesivamente.
Type
UtilicelapropiedadTypeparadeterminareltipodeopcióndemenú.Unaopcióndemenúpuedeperteneceralassiguientestipologías:menúnormal,separadoroencabezamientodeunsubmenú.Siesunelementodemenúnormal,estapropiedaddevuelveacMenuItem.Sielelementoesunseparador,estapropiedaddevuelveacMenuSeparator.Sielelementoeselencabezamientodeunsubmenú,estapropiedaddevuelveacSubMenu.
SubMenu
UtilicelapropiedadSubMenuparalocalizarelsubmenú.SielelementodemenúesdeltipoacSubMenu,estapropiedaddevuelveelmenúqueestáasociadocomosubmenú,omenúincrustado.ElmenúincrustadosedevuelvecomounobjetoPopupMenu.SielelementodemenúnoesdeltipoacSubMenu,estapropiedaddevuelveunerror.
Parent
UtilicelapropiedadParentparalocalizarelmenúalqueperteneceunaopcióndemenú.Estapropiedaddevuelveelmenúdonderesidelaopción.ElmenúsuperiorsedevuelvecomoobjetoPopupMenu.
Activaciónydesactivacióndeopcionesdemenú
Enesteejemplosecreaunmenúnuevodenominado“TestMenu”yseinsertandosopcionesdemenú.SedesactivaelsegundoelementomediantelapropiedadEnableysemuestraelmenúenlabarrademenús.
SubCh6_DisableMenuItem()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Createthenewmenu
DimnewMenuAsAcadPopupMenu
SetnewMenu=currMenuGroup.Menus.Add("TestMenu")
'Addtwomenuitemsandamenuseparatortothenewmenu
DimMenuEnableAsAcadPopupMenuItem
DimMenuDisableAsAcadPopupMenuItem
DimMenuSeparatorAsAcadPopupMenuItem
DimopenMacroAsString
'AssignthemacrotheVBequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetMenuEnable=newMenu.AddMenuItem_
(newMenu.count+1,"OpenEnabled",openMacro)
SetMenuSeparator=newMenu.AddSeparator("")
SetMenuDisable=newMenu.AddMenuItem_
(newMenu.count+1,"OpenDisabled",openMacro)
'Disablethesecondmenuitem
MenuDisable.Enable=False
'Displaythemenuonthemenubar
newMenu.InsertInMenuBar_
(ThisDrawing.Application.menuBar.count+1)
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>
Creaciónymodificacióndebarrasdeherramientas
SepuedeutilizarAutoCADActiveX/VBAparacrearymodificarbarrasdeherramientas.
CreacióndebarrasdeherramientasAdicióndebotonesnuevosaunabarradeherramientasAdicióndeseparadoresaunabarradeherramientasDefinicióndelossímbolosdebotonesdebarrasdeherramientasCreacióndebarrasdeherramientasdesplegablesBarrasdeherramientasflotantesyfijasEliminacióndebotonesdeunabarradeherramientasExamendepropiedadesdeelementosdebarradeherramientas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>
Creacióndebarrasdeherramientas
Paracrearunabarradeherramientasnueva,agregueunnuevoobjetoToolbaralacolecciónToolbarsconelmétodoAdd.
ElmétodoAddrequierecomoentradaelnombredelabarradeherramientasquesedeseaañadir.Elnombreesunacadenadecaracteresalfanuméricossinmássignosdepuntuaciónqueunguión(–)ounsubrayado(_).Elnombreeslamaneramásfácildeidentificarlabarradeherramientasenlacolección.
Losnombresdebarrasdeherramientassepuedencambiardespuésdesucreación.Paracambiarelnombredeunabarradeherramientasexistente,utilicelapropiedadNamededichabarradeherramientas.
Creacióndeunabarradeherramientasnueva
Enesteejemplosecreaunabarradeherramientasnuevadenominada“TestToolbar”enelprimergrupodemenúsdelacolecciónMenuGroups.
SubCh6_CreateToolbar()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Createthenewtoolbar
DimnewToolbarAsAcadToolbar
SetnewToolbar=currMenuGroup.Toolbars.Add("TestToolbar")
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>
Adicióndebotonesnuevosaunabarradeherramientas
Paraañadirunnuevobotóndeherramientaaunabarradeherramientas,utiliceelmétodoAddToolbarButton.EstemétodocreaunobjetoToolbarItemnuevoyloañadealabarradeherramientasindicada.Sólodebeañadirbotonesaunabarradeherramientasmientraséstaestévisible.
ElmétodoAddToolbarButtonrequierecincoparámetrosdeentrada:Index,Name,HelpString,MacroyFlyoutButton.
Index
ElparámetroIndexesunnúmeroenteroquedeterminalaposicióndelnuevoelementodeToolbarenlabarradeherramientas.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenlabarradeherramientasdespuésdeltítulo.Paraañadirelnuevobotónalfinaldeunabarradeherramientas,asignealparámetroIndexelvalordelapropiedadCountdelabarradeherramientas.(LapropiedadCountdelabarradeherramientasrepresentaelnúmerototaldebotonesquecontiene.)Unavezcreadounbotóndebarradeherramientas,suíndicenosepuedecambiarconlapropiedadIndex.Paracambiarelnúmerodeíndicedeunbotóndebarradeherramientasexistente,debeeliminaryvolveraañadirelbotónenunaposicióndiferente,oañadiroeliminarlosbotonesquelorodeanhastaobtenerlaposicióncorrecta.
Name
Unnombreesunacadenaidentificativadelbotóndebarradeherramientas.Lacadenadebeestarformadaporcaracteresalfanuméricos,sinmássignosdepuntuaciónqueunguión(–)ounsubrayado(_).Estacadenasemuestracomounapistacuandoelcursorsesitúasobreelbotóndeherramienta.Unavezcreadounbotóndebarradeherramientas,sepuedecambiarsunombreconelparámetroName.
HelpString
Lacadenadeayuda(HelpString)eslasecuenciadetextoqueapareceenlalíneadeestadodeAutoCADcuandounusuarioresaltaunaopciónparaseleccionarla.Unavezcreadounbotóndebarradeherramientas,sepuedecambiarsucadenadeayudaconelparámetroHelpString.
Macro
Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunbotón.LasmacrosdebarrasdeherramientaspuedenserregistrossimplesdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandosycódigodeprogramacióndelenguajeDIESEL.Unavezcreadounbotóndebarradeherramientas,sepuedecambiarsumacroconelparámetroMacro.
FlyoutButton
ElparámetroFlyoutButtonesunidentificadoropcionalqueindicasielnuevobotónserádesplegableono.Sielnuevobotónesdesplegable,elparámetrodebetomarelvalorTRUE.Encasonegativo,esteparámetrodebetomarelvalorFALSEosepuedepasarporalto.
Adicióndebotonesaunabarradeherramientasnueva
Esteejemplocreaunabarradeherramientasnuevayleañadeunbotón.ElbotónseasignaaunamacroqueejecutaelcomandoOPENcuandosepulsaelbotón.
SubCh6_AddButton()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Createthenewtoolbar
DimnewToolbarAsAcadToolbar
SetnewToolbar=currMenuGroup.Toolbars.Add("TestToolbar")
'Addabuttontothenewtoolbar
DimnewButtonAsAcadToolbarItem
DimopenMacroAsString
'AssignthemacrotheVBequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetnewButton=newToolbar.AddToolbarButton_
("","NewButton","Openafile.",openMacro)
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>
Adicióndeseparadoresaunabarradeherramientas
Paraañadirunseparadoraunabarradeherramientas,utiliceelmétodoAddSeparator.EstemétodocreaunobjetoToolbarItemnuevoyloañadealabarradeherramientasindicada.AestaclasedeobjetosToolbarItemselesasignaeltipoacSeparator.EltipodebotóndebarradeherramientassepuedeconocerconlapropiedadType.
ElmétodoAddSeparatorrequierelaentradadeunparámetro:Index.ElparámetroIndexesunnúmeroenteroquedeterminalaposicióndelseparadordentrodelabarradeherramientas.Elíndicecomienzaporlaposicióncero(0),quecorrespondealprimerpuestoenlabarradeherramientasdespuésdeltítulo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>
Definicióndelossímbolosdebotonesdebarrasdeherramientas
Paradefinirlasimágenesquesedeseanutilizarencadabotóndeunabarradeherramientas,utilicelosmétodosSetBitmapsyGetBitmaps.
ElmétodoSetBitmapsrequieredosparámetros:SmallIconNameyLargeIconName.
SmallIconName
Elnombredeliconopequeñodefinelacadenadeidentificacióndelrecursodeimagenpequeña(mapadebitsde16×15).Estacadenadebeestarcompuestaporcaracteresalfanuméricos,sinmássignosdepuntuaciónqueunguión(–)osubrayado(_)ydebeincluirlaextensión.bmp.Elrecursopuedeserunmapadebitsdelsistemaounmapadebitsdefinidoporelusuario.LosmapasdebitsdefinidosporelusuariodebentenereltamañoapropiadoydebenestarubicadosenlarutaSupport.
LargeIconName
Elnombredeliconograndedefinelacadenadeidentificacióndelrecursodeimagengrande(mapadebitsde24×22).Estacadenadebeestarcompuestaporcaracteresalfanuméricos,sinmássignosdepuntuaciónqueunguión(–)osubrayado(_)ydebeincluirlaextensión.bmp.Elrecursopuedeserunmapadebitsdelsistemaounmapadebitsdefinidoporelusuario.LosmapasdebitsdefinidosporelusuariodebentenereltamañoapropiadoydebenestarubicadosenlarutaSupport.
Consultadeunabarradeherramientasparaobtenerelnombredelosiconosdelosbotones
SubCh6_GetButtonImages()
DimButtonAsAcadToolbarItem
DimToolbar0AsAcadToolbar
DimMenuGroup0AsAcadMenuGroup
DimSmallButtonNameAsString
DimLargeButtonNameAsString
DimmsgAsString
DimButtonTypeAsString
'Getthefirsttoolbarinthefirstmenugroup
SetMenuGroup0=ThisDrawing.Application._
MenuGroups.Item(0)
SetToolbar0=MenuGroup0.Toolbars.Item(0)
'Clearthestringvariables
SmallButtonName=""
LargeButtonName=""
'Createaheaderforthemessageboxand
'displaythetoolbartobequeried
msg="Toolbar:"+Toolbar0.Name+vbCrLf
Toolbar0.Visible=True
'Iteratethroughthetoolbarandcollectdata
'foreachbuttoninthetoolbar.Ifthetoolbaris
'anormalbuttonoraflyout,collectthesmall
'andlargebuttonnamesforthebutton.
ForEachButtonInToolbar0
ButtonType=Choose(Button.Type+1,"Button",_
"Separator","Control","Flyout")
msg=msg&ButtonType&":"
IfButton.Type=acToolbarButtonOr_
Button.Type=acToolbarFlyoutThen
Button.GetBitmapsSmallButtonName,_
LargeButtonName
msg=msg+SmallButtonName+","_
+LargeButtonName
EndIf
msg=msg+vbCrLf
NextButton
'Displaytheresults
MsgBoxmsg
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>
Creacióndebarrasdeherramientasdesplegables
Paraañadirunbotóndesplegableaunabarradeherramientas,utiliceelmétodoAddToolbarButton.EstemétodocreaunobjetoToolbarItemnuevoyloañadealabarradeherramientasindicada.
ElmétodoAddToolbarButtonrequierecincoparámetrosdeentrada:Index,Name,HelpString,MacroyFlyoutButton.AlasignarelvalorTRUEalparámetroFlyoutButton,elnuevobotónsecreacomouniconodesplegable.Elvalorquedevuelvaestemétodoserálanuevabarradeherramientasdesplegable,quepodrárellenarsecomocualquierbarradeherramientasnormal.
Paraobtenermásinformaciónacercadecómorellenarunabarradeherramientas,véaseAdicióndebotonesnuevosaunabarradeherramientas.
Creacióndeunbotóndesplegableparabarrasdeherramientas
Esteejemplocreadosbarrasdeherramientas.Laprimeracontieneunbotóndesplegable.Lasegundaestáenlazadaconelbotóndesplegabledelaprimera.
SubCh6_AddFlyoutButton()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application._
MenuGroups.Item(0)
'Createthefirsttoolbar
DimFirstToolbarAsAcadToolbar
SetFirstToolbar=currMenuGroup.Toolbars._
Add("FirstToolbar")
'Addaflyoutbuttontothefirstmenuonthemenubar
DimFlyoutButtonAsAcadToolbarItem
SetFlyoutButton=FirstToolbar.AddToolbarButton_
("","Flyout","Demonstratesaflyoutbutton",_
"OPEN",True)
'Createthesecondtoolbar.Thiswillbeattachedto
'thefirsttoolbarviatheflyoutbutton.
DimmsgAsString
SetSecondToolbar=currMenuGroup.Toolbars._
Add("SecondToolbar")
'Addabuttontothenexttoolbar
DimnewButtonAsAcadToolbarItem
DimopenMacroAsString
'AssignthemacrotheVBequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetnewButton=SecondToolbar.AddToolbarButton_
("","NewButton","Openafile.",openMacro)
'Attachthesecondtoolbartotheflyout
'buttononthefirsttoolbar
FlyoutButton.AttachToolbarToFlyoutcurrMenuGroup.Name,_
SecondToolbar.Name
'Displaythefirsttoolbar,hidethesecondtoolbar
FirstToolbar.Visible=True
SecondToolbar.Visible=False
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>
Barrasdeherramientasflotantesyfijas
Lasbarrasdeherramientaspuedenestablecersecomofijasoflotantesmedianteprogramación.
Paraqueunabarradeherramientasseaflotante,utiliceelmétodoFloatdelabarra.ElmétodoFloatrequierelaentradadetresparámetros:Top,LeftyNumberFloatRows.LosparámetrosTopyLeftespecificanlaubicación,enpíxeles,delosbordessuperioreizquierdodelabarradeherramientas.ElparámetroNumberFloatRowsespecificaelnúmerodefilasconquesecreaunabarradeherramientashorizontal.Estenúmerodebeserigualomayorqueuno.Losbotonesdelabarradeherramientassedistribuyendeformaequidistantealolargodelnúmerodefilasindicado.Enlasbarrasdeherramientasalineadasensentidovertical,estevalorespecificaelnúmerodecolumnas.
Paraanclarunabarradeherramientas,utiliceelmétodoDockdelabarra.ElmétodoDockrequieretresparámetrosdeentrada:Side,RowyColumna.ElparámetroSidedeterminaelladodelabarradeherramientasquesesituaráenlamaniobradeanclaje.Puedeespecificarelladosuperior,inferior,izquierdooderechodelabarradeherramientas.LosparámetrosRowyColumndeterminanelnúmerodefilaycolumnadelasbarrasdeherramientasancladasdondeseanclarálabarradeherramientas.
PuedeconsultarunabarradeherramientasparasabersiesfijamediantelapropiedadDockStatus.LapropiedadDockStatusdevolveráTRUEsilabarradeherramientasestáancladayFALSEsiesflotante.
Anclajedeunabarradeherramientas
Esteejemplocreaunabarradeherramientasnuevacontresbotones.Despuéssemuestralabarradeherramientasyseanclaalaizquierdadelapantalla.
SubCh6_DockToolbar()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application._
MenuGroups.Item(0)
'Createthenewtoolbar
DimnewToolbarAsAcadToolbar
SetnewToolbar=currMenuGroup.Toolbars._
Add("TestToolbar")
'Addthreebuttonstothenewtoolbar.
'Allthreebuttonswillhavethesamemacroattached.
DimnewButton1AsAcadToolbarItem
DimnewButton2AsAcadToolbarItem
DimnewButton3AsAcadToolbarItem
DimopenMacroAsString
'AssignthemacrotheVBequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetnewButton1=newToolbar.AddToolbarButton_
("","NewButton1","Openafile.",openMacro)
SetnewButton2=newToolbar.AddToolbarButton_
("","NewButton2","Openafile.",openMacro)
SetnewButton3=newToolbar.AddToolbarButton_
("","NewButton3","Openafile.",openMacro)
'Displaythetoolbar
newToolbar.Visible=True
'Dockthetoolbartotheleftofthescreen.
newToolbar.DockacToolbarDockLeft
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>
Eliminacióndebotonesdeunabarradeherramientas
Paraeliminarbotonesdeunabarradeherramientas,utiliceelmétodoDeletedelbotóndelabarradeherramientas.Sólodebeeliminarbotonesdeunabarradeherramientasmientraséstaestévisible.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creaciónymodificacióndebarrasdeherramientas>
Examendepropiedadesdeelementosdebarradeherramientas
Lassiguientespropiedadesestánpresentesentodosloselementosdebarrasdeherramientas:
Tagstring
Elidentificador,oidentificadordenombre,esunacadenacompuestaporcaracteresalfanuméricosydesubrayado(_).Estacadenaidentificadeformaúnicaunelementodebarradeherramientasdentrodeunabarradeherramientasdeterminada.Cuandosecreaunelementodebarradeherramientas,seleasignaautomáticamenteunidentificador.UtilicelapropiedadTagstringparaleeroescribirelvalordelosidentificadores.
Name
Unnombreesunacadenaidentificativadelelementodebarradeherramientas.TambiénseutilizacomotextodelainformacióndeherramientaqueapareceenAutoCADcuandoelusuariomantieneelratónuotrodispositivoseñaladorsobreelelementodebarradeherramientas.UtilicelapropiedadNameparaleeroescribirelvalordelosnombres.
Macro
Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunelementodebarradeherramientas.Lasmacrospuedensersimplesregistrosdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandos,AutoLISP,DIESEL,ocódigodeprogramacióndeActiveX.UtilicelapropiedadMacroparaleeroescribirelvalordelasmacros.
HelpString
Lacadenadeayuda(HelpString)eslasecuenciadetextoqueapareceenlalíneadeestadodeAutoCADenrepresentacióndeunbotóndebarradeherramientas.UtilicelapropiedadHelpStringparaescribiroleerelvalordeunacadenadeayuda.
Index
Elíndicedeunelementodebarradeherramientasdeterminalaposicióndedichoelementoenlabarradeherramientasalaquepertenece.Laprimeraposicióndelíndicedeunabarradeherramientassiempreesla0.Porejemplo,siunelementoeselprimerodeunabarradeherramientas,tendráunaposicióndeíndice0;sieselsegundoelemento,tendrálaposicióndeíndice1,yasísucesivamente.UtilicelapropiedadIndexparaleeroescribirelvalordelasposicionesdeíndice.
Type
Unelementodeunabarradeherramientaspuedeperteneceraunodelossiguientestipos:unbotónnormaldebarradeherramientas,unseparador,unbotóndesplegableounelementodecontrolespecial.Sielelementoesunbotóndebarradeherramientasnormal,estapropiedaddevuelveacButton.Sielelementoesunseparador,estapropiedaddevuelveacToolButtonSeparator.Sielelementoesunbotóndesplegable,estapropiedaddevuelveacFlyout.Siesunelementodecontrolespecial,estapropiedaddevuelveacControl.UtilicelapropiedadTypeparadeterminareltipodeelementodebarradeherramientas.
Flyout
SielelementodebarradeherramientasesdeltipoacFlyout,estapropiedaddevuelvelabarradeherramientasquetieneenlazadacomobarradeherramientasdesplegable.LabarradeherramientassedevuelvecomoobjetoToolbar.SielelementodemenúnoesdeltipoacFlyout,estapropiedaddevuelveNULL.UtilicelapropiedadFlyoutparalocalizarlabarradeherramientas
desplegabledeunelementodebarradeherramientas.
Parent
Estapropiedaddevuelvelabarradeherramientasdonderesideelelemento.LabarradeherramientassuperiorsedevuelvecomoobjetoToolbar.UtilicelapropiedadParentparalocalizarlabarradeherramientasalaqueperteneceunelementodebarradeherramientas.
ToolbarProperties
Hayotraspropiedadesqueseaplicanatodosloselementosdelabarradeherramientas.Estaspropiedadesdefinensilabarradeherramientasestáancladaoflotante,siestávisibleuoculta,osiutilizabotonesgrandesopequeños.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>
Creacióndemacros
Unamacroesunaseriedecomandosqueejecutanaccionesespecíficascuandoseseleccionaunelementodebarradeherramientas.Lasmacrospuedensersimplesregistrosdepulsacionesdeteclasqueefectúenunatareaounacombinacióncomplejadecomandos,AutoLISP,DIESEL,ocódigodeprogramacióndeActiveX.
Sipretendeincluirparámetrosdecomandoenunamacrodemenú,debeconocerelordenenqueelcomandoesperasusparámetros.Todosloscaracteresdeunamacrodemenúsonimportantes,inclusivelosespaciosenblanco.ComoAutoCADhasidorevisadoymejorado,podríacambiarlasecuenciadelosmensajesdealgunoscomandosy,enocasiones,elpropionombredelcomando.Portanto,esposiblequelosmenúspersonalizadosrequieranalgunospequeñoscambiosparaactualizarsealanuevaversióndeAutoCAD.
Cuandolaentradadeuncomandoprovienedeunelementodemenú,sesuponequelosvaloresdelasvariablesdesistemaPICKADDyPICKAUTOson1y0respectivamente.EstomantienelacompatibilidadconversionesanterioresdeAutoCADyfacilitalapersonalización,yaquenoesnecesarioverificarlosvaloresdedichasvariables.
AsignacióndecaracteresdemacroacaracteresASCIIequivalentesTerminacióndelamacroDetenciónparadatosdeusuarioCancelacióndecomandosRepeticióndemacrosMododedesignacióndeobjetosúnicos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>
AsignacióndecaracteresdemacroacaracteresASCIIequivalentes
EnlasiguientetablasepresentaunadescripciónbrevedeloscaracteresespecialesqueseutilizanenmacrosdemenúsysusnúmerosASCIIequivalentesenVByVBA.DurantelacreacióndelacadenadelapropiedadMacro,utiliceelequivalenteASCIIdeestoscaracteresespeciales.
Caracteresespecialesutilizadosenlasmacrosdemenúsybarrasdeherramientas
Carácter EquivalenteASCII Descripción
; chr(59) EjecutaINTRO
^M chr(13) EjecutaINTRO
^| chr(94)+chr(124)
EjecutaTAB
BARRAESPACIADORA
chr(32) LosespaciosenblancoentresecuenciasdecomandosdeunaopcióndemenúequivalenapulsarlaBARRAESPACIADORA.
\ chr(92) Sedetieneparaintroduccióndedatosdeusuario
_ chr(95) TraduceloscomandosdeAutoCADylaspalabrasclavequelossiguen
+ chr(43) Continúalamacrodemenúenlalíneasiguiente(sisetratadelúltimocarácter)
=* chr(61)+chr(42)
Muestraelmenúdesímbolosactual,desplegableocontextual
*^C^C chr(42)+chr(3)+chr(3)
Prefijodeunelementoderepetición
$ chr(36) CargaunaseccióndemenúointroduceunaexpresióndemacrocondicionaldeDIESEL.
^B chr(2) ActivaodesactivaForzcursor(CTRL+B).
^C chr(3) Cancelaelcomando(CTRL+C).
ESC chr(3) Cancelaelcomando(ESC).
^D chr(4) Activaodesactivacoordenadas(CTRL+D).
^E chr(5) Defineelsiguienteplanoisométrico(CTRL+E)
^G chr(7) Activaodesactivalarejilla(CTRL+G).
^H chr(8) Ejecutaretroceso
^O chr(15) ActivaodesactivaelmodoOrtoCTRL+O).
^P chr(16) ActivaodesactivaMENUECHO.
^Q chr(17) Transmitetodoslosmensajes,listasdeestadoyentradasalaimpresora(CTRL+Q)
^T chr(20) Activaodesactivaeltablero(CTRL+T).
^V chr(22) Cambialaventanagráficaactual(CTRL+V).
^Z chr(26) Carácternuloquesuprimelaadición
automáticadeBARRAESPACIADORAalfinaldeunelementodemenú.Terminacióndemacros
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>
Terminacióndelamacro
Cuandoseejecutaunamacro,AutoCADcolocaunespacioalfinaldelamacroantesdeprocesarlasecuenciadecomandos.AutoCADprocesalasiguientemacrodemenúcomosihubieraescritolineBARRAESPACIADORA.
línea
Algunasveces,estonoesdeseable;porejemplo,loscomandosTEXTOoACOTAdebenterminarseconunINTRO,noconunespacio.Algunasvecesesnecesarioutilizarvariosespacios(oINTRO)paraterminaruncomando,peroalgunoseditoresdetextonopermitencrearunalíneaconespaciosenblancoaladerecha.Dosconvencionesespecialespermitenresolverestosproblemas.
Cuandoapareceunpuntoycoma(;)enunamacro,AutoCADlosustituyeporunINTRO.
Siunalíneaterminaenuncarácterdecontrol,unacontrabarra(\),unsignomás(+)ounpuntoycoma(;),AutoCADnoañadeunespacioalfinaldelalínea.
Examinelasiguientemacro:
erase\;
Siesteelementoterminarasimplementeconunacontrabarra(loqueindicaqueelusuariodebeintroducirdatos),laoperaciónERASEnoseefectuaríacorrectamente,yaqueAutoCADnoañadeunespacioenblancodespuésdelacontrabarra.Porello,estamacrodemenúutilizaunpuntoycoma(;)paraforzarunINTROdespuésdelosdatosintroducidosporelusuario.Aquísemuestranotrosejemplos:
scp
ucs;
text\.40DRAFTInc;;;MainSt.;;;City,State;
AlseleccionarlaprimeramacroseintroducescpyBARRAESPACIADORAenlalíneadecomando,yapareceestemensaje:
Especifiqueunaopción[New/Move/orthoGraphic/Prev/Restore/Save/Del/Apply/?/World]<World>:
Alseleccionarlasegundamacroseintroducescp,BARRAESPACIADORAypuntoycoma(;)enlalíneadecomando,yseaceptaelvalorpordefecto,World.Enlapantallanoseobservaningunadiferenciaentreelprimerelementoyelsegundo;peronormalmentenoseincluiríanambosenelmismomenú.
Alseleccionarlaterceramacro,semuestraunmensajesolicitandounpuntoinicialysedibujaladirecciónentreslíneas.Delostrespuntosycomas(;;;),elprimeroterminalacadenadetexto,elsegundovuelveaejecutarelcomandoTEXTyeltercerosolicitalaposiciónpordefectodebajodelalíneaanterior.
Nota TodosloscaracteresespecialesdebenespecificarseconsusequivalentesASCII.ParaobtenerunalistadeequivalentesASCII,véaseAsignacióndecaracteresdemacroacaracteresASCIIequivalentes.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>
Detenciónparadatosdeusuario
Avecesresultaútilaceptardatosdeltecladoodeldispositivoseñaladorenmediodeunamacro,paralocualdebecolocarunacontrabarra(\)enelpuntodondedebenaparecerlosdatos.
circle\1
layeroff\;
Laprimeramacrosedetieneparapediralusuarioelpuntocentraly,acontinuación,leeunradiodevalor1delamacro.Tengaencuentaquenohayningúnespaciodespuésdelcarácterdecontrabarra(\).Lasiguientemacrohaceunapausaparapediralusuarioqueescribaunnombredecapa,ladesactivaysaledelcomandoCAPA.Normalmente,elcomandoCAPApreguntasidesearealizarotraoperaciónysólosalesisepulsaBARRAESPACIADORA(espacio)oINTRO(;).
Normalmente,lamacrocontinúadespuésdeintroducirunelemento.Portanto,noesposibleconstruirunamacroqueacepteunnúmerovariabledeentradas(comoenunaseleccióndeobjetos)ydespuéscontinúe.Noobstante,elcomandoDESIGNAesunaexcepción;unacontrabarradetienelamacrohastaqueterminelaseleccióndeobjetos.Porejemplo,considereestamacro:
select\changeprevious;propertiescolorred;
EstamacroutilizaelcomandoDESIGNAparacrearunconjuntodeseleccióndeunoovariosobjetos.Acontinuación,ejecutaelcomandoCAMBIA,hacereferenciaaesteconjuntodeselecciónconlaopciónPrevioycambiaelcolordetodoslosobjetosseleccionadosarojo.
Dadoqueelcarácterdecontrabarra(\)hacequelamacrosedetengapararecibirdatosdelusuario,nopuedeutilizarseparaningúnotrofinenunamacro.Cuandoespecifiquelasrutasdedirectoriodearchivos,utiliceunabarraoblicua(/)como
delimitadordelaruta:porejemplo,/directorio/archivo.
Lassiguientessituacionesretrasanlareanudacióndeunamacro:
Siseesperalaentradadeunpunto,esposiblequeleprecedanmodosdereferenciaaobjetos.
CuandoseutilizanpuntosconfiltrosX/Y/Z,lamacroseinterrumpehastaqueseacumulatodoelpunto.
ÚnicamenteenelcasodelcomandoDESIGNA,lamacronocontinúahastaqueterminaladesignacióndeobjetos.
Sielusuariorespondeconuncomandotransparente,lamacrointerrumpidapermaneceenesteestadohastaqueseterminaelcomandoyserecibenlosdatossolicitadosoriginalmente.
Sielusuariorespondeseleccionandootramacro(paraproporcionaropcionesoejecutaruncomandotransparente),lamacrooriginalseinterrumpeyelelementodemenúelegidoseprocesaensutotalidadantesdequelamacrointerrumpidareanudesuejecución.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>
Cancelacióndecomandos
Paracerciorarsedequeningunodeloscomandosanterioresquedaincompleto,utilice^C^Cenlasmacros.EstoequivaleapulsarESCdosvecesdesdeelteclado.Aunquelacadenaúnica^Ccancelalamayoríadeloscomandos,senecesita^C^CpararegresaralasolicitudComandodesdeuncomandoACOTA.Porello,enlamayoríadeloscasos,^C^CgarantizaelregresodeAutoCADalasolicituddecomando.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>
Repeticióndemacros
Unavezseleccionadouncomando,esprobablequeloquierautilizarvariasvecesantesdepasaraotrocomando.Normalmente,eltrabajoconlasherramientasserealizadelaformasiguiente:seseleccionaunaherramienta,serealizanvariasaccionesconella,acontinuaciónseescogeotrayasísucesivamente.Paranotenerqueseleccionarlaherramientaantesdecadauso,AutoCADproporcionaunafunciónderepeticióndecomandos,queseactivaporunarespuestanula.Sinembargo,nopuedeutilizarestafunciónparaespecificaropcionesdecomandos.
Estafunciónpermiterepetirloscomandosdeusomásfrecuentehastaqueseelijaotrocomando.Siunamacroempiezacon*^C^Cinmediatamentedespuésdelaetiquetadelelemento,lamacroseguardaenlamemoria.LamacrorespondealassiguientessolicitudesdecomandohastaquesepulseESCoseseleccioneotramacro.
Noutilice^C(Cancelar)dentrodeunamacroquecomienceporlacadena*^C^C;estocancelaríalarepeticióndelamacro.
Elsiguienteesunejemplodelafunciónrepetitivaomodal,delamanipulacióndecomandos.
*^C^CMOVESingle
*^C^CCOPYSingle
*^C^CERASESingle
*^C^CSTRETCHSingleCrossing
*^C^CROTATESingle
*^C^CSCALESingle
Larepeticióndemacrosnofuncionaenelcasodelosmenúsdesímbolos.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>Creacióndemacros>
Mododedesignacióndeobjetosúnicos
Ladesignacióndeobjetosúnicosactivaelmododedesignaciónúnica,desactivaeldiálogohabitualdeladesignacióndeobjetosyhacequeladesignaciónregresealprimerobjetodesignadoporunaopciónsubsiguiente.Estopuederesultarbastanteprácticoenunamacro.Porejemplo,considereestamacro:
*^C^CERASEsingle
EstamacroterminaelcomandoactualyactivaelcomandoBORRAconlaopcióndedesignaciónúnica.Unavezseleccionadoelelemento,esnecesarioseñalarelobjetoúnicoquehadeborrarseoapuntaraunáreaenblancoyespecificarunaventana.Losobjetosdesignadosdeestaformaseborranylamacroserepite(debidoalasteriscoinicial)paraquepuedansuprimirseotroselementos.Conelmododedesignaciónúnica,lainteracciónconAutoCADesmásdinámica;.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>
Creacióndemensajesdeayudaenlalíneadeestadoparaelementosdemenúsydebarrasdeherramientas
Unaspectoimportantedelsistemaoriginaldeasistenciasonlosmensajesdeayudadelalíneadeestado.Setratadesencillosmensajesdescriptivosqueaparecenenlalíneadeestadoalresaltarunelementodemenúodebarradeherramientas.LaayudadelalíneadeestadocorrespondienteatodoslosmenúsybarrasdeherramientasseencuentraenlapropiedadHelpStringdelpropioelemento.
Cuandosecreaporprimeravezunelementodemenúodebarradeherramientas,lapropiedadHelpStringestávacía.
Adicióndeayudadelíneadeestadoaunelementodemenú
Enesteejemplosecreaunnuevomenúdenominado“TestMenu”yacontinuaciónsecreaunelementodemenúdenominado“Open.”Despuésseasignaalelementodemenúayudadelalíneadeestado,mediantelapropiedadHelpString.
SubCh6_AddHelp()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Createthenewmenu
DimnewMenuAsAcadPopupMenu
SetnewMenu=currMenuGroup.Menus.Add_
("Te"+Chr(Asc("&"))+"stMenu")
'Addamenuitemtothenewmenu
DimnewMenuItemAsAcadPopupMenuItem
DimopenMacroAsString
'AssignthemacrotheVBAequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
'Createthemenuitem
SetnewMenuItem=newMenu.AddMenuItem_
(newMenu.count+1,Chr(Asc("&"))_
+"Open",openMacro)
'Addthestatuslinehelptothemenuitem
newMenuItem.HelpString="OpensanAutoCADdrawingfile."
'Displaythemenuonthemenubar
newMenu.InsertInMenuBar_
(ThisDrawing.Application.menuBar.count+1)
EndSub
¿Comentarios?
<$nopage>menúcontextual.
ManualdeldesarrolladordeActiveXyVBA>Personalizacióndebarrasdeherramientasymenús>
Adicióndeentradasalmenúcontextual
Elmenúcontextual,odecursor,esunmenúespecialincluidoenelgrupodemenúsbasedeAutoCAD.EstemenúaparecealmantenerpresionadalateclaMAYÚSyhacerclicconelbotónderechodelratón.
Paraencontrarelmenúcontextual,AutoCADbuscaenelgrupodemenúsdebaseunmenúcuyapropiedadShortcutMenuseaTRUE.Paraañadirnuevoselementosalmenúcontextual,sigalospasosenumeradosenAdicióndenuevoselementosdemenúaunmenú.
Losnuevosgruposdemenúspuedenteneronounmenúcontextualdisponible.Paracrearunmenúcontextualparaungrupodemenús,sigalasdirectricesindicadasenCreacióndemenúsnuevosyutilicePOP0comoetiquetadelnuevomenú.
Adicióndeunaopcióndemenúalfinaldelmenúcontextual
Enesteejemploseañadelaopcióndemenú“OpenDWG”alfinaldelmenúcontextual.
SubCh6_AddMenuItemToshortcutMenu()
DimcurrMenuGroupAsAcadMenuGroup
SetcurrMenuGroup=ThisDrawing.Application.MenuGroups.Item(0)
'Findtheshortcutmenuandassignittothe
'shortcutMenuvariable
DimscMenuAsAcadPopupMenu
DimentryAsAcadPopupMenu
ForEachentryIncurrMenuGroup.Menus
Ifentry.shortcutMenu=TrueThen
SetscMenu=entry
EndIf
Nextentry
'Addamenuitemtotheshortcutmenu
DimnewMenuItemAsAcadPopupMenuItem
DimopenMacroAsString
'AssignthemacrotheVBAequivalentof"ESCESC_open"
openMacro=Chr(3)+Chr(3)+"_open"
SetnewMenuItem=scMenu.AddMenuItem_
("",Chr(Asc("&"))_
+"OpenDWG",openMacro)
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>
Utilizacióndeeventos
LoseventossonnotificacionesomensajesenviadosporAutoCADparainformaralusuariodelestadoactualdelasesiónoparaadvertirledealgoquehasucedido.Porejemplo,cuandoseabreundibujoenAutoCADseactivaeleventoBeginOpen.EsteeventocontieneelnombredeldibujodeAutoCAD.Tambiénseactivauneventocuandosecierraundibujo.Conestainformaciónsepuedeescribirunasubrutinaouncontroladordeeventosqueutilicenestoseventospararegistrarlacantidaddetiempoquededicaunusuarioatrabajarenundibujoconcreto.
ConceptosbásicossobreloseventosdeAutoCADDirectricesparaloscontroladoresdeeventosControldeeventosdeniveldeaplicaciónControldeeventosdedocumentoControldeeventosdeniveldeobjeto
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>
ConceptosbásicossobreloseventosdeAutoCAD
ExistentrestiposdeeventosenAutoCAD®:
LoseventosdeniveldeaplicaciónrespondenacambiosdelaaplicaciónAutoCADydesuentorno.Estoseventoscorrespondenalasoperacionesdeapertura,guardado,cierreeimpresióndedibujos,creacióndenuevosdibujos,ejecucióndecomandosdeAutoCAD,cargaydescargadeaplicacionesARXyLISP,cambiosdelasvariablesdelsistemaycambiosenlaventanadelaaplicación.
Loseventosdedocumentorespondenacambiosdeundocumentoconcretoodesucontenido.Estoseventosrespondenalaadición,eliminaciónomodificacióndeobjetos,activacióndemenúscontextuales,cambiosenelconjuntodeselecciónPickfirst,cambiosenlaventanadedibujoyregeneracióndeldibujo.Tambiénexisteneventosdedocumentoparalaapertura,elcierreylaimpresióndedibujos,asícomoparalacargaydescargadeaplicacionesARXyLISPdesdeeldibujo.
Loseventosdeniveldeobjetorespondenaloscambiosdeunobjetoconcreto.Enlaactualidadsólohayuneventodeobjetos.Seactivasiemprequesemodificaunobjeto.
Lassubrutinasquerespondenaeventossedenominancontroladoresdeeventosyseejecutandeformaautomáticacadavezqueseactivasueventocorrespondiente.Lainformaciónquecontienenloseventos,comoelnombredeldibujoeneleventoBeginOpen,setransfierealoscontroladoresdeeventosmedianteparámetros.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>
Directricesparaloscontroladoresdeeventos
EsimportanterecordarqueloseventossóloproporcionaninformaciónsobreelestadoolasactividadesquetienenlugarenAutoCAD.Aunquepuedenescribirsecontroladoresdeeventosquerespondanaesoseventos,esfrecuentequeAutoCADseencuentreprocesandocomandoscuandoseactivaelcontroladordeeventos.Loscontroladoresdeeventos,portanto,tienenciertasrestriccionesdeseguridadencuantoasucapacidaddeactuaciónencombinaciónconAutoCADysubasededatos.
Nocreedependenciasdelasecuenciadeeventos.Alescribircontroladoresdeeventos,noconfíeenqueelordendeloseventossigaunasecuenciaexactaqueconsiderelógica.Porejemplo,siejecutauncomandoABRIR,seactivaránloseventosBeginCommand,BeginOpen,EndOpenyEndCommand.Noobstante,esposiblequenoseproduzcaneneseorden.LaúnicasecuenciadeeventosenlaquepuedeconfiaresladequeuneventoBeginseproduciráantesqueuneventoEnd.Enelejemploanteriorloseventospuedenactivarseenelordensiguiente:BeginCommand,BeginOpen,EndCommand,yEndOpen,oinclusoBeginCommand,EndCommand,BeginOpen,yEndOpen.
Nocreedependenciasdelasecuenciadeoperaciones.Sisuprimeobjeto1y,acontinuación,objeto2,noconfíeenrecibirprimeroeleventoObjectEraseddelobjeto1yacontinuacióneldelobjeto2.PodríarecibirenprimerlugareleventoObjectEraseddelobjeto2.
Norealicefuncionesinteractivasdesdeuncontroladordeeventos.IntentarejecutarfuncionesinteractivasdesdeuncontroladordeeventospodríacausarseriosproblemasyaqueAutoCADpodríaestarprocesandouncomandoenelmomentodeactivarseelevento.Es,por
tanto,necesarioevitarelusodemétodosdeentrada-precisióncomoGetPoint,GetEntity,GetKeyword,etc.,deoperacionesconconjuntosdeselecciónydelmétodoSendCommandenloscontroladoresdeeventos.
Noiniciecuadrosdediálogodesdeuncontroladordeeventos.LoscuadrosdediálogoseconsideranfuncionesinteractivasypuedeninterferirconlaoperaciónactualdeAutoCAD.Loscuadrosdemensajeydeadvertencianoseconsideranfuncionesinteractivasypuedeniniciarsesinriesgos;sinembargo,generaruncuadrodemensajeenuncontroladordeeventosparaloseventosBeginModal,EndModal,Activate,DeactivateyBeginRightClickpuedeproducirunasecuenciainesperada.
Puedeescribirdatosencualquierobjetodelabasededatos,exceptoenelobjetoquegeneróelevento.CualquierobjetoqueactivauneventosepuedeabrirparautilizarloconAutoCADyconlaoperaciónqueestáactualmenteencurso.Portanto,noescribainformaciónenunobjetodesdeuncontroladordeeventosdelmismoobjeto.Lalecturadeinformacióndesdeelobjetoqueactivauneventopuederealizarsesinningúnriesgo.Porejemplo,supongaquetieneunsuelodebaldosasyquecreauncontroladordeeventosasociadoalbordedelsuelo.Sicambiaeltamañodelsuelo,elcontroladordeeventosañadeosustraebaldosasdeformaautomáticapararellenareláreanueva.Elcontroladordeeventospodráleerelnuevoáreadelborde,peronopodrárealizarningúncambioenél.
Norealiceningunaaccióndesdeuncontroladordeeventosquepuedaactivarelmismoevento.Sillevaacabolamismaacciónenuncontroladordeeventosqueactivaelmismoevento,crearáunbucleinfinito.Porejemplo,nodebenuncaintentarabrirundibujodesdedentrodeleventoBeginOpen;AutoCADcontinuaríaabriendomásdibujoshastaquesealcanzaraelnúmeromáximodedibujosabiertosposible.
RecuerdequenopuedenactivarseeventosmientrasAutoCADestámostrandouncuadrodediálogomodal.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>
Controldeeventosdeniveldeaplicación
LoseventosdeniveldeaplicaciónnosonpermanentesenAutoCADVBA.Esdecir,quenoseactivandeformaautomáticaalcargarunproyectoVBAPortanto,esnecesarioactivarlosparaVBAyparatodoslosdemáscontroladoresdeActiveX®Automation.
Unavezactivadosloseventosdeniveldeaplicación,tendráasudisposiciónunpotencialdeeventosmuyimportante.Estoseventosincluyen:
AppActivate
Seiniciajustoantesdeactivarlaventanadelaaplicaciónprincipal.
AppDeactivate
Seiniciajustoantesdedesactivarlaventanadelaaplicaciónprincipal.
ARXLoaded
SeactivadespuésdecargarunaaplicaciónObjectARX.
ARXUnloaded
SeactivadespuésdedescargarunaaplicaciónObjectARX.
BeginCommand
Seactivajustodespuésdeejecutaruncomando,peroantesdesufinalización.
BeginFileDrop
Seactivaalcolocarunarchivoenlaventanadelaaplicaciónprincipal.
BeginLISP
SeactivacuandoAutoCADrecibelasolicituddecalcularunaexpresiónLISP.
BeginModal
Seactivajustoantesdelaaperturadeuncuadrodediálogomodal.
BeginOpen
SeactivajustodespuésdequeAutoCADrecibalasolicituddeabrirundibujoexistente.
BeginPlot
SeactivajustodespuésdequeAutoCADrecibalasolicituddeimprimirundibujo.
BeginQuit
SeactivajustoantesdequefinaliceunasesióndeAutoCAD.
BeginSave
SeactivajustodespuésdequeAutoCADrecibalasolicituddeguardareldibujo.
EndCommand
Seactivajustodespuésdequefinaliceuncomando.
EndLISP
SeactivacuandofinalizalaevaluacióndeunaexpresiónLISP.
EndModal
Seactivajustodespuésdelcierredeuncuadrodediálogomodal.
EndOpen
SeactivacuandoAutoCADterminadeabrirundibujoexistente.
EndPlot
Seactivadespuésdelenvíodeundocumentoalaimpresora.
EndSave
SeactivacuandoAutoCADterminadeguardareldibujo.
LISPCancelled
SeactivacuandosecancelalaevaluacióndeunaexpresiónLISP.
NewDrawing
Seactivajustoantesdelacreacióndeunnuevodibujo.
SysVarChanged
Seactivacuandosecambiaelvalordeunavariabledelsistema.
WindowChanged
Seactivacuandoserealizauncambioenlaventanadelaaplicación.
WindowMovedOrResized
Seactivajustodespuésdedesplazarocambiareltamañodelaventanadelaaplicación.
Activacióndeeventosdeniveldeaplicación
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdeniveldeaplicación>
Activacióndeeventosdeniveldeaplicación
ParapoderutilizareventosdelniveldeaplicaciónesnecesariocrearunnuevomódulodeclaseydeclararunobjetodeltipoAcadApplicacionconeventos.Porejemplo,supongaquesehacreadounmódulodeclasenuevodenominadoModuloEventoClase.LanuevaclasecontieneladeclaracióndelaaplicaciónconlapalabraclavedeVBAWithEvents.
ParacrearunaclasenuevaydeclararunobjetoApplicationconeventos
1. EnVBAIDE,inserteunmódulodeclase.EnelmenúInsertar,elijaMódulodeclase.
2. EnlaventanaProyecto,elijaelmódulodeclasequeacabadeinsertar.
3. EnlaventanaPropiedades,cambieelnombredelaclaseporModulo-EventoClase.
4. AbralaventanaCódigodelaclaseutilizandoF7oelijaCódigoenelmenúVer.
5. Enlaventanadecódigodelaclase,añadalasiguientelínea:
PublicWithEventsAppAsAcadApplication
Despuésdedeclararlo,elnuevoobjetoconeventosapareceenlalistadesplegabledeobjetosdelmódulodeclase.Ahorapuedeescribirprocedimientosdeeventoparaelnuevoobjetodelmódulodeclase.Alseleccionarelnuevoobjetoenlalistadeobjetos,loseventosválidosparadichoobjetoapareceránenlalistadesplegabledeprocedimientos.
Antesdeejecutarlosprocedimientos,debeconectarelobjetodeclaradodelmódulodeclaseconelobjetoApplication.Paraello,puedeutilizarelsiguientecódigodesdecualquiermódulo.
ParaconectarelobjetodeclaradoconelobjetoApplication
1. EnlaventanaCódigodelmóduloprincipal,añadalasiguientelíneaalaseccióndedeclaraciones:
DimXAsNewEventClassModule
2. Enlamismaventana,añadalasiguientesubrutina:
SubInitializeEvents()
SetX.App=ThisDrawing.Application
EndSub
3. Enelcódigodelmóduloprincipal,añadaunallamadaalasubrutinaInitializeEvents:
CallInitializeEvents
DespuésdeejecutarelprocedimientoInitializeEvents,elobjetoAppdelmódulodeclaseseñalaalobjetoApplicationespecificadoylosprocedimientosdeeventodelmódulodeclaseseejecutansiemprequeseactivaelevento.
SolicitudparacontinuarcuandosearrastraysueltaundibujoenAutoCAD
EsteejemplointerceptaelprocesodecargacuandosearrastraunarchivoysesueltaenAutoCAD.SemuestrauncuadrodemensajequecontieneelnombredelarchivoylosbotonesSí,NoyContinuar,loscualespermitenalusuariodecidirsielarchivodebeseguircargándoseovisualizándose.Sielusuarioeligecancelarlaoperación,estadecisiónsedevuelvemedianteelparámetroCanceldeleventoBeginFileDropyelarchivonosecarga.
PublicWithEventsACADAppAsAcadApplication
SubExample_AcadApplication_Events()
'Thisexampleintializesthepublicvariable(ACADApp)
'whichwillbeusedtointerceptAcadApplicationEvents
'
'RunthisprocedureFIRST!
'WecouldgettheapplicationfromtheThisDocument
'object,butthatwouldrequirehavingadrawingopen,
'sowegrabitfromthesystem.
SetACADApp=GetObject(,"AutoCAD.Application.17")
EndSub
PrivateSubACADApp_BeginFileDrop_
(ByValFileNameAsString,CancelAsBoolean)
'ThisexampleinterceptsanApplicationBeginFileDropevent.
'
'Thiseventistriggeredwhenadrawingfileisdragged
'intoAutoCAD.
'
'Totriggerthisexampleevent:
'1)Makesuretoruntheexamplethatinitializes
'thepublicvariable(namedACADApp)linkedtothisevent.
'
'2)DraganAutoCADdrawingfileintotheAutoCAD
'applicationfromeithertheWindowsDesktop
'orWindowsExplorer
'Usethe"Cancel"variabletostoptheloadingofthe
'draggedfile,andthe"FileName"variabletonotify
'theuserwhichfileisabouttobedraggedin.
IfMsgBox("AutoCADisabouttoload"&FileName&vbCrLf_
&"Doyouwanttocontinueloadingthisfile?",_
vbYesNoCancel+vbQuestion)<>vbYesThen
Cancel=True
EndIf
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>
Controldeeventosdedocumento
LoseventosdeniveldeaplicaciónnosonpermanentesenAutoCADVBA.Esdecir,quenoseactivandeformaautomáticaalcargarunproyectoVBANoobstante,noestánhabilitadosparaningúnotrocontrolador,comoVB.Esnecesario,portanto,activarlosparatodoslosdemáscontroladoresdeActiveXAutomation.
Unavezactivadosloseventosdeniveldeaplicación,tendráasudisposiciónunpotencialdeeventosmuyimportante.Incluye:
Activate
Seiniciaalactivarunaventanadedocumento.
BeginDocClose
Seiniciajustodespuésderecibirunasolicitudparacerrarundibujo.
BeginCommand
Seactivajustodespuésdeejecutaruncomando,peroantesdesufinalización.
BeginDoubleClick
Seactivacuandoelusuariohacedobleclicenunobjetodeldibujo.
BeginLISP
SeactivacuandoAutoCADrecibelasolicituddecalcularunaexpresiónLISP.
BeginPlot
SeactivajustodespuésdequeAutoCADrecibalasolicituddeimprimirundibujo.
BeginRightClick
Seactivacuandoelusuariohaceclicconelbotónderechoenlaventanadeldibujo.
BeginSave
SeactivajustodespuésdequeAutoCADrecibalasolicituddeguardareldibujo.
BeginShortcutMenuCommand
SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoCommand.
BeginShortcutMenuDefault
SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoDefault.
BeginShortcutMenuEdit
SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoEdit.
BeginShortcutMenuGrip
SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoGrip.
BeginShortcutMenuOsnap
SeactivadespuésdequeelusuariohagaclicconelbotónderechoenlaventanadedibujoyantesdequeaparezcaelmenúcontextualenmodoOsnap.
Deactivate
Seiniciaaldesactivarlaventanadeldibujo.
EndCommand
Seactivajustodespuésdequefinaliceuncomando.
EndLISP
SeactivacuandofinalizalaevaluacióndeunaexpresiónLISP.
EndPlot
Seactivadespuésdelenvíodeundocumentoalaimpresora.
EndSave
SeactivacuandoAutoCADterminadeguardareldibujo.
EndShortcutMenu
Seactivacuandoapareceelmenúcontextual.
LayoutSwitched
Seactivadespuésdequeelusuariocambiedepresentación.
LISPCancelled
SeactivacuandosecancelalaevaluacióndeunaexpresiónLISP.
ObjectAdded
Seactivadespuésdeañadirunobjetoaldibujo.
ObjectErased
Seactivadespuésdeborrarunobjetodeldibujo.
ObjectModified
Seactivadespuésdemodificarunobjetodeldibujo.
SelectionChanged
SeactivaalcambiarelconjuntodeselecciónPickfirst.
WindowChanged
Seactivacuandoserealizauncambioenlaventanadeldocumento.
WindowMovedOrResized
Seactivajustodespuésdedesplazarocambiareltamañodelaventanadeldibujo.
Activacióndeeventosdedocumentoenotrosentornos(noVBA)Programacióndeeventosdedocumentoenotrosentornos(noVBA)ProgramacióndeeventosdedocumentoenVBA
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdedocumento>
Activacióndeeventosdedocumentoenotrosentornos(noVBA)
ParapoderutilizareventosdedocumentoenVBuotroentornoquenoseaVBA,esnecesariocrearunnuevomódulodeclaseydeclararunobjetodeltipoAcadDocumentconeventos.Porejemplo,supongaquesehacreadounmódulodeclasenuevodenominadoModuloEventoClase.LanuevaclasecontieneladeclaracióndelaaplicaciónconlapalabraclavedeVBAWithEvents.
ParacrearunaclasenuevaydeclararunobjetoDocumentoconeventos
1. EnVBAIDE,inserteunmódulodeclase.EnelmenúInsertar,elijaMódulodeclase.
2. EnlaventanaProyecto,elijaelmódulodeclasequeacabadeinsertar.
3. EnlaventanaPropiedades,cambieelnombredelaclaseporModulo-EventoClase.
4. AbralaventanaCódigodelaclaseutilizandoF7oelijaCódigoenelmenúVer.
5. Enlaventanadecódigodelaclase,añadalasiguientelínea:
PublicWithEventsDocAsAcadDocument
Despuésdedeclararlo,elnuevoobjetoconeventosapareceenlalistadesplegabledeobjetosdelmódulodeclase.Ahorapuedeescribirprocedimientosdeeventoparaelnuevoobjetodelmódulodeclase.Alseleccionarelnuevoobjetoenlalistadeobjetos,loseventosválidosparadichoobjetoapareceránenlalistadesplegabledeprocedimientos.
Antesdeejecutarlosprocedimientos,debeconectarelobjetodeclaradodel
módulodeclaseconelobjetoDocument.Paraello,puedeutilizarelsiguientecódigodesdecualquiermódulo.
ParaconectarelobjetodeclaradoconelobjetoDocumento
1. EnlaventanaCódigodelmóduloprincipal,añadalasiguientelíneaalaseccióndedeclaraciones:
DimXAsNewEventClassModule
2. Enlamismaventana,añadalasiguientesubrutina:
ubInitializeEvents()
SetX.Doc=ThisDrawing
EndSub
3. Enelcódigodelmóduloprincipal,añadaunallamadaalasubrutinaInitializeApp:
CallInitializeEvents
DespuésdeejecutarelprocedimientoInitializeEvents,elobjetoDocdelmódulodeclaseseñalaalobjetodedocumentocreadoylosprocedimientosdeeventodelmódulodeclaseseejecutansiemprequeseactivaelevento.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdedocumento>
Programacióndeeventosdedocumentoenotrosentornos(noVBA)
Unavezactivadosloseventosdedocumento,encontrarálavariabledeclaseDocenlalistadesplegabledeobjetosdelmóduloClasedelaventanadecódigo.SeleccionelaclaseDocyaparecerálalistadeeventosdisponiblesenlalistadesplegabledeprocedimientos.Seleccioneeleventoparaelquedeseaescribiruncontroladorylaestructurabásicadelmismosecrearáautomáticamente.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdedocumento>
ProgramacióndeeventosdedocumentoenVBA
LoseventosdedocumentonoseactivandeformaautomáticaalcargarunproyectoVBA.ParaescribircontroladoresparaeventosdedocumentoenVBA,seleccioneAcadDocumentenlalistadesplegabledeobjetosdelaventanadecódigo.Loseventosdisponiblesparaeldocumentoaparecenenlalistadesplegabledeprocedimientos.Seleccioneeleventoparaelquedeseaescribiruncontroladorylaestructurabásicadelmismosecrearáautomáticamente.
Tengapresentequeloscontroladoresdeeventoscreadosdeestaformaseaplicanaldibujoqueseencuentreactivo.Paracrearcontroladoresdeeventosparaundibujoespecífico,primerosigalospasosexplicadosenActivacióndeeventosdedocumentoenotrosentornos(noVBA).Podráactivardocumentosconcretosparaloseventos.
EnelsiguienteejemploseutilizaelcontroladordeeventoBeginShortcutMenuDefaultparaañadirlaopcióndemenú“OpenDWG”alprincipiodelmenúcontextual.Después,elcontroladordeeventoEndShortcutMenueliminalaopcióndemenúadicionalparaquenoseguardepermanentementeenlaconfiguracióndemenúsdelusuario.
PrivateSubAcadDocument_BeginShortcutMenuDefault_
(ShortcutMenuAsAutoCAD.IAcadPopupMenu)
OnErrorResumeNext
'Addamenuitemtothecursormenu
DimnewMenuItemAsAcadPopupMenuItem
DimopenMacroAsString
openMacro=Chr(vbKeyEscape)+Chr(vbKeyEscape)+"_open"
SetnewMenuItem=ShortcutMenu.AddMenuItem_
(0,Chr(Asc("&"))_
+"OpenDWG",openMacro)
EndSub
PrivateSubAcadDocument_EndShortcutMenu_
(ShortcutMenuAsAutoCAD.IAcadPopupMenu)
OnErrorResumeNext
ShortcutMenu.Item("OpenDWG").Delete
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>
Controldeeventosdeniveldeobjeto
EleventodeniveldeobjetonoespermanenteenAutoCADVBA.Esdecir,quenoseactivandeformaautomáticaalcargarunproyectoVBAPortanto,esnecesarioactivarloparaVBAyparatodoslosdemáscontroladoresdeActiveXAutomation.
Unavezactivadosloseventosdeobjeto,podrádisponerdeleventoModified.Esteeventoseactivadespuésdemodificarunobjetodeldibujo.
Activacióndeleventodeniveldeobjeto
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Utilizacióndeeventos>Controldeeventosdeniveldeobjeto>
Activacióndeleventodeniveldeobjeto
ParapoderutilizareventosdelniveldeobjetoesnecesariocrearunnuevomódulodeclaseydeclararuntipodeobjetoAcadApplicacionconeventos.Porejemplo,supongaquesehacreadounmódulodeclasenuevodenominadoModuloEventoClase.LanuevaclasecontieneladeclaracióndelaaplicaciónconlapalabraclavedeVBAWithEvents.
ParacrearunaclasenuevaydeclararCírculocomoobjetoconeventos
1. EnVBAIDE,inserteunmódulodeclase.EnelmenúInsertar,elijaMódulodeclase.
2. EnlaventanaProyecto,elijaelmódulodeclasequeacabadeinsertar.
3. EnlaventanaPropiedades,cambieelnombredelaclaseporModulo-EventoClase.
4. AbralaventanaCódigodelaclaseutilizandoF7oelijaCódigoenelmenúVer.
5. Enlaventanadecódigodelaclase,añadalasiguientelínea:
PublicWithEventsObjectAsAcadCircle
Despuésdedeclararlo,elnuevoobjetoconeventosapareceenlalistadesplegabledeobjetosdelmódulodeclase.Ahorapuedeescribirprocedimientosdeeventoparaelnuevoobjetodelmódulodeclase.Alseleccionarelnuevoobjetoenlalistadeobjetos,loseventosválidosparadichoobjetoapareceránenlalistadesplegabledeprocedimientos.
Antesdeejecutarlosprocedimientos,debeconectarelobjetodeclaradodelmódulodeclaseconelobjetoCircle.Paraello,puedeutilizarelsiguientecódigodesdecualquiermódulo.
ParaconectarelobjetodeclaradoconelobjetoAutomation:
1. EnlaventanaCódigodelmóduloprincipal,añadalasiguientelíneaalaseccióndedeclaraciones:
DimXAsNewEventClassModule
2. Enlamismaventana,creeuncírculodenominado“MyCircle”einicialícelocomosicontuvieraeventos:
SubInitializeEvents()
DimMyCircleAsAcadCircle
DimcenterPoint(0To2)AsDouble
DimradiusAsDouble
centerPoint(0)=0#:centerPoint(1)=0#:centerPoint(2)=0#
radius=5#
SetMyCircle=ThisDrawing.ModelSpace.AddCircle(centerPoint,radius)
SetX.Object=MyCircle
EndSub
3. Enelcódigodelmóduloprincipal,añadaunallamadaalasubrutinaInitializeApp:
CallInitializeEvents
DespuésdeejecutarelprocedimientoInitializeEvents,elobjetoCircledelmódulodeclaseseñalaalobjetodecírculocreado;losprocedimientosdeeventodelmódulodeclaseseejecutansiemprequeseactivaelevento.Nota CuandocreecódigoenVBA,debeproporcionarungestordeeventosparatodoslosobjetosdeleventoModified.Delocontrario,VBApodríaterminardeformainesperada.
VisualizacióndeláreadeunapolilíneacerradacadavezqueseactualizaEsteejemplocreaunapolilíneaoptimizadaconeventos.Despuéselgestordeleventodelapolilíneamuestraelnuevoáreaquesecreaalcambiarlapolilínea.Paraactivarelevento,cambieeltamañodelapolilíneaenAutoCAD.RecuerdequedebeejecutarlasubrutinaCreatePLineWithEventsparaqueseactiveelcontroladordeeventos.
PublicWithEventsPLineAsAcadLWPolyline
SubCreatePLineWithEvents()
'Thisexamplecreatesalightweightpolyline
Dimpoints(0To9)AsDouble
points(0)=1:points(1)=1
points(2)=1:points(3)=2
points(4)=2:points(5)=2
points(6)=3:points(7)=3
points(8)=3:points(9)=2
SetPLine=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
PLine.Closed=True
ThisDrawing.Application.ZoomAll
EndSub
PrivateSubPLine_Modified_
(ByValpObjectAsAutoCAD.IAcadObject)
'Thiseventistriggeredwhenthepolylineisresized.
'Ifthepolylineisdeletedthemodifiedeventisstill
'triggered,soweusetheerrorhandlertoavoid
'readingdatafromadeletedobject.
OnErrorGoToERRORHANDLER
MsgBox"Theareaof"&pObject.ObjectName&"is:"_
&pObject.Area
ExitSub
ERRORHANDLER:
MsgBoxErr.Description
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>
Trabajoenespaciotridimensional
Lamayorpartedelosdibujosconstandevistasbidimensionales(2D)deobjetostridimensionales(3D).Aunqueestemétododedibujoestámuyextendidoentrelascomunidadesdearquitecturaylaingeniería,eslimitado:losdibujossonrepresentaciónen2Ddeobjetosen3D,ydebeninterpretarsevisualmente.Además,comolasvistassecreanporseparado,haymásposibilidadesdeerroresyambigüedades.Comoresultado,talvezquieracrearmodelos3Drealesenlugardelasrepresentaciones2D.PuedeutilizarlasherramientasdedibujodeAutoCADparacrearobjetostridimensionalesdetalladosyrealistas,asícomoparamanejarlosdediversasformas.
Definicióndecoordenadas3DDefinicióndeunsistemadecoordenadaspersonalesConversióndecoordenadasCreacióndeobjetos3DTareasdeediciónen3DModificacióndesólidos3D
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>
Definicióndecoordenadas3D
Introducircoordenadas3Denelsistemadecoordenadasuniversales(SCU)essimilaraintroducircoordenadas2Dendichosistema.AdemásdeespecificarlosvaloresXeY,elusuarioespecificaunvalorZ.Aligualqueocurreconlascoordenadas2D,seutilizaunavarianteparapasarlascoordenadasalosmétodosypropiedadesActiveX®yparaconsultarlascoordenadas.
Paraobtenermásinformaciónacercadeladefinicióndecoordenadas3D,véase“Introduccióndecoordenadas3D“enelManualdelusuario.
Definiciónyconsultadecoordenadasenpolilíneas2Dy3D
Enesteejemplosecreandospolilíneas,cadaunacontrescoordenadas.Laprimeraesunapolilínea2Dylasegunda3D.ObservequelalongituddelamatrizquecontienelosvérticesestáampliadaparaincluirlascoordenadasZenlacreacióndelapolilínea3D.Elejemploterminaconlaconsultadelascoordenadasdelaspolilíneas,quesemuestranenuncuadrodemensaje.
SubCh8_Polyline_2D_3D()
Dimpline2DObjAsAcadLWPolyline
Dimpline3DObjAsAcadPolyline
Dimpoints2D(0To5)AsDouble
Dimpoints3D(0To8)AsDouble
'Definethree2Dpolylinepoints
points2D(0)=1:points2D(1)=1
points2D(2)=1:points2D(3)=2
points2D(4)=2:points2D(5)=2
'Definethree3Dpolylinepoints
points3D(0)=1:points3D(1)=1:points3D(2)=0
points3D(3)=2:points3D(4)=1:points3D(5)=0
points3D(6)=2:points3D(7)=2:points3D(8)=0
'Createthe2DlightweightPolyline
Setpline2DObj=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points2D)
pline2DObj.Color=acRed
pline2DObj.Update
'Createthe3Dpolyline
Setpline3DObj=ThisDrawing.ModelSpace._
AddPolyline(points3D)
pline3DObj.Color=acBlue
pline3DObj.Update
'Querythecoordinatesofthepolylines
Dimget2DptsAsVariant
Dimget3DptsAsVariant
get2Dpts=pline2DObj.Coordinates
get3Dpts=pline3DObj.Coordinates
'Displaythecoordinates
MsgBox("2Dpolyline(red):"&vbCrLf&_
get2Dpts(0)&","&get2Dpts(1)&vbCrLf&_
get2Dpts(2)&","&get2Dpts(3)&vbCrLf&_
get2Dpts(4)&","&get2Dpts(5))
MsgBox("3Dpolyline(blue):"&vbCrLf&_
get3Dpts(0)&","&get3Dpts(1)&","&_
get3Dpts(2)&vbCrLf&_
get3Dpts(3)&","&get3Dpts(4)&","&_
get3Dpts(5)&vbCrLf&_
get3Dpts(6)&","&get3Dpts(7)&","&_
get3Dpts(8))
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>
Definicióndeunsistemadecoordenadaspersonales
Puededefinirunsistemadecoordenadaspersonales(SCP)paracambiarelemplazamientodelpuntodeorigen(0,0,0)ylaorientacióndelplanoXYydelejeZ.UnSCPsepuedecolocaryorientarencualquierpuntodelespaciotridimensional.Sepuedendefinir,guardaryutilizartantossistemasdecoordenadascomosenecesiten.LaintroducciónyvisualizacióndelascoordenadasdependedelsistemaSCPqueestéactivo.
ParaindicarelorigenylaorientacióndelSCP,puedemostrareliconoSCPenelpuntodeorigendelSCPmediantelapropiedadUCSIconAtOrigin.SieliconoSCPestáactivado(véaselapropiedadUCSIconOn)peronoapareceenelorigen,semuestraenlacoordenadadelSCUdefinidaporlavariabledesistemaUCSORG.
PuedecrearunsistemadecoordenadaspersonalesconelmétodoAdd.Estemétodorequierecuatrovaloresdeentrada:lacoordenadadelorigen,unacoordenadaenlosejesXeY,yelnombredelSCP.
TodaslascoordenadasdeActiveXAutomationdeAutoCAD®seintroducenenelsistemadecoordenadasuniversales.UtiliceelmétodoGetUCSMatrixparavolveralamatrizdetransformacióndeunSCPconcreto.UtiliceestamatrizdetransformaciónparabuscarlascoordenadasSCUequivalentes.
ParaactivarunSCP,utilicelapropiedadActiveUCSdelobjetoDocument.SiserealizancambiosenelSCPactivo,elnuevoobjetodeSCPdeberestablecersecomoSCPactivoparaqueloscambiossevean.PararestablecerelSCPactivo,sólohayquellamaralapropiedadActiveUCSdenuevoconelobjetodeSCPactualizado.
ParaobtenermásinformaciónsobreladefinicióndelSCP,véase“Controldelsistemadecoordenadaspersonales(SCP)en3D”enelManualdelusuario.
CreacióndeunSCPnuevo,activaciónytraduccióndelascoordenadasdeunpuntoaSCP
LasiguientesubrutinacreaunnuevoSCPyloestablececomoelSCPactivodeldibujo.Acontinuación,pidealusuarioquedesigneunpuntodeldibujoydevuelvelascoordenadasSCUySCPdelpunto.
SubCh8_NewUCS()
'Definethevariableswewillneed
DimucsObjAsAcadUCS
Dimorigin(0To2)AsDouble
DimxAxisPnt(0To2)AsDouble
DimyAxisPnt(0To2)AsDouble
'DefinetheUCSpoints
origin(0)=4:origin(1)=5:origin(2)=3
xAxisPnt(0)=5:xAxisPnt(1)=5:xAxisPnt(2)=3
yAxisPnt(0)=4:yAxisPnt(1)=6:yAxisPnt(2)=3
'AddtheUCStothe
'UserCoordinatesSystemscollection
SetucsObj=ThisDrawing.UserCoordinateSystems._
Add(origin,xAxisPnt,yAxisPnt,"New_UCS")
'DisplaytheUCSicon
ThisDrawing.ActiveViewport.UCSIconAtOrigin=True
ThisDrawing.ActiveViewport.UCSIconOn=True
'MakethenewUCStheactiveUCS
ThisDrawing.ActiveUCS=ucsObj
MsgBox"ThecurrentUCSis:"&ThisDrawing.ActiveUCS.Name_
&vbCrLf&"Pickapointinthedrawing."
'FindtheWCSandUCScoordinateofapoint
DimWCSPntAsVariant
DimUCSPntAsVariant
WCSPnt=ThisDrawing.Utility.GetPoint(,"Enterapoint:")
UCSPnt=ThisDrawing.Utility.TranslateCoordinates_
(WCSPnt,acWorld,acUCS,False)
MsgBox"TheWCScoordinatesare:"&WCSPnt(0)&","_
&WCSPnt(1)&","&WCSPnt(2)&vbCrLf&_
"TheUCScoordinatesare:"&UCSPnt(0)&","_
&UCSPnt(1)&","&UCSPnt(2)
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>
Conversióndecoordenadas
ElmétodoTranslateCoordinatesconvierteunpuntooundesplazamientodeunsistemadecoordenadasaotro.Unargumentodepunto,llamadoOriginalPoint,puedeinterpretarsecomounpunto3Docomounvectordedesplazamiento3D.EsteargumentosedistingueporelargumentoBoolean,Disp.SielargumentoDispsedefinecomoTRUE,elargumentoOriginalPointsetratacomounvectordedesplazamiento;encasocontrario,setratacomounpunto.OtrosdosargumentosdeterminanelsistemadecoordenadasalqueperteneceOriginalPoint,asícomoelsistemadecoordenadasalqueOriginalPointdebeconvertirse.LossiguientessistemasdecoordenadasdeAutoCADpuedenespecificarseenlosargumentosFromyTo:
SCU
Sistemadecoordenadasuniversales:elsistemadecoordenadasdereferencia.TodoslosdemássistemasdecoordenadassedefinenenfuncióndelSCU,quenuncacambia.LosvaloresmedidosconelSCUpermanecenestablesaunqueserealicencambiosenotrossistemasdecoordenadas.TodoslospuntosquesetransfierenalosmétodosypropiedadesdeActiveX,oqueéstosdevuelven,estánexpresadosenelSCU,salvoqueseespecifiquelocontrario.
SCP
Sistemadecoordenadaspersonales(SCP):elsistemadecoordenadasdetrabajo.ElusuarioespecificaunSCPparacreartareasdedibujosconmásfacilidad.TodoslospuntosquesetransmitenaloscomandosdeAutoCAD,incluidoslosdevueltosporfuncionesexternasyrutinasdeAutoLISP,estánenelsistemaSCPactivo(amenosqueelusuariolosprecedadeun*enlasolicituddecomando).SideseaquesuaplicaciónenvíealoscomandosdeAutoCADcoordenadasenlossistemasSCU,SCOoSCV,primerodebeconvertirlasalsistemaSCPmedianteelmétodoTranslateCoordinates.
SCO
Sistemadecoordenadasdeobjeto:losvaloresdepuntoespecificadospordeterminadosmétodosypropiedadesparalosobjetosPolylineyLightweightPolylineseexpresanenestesistemadecoordenadasrelativoalobjeto.Dependiendodelusoqueselevayaadaralobjeto,estospuntossuelenconvertirsealSCU,alSCPactivooalSCVactivo.Delmismomodo,lospuntosdelSCU,SCPoSCVquevayanaincluirseenlabasededatosdebenconvertirseantesalSCOpormediodelasmismaspropiedades.Paraconocerlosmétodosypropiedadesqueusanestesistemadecoordenadas,véaseActiveXandVBAReferencedeAutoCAD.CuandoconviertacoordenadasalSCO,odesdeéste,introduzcalanormaldelSCOenelúltimoargumentodelafunciónTranslateCoordinates.
SCV
Sistemadecoordenadasdevisualización:elsistemadecoordenadasdondesetransformanlosobjetosantesdemostrarse.ElorigendelSCVeselpuntoalmacenadoenlavariabledesistemaTARGETdeAutoCADysuejeZeslalíneademira.Enotraspalabras,unaventanagráficasiempreesunavistaenplantadesuSCV.PuedenutilizarseestascoordenadasparadeterminarellugardelapantalladondeelusuariodeAutoCADveráunobjetoconcreto.
SCVEP
SCVenespaciopapel:estesistemadecoordenadassólopuedetransformarsealSCVdelaventanagráficadelespaciomodeloactualmenteactivaydesdeelmismo.Setratabásicamentedeunatransformación2D,dondelascoordenadasXeYcambiansuescalaosedesfasansielargumentoDispesFALSE.LacoordenadaZcambiadeescala,perojamásseconvierte.Porlotanto,puedeusarseparahallarelfactordeescalaentrelosdossistemasdecoordenadas.ElSCVEPsólopuedetransformarseenlaventanagráficaactualdelespaciomodeloactual.SielargumentoFromesigualaSCVEP,elargumentoTodebeserigualaSCVyviceversa.
ConversióndecoordenadasSCOencoordenadasSCU
Enesteejemplosecreaunapolilíneaenespaciomodelo.SuprimervérticesemuestraenlossistemasdecoordenadasSCOySCU.LaconversióndeSCOaSCUrequieresituarlanormaldelSCOenelúltimoargumentodelmétodoTranslateCoordinates.
SubCh8_TranslateCoordinates()
'Createapolylineinmodelspace.
DimplineObjAsAcadPolyline
Dimpoints(0To14)AsDouble
'Definethe2Dpolylinepoints
points(0)=1:points(1)=1:points(2)=0
points(3)=1:points(4)=2:points(5)=0
points(6)=2:points(7)=2:points(8)=0
points(9)=3:points(10)=2:points(11)=0
points(12)=4:points(13)=4:points(14)=0
'CreatealightweightPolylineobjectinmodelspace
SetplineObj=ThisDrawing.ModelSpace.AddPolyline(points)
'FindtheXandYcoordinatesofthe
'firstvertexofthepolyline
DimfirstVertexAsVariant
firstVertex=plineObj.Coordinate(0)
'FindtheZcoordinateforthepolyline
'usingtheelevationproperty
firstVertex(2)=plineObj.Elevation
'Changethenormalfortheplinesothatthe
'differencebetweenthecoordinatesystems
'isobvious.
DimplineNormal(0To2)AsDouble
plineNormal(0)=0#
plineNormal(1)=1#
plineNormal(2)=2#
plineObj.Normal=plineNormal
'TranslatetheOCScoordinateintoWCS
DimcoordinateWCSAsVariant
coordinateWCS=ThisDrawing.Utility.TranslateCoordinates_
(firstVertex,acOCS,acWorld,False,plineNormal)
'Displaythecoordinatesofthepoint
MsgBox"Thefirstvertexhasthefollowingcoordinates:"_
&vbCrLf&"OCS:"&firstVertex(0)&","&_
firstVertex(1)&","&firstVertex(2)&vbCrLf&_
"WCS:"&coordinateWCS(0)&","&_
coordinateWCS(1)&","&coordinateWCS(2)
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>
Creacióndeobjetos3D
CrearunamallapolicaraCrearunsólidoencuñaAutoCADadmitetrestiposdemodeladoen3D:alámbrico,desuperficieysólido.Cadaunodeellossedistinguedelosdemásporsustécnicasdecreaciónydemodificación.
Paraobtenermásinformaciónacercadelacreacióndeobjetos3D,véase“Creacióndeobjetos3D”enelManualdelusuario.
CreacióndemodelosalámbricosCreacióndemallasCreacióndemallaspolicaraCreacióndesólidos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Creacióndeobjetos3D>
Creacióndemodelosalámbricos
ConAutoCADsepuedencrearmodelosalámbricossituandolosobjetosplanos2Denunaubicacióncualquieradeunespacio3D.Losobjetos2Dpuedencolocarseenespacios3Dmedianteunodelossiguientesmétodos:
Crearelobjetodefiniendopuntos3D.LascoordenadasqueintroduzcadefinenlaposiciónX,YyZdelpunto.
Definirelplanodeconstrucciónpordefecto(XY)sobreelquedeseadibujarelobjetomedianteladefinicióndeunSCP.
Moverelobjetohastalaposiciónadecuadaenelespacio3Dunavezcreado.
Tambiénpuedencrearseobjetosalámbricos,comopolilíneas,quepuedenexistirenlastresdimensiones.UtiliceelmétodoAdd3DPolyparacrearpolilíneas3D.
Paraobtenermásinformaciónacercadelacreacióndeestructurasalámbricas,véase“Creacióndemodelosalámbricos”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Creacióndeobjetos3D>
Creacióndemallas
Unamallarectangular(objetoPolygonMesh)representalasuperficiedeunobjetomediantefacetasplanas.Ladensidaddemalla,onúmerodefacetas,sedefineenfuncióndeunamatrizdevérticesMyN,similaraunarejillaconfilasycolumnas.MedianteMyNsedeterminalaposicióndelascolumnasyfilas,respectivamente,decualquiervérticedado.Estosobjetossepuedencrearenespacio2Dy3D,sibiensuusoesmásapropiadopara3D.
UtiliceelmétodoAdd3DMeshparacrearmallasrectangulares.Estemétodorequieretresvaloresdeentrada:elnúmerodevérticesdeladirecciónM,elnúmerodevérticesdeladirecciónNyunamatrizdevariantesquecontengalascoordenadasdetodoslosvérticesdelamalla.
UnavezestablecidoPolygonMesh,utilicelaspropiedadesMCloseyNCloseparacerrarlamalla.
Paraobtenermásinformaciónacercadelacreacióndemallas,véase“Creacióndesuperficies”enelManualdelusuario.
Creacióndeunamallapoligonal
Enesteejemplosecreaunamallapoligonalde“.Ladireccióndelaventanagráficaactivaseajustadeformaquelanaturalezatridimensionaldelamallasevisualizaconmásfacilidad.
SubCh8_Create3DMesh()
DimmeshObjAsAcadPolygonMesh
DimmSize,nSize,CountAsInteger
Dimpoints(0To47)AsDouble
'createthematrixofpoints
points(0)=0:points(1)=0:points(2)=0
points(3)=2:points(4)=0:points(5)=1
points(6)=4:points(7)=0:points(8)=0
points(9)=6:points(10)=0:points(11)=1
points(12)=0:points(13)=2:points(14)=0
points(15)=2:points(16)=2:points(17)=1
points(18)=4:points(19)=2:points(20)=0
points(21)=6:points(22)=2:points(23)=1
points(24)=0:points(25)=4:points(26)=0
points(27)=2:points(28)=4:points(29)=1
points(30)=4:points(31)=4:points(32)=0
points(33)=6:points(34)=4:points(35)=0
points(36)=0:points(37)=6:points(38)=0
points(39)=2:points(40)=6:points(41)=1
points(42)=4:points(43)=6:points(44)=0
points(45)=6:points(46)=6:points(47)=0
mSize=4:nSize=4
'createsa3Dmeshinmodelspace
SetmeshObj=ThisDrawing.ModelSpace._
Add3DMesh(mSize,nSize,points)
'Changetheviewingdirectionoftheviewport
'tobetterseethecylinder
DimNewDirection(0To2)AsDouble
NewDirection(0)=-1
NewDirection(1)=-1
NewDirection(2)=1
ThisDrawing.ActiveViewport.direction=NewDirection
ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Creacióndeobjetos3D>
Creacióndemallaspolicara
UtiliceelmétodoAddPolyfaceMeshparacrearunamallapolicaraenlaquelascaraspuedantenernumerososvértices.
Elprocesodecreacióndeunamallapolicaraesmuysimilaralempleadoparacrearunamallarectangular.Paracrearunamallapolicara,indiquelascoordenadasdetodossusvérticesy,acontinuación,definacadacaraintroduciendolosnúmerosdevérticedetodoslosvérticesdeesacara.Amedidaquevacreandolamallapolicara,puedeoptarporocultardeterminadoslados,asignarlosacapasoasignarlescolor.
Sideseaquelosladosseaninvisibles,indiqueelnúmerodevérticecorrespondientecomounvalornegativo.Paraobtenermásinformaciónacercadelacreacióndemallaspolicara,véaseelmétodoAddPolyfaceMeshenActiveXandVBAReference.
Creacióndeunamallapolicara
Enesteejemplosecreaunamallapolicaraenespaciomodelo.Despuésseactualizaladireccióndevisualizacióndelaventanagráficaactivaparapermitirunamejorvisióndelanaturalezatridimensionaldelamalla.
SubCh8_CreatePolyfaceMesh()
'Definethemeshvertices
Dimvertex(0To17)AsDouble
vertex(0)=4:vertex(1)=7:vertex(2)=0
vertex(3)=5:vertex(4)=7:vertex(5)=0
vertex(6)=6:vertex(7)=7:vertex(8)=0
vertex(9)=4:vertex(10)=6:vertex(11)=0
vertex(12)=5:vertex(13)=6:vertex(14)=0
vertex(15)=6:vertex(16)=6:vertex(17)=1
'Definethefacelist
DimFaceList(0To7)AsInteger
FaceList(0)=1
FaceList(1)=2
FaceList(2)=5
FaceList(3)=4
FaceList(4)=2
FaceList(5)=3
FaceList(6)=6
FaceList(7)=5
'Createthepolyfacemesh
DimpolyfaceMeshObjAsAcadPolyfaceMesh
SetpolyfaceMeshObj=ThisDrawing.ModelSpace.AddPolyfaceMesh_
(vertex,FaceList)
'Changetheviewingdirectionoftheviewportto
'betterseethepolyfacemesh
DimNewDirection(0To2)AsDouble
NewDirection(0)=-1
NewDirection(1)=-1
NewDirection(2)=1
ThisDrawing.ActiveViewport.direction=NewDirection
ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Creacióndeobjetos3D>
Creacióndesólidos
Unobjetosólido(objeto3DSolid)representatodoelvolumendeunobjeto.Lossólidossonprobablementelosobjetosmenosambiguosymáscompletosdetodoslostiposdemodelizado3D.Lacreacióndeformassólidascomplejasesmásfácilquelademallasyrepresentacionesalámbricas.
Lacreacióndesólidospuedellevarseacaboapartirdeunadelasformassólidasbásicascomo,porejemplo,unprismarectangular,uncono,uncilindro,unaesfera,untoroideounacuña,mediantelaextrusióndeunobjeto2Dalolargodeunatrayectoriaomediantesurotaciónsobreuneje.Utiliceunodelossiguientesmétodosparacrearsólidos:
AddBox,AddCone,AddCylinder,AddEllipticalCone,AddEllipticalCylinder,AddExtrudedSolid,AddExtrudedSolidAlongPath,AddRevolvedSolid,AddSolid,AddSphere,AddTorus,oAddWedge.
Aligualqueocurreconlasmallas,lossólidossemuestranenpantallacomorepresentacionesalámbricashastaquesedecideocultarlos,sombrearlosomodelizarlos.Además,esposibleanalizarlaspropiedadesfísicasdelossólidos(volumen,momentosdeinercia,centrodegravedad,etc).Utilicelassiguientespropiedadesparaanalizarsólidos:MomentOfInertia,PrincipalDirections,PrincipalMoments,ProductOfInertia,RadiiOfGyration,yVolume.
LapropiedadContourlinesPerSurfacecontrolaelnúmerodelíneasdetriangulaciónparaverlaspartescurvasdelarepresentaciónalámbrica.LapropiedadRenderSmoothnesscontrolalasuavidaddeobjetossombreadosyconlíneasocultas.
Paraobtenermásinformaciónacercadelacreacióndesólidos,véase“Creacióndeobjetos3D”enelManualdelusuario.
Creacióndeunacuñasólida
Enelsiguienteejemplosecreaunsólidoconformadecuñaenespaciomodelo.Despuésseactualizaladireccióndevisualizacióndelaventanagráficaactivaparapermitirunamejorvisióndelanaturalezatridimensionaldelacuña.
SubCh8_CreateWedge()
DimwedgeObjAsAcad3DSolid
Dimcenter(0To2)AsDouble
DimlengthAsDouble
DimwidthAsDouble
DimheightAsDouble
'Definethewedge
center(0)=5#:center(1)=5#:center(2)=0
length=10#:width=15#:height=20#
'Createthewedgeinmodelspace
SetwedgeObj=ThisDrawing.ModelSpace._
AddWedge(center,length,width,height)
'Changetheviewingdirectionoftheviewport
DimNewDirection(0To2)AsDouble
NewDirection(0)=-1
NewDirection(1)=-1
NewDirection(2)=1
ThisDrawing.ActiveViewport.direction=NewDirection
ThisDrawing.ActiveViewport=ThisDrawing.ActiveViewport
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>
Tareasdeediciónen3D
Esteapartadotratasobrelarealizacióndediferentestareasdeediciónen3Dcomogirar,disponerenformadematrizyreflejarensimetría.
Rotacióndeobjetosen3DDisposiciónenmatrizen3DReflexiónensimetríadeobjetosalolargodeunplano
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Tareasdeediciónen3D>
Rotacióndeobjetosen3D
ConelmétodoRotatepuedegirarobjetosen2Dalrededordeunpuntoprecisado.LadireccióndelarotaciónestádeterminadaporelSCU.ElmétodoRotate3Dgiralosobjetosen3Dalrededordeunejeprecisado.ElmétodoRotate3Drequieretresvaloresdeentrada:lascoordenadasSCUdelosdospuntosquedefinenelejederotaciónyelánguloderotaciónenradianes.
Puedegirarobjetos3DmediantelosmétodosRotateoRotate3D.
Paraobtenermásinformaciónacercadelarotaciónen3D,véase“Rotacióndeobjetos“enelManualdelusuario.
Creacióndeunprismarectangular3Dyrotaciónsobreuneje
Enesteejemplosecreaunprismarectangular3D.Despuéssedefineelejederotacióny,porúltimo,segiraelcuadrado30gradosalrededordeleje.
SubCh8_Rotate_3DBox()
DimboxObjAsAcad3DSolid
DimlengthAsDouble
DimwidthAsDouble
DimheightAsDouble
Dimcenter(0To2)AsDouble
'Definethebox
center(0)=5:center(1)=5:center(2)=0
length=5
width=7
height=10
'Createtheboxobjectinmodelspace
SetboxObj=ThisDrawing.ModelSpace._
AddBox(center,length,width,height)
'Definetherotationaxiswithtwopoints
DimrotatePt1(0To2)AsDouble
DimrotatePt2(0To2)AsDouble
DimrotateAngleAsDouble
rotatePt1(0)=-3:rotatePt1(1)=4:rotatePt1(2)=0
rotatePt2(0)=-3:rotatePt2(1)=-4:rotatePt2(2)=0
rotateAngle=30
rotateAngle=rotateAngle*3.141592/180#
'Rotatethebox
boxObj.Rotate3DrotatePt1,rotatePt2,rotateAngle
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Tareasdeediciónen3D>
Disposiciónenmatrizen3D
ConelmétodoArrayRectangularpuedecrearunamatrizrectangularen3D.Ademásdeespecificarelnúmerodecolumnas(direcciónX)yfilas(direcciónY),tambiénpuedeespecificarelnúmerodeniveles(direcciónZ).
Paraobtenermásinformaciónacercadelautilizacióndematricesdeobjetosen3D,véase“Creacióndeunamatrizdeobjetos”enelManualdelusuario.
Creacióndeunamatrizrectangular3D
Enesteejemplosecreauncírculoy,acontinuación,seutilizaparacrearunamatrizrectangulardecuatrofilas,cuatrocolumnasytresnivelesdecírculos.
SubCh8_CreateRectangularArray()
'Createthecircle
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=2:center(1)=2:center(2)=0
radius=0.5
SetcircleObj=ThisDrawing.ModelSpace._
AddCircle(center,radius)
'Definetherectangulararray
DimnumberOfRowsAsLong
DimnumberOfColumnsAsLong
DimnumberOfLevelsAsLong
DimdistanceBwtnRowsAsDouble
DimdistanceBwtnColumnsAsDouble
DimdistanceBwtnLevelsAsDouble
numberOfRows=4
numberOfColumns=4
numberOfLevels=3
distanceBwtnRows=1
distanceBwtnColumns=1
distanceBwtnLevels=4
'Createthearrayofobjects
DimretObjAsVariant
retObj=circleObj.ArrayRectangular_
(numberOfRows,numberOfColumns,_
numberOfLevels,distanceBwtnRows,_
distanceBwtnColumns,distanceBwtnLevels)
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>Tareasdeediciónen3D>
Reflexiónensimetríadeobjetosalolargodeunplano
ConelmétodoMirror3Dsepuedenreflejarobjetosalolargodeunplanodesimetríaprecisadomedianteladefinicióndetrespuntos.
Paraobtenermásinformaciónacercadelareflexióndeobjetosensimetríaen3D,véase“Reflejodeobjetos”enelManualdelusuario.
Reflexiónensimetríaen3D
Enesteejemplosecreaunprismarectangularenespaciomodelo.Despuéssereflejaensimetríaconrespectoaunplanoyseasignaelcolorrojoalprismareflejado.
SubCh8_MirrorABox3D()
'Createtheboxobject
DimboxObjAsAcad3DSolid
DimlengthAsDouble
DimwidthAsDouble
DimheightAsDouble
Dimcenter(0To2)AsDouble
center(0)=5#:center(1)=5#:center(2)=0
length=5#:width=7:height=10#
'Createthebox(3DSolid)objectinmodelspace
SetboxObj=ThisDrawing.ModelSpace._
AddBox(center,length,width,height)
'Definethemirroringplanewiththreepoints
DimmirrorPt1(0To2)AsDouble
DimmirrorPt2(0To2)AsDouble
DimmirrorPt3(0To2)AsDouble
mirrorPt1(0)=1.25:mirrorPt1(1)=0:mirrorPt1(2)=0
mirrorPt2(0)=1.25:mirrorPt2(1)=2:mirrorPt2(2)=0
mirrorPt3(0)=1.25:mirrorPt3(1)=2:mirrorPt3(2)=2
'Mirrorthebox
DimmirrorBoxObjAsAcad3DSolid
SetmirrorBoxObj=boxObj.Mirror3D_
(mirrorPt1,mirrorPt2,mirrorPt3)
mirrorBoxObj.Color=acRed
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Trabajoenespaciotridimensional>
Modificacióndesólidos3D
Unavezcreadounsólido,puedeprocederalacreacióndeformassólidasmáscomplejasmediantelacombinacióndedistintosobjetossólidos.Puedeoptarporunirsólidos,sustraerlosolocalizarsuvolumencomún(partessuperpuestas).UtiliceelmétodoBooleanoCheckInterferenceparaefectuardichascombinaciones.
Lossólidossepuedenmodificartambiénmediantelaobtencióndelaseccióntransversalbidimensionaldeunsólidooelcortedeunsólidoendospartes.UtiliceelmétodoSectionSolidparabuscarseccionestransversalesdesólidos,yelmétodoSliceSolidparacortarunsólidoendospartes.
Búsquedadelainterferenciaentredossólidos
Enesteejemplosecreaunprismarectangularyuncilindroenespaciomodelo.Acontinuación,selocalizalainterferenciaentrelosdossólidosysecreaunsólidonuevoapartirdeella.Parafacilitarlavisualización,elprismasecoloreaenblanco,elcilindroenciányelsólidodeinterferenciaenrojo.
SubCh8_FindInterferenceBetweenSolids()
'Definethebox
DimboxObjAsAcad3DSolid
DimlengthAsDouble
DimwidthAsDouble
DimheightAsDouble
Dimcenter(0To2)AsDouble
center(0)=5:center(1)=5:center(2)=0
length=5
width=7
height=10
'Createtheboxobjectinmodelspace
'andcoloritwhite
SetboxObj=ThisDrawing.ModelSpace._
AddBox(center,length,width,height)
boxObj.Color=acWhite
'Definethecylinder
DimcylinderObjAsAcad3DSolid
DimcylinderRadiusAsDouble
DimcylinderHeightAsDouble
center(0)=0:center(1)=0:center(2)=0
cylinderRadius=5
cylinderHeight=20
'CreatetheCylinderand
'coloritcyan
SetcylinderObj=ThisDrawing.ModelSpace.AddCylinder_
(center,cylinderRadius,cylinderHeight)
cylinderObj.Color=acCyan
'Findtheinterferencebetweenthetwosolids
'andcreateanewsolidfromit.Colorthe
'newsolidred.
DimsolidObjAsAcad3DSolid
SetsolidObj=boxObj.CheckInterference(cylinderObj,True)
solidObj.Color=acRed
ZoomAll
EndSub
Cortedeunsólidoendossólidos
Enesteejemplosecreaunprismarectangularenespaciomodelo.Despuéssecortatomandocomoreferenciaunplanodefinidoportrespuntos.Lasecciónsedevuelvecomosólido3D.
SubCh8_SliceABox()
'Createtheboxobject
DimboxObjAsAcad3DSolid
DimlengthAsDouble
DimwidthAsDouble
DimheightAsDouble
Dimcenter(0To2)AsDouble
center(0)=5#:center(1)=5#:center(2)=0
length=5#:width=7:height=10#
'Createthebox(3DSolid)objectinmodelspace
SetboxObj=ThisDrawing.ModelSpace._
AddBox(center,length,width,height)
boxObj.Color=acWhite
'Definethesectionplanewiththreepoints
DimslicePt1(0To2)AsDouble
DimslicePt2(0To2)AsDouble
DimslicePt3(0To2)AsDouble
slicePt1(0)=1.5:slicePt1(1)=7.5:slicePt1(2)=0
slicePt2(0)=1.5:slicePt2(1)=7.5:slicePt2(2)=10
slicePt3(0)=8.5:slicePt3(1)=2.5:slicePt3(2)=10
'slicetheboxandcolorthenewsolidred
DimsliceObjAsAcad3DSolid
SetsliceObj=boxObj.SliceSolid_
(slicePt1,slicePt2,slicePt3,True)
sliceObj.Color=acRed
ZoomAll
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>
Definicióndepresentacioneseimpresión
UnavezcreadoeldibujoconAutoCAD,habitualmentesetrazaenpapel.Undibujotrazadopuedecontenerunaúnicavistadeldibujoovarias,dotándolodeunaorganizaciónmáscompleja.Enespaciopapel,sepuedencrearventanasgráficasflotantes,quemuestrandistintasvistasdeldibujo.Segúnseanecesario,sepuedeimprimirunaovariasventanasgráficasoestablecerlasopcionesquedeterminenloquedebetrazarseycómodebeajustarselaimagenalpapel.
ElespaciomodeloyelespaciopapelPresentacionesVentanasgráficasImpresióndedibujos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>
Elespaciomodeloyelespaciopapel
Elespaciomodeloeselentornodedibujodondeelusuariocrealageometríadelmodelo.Porlogeneral,alcomenzarundibujoenelespaciomodelosedesignanloslímitesdeldibujoparadeterminarsuextensión,ysedibujaaescalareal.
Elespaciopapelrepresentaelmodeloconformequedarátrazadoenpapel.Enelespaciopapelesposiblepresentardistintasvistasdeldibujoyvistasaescalaindependientesentresí,ydisponerlasdistintasvistasdeldibujocomosedeseaquesetracen.Elmismodibujopuedetenerdistintasrepresentacionesdeespaciopapel.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>
Presentaciones
Laspresentacionescontienentodalageometríadeldibujo.LageometríadelespaciomodeloseincluyeenunapresentacióndenominadaModelo.Nisepuedecambiarelnombredelapresentacióndelespaciomodelo,nisepuedecrearmásdeunapresentacióndelespaciomodelo.Sólopuedehaberunapresentacióndeespaciomodelopordibujo.
Lageometríadelespaciopapeltambiénseincluyeenlaspresentaciones.Esposibletenervariaspresentacionesdeespaciopapelparacadadibujo.Cadaunarepresentaunaconfiguracióndeimpresióndistinta.Elnombredelaspresentacionesdelespaciopapelsepuedemodificar.
EnActiveX®Automation,todalageometríadelapresentacióndelespaciomodeloestáincluidaenlacolecciónModelSpace.Comoenundibujopuedehabermásdeunapresentacióndelespaciopapel,lacolecciónPaperSpaceapuntaalaúltimapresentacióndelespaciopapelactiva.
Paraobtenermásinformaciónacercadelaspresentacionesdeespaciopapel,véase“Sombreados,rellenosycoberturas”enelManualdelusuario.
PresentacionesybloquesConfiguracionesdeimpresiónParámetrosdepresentación
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>
Presentacionesybloques
ElcontenidodecualquierpresentaciónsedistribuyeentredosobjetosActiveXdiferentes:elobjetoLayoutyelobjetoBlock.ElobjetoLayoutcontienelosajustesdetrazadoylaspropiedadesvisualesdelapresentacióntalcomoapareceenlainterfazdeusuario.ElobjetoBlockcontienelageometríadelapresentación.
CadaobjetoLayoutestáasociadoaunsoloobjetoBlock.SideseaaccederalobjetoBlockasociadoaunapresentacióndeterminada,utilicelapropiedadBlock.Asuvez,cadaobjetoBlockestáasociadoaunsoloobjetoLayout.ParaaccederalobjetoLayoutasociadoaunbloquedeterminado,utilicelapropiedadLayoutdelbloque.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>
Configuracionesdeimpresión
LosobjetosPlotConfigurationseparecenalosobjetosLayoutenquecontienenlamismainformacióndeimpresión.SediferencianenqueelobjetoLayouttieneasociadounobjetoBlockquecontienelageometríaquedebeimprimirse.LosobjetosPlotConfigurationnoseasocianaunobjetoBlockparticular.Simplemente,esunconjuntoguardadodeconfiguracionesdetrazadoresquesepuedeutilizarconcualquiergeometría.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>
Parámetrosdepresentación
Losparámetrosdepresentacióndeterminanlasalidaimpresa.Estosparámetrosafectanaltamañodepapel,laescaladeimpresión,eláreadeimpresión,elorigendeimpresiónyelnombredeldispositivodeimpresión.Comprenderelmododeutilizarlosparámetrosdepresentacióngarantizaquelapresentaciónsetrazarádelaformaesperada.TodoslosparámetrosdeunapresentaciónpuedencambiarsepormediodelaspropiedadesylosmétodosdelobjetoLayout.
TamañoyunidadesdepapelAjustedelorigendeimpresiónDefinicióndeláreadetrazadoEstablecimientodelaescaladeimpresiónDefinicióndelaescaladelgrosordelíneaConfiguracióndeldispositivodeimpresión
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>
Tamañoyunidadesdepapel
Laeleccióndeltamañodelpapeldependedeltrazadorconfiguradoparaelsistema.Cadamodelodetrazadortienesupropialistaestándardetamañosdepapeldisponibles.EltamañodelpapeldeunapresentaciónsepuedecambiarpormediodelapropiedadCanonicalMediaName.
TambiénsepuedenespecificarlasunidadesdelapresentaciónmediantelapropiedadPaperUnits.Lapropiedadrequieretresvaloresdeentrada:acInches,acMillimetersoacPixels.Sieltrazadorseencuentraconfiguradoparasalidaráster,deberáprecisareltamañodesalidaenpíxeles.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>
Ajustedelorigendeimpresión
EltrazadocomienzaenlaesquinainferiorizquierdadeláreadeimpresiónindicadaysecontrolaconlapropiedadPlotOrigin.Habitualmente,elorigendetrazadoes(0,0).Noobstante,esposiblecentrareltrazadoenlahojadepapel,asignandoalapropiedadCenterPlotelvalorTRUE.Alcentrarseeltrazadosemodificasuorigen.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>
Definicióndeláreadetrazado
Alpreparareltrazadodeunapresentación,sepuedeespecificareláreadeimpresiónparadeterminarquéseincluiráenlaimpresión.Paraprecisareláreadeltrazado,utilicelapropiedadPlotTypeEstapropiedadrequierelaentradadeunodelossiguientesvalores:
acDisplay
Imprimetodoloqueseencuentraenlapantalladelespaciomodeloactual.Estaopciónnoestádisponiblecuandoseimprimedesdeunapresentacióndeespaciopapel.
acExtents
Imprimetodoloqueseencuentradentrodelcontornodelespacioseleccionado.
acLimits
Imprimetodoloqueestádentrodeloslímitesdelespacioactual.
acView
ImprimelavistaguardadaporlapropiedadViewToPlot.
acWindow
ImprimetodoloqueestáenlaventanaespecificadaenelmétodoSetWindowToPlot.
acLayout
Imprimetodoloqueseencuentradentrodelosmárgenesdeltamañodepapelespecificado.Estaopciónnoseencuentradisponiblecuandoseimprimedesdeelespaciomodelo.
Cuandosecreaunanuevapresentacióndeespaciopapel,laopciónpordefectoesacLayout.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>
Establecimientodelaescaladeimpresión
Porlogeneral,losobjetossedibujanensutamañoreal.Cuandoseimprimeeldibujo,seleatribuyeunaescalaobienseajustalaimagenalapágina.Paraprecisarunaescala,introduzcaunaescaladetrazadopredefinidaopersonalizada.
Paraintroducirunaescalaestándar,primeroestablezcalapropiedadUseStandardScalecomoTRUE.LuegopuedeescribirlaescaladeseadautilizandolapropiedadStandardScale.
Paraescribirunaescalapersonalizada,primerdefinalapropiedadUseStandardScalecomoFALSE.LuegopuedeintroducirlaescalapersonalizadautilizandoelmétodoSetCustomScale.
Durantelafasederevisióndeunavistadedibujo,laaplicacióndelaescalaprecisanosiempreesimportante.PuedeutilizarelvaloracScaleToFitdelapropiedadStandardScaleparaimprimirlapresentaciónconelmáximotamañoquepermitaelformatodelpapel.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>
Definicióndelaescaladelgrosordelínea
Sepuedeajustarlaescaladelosgrosoresdelínea(lineweight)deformaproporcionalalaescaladetrazadoenlaspresentaciones.Normalmente,losgrosoresdelíneaprecisanelanchodelíneadelosobjetostrazados,ysetrazanconesteanchodelíneaindependientementedelaescaladetrazado.Lamayorpartedelasveces,seutilizalaescaladetrazadopordefecto1:1altrazarunapresentación.Sinembargo,sideseatrazarunapresentacióntamañoEquesehayaajustadoaescalaparaunahojadepapeltamañoA,puedeespecificarquelosgrosoresdelíneaseajustenaescalaenproporciónconlanuevaescaladetrazado.
Paraajustarlaescaladelosgrosoresdelínea,asignealapropiedadScaleLineweightselvalorTRUE.Sinodeseaajustarlaescala,asigneaestapropiedadelvalorFALSE.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Presentaciones>Parámetrosdepresentación>
Configuracióndeldispositivodeimpresión
ElnombredeldispositivodetrazadoseespecificaenlapropiedadConfigName.Puededefinirestenombreparacualquiernombrededispositivoválidodesusistema.Sinoseestablecelapropiedad,eltrazadoseenvíaaldispositivopredeterminadodelsistema.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>
Ventanasgráficas
Enelespaciomodelo,lageometríasedibujaenventanasgráficasdispuestasenmosaico(citadasenActiveXAutomationcomoobjetosViewport).Enlapantallasepuedentenerabiertasunaomásdeestasventanas.Cuandohayvariasenpantalla,lasmodificacionesqueserealicenenunaafectanatodaslasdemás.Sinembargo,losparámetrosdeampliación,puntodevista,rejillayresoluciónsípuedendefinirseencadaventanaporseparado.
Enelespaciopapelsetrabajaenventanasgráficasdeespaciopapelflotantes(mencionadasenActiveXAutomationcomoobjetosPViewport)queincluyendistintasvistasdelmodelo.Lasventanasflotantes,querecibenelmismotratamientoquecualquierobjeto,puedendesplazarseovariardetamañoyformaparapresentareldibujocomoconvenga.Tambiénesposibledibujarobjetos,comoanotacionesocuadrosderotulación,directamenteenlavistadeespaciopapelsinqueafectealmodelo.
Paraobtenermásinformaciónacercadeventanasgráficas,consulte“Definicióndelasventanasgráficasdelespaciomodelo”y
“Presentacióndevariasvistasenespaciomodelo”enelManualdelusuario.VentanasflotantesCambioaunapresentacióndeespaciopapelCambioaunapresentacióndeespaciomodeloCreacióndeventanasgráficasdeespaciopapel.
ModificacióndevistasycontenidodelasventanasgráficasAjustedeescaladelasvistasenrelaciónconelespaciopapelAjustedeescaladetiposdelíneadepatronesenespaciopapelUsodeventanasgráficassombreadas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>
Ventanasflotantes
Elmodelonopuedemodificarseenespaciopapel.ParaaccederalmodelodeunobjetoPViewport,utilicelapropiedadActiveSpaceparacambiardelespaciopapelalespaciomodelo.Deestaformapodrátrabajarconelmodelosinperderdevistasupresentaciónglobal.EnobjetosPViewport,lascapacidadesdeediciónycambiodevisualizaciónsoncasilasmismasqueenobjetosViewport.Sinembargo,tienemáscontrolsobrelasvistasindividuales.Porejemplo,sepuedeinutilizarodesactivarcapasenalgunasventanasgráficasdepresentaciónsinquelasotrasseveanafectadas.Sepuedeactivarydesactivarlavisualizacióndeunaventanagráficaentera.Tambiénesposiblealinearvistasentreventanasgráficasyajustarsusescalasenrelaciónconlapresentaciónglobal.
Lailustraciónsiguientemuestralasdiferentesvistasdeunmodeloquesepuedenpresentarenespaciopapel.LasimágenesdeespaciopapelrepresentandistintasvistasdeunobjetoPViewport.Enunadelasvistas,lacapadecotasestáinutilizada.Observequeelcuadrodetítulo,elmarcoylaanotación,dibujadosenespaciopapel,noaparecenenlavistadelespaciomodelo.Además,lacapaquecontieneelmarcodelaventanagráficaestádesactivada.
CuandosetrabajaenunobjetoViewport,lapropiedadActiveSpacedebetenersiempreelvaloracModelSpace.CuandosetrabajaenunobjetoPViewport,lapropiedadActiveSpacepuedetenerelvaloracModelSpaceoacPaperSpace,porloqueesposiblecambiarentreelespaciopapelyel
espaciomodelosegúnlasnecesidades.
ParámetrosdelosobjetosPViewportyViewport,ydelapropiedadActiveSpace
Tipodeventanagráfica
Estado Descripción
PViewport ActiveSpace=acPaperspace
Disposicióndelapresentaciónenventanasgráficasflotantesyposibilidaddeañadircuadrosderotulación,marcosyanotaciones.Laediciónnoafectaalmodelo.
PViewport ActiveSpace=acModelspace
Trabajoconventanasgráficasflotantesparamodificarelmodeloocambiarlasvistas.Sepuedeninutilizarodesactivarcapasdeterminadasenlasdistintasventanasgráficas.
Ventanagráfica
ActiveSpace=acModelspace
Divisióndelapantallaenventanasgráficasenmosaicoparaeditarvariasvistasdelmodelo.
EnActiveXAutomationdeAutoCAD®,lapropiedadActiveSpaceseutilizaparacontrolarlavariabledesistemaTILEMODE.EstablecerThisDrawing.ActiveSpace=acModelSpaceesequivalentea
establecerTILEMODE=comoactivado,yestablecerThisDrawing.ActiveSpace=acPaperSpaceesequivalenteaestablecerTILEMODE=comodesactivado.
Deigualforma,lapropiedadMSpaceequivalealoscomandosMSPACEyPSPACEdeAutoCAD.EstablecerThisDrawing.MSpace=TRUEesigualautilizarelcomandoMSPACE:conmutaaespaciomodelo.EstablecerThisDrawing.MSpace=FALSEesigualqueutilizarelcomandoPSPACE:conmutaaespaciopapel.
Porotrolado,serequiereelusodelmétodoDisplayantesdedefinirTRUEenlapropiedadMSpace.ElmétodoDisplayinicializadeterminadosparámetrosgráficosquedebenfijarseantesdecambiaralespaciomodelo.EnAutoCAD,estosellevaacabo“entrebastidores.”Sinembargo,enlainterfazdeActiveXAutomation,elprogramadoreselresponsabledeestainicialización.
Nota Recuerdeque,parapoderasignarTRUEalapropiedadMSpace,debehaberactivadolavisualizacióndealmenosunobjetoPViewportconelmétodoDisplay.Sinoseactivalavisualización,seproduciráunerrorcuandoseintentedefinirlapropiedadMSpace.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>
Cambioaunapresentacióndeespaciopapel
Desdeelespaciomodelosepuedecambiaralaúltimapresentacióndelespaciopapelactivo.
Paracambiaralaúltimapresentacióndelespaciopapelactivo
1. AsignealapropiedadActiveSpaceelvaloracPaperSpace:
ThisDrawing.ActiveSpace=acPaperSpace
2. ConmutelapropiedadMSpaceaFALSE:
ThisDrawing.MSpace=FALSE
Cuandoseestáenelespaciopapel,AutoCADmuestraeliconodelsistemadecoordenadaspersonales(SCP)delespaciopapelenlaesquinainferiorizquierdadeláreagráfica.Elcursorencruzindicaquesepuedenrealizarcambioseneláreadepresentacióndeespaciopapel(noenlasvistasdelasventanasgráficas).
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>
Cambioaunapresentacióndeespaciomodelo
Desdeelespaciopapelsepuedepasaralasventanasgráficasflotantesoenmosaicodelespaciomodelo.
Paracambiaralasventanasgráficasflotantes
1. UtiliceelmétodoDisplayparainicializarlosparámetrosgráficos:
ThisDrawing.ActivePViewport.DisplayTRUE
2. ConmutelapropiedadMSpaceaTRUE:
ThisDrawing.MSpace=TRUE
Seencontraráenelespaciomodelo,conventanasflotantes.
Nota Debecrearventanasflotantesantesdeintentarcambiaralespaciomodelo.
Paracambiaralasventanasgráficasenmosaico
Paracambiaralasventanasgráficasenmosaico,efectúeestepasoadicional:
AsignealapropiedadActiveSpaceelvaloracModelSpace:
ThisDrawing.ActiveSpace=acModelSpace
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>
Creacióndeventanasgráficasdeespaciopapel.
LasventanasgráficasdeespaciopapelsecreanconelmétodoAddPViewport.Estemétodorequiereunpuntocentralylaanchurayalturadelanuevaventanagráfica.Antesdecrearlaventanagráfica,utilicelapropiedadActiveSpaceparaespecificarelespaciopapelcomoespacioactual(normalmentesehaceestableciendoTILEMODEen0).
DespuésdecrearelobjetoPViewportsepuedenconfigurarlaspropiedadesdelavista,comoladireccióndelavista(propiedadDirection),lalongituddelalenteparavistasenperspectiva(propiedadLensLength)ylapresentacióndelarejilla(propiedadGridOn).Tambiénsepuedencontrolarpropiedadesdelaventanagráfica,comolacapa(propiedadLayer),eltipodelínea(propiedadLinetype)ylaescaladeltipodelínea(propiedadLinetypeScale).
Creaciónyactivacióndeunaventanagráficaflotante
EnesteejemploseconmutaAutoCADaespaciopapel,secreaunaventanaflotante,seconfiguralavistayseactivalaventana.
SubCh9_SwitchToPaperSpace()
'Settheactivespacetopaperspace
ThisDrawing.ActiveSpace=acPaperSpace
'Createthepaperspaceviewport
DimnewVportAsAcadPViewport
Dimcenter(0To2)AsDouble
center(0)=3,25
center(1)=3
center(2)=0
SetnewVport=ThisDrawing.PaperSpace._
AddPViewport(center,6,5)
'Changetheviewdirectionfortheviewport
DimviewDir(0To2)AsDouble
viewDir(0)=1
viewDir(1)=1
viewDir(2)=1
newVport.direction=viewDir
'Enabletheviewport
newVport.DisplayTrue
'Switchtomodelspace
ThisDrawing.MSpace=True
'SetnewVportcurrent
'(notalwaysnecessarybutagoodidea)
ThisDrawing.ActivePViewport=newVport
'ZoomExtentsinmodelspace
ZoomExtents
'Turnmodelspaceeditingoff
ThisDrawing.MSpace=False
'ZoomExtentsinpaperspace
ZoomExtents
EndSub
Elordendelospasosdelcódigodeesteejemploesmuyimportante.Comonorma,lassentenciasdebenestablecerseenelmismoordenenelqueseharíadesdelalíneadecomandodeAutoCAD.Lasúnicasaccionesinesperadassonladefinicióndelavistaylaactivacióndelaventanagráfica.
Nota Paraconfiguraromodificaraspectosdelavista(dirección,distanciafocal,etc.),elmétodoDisplaydelobjetoViewportdebeestardesactivado(FALSE);paraestablecerunaventanagráficacomoactual,elmétodoDisplaydebeestaractivado(TRUE).
Creacióndecuatroventanasflotantes
Enesteejemploseamplíaelejemplode"Crearyactivarunaventanagráficaflotante"paracrearcuatroventanasflotantesyestablecersusvistasensuperior,frontal,derechaeisométrica,respectivamente.Laescaladelasvistasseajustaalamitaddelaescaladelespaciopapel.Paraasegurarsedequeestasventanastienenalgoquemostrar,puedecrearunaesferasólida3Dantesdeprobarelejemplo.
SubCh9_FourPViewports()
DimtopVport,frontVportAsAcadPViewport
DimrightVport,isoVportAsAcadPViewport
Dimpt(0To2)AsDouble
DimviewDir(0To2)AsDouble
ThisDrawing.ActiveSpace=acPaperSpace
ThisDrawing.MSpace=True
'TaketheexistingPViewportandmakeitthetopVport
pt(0)=2.5:pt(1)=5.5:pt(2)=0
SettopVport=ThisDrawing.ActivePViewport
'NoneedtosetDirectionfortopview
topVport.center=pt
topVport.width=2.5
topVport.height=2.5
topVport.DisplayTrue
ThisDrawing.MSpace=True
ThisDrawing.ActivePViewport=topVport
ZoomExtents
ZoomScaled0.5,acZoomScaledRelativePSpace
'CreateandsetupfrontVport
pt(0)=2.5:pt(1)=2.5:pt(2)=0
SetfrontVport=ThisDrawing.PaperSpace._
AddPViewport(pt,2.5,2.5)
viewDir(0)=0:viewDir(1)=1:viewDir(2)=0
frontVport.direction=viewDir
frontVport.DisplayacOn
ThisDrawing.MSpace=True
ThisDrawing.ActivePViewport=frontVport
ZoomExtents
ZoomScaled0.5,acZoomScaledRelativePSpace
'CreateandsetuprightVport
pt(0)=5.5:pt(1)=5.5:pt(2)=0
SetrightVport=ThisDrawing.PaperSpace._
AddPViewport(pt,2.5,2.5)
viewDir(0)=1:viewDir(1)=0:viewDir(2)=0
rightVport.direction=viewDir
rightVport.DisplayacOn
ThisDrawing.MSpace=True
ThisDrawing.ActivePViewport=rightVport
ZoomExtents
ZoomScaled0.5,acZoomScaledRelativePSpace
'CreateandsetupisoVport
pt(0)=5.5:pt(1)=2.5:pt(2)=0
SetisoVport=ThisDrawing.PaperSpace._
AddPViewport(pt,2.5,2.5)
viewDir(0)=1:viewDir(1)=1:viewDir(2)=1
isoVport.direction=viewDir
isoVport.DisplayacOn
ThisDrawing.MSpace=True
ThisDrawing.ActivePViewport=isoVport
ZoomExtents
ZoomScaled0.5,acZoomScaledRelativePSpace
'Finish:Performaregeninallviewports
ThisDrawing.RegenTrue
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>
Modificacióndevistasycontenidodelasventanasgráficas
ParacambiarlavistadeunobjetoViewport,debeencontrarseenelespaciomodeloyteneractivalaventanagráfica.
Paraeditarundibujoenunaventanagráficaflotante
1. Enelespaciomodelo,utilicelapropiedadActiveViewportparaactivarlaventanagráfica:
Thisdrawing.ActiveViewport=MyViewportObject
2. Modificacióndeldibujo.
Tambiénpuedecrearobjetos,comoanotaciones,cotasocuadrosderotulación,enelespaciopapel.Noobstante,esnecesarioasignaralapropiedadActiveSpaceelvalorFALSEyactivarelespaciopapelpormediodelapropiedadMSpace.Losobjetosquesecreanenespaciopapelsólosonvisiblesenelespaciopapel.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>
Ajustedeescaladelasvistasenrelaciónconelespaciopapel
Antesdeimprimir,sepuedenestablecerfactoresdeescaladeampliaciónexactosparacadaseccióndeldibujo.Alajustarlaescaladelasvistasenrelaciónconelespaciopapel,seestableceunaescalasistemáticaparacadaunadelasvistas.Porejemplo,lasiguienteilustraciónmuestraunavistaenespaciopapelconvariasventanasgráficas,enlasqueseofrecenvistasdistintasaescalasdiferentes.Paraajustarlaescaladeldibujotrazadoconprecisión,esimprescindiblequeseajustenlasescalasdelasvistasenrelaciónconelespaciopapel,ynoenfuncióndelavistaanteriornideltamañorealdelmodelo.
Cuandosetrabajaenespaciopapel,elfactordeescalaindicalarelaciónentreeltamañodeldibujotrazadoyeltamañorealdelmodeloexhibidoenlasventanasgráficas.Paraobtenerestaescala,sedividenlasunidadesdeespaciopapelporlasunidadesdeespaciomodelo.Paraundibujoenescaladeuncuarto,porejemplo,seespecificaunfactordeescaladeunaunidaddeespaciopapelporcuatrounidadesdeespaciomodelo(1:4).
UtiliceelmétodoZoomScaledparaatribuirunaescalaalasventanasgráficasenrelaciónconlasunidadesdeespaciopapel.Estemétodorequieretresvaloresdeentrada:laventanagráficaquevamosaescalar,elfactordeescalaycómoqueremosqueseapliquedichofactor.Estetercervaloresoptativoydeterminacómoseaplicalaescala:
Enrelaciónconloslímitesdeldibujo
Enrelaciónconlavistaactual
Enrelaciónconlasunidadesdelespaciopapel
Paraatribuirunaescalaaunavistaenrelaciónconlasunidadesdeespaciopapel,introduzcalaconstanteacZoomScaled -RelativePSpaceparaestevalor.
Comomuestranlasilustraciones,unaescalade2enrelaciónconlasunidadesdeespaciopapel,laescaladelaventanagráficaaumentaaldobleeltamañodelasunidadesdeespaciopapel.Unaescalade0,5relativaalasunidadesdeespaciopapelreducealamitadeltamañodelasunidadesdeespaciopapel.Elmodeloseimprimealamitaddesutamañoreal.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>
Ajustedeescaladetiposdelíneadepatronesenespaciopapel
Enespaciopapel,haydosformasdeatribuirescalaauntipodelínea.Laescalasepuedebasarenlasunidadesdedibujodelespacioenquesecreóelobjeto(modeloopapel),opuedetratarsedeunaescalauniformebasadaenunidadesdeespaciopapel.Laescaladetipodelíneatambiénpuedeserunaescalauniformebasadaenunidadesdeespaciopapel.LavariabledesistemaPSLTSCALEpermitemantenerlamismaescaladelostiposdelíneaparalosobjetosmostradosadiferentesescalasendistintasventanasgráficas.Afectatambiénalapresentacióndelaslíneasenlasvistas3D.
Enlasiguienteilustraciónsehaajustadouniformementeenespaciopapellaescaladelostiposdelíneautilizadosparacrearlaslíneasenespaciomodelo,mediantelavariabledesistemaPSLTSCALE.Observequeeltipodelíneamuestralamismaescalaenlasdosventanasgráficas,inclusoenaquellosobjetosquetienendistintosfactoresdeampliación.
ElmétodoSetVariablepermiteajustarelvalordelavariabledesistemaPSLTSCALE.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Ventanasgráficas>
Usodeventanasgráficassombreadas
Sieldibujocontienecaras3D,mallas,objetosdeextrusión,superficiesosólidos,sepuedetrazardesdeelespaciopapelmediantelasopcionesComosemuestra,Estructuraalámbrica,OcultoyModelizado.Esposibleobtenerunavistapreliminardelasventanassombreadasymodelizadas,trazarlaseimprimirlasenarchivoconsombreadoymodelizadocompletos.
Paraestablecerunaopciónparatrazarventanasgráficassombreadasenelespaciopapel,utilicelapropiedadShadePlotdelobjetoPViewport.
Nota Paraocultarlíneasaltrazarventanasgráficasdelespaciomodelo(objetosViewport),utilicelapropiedadPlotHiddendelobjetoLayout.Estapropiedadrequiereunvalorbooleano:TRUEparaquitarlaslíneasocultas,FALSEparadibujarlas.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>
Impresióndedibujos
Losdibujossepuedenimprimirdirectamente,talcomosevenenelespaciomodelo,osepuedenprepararprimeroenunapresentacióndeespaciopapel.Sueleserpreferibletrazardesdeelespaciomodelocuandosedeseaverocomprobareldibujoantesdecrearunapresentacióndelespaciopapel.Unavezqueelmodeloestélisto,sepuedepreparareimprimirunapresentacióndeespaciopapel.
Nota LavariabledesistemaBACKGROUNDPLOTdebeestablecerseen0paraqueunarchivodecomandospuedatrazarvariostrabajos.
EltrazadoimplicatrabajarcondosobjetosActiveXAutomation:elobjetoLayoutyelobjetoPlot.ElobjetoLayoutcontienelaconfiguracióndelostrazadoresdelapresentación.ElobjetoPlotcontienelosmétodosypropiedadesqueinicianysupervisanunasecuenciadetrazado.
RealizacióndeunaimpresiónbásicaImpresióndesdeelespaciomodeloImpresióndesdeelespaciopapel
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Impresióndedibujos>
Realizacióndeunaimpresiónbásica
DesdeelobjetoPlotsepuedenutilizarlossiguientesmétodosypropiedades:
PlotToFile
Imprimeenunarchivo.
PlotToDevice
Trazaenunaimpresoraotrazador.
DisplayPlotPreview
Muestraunavistapreliminardeltrazadoespecificado.
QuietErrorMode
Conmutaelmododeerrorsilenciosoparainformardeerroresdetrazado.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Impresióndedibujos>
Impresióndesdeelespaciomodelo
Normalmente,cuandosetrazaundibujogrande,comoelplanodeunaplanta,sepuedeprecisarunaescalaparaconvertirlasunidadesrealesdeldibujoenpulgadasomilímetrosdetrazado.Sinembargo,cuandosetrazadesdeelespaciomodelo,lasopcionespordefectoqueseutilizansinosehanespecificadootrasincluyentrazaralaimpresoradelsistema,trazarlavisualizaciónactual,ajustarescalaalpapel,ydesfase0,0.Paramodificarlosparámetrosdetrazado,cambielaspropiedadesdelobjetoLayoutasociadoconelespaciomodelo.
Impresióndelaextensióndeunapresentacióndelespaciomodeloactivo
Enesteejemplo,enprimerlugarsecompruebaqueelespacioactivoeselespaciomodelo.Acontinuaciónestablecevariosconfiguracionesdetrazadores.Porúltimo,eltrabajoseenvíaparasutrazadomedianteelmétodoPlotToDevice.
SubCh9_PrintModelSpace()
'Verifythattheactivespaceismodelspace
IfThisDrawing.ActiveSpace=acPaperSpaceThen
ThisDrawing.MSpace=True
ThisDrawing.ActiveSpace=acModelSpace
EndIf
'Settheextentsandscaleoftheplotarea
ThisDrawing.ModelSpace.Layout.PlotType=acExtents
ThisDrawing.ModelSpace.Layout._
StandardScale=acScaleToFit
'Setthenumberofcopiestoone
ThisDrawing.Plot.NumberOfCopies=1
'Initiatetheplot
ThisDrawing.Plot.PlotToDevice
EndSub
ElnombredeldispositivosepuedeespecificarmediantelapropiedadConfigName.EstedispositivosepuedereemplazarenelmétodoPlotToDevicesiseespecificaunarchivoPC3.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Definicióndepresentacioneseimpresión>Impresióndedibujos>
Impresióndesdeelespaciopapel
Sepuedetrazarunapresentacióndelespaciopapel.Esposibletrazarlapresentaciónactiva,comoseexplicaen"Trazardesdeelespaciomodelo",oespecificarelnombredelapresentaciónquesedeseatrazar.
¿Comentarios?
<$nopage>imágenesbitonales.<$nopage>bloque(referencias):<$nopage>BlockReference(objeto):<$nopage>refx.
ManualdeldesarrolladordeActiveXyVBA>
Técnicasavanzadasdedibujoyorganización
Amedidaqueganeexperiencia,podráaprovecharlasdiversasfuncionesavanzadasdeAutoCADparaperfeccionarsusaplicaciones.
Puedeincluirimágenesrástereneldibujo,comofotografíasdigitales,aéreasyporsatélite,asícomoimágenesmodelizadasporordenador.Paraobtenerinformaciónsobrelasimágenesráster,ademásdeloexpuestoenestasección,consulteelManualdelusuario.
Ademásdemejorarlaimagenvisualdeldibujo,AutoCADproporcionavariasfuncionesparaayudarleaorganizardatos,loquepermiteampliaraúnmáslainteligenciadelosobjetosdeldibujo.
TrabajoconimágenesrásterUtilizacióndebloquesyatributosUtilizacióndereferenciasexternasAsignaciónyrecuperacióndedatosextendidos
¿Comentarios?
<$nopage>imágenesbitonales.
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>
Trabajoconimágenesráster
ConAutoCAD®sepuedenañadirimágenesrásteralosdibujosvectorialesdeAutoCADy,acontinuación,verytrazarelarchivoresultante.
EnlazaryajustarlaescaladeunaimagenrásterGestióndeimágenesrásterModificarimágenesycontornosdeimagenDelimitacióndeimágenes
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>
Enlazaryajustarlaescaladeunaimagenráster
Lasimágenespuedencolocarseenunarchivodedibujo,peronosonrealmentepartedelarchivo.LaimagensevinculaalarchivodedibujoatravésdeunnombrederutaodeunIDdedocumentodegestióndedatos.Lasrutasdeimágenesvinculadassepuedencambiaroeliminarencualquiermomento.Paraenlazarunaimagen,secreaunobjetoRastereneldibujoutilizandoelmétodoAddRaster.Estemétodorequierecuatrovaloresdeentrada:elnombredelarchivodeimagenqueenlazar,elpuntodeinsercióneneldibujoparacolocarla,elfactordeescalayelánguloderotación.RecuerdequeelobjetoRasterrepresentaunvínculoindependientealaimagen,nolaimagenensí.
Unavezquehayaenlazadounaimagen,puedevolveraenlazarlavariasveces,creandounnuevoobjetoRasterparacadaenlace.Cadaenlacetienesupropiocontornoderecorteysupropiaconfiguracióndebrillo,contraste,difuminaciónytransparencia.Unasolaimagenpuedecortarseenmúltiplespiezasyreorganizarseindependientementeeneldibujo.
PuededefinirelfactordeescaladelaimagenrásteralcrearelobjetoRasterdeformaquelageometríadelaimagencoincidaconlaescaladelageometríacreadaeneldibujodeAutoCAD.Cuandoseleccionaunaimagenparaenlazar,laimagenseinsertaconunfactordeescalade1unidaddemedidadeimagena1unidaddemedidadeAutoCAD.Paradefinirelfactordeescaladelaimagen,necesitasaberlaescaladelageometríadelaimagen,ynecesitasaberquéunidaddemedida(pulgadas,pies,etc.)deseautilizarparadefinir1unidaddemedidadeAutoCAD.ElarchivodeimagendebecontenerinformaciónderesoluciónquedefinalosPPP(puntosporpulgada)yelnúmerodepíxelesdelaimagen.
Siunaimagentieneinformaciónderesolución,AutoCADlacombinaconelfactordeescalayconlaunidaddemedidadeAutoCADqueustedproporcioneparaajustarlaescaladelaimageneneldibujo.Porejemplo,supongamosquela
imagenrásteresunplanotécnicodigitalizadoenelquelaescalaesde1pulgadaiguala50pies,o1:600,yqueeldibujodeAutoCADestádefinidoparaqueunaunidadrepresenteunapulgada.Paradefinirelfactordeescaladelaimagendebeescribir600paraelparámetroScaleFactordelmétodoAddRaster.AutoCADinsertaentonceslaimagenaunaescalaquehagacorresponderlageometríadelaimagenconlageometríavectorialdeldibujo.
Nota Sinosedefineningunainformaciónderesoluciónenelarchivodeimagenenlazado,AutoCADcalculalaanchuradelaimagenoriginalcomounaunidad.Despuésdelainserción,laanchuradelaimagenenunidadesdeAutoCADesigualalfactordeescala.
Enlazarunaimagenráster
Esteejemplocreaunacotaradialenespaciomodelo.Esteejemploutilizaelarchivowatch.jpg,queseencuentraeneldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariableimageName.
SubCh10_AttachingARaster()
DiminsertionPoint(0To2)AsDouble
DimscalefactorAsDouble
DimrotationAngleAsDouble
DimdwgNameAsString
DimrasterObjAsAcadRasterImage
imageName="C:/ProgramFiles/AutoCADDirectory/sample/watch.jpg'
insertionPoint(0)=5
insertionPoint(1)=5
insertionPoint(2)=0
scalefactor=2
rotationAngle=0
OnErrorGoToERRORHANDLER
'Attachtherasterimageinmodelspace
SetxlineObj=ThisDrawing.ModelSpace.AddXLine_
(imageName,insertionPoint,_
scalefactor,rotationAngle)
ZoomAll
ExitSub
ERRORHANDLER:
MsgBoxErr.Description
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>
Gestióndeimágenesráster
Puedegestionarelnombredeimagenráster,delarchivoysurutautilizandolaspropiedadesdelobjetoRaster.
CambioderutasdearchivodeimagenNombrarimágenes
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Gestióndeimágenesráster>
Cambioderutasdearchivodeimagen
LarutayelnombredearchivopuedenconsultarseocambiarseutilizandolapropiedadImageFile.LarutadefinidaporestapropiedadeslarutarealenqueAutoCADbuscalaimagen.
SiAutoCADnopuedeencontrareldibujo(porejemplo,sihamovidoelarchivoaundirectoriodiferentealqueguardóconlapropiedadImageFile),eliminalainformaciónderutarelativaoabsolutadelnombre(porejemplo,\images\tree.tgaoc:\myproject\images\tree.tgaseconvierteentree.tga)ybuscalasrutasquehadefinidousandoelmétodoSetProjectFilePathenelobjetoPreferences.Sieldibujonoestásituadoenlasrutas,vuelveaintentarconlaprimerarutadebúsqueda.
PuedeeliminarlarutadelnombredelarchivooespecificarunarutarelativaredefiniendolapropiedadImageFile.
ElcambioderutaenlapropiedadImageFilenoafectaalaconfiguraciónderutadebúsquedadelosarchivosdelproyecto.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Gestióndeimágenesráster>
Nombrarimágenes
Losnombresdeimagennosonnecesariamentelosmismosquelosnombresdearchivo.Cuandoenlazaunaimagenaundibujo,AutoCADutilizaelnombredearchivosinlaextensióndearchivocomonombredeimagen.Puedecambiarelnombredelaimagensinqueestoafectealnombredelarchivo.
ElarchivodeimagenserepresentamediantelapropiedadImageFileenelobjetoRaster.ElcambiodelapropiedadImageFilecambiarálaimagendeldibujo.ElnombredelaimagenesrepresentadoporlapropiedadName,yelcambiodelapropiedadNamecambiarásolamenteelnombredelaimagen,noelarchivoasociadoaella.
¿Comentarios?
<$nopage>imágenesbitonales.
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>
Modificarimágenesycontornosdeimagen
Todaslasimágenestienenuncontornodeimagen.Cuandoenlazaunaimagenaundibujo,elcontornodeimagenheredalaconfiguracióndepropiedadesactual,incluyendoelcolor,lacapa,eltipodelíneaylaescaladetipodelínea.Silaimagenesunaimagenbitonal,elcolordelaimagenydelcontornosoniguales.
AligualqueconotrosobjetosdeAutoCAD,puedemodificarlasimágenesysuspropiedadesdecontorno.Porejemplo,puede:
Mostraruocultarelcontornodeimagen
Modificarlacapa,colordecontornoytipodelíneadelaimagen
Cambiarlaubicacióndelaimagen
Ajustarlaescaladelaimagen,girarlaycambiarsualturayanchura.
Hacerlaimagenvisibleoinvisible
Cambiarlatransparenciadelaimagen
Cambiarelbrillodelaimagen,elcontrasteyladifuminación
ModificarlacalidadylavelocidaddevisualizacióndelaimagenVisualizaciónyocultacióndeloscontornosdelaimagenModificacióndelacapa,elcolordelcontornoyeltipodelíneadelcontornodelaimagenModificacióndelaescala,rotación,posición,anchurayalturadelaimagenCambiodelavisibilidaddelaimagenModificacióndelcolorylatransparenciadeimágenesbitonales
Ajustedelbrillo,elcontrasteyeldifuminadodelaimagen
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>
Visualizaciónyocultacióndeloscontornosdelaimagen
Conellosegarantizaquelaimagennosemuevaomodifiqueporerror,yseevitaeltrazadoovisualizacióndelcontorno.Cuandoloscontornosdelaimagenestánocultos,lasimágenesdelimitadassiguenvisualizándosehastaloslímitesespecificadosporelcontornoysóloesteúltimoseveafectado.Lavisualizaciónyocultacióndeloscontornosdelaimagenafectaatodaslasimágenesenlazadasaldibujo.
Paramostraruocultarloscontornosdeunaimagen,utilicelapropiedadClippingEnabled.
Nota Estapropiedadsoloafectaalcontornodelaimagen.Paraveruncambioenlaimagenalactivarodesactivarestapropiedad,observedetenidamenteelpequeñocontornoquerodealaimagen.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>
Modificacióndelacapa,elcolordelcontornoyeltipodelíneadelcontornodelaimagen
Elcoloryeltipodelíneadeloscontornosdeunaimagen,asícomolacapadedondeestaseencuentra,puedencambiarseconlassiguientespropiedades:
Layer
Especificalacapadelaimagen.
Color
Especificaelcolordelcontornodelaimagen.
Linetype
Especificaeltipodelíneadelaimagen.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>
Modificacióndelaescala,rotación,posición,anchurayalturadelaimagen
Laescala,rotación,posición,anchurayalturadeunaimagensepuedencambiarconlossiguientesmétodosypropiedades:
ScaleEntity
Asignaunaescalaalaimagen
Rotate
Rotalaimagen.
Origin
Especificalaposicióndelaimagen.
Width
Especificalaanchuradelaimagenenpíxeles.
Height
Especificalaalturadelaimagenenpíxeles.
ImageWidth
Especificalaanchuradelaimagenenunidadesdebasededatos.
ImageHeight
Determinalaalturadelaimagenenunidadesdebasededatos
ShowRotation
Determinasilaimagenrástersemuestragirada
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>
Cambiodelavisibilidaddelaimagen
Lavisibilidaddelasimágenesafectaalavelocidadderedibujoalocultarimágenesenlasesióndedibujoactual.Lasimágenesocultasnosemuestrannisetrazan,sólosemuestraelcontornodeldibujo.Paraocultarimágenes,asignealapropiedadImageVisibilityelvalorFALSE.Paravolveravisualizarlasimágenes,asignealapropiedadImageVisibilityelvalorTRUE.
¿Comentarios?
<$nopage>imágenesbitonales.
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>
Modificacióndelcolorylatransparenciadeimágenesbitonales
Lasimágenesrásterbitonalessonimágenesqueconstanúnicamentedeuncolordeprimerplanoyuncolordefondo.Alenlazarunaimagenbitonal,lospíxelesdeprimerplanodelaimagenheredanlosparámetrosdecapaactualesdelcolor.Ademásdelasmodificacionesquepuedenefectuarseencualquierimagenenlazada,lasimágenesbitonalespuedenmodificarsemedianteelcambiodelcolordeprimerplanoylaactivaciónodesactivacióndelatransparenciadelfondo.
Nota Lasimágenesbitonalesyloscontornosdeimágenesbitonalessiempretienenelmismocolor.
Paracambiarelcolordefondodeunaimagenbitonal,utilicelapropiedadColor.Paraactivarodesactivarlatransparencia,utilicelapropiedadTransparency.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Modificarimágenesycontornosdeimagen>
Ajustedelbrillo,elcontrasteyeldifuminadodelaimagen
Esposibleajustarelbrillo,elcontrasteyeldifuminadodelasimágenesdeAutoCADparasuvisualizaciónenpantallayparasuimpresión,sinalterarelarchivodelaimagenrásteroriginal.
Utilicelassiguientespropiedadesparaajustarelbrillo,elcontrasteyeldifuminado:
Brightness
Especificaelniveldebrillodeunaimagen.
Contrast
Especificaelgradodecontrastedeunaimagen.
Fade
Especificalaintensidaddedifuminadodeunaimagen.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>
Delimitacióndeimágenes
Ladelimitacióndelasimágenespermitedefinirlazonadelaimagenquesedeseevereimprimir.Elcontornodelimitadordebeserunpolígono2Dounrectánguloconlosvérticesdentrodelcontornodelaimagen.Variascopiasdelamismaimagenpuedentenerdistintoscontornos
Paradelimitarunaimagen:
1. ActiveloscontornosdelaimagenconlapropiedadClippingEnabled
2. EspecifiqueelcontornodelimitadoryrealiceladelimitaciónconelmétodoClipBoundary.Estemétodorequiereunvalordeentrada:unamatrizvariantedeunsistemadecoordenadas2Dqueespecifiqueelcontornodelimitadordeunaimagenráster.ModificacióndelcontornodelimitadorVisualizaciónyocultacióndelcontornodelimitador
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Delimitacióndeimágenes>
Modificacióndelcontornodelimitador
Paramodificaruncontornodelimitadorexistente,sencillamenterepitalospasosanteriores.Seborraráelcontornoantiguoyapareceráelnuevoensulugar.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Delimitacióndeimágenes>
Visualizaciónyocultacióndelcontornodelimitador
Lasimágenesdelimitadaspuedenmostrarseconelcontornodelimitador,obien,puedeocultarseestecontornoymostrarloscontornosoriginalesdelaimagen.Paraocultaruncontornodelimitadorymostrarlaimagenoriginal,asignealapropiedadClippingEnabledelvalorFALSE.Paravisualizarlaimagendelimitada,establezcalapropiedadClippingEnabledenTRUE.
Delimitacióndelcontornodelimitadordeunaimagenráster
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Trabajoconimágenesráster>Delimitacióndeimágenes>Visualizaciónyocultacióndelcontornodelimitador>
Delimitacióndelcontornodelimitadordeunaimagenráster
Esteejemplocreaunacotaradialenespaciomodelo.Despuésdelimitalaimagenbasándoseenuncontornodelimitador.Esteejemploutilizaelarchivodowntown.jpg,queseencuentraeneldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariableimageName.
SubCh10_ClippingRasterBoundary()
DiminsertionPoint(0To2)AsDouble
DimscalefactorAsDouble
DimrotationAngleAsDouble
DimdwgNameAsString
DimrasterObjAsAcadRasterImage
imageName="C:\AutoCAD\sample\downtown.jpg"
insertionPoint(0)=5
insertionPoint(1)=5
insertionPoint(2)=0
scalefactor=2
rotationAngle=0
OnErrorGoToERRORHANDLER
'Createsarasterimageinmodelspace
SetxlineObj=ThisDrawing.ModelSpace.AddXLine_
(imageName,insertionPoint,_
scalefactor,rotationAngle)
ZoomAll
'Establishtheclipboundarywithanarrayofpoints
DimclipPoints(0To9)AsDouble
clipPoints(0)=6:clipPoints(1)=6.75
clipPoints(2)=7:clipPoints(3)=6
clipPoints(4)=6:clipPoints(5)=5
clipPoints(6)=5:clipPoints(7)=6
clipPoints(8)=6:clipPoints(9)=6,75
'Cliptheimage
rasterObj.ClipBoundaryclipPoints
'Enablethedisplayoftheclip
rasterObj.ClippingEnabled=True
ThisDrawing.RegenacActiveViewport
ExitSub
ERRORHANDLER:
MsgBoxErr.Description
EndSub
¿Comentarios?
<$nopage>bloque(referencias):<$nopage>BlockReference(objeto):
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>
Utilizacióndebloquesyatributos
AutoCADdisponedevariascaracterísticasqueayudanagestionarlosobjetosdeldibujo.Losbloquesfacilitanlaorganizaciónymanipulacióndevariosobjetoscomounsolocomponente.Losatributosasocianelementosdeinformaciónconlosbloquesdeldibujo;porejemplo,númerosdereferenciadepiezasyprecios.
ConlasreferenciasexternasdeAutoCAD,orefX,sepuedensuperponeroenlazardibujosenterosconeldibujoactual.Alabrireldibujoactual,cualquiermodificaciónefectuadaeneldibujoalquesehacereferenciaquedaráreflejadaeneldibujoactual.
UtilizacióndebloquesUtilizacióndeatributos
¿Comentarios?
<$nopage>bloque(referencias):<$nopage>BlockReference(objeto):
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>
Utilizacióndebloques
Unbloqueesunacoleccióndeobjetosquepuedenagruparseparaformarunúnicoobjetoounareferenciadebloque.Lasreferenciasdebloquedelosdibujospuedeninsertarse,ajustarsuescalaygirarse.Tambiénpuededescomponerlareferenciaabloqueensusobjetos,modificarlosydefinirdenuevoelbloque.AutoCADactualizatodaslasfuturasyactualescopiasdelareferenciadebloquebasándoseenladefinicióndelbloque.
Losbloquessepuedendefinirapartirdeobjetosdibujadosoriginalmenteendiferentescapascondistintoscoloresytiposdelínea.Sepuedeconservarlainformaciónsobrelacapa,elcoloryeltipodelíneadeunbloque.Estopermitequecadavezqueseinserteunbloque,losobjetosdelmismosedibujenensucapaconelcolorytipodelíneaoriginales.
Paraobtenermásinformaciónacercadelusodebloques,véase“Creacióneinsercióndesímbolos(bloques)”enelManualdelusuario.
DefinicióndebloquesInsercióndebloquesDescomposicióndereferenciasdebloqueRedefinicióndebloques
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndebloques>
Definicióndebloques
Paracrearunbloquenuevo,utiliceelmétodoAdd.Estemétodorequieredosvaloresdeentrada:laubicacióndeldibujoendondeseañadeelbloqueyelnombredelbloquequesecrea.
Unavezcreado,selepuedenañadirotrosobjetosgeométricosuotrobloque.Después,puedeinsertarunainstanciadelbloqueeneldibujo.Albloquequeseinsertaseleconocecomoobjetodereferenciadebloque.
TambiénpuedecrearunbloqueutilizandoelmétodoWBlockparaagruparobjetosenunarchivodedibujoindependiente.Elarchivodedibujopuedeentoncesutilizarsecomodefinicióndebloqueparaotrosdibujos.AutoCADconsideracomobloquecualquierdibujoqueseinserteenotrodibujo.
Paraobtenermásinformaciónacercadeladefinicióndebloques,véase“Creacióndebloques”enelManualdelusuario.
¿Comentarios?
<$nopage>bloque(referencias):
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndebloques>
Insercióndebloques
SepuedeutilizarelmétodoInsertBlockparainsertarbloquesodibujoscompletoseneldibujoactual.ElmétodoInsertBlockrequiereseisvalorescomoentrada:elpuntodeinserción,elnombredelbloqueodibujequeseinserta,elfactordeescalaX,elfactordeescalaY,elfactordeescalaZ,yelánguloderotación.
LosdibujosinsertadosenotrosdibujossonconsideradosporAutoCADcomoreferenciasabloques.Lassiguientesinsercionesrefierenaladefinicióndebloque(quecontieneladescripcióngeométricadelbloque)conparámetrosdeposición,escalayrotacióndistintos.Sisemodificaeldibujooriginalunavezinsertado,lasmodificacionesnotendránefectoenelbloqueinsertado.Siquierequeelbloqueinsertadoreflejelasmodificacionesrealizadaseneldibujooriginal,puededefinirdenuevoelbloquemediantelareinsercióndeldibujooriginal.ParaellopuedeutilizarelmétodoInsertBlock.
Siinsertaundibujoamododebloque,elbloqueadquiereautomáticamenteelnombredelarchivo.Despuésdecrearelbloque,puedecambiarsunombremediantelapropiedadName.
Pordefecto,elpuntobaseparalainsercióndedibujosenAutoCADtienelascoordenadas(0,0,0).Sepuedemodificarelpuntobasedeundibujo,siabreeldibujooriginalespecificaunpuntobasedeinsercióndiferenteparalavariabledesistemaINSBASEconelmétodoSetVariable.AutoCADemplearáelnuevopuntobaselapróximavezqueinserteeldibujo.
SieldibujoinsertadocontieneobjetosPaperSpace,dichosobjetosnoseincluyenenladefinicióndebloquedeldibujoactual.Parausarlosobjetosdibujadosenespaciopapelenotrosdibujos,abraeldibujooriginalydefinalosobjetosdelespaciopapelcomounbloqueconelmétodoAdd.Lainsercióndeundibujoenotrosepuederealizartantoenespaciopapelcomoenespaciomodelo.
Unareferenciaabloquenopuedeiterarseparaencontrarlosobjetosoriginalesquelacomponen.Sinembargo,sepuedeiterarladefinicióndebloqueoriginal,osepuededescomponerlareferenciaabloqueensuscomponentesoriginales.
TambiénsepuedeinsertarunamatrizdebloquesconelmétodoAddMInsertBlock.Estemétodonoinsertaunbloqueeneldibujo,comohaceInsertBlock,sinoqueinsertaunamatrizdelbloqueespecificado.EstemétododevuelveunobjetoMInsertBlock.
Paraobtenermásinformaciónacercadelainsercióndebloques,véase“Insercióndebloques”enelManualdelusuario.
Definicióneinsercióndeunbloqueenundibujo
Esteejemplodefineunbloqueyañadeuncírculoasudefinición.Despuésseinsertaelbloqueenundibujo,comoreferenciadebloque.
SubCh10_InsertingABlock()
'Definetheblock
DimblockObjAsAcadBlock
DiminsertionPnt(0To2)AsDouble
insertionPnt(0)=0
insertionPnt(1)=0
insertionPnt(2)=0
SetblockObj=ThisDrawing.Blocks.Add_
(insertionPnt,"CircleBlock")
'Addacircletotheblock
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=0
center(1)=0
center(2)=0
radius=1
SetcircleObj=blockObj.AddCircle(center,radius)
'Inserttheblock
DimblockRefObjAsAcadBlockReference
insertionPnt(0)=2
insertionPnt(1)=2
insertionPnt(2)=0
SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_
(insertionPnt,"CircleBlock",1#,1#,1#,0)
ZoomAll
MsgBox"Thecirclebelongsto"&blockRefObj.ObjectName
EndSub
Nota Unavezinsertado,elSCUdelarchivoexternosealineaenparaleloconelplanoXYdelsistemadecoordenadaspersonales(SCP)deldibujoactual.Deestaforma,unbloqueprocedentedeunarchivoexternopuedeinsertarseconcualquierorientaciónenelespaciopreviadefinicióndelascoordenadasSCP.
¿Comentarios?
<$nopage>BlockReference(objeto):
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndebloques>
Descomposicióndereferenciasdebloque
UtiliceelmétodoExplodepararomperunareferenciadebloque.Conellopodrámodificarelbloque,oañadiroborrarlosobjetosquelodefinen.
Presentacióndelosresultadosdeladescomposicióndeunareferenciadebloque
Esteejemplocreaunbloqueyañadeuncírculoasudefinición.Despuésseinsertaelbloqueenundibujo,comoreferenciadebloque.Acontinuaciónsedescomponelareferenciadebloqueysemuestranlosobjetosresultantesdeesteprocesojuntoconsutipodeobjeto.
SubCh10_ExplodingABlock()
'Definetheblock
DimblockObjAsAcadBlock
DiminsertionPnt(0To2)AsDouble
insertionPnt(0)=0
insertionPnt(1)=0
insertionPnt(2)=0
SetblockObj=ThisDrawing.Blocks.Add_
(insertionPnt,"CircleBlock")
'Addacircletotheblock
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=0
center(1)=0
center(2)=0
radius=1
SetcircleObj=blockObj.AddCircle(center,radius)
'Inserttheblock
DimblockRefObjAsAcadBlockReference
insertionPnt(0)=2
insertionPnt(1)=2
insertionPnt(2)=0
SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_
(insertionPnt,"CircleBlock",1#,1#,1#,0)
ZoomAll
MsgBox"Thecirclebelongsto"&blockRefObj.ObjectName
'Explodetheblockreference
DimexplodedObjectsAsVariant
explodedObjects=blockRefObj.Explode
'Loopthroughtheexplodedobjects
DimIAsInteger
ForI=0ToUBound(explodedObjects)
explodedObjects(I).Color=acRed
explodedObjects(I).Update
MsgBox"ExplodedObject"&I&":"_
&explodedObjects(I).ObjectName
explodedObjects(I).Color=acByLayer
explodedObjects(I).Update
Next
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndebloques>
Redefinicióndebloques
PararedefinirunbloquesepuedeutilizarcualquieradelosmétodosypropiedadesdelobjetoBlock.Alredefinirunbloque,todaslasreferenciasaesebloquedeldibujoseactualizaráninmediatamenteparareflejarlanuevadefinición.
Laredefiniciónafectaalasinsercionesdebloqueyaefectuadasyalasfuturas.Losatributosconstantessepierdenysonreemplazadosporatributosconstantesnuevos.Losatributosvariablespermanecenintactos,inclusosielnuevobloquenotieneatributos.
Redefinicióndeobjetosenunadefinicióndebloque
Esteejemplocreaunbloqueyañadeuncírculoasudefinición.Despuésseinsertaelbloqueenundibujo,comoreferenciadebloque.Elcírculodeladefinicióndebloqueseactualizaylareferenciadebloqueseactualizaautomáticamente.
SubCh10_RedefiningABlock()
'Definetheblock
DimblockObjAsAcadBlock
DiminsertionPnt(0To2)AsDouble
insertionPnt(0)=0
insertionPnt(1)=0
insertionPnt(2)=0
SetblockObj=ThisDrawing.Blocks.Add_
(insertionPnt,"CircleBlock")
'Addacircletotheblock
DimcircleObjAsAcadCircle
Dimcenter(0To2)AsDouble
DimradiusAsDouble
center(0)=0
center(1)=0
center(2)=0
radius=1
SetcircleObj=blockObj.AddCircle(center,radius)
'Inserttheblock
DimblockRefObjAsAcadBlockReference
insertionPnt(0)=2
insertionPnt(1)=2
insertionPnt(2)=0
SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_
(insertionPnt,"CircleBlock",1#,1#,1#,0)
ZoomAll
'Redefinethecircleintheblock,
'andupdatetheblockreference
circleObj.radius=3
blockRefObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>
Utilizacióndeatributos
Lasreferenciasdeatributossirvendeetiquetaoidentificadorinteractivoparaenlazartextoaunbloque.Ejemplosdeatributospuedensernúmerosdereferenciadepiezas,precios,comentariosonombresdepropietarios.
Esposibleextraerdeundibujoinformacióndereferenciadeatributosyemplearlaenunahojadecálculoobasededatosconlafinalidaddegenerarlistasdepiezasolistasdeelementos(BOM).Unbloquepuedetenerasociadamásdeunareferenciadeatributo,siemprequeéstastenganidentificadoresdistintos.Tambiénpuededefiniratributosconstantes.Dadoquetienenelmismovalorentodaslasaparicionesdelbloque,AutoCADnosolicitaunvalorcuandoseinsertaelbloque.
Losatributospuedenserinvisibles,loquesignificaquelasreferenciasdeatributonosemuestranniseimprimen.Noobstante,lainformacióndelasreferenciasdeatributossealmacenaenelarchivodeldibujo.
Paraobtenermásinformaciónacercadelusodeatributos,véase“Informacióngeneraldeatributosdebloque“enelManualdelusuario.
CreacióndedefinicionesyreferenciasdeatributosEdicióndedefinicionesdeatributosExtraccióndelainformacióndeatributos
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndeatributos>
Creacióndedefinicionesyreferenciasdeatributos
Paracrearunareferenciadeatributo,esprecisocrearantesunadefinicióndeatributoenunbloquemedianteelmétodoAddAttribute.Estemétodorequiereseisvaloresdeentrada:laalturadeltextodeatributo,elmododeatributo,lacadenademensaje,elpuntodeinserción,lacadenadeidentificaciónyelvalorpordefectodelatributo.
Elvalordelmodoesopcional.Sepuedenintroducircincoconstantesparaespecificarelmododeatributo:
acAttributeModeNormal
Especificaquesemantieneelmodoactualdecadaatributo.
acAttributeModeInvisible
Especificaquelosvaloresdeatributosnoaparezcancuandoseinserteelbloque.ElcomandoATTDISPanulaelmodoinvisible.
acAttributeModeConstant
Asignaunvalorfijoalosatributosparalasinsercionesdebloque.
acAttributeModeVerify
Solicitaqueseverifiqueelvalordelatributoalinsertarelbloque.
acAttributeModePreset
Estableceelvalorpordefectodelatributoalinsertarunbloquequecontieneunatributointroducido.Elvalornopuedemodificarseenestemodo.
Puedeintroducircualquiercombinacióndeopciones,todasellasoninguna.Sideseaespecificarunacombinacióndeopciones,añadalasconstantesjuntas.Porejemplo,podráintroduciracAttributeModeInvisible+acAttributeModeConstant.
Lacadenademensajeaparecealinsertarunbloquequecontieneelatributo.ElvalorpordefectodeestacadenaeslacadenaTag.IntroduzcaelmodoacAttributeModeConstantparadesactivarelmensaje.
Elidentificadorreconocecadaaparicióndelatributo.Puedeutilizarcualquiercaráctersalvoespaciososignosdeadmiración.AutoCADconviertelasletrasminúsculasenmayúsculas.
Unavezqueladefinicióndeatributosehaincorporadoalbloque,siemprequeinserteelbloqueconelmétodoInsertBlockpodráespecificarunvalordistintoparalareferenciadeatributo.
Ladefinicióndeatributoestáasociadaalbloquesobreelquesecrea.Lasdefinicionesdeatributoquesecreanenespaciomodelooespaciopapelnoseconsideranenlazadasaningúnbloquedeterminado.
Creacióndeunadefinicióndeatributo
Esteejemplocreaunbloqueyleañadeunatributo.Despuésseinsertaelbloqueeneldibujo.
SubCh10_CreatingAnAttribute()
'Definetheblock
DimblockObjAsAcadBlock
DiminsertionPnt(0To2)AsDouble
insertionPnt(0)=0
insertionPnt(1)=0
insertionPnt(2)=0
SetblockObj=ThisDrawing.Blocks.Add_
(insertionPnt,"BlockWithAttribute")
'Addanattributetotheblock
DimattributeObjAsAcadAttribute
DimheightAsDouble
DimmodeAsLong
DimpromptAsString
DiminsertionPoint(0To2)AsDouble
DimtagAsString
DimvalueAsString
height=1
mode=acAttributeModeVerify
prompt="NewPrompt"
insertionPoint(0)=5
insertionPoint(1)=5
insertionPoint(2)=0
tag="NewTag"
value="NewValue"
SetattributeObj=blockObj.AddAttribute(height,mode,_
prompt,insertionPoint,tag,value)
'Inserttheblock,creatingablockreference
'andanattributereference
DimblockRefObjAsAcadBlockReference
insertionPnt(0)=2
insertionPnt(1)=2
insertionPnt(2)=0
SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_
(insertionPnt,"BlockWithAttribute",1#,1#,1#,0)
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndeatributos>
Edicióndedefinicionesdeatributos
PuedeutilizarlaspropiedadesymétodosdelobjetoAttributeparaeditarelatributo.Algunasdelaspropiedadesdeunatributoincluyen:
Alignment
Determinalaalineaciónhorizontalyverticaldelatributo.
Backward
Especificaladireccióndeltextodelatributo.
FieldLength
Especificalalongituddecampodelatributo.
Height
Especificalaalturadelatributo
InsertionPoint
Especificaelpuntodeinsercióndelatributo.
Mode
Especificaelmododelatributo.
PromptString
Especificalacadenademensajedelatributo.
Rotation
Especificalarotacióndelatributo
ScaleFactor
Especificaelfactordeescaladelatributo
TagString
Especificalacadenadelidentificadordelatributo.
Acontinuaciónseincluyenalgunosmétodosquepuedenutilizarseparamodificaratributos:
ArrayPolar
Creaunamatrizpolar
ArrayRectangular
Creaunamatrizrectangular
Copy
Copiaelatributo
Erase
Borraelatributo
Mirror
Reflejaelatributo.
Move
Desplazaelatributo
Rotate
Rotaelatributo
ScaleEntity
Asignaunaescalaalatributo
Paravolveracrearunadefinicióndeatributo
Esteejemplocreaunbloqueyleañadeunatributo.Despuésseinsertaelbloqueeneldibujo.Porúltimo,seactualizaelatributodetextoparaquesemuestrereflejadoalaizquierda.
SubCh10_RedefiningAnAttribute()
'Definetheblock
DimblockObjAsAcadBlock
DiminsertionPnt(0To2)AsDouble
insertionPnt(0)=0
insertionPnt(1)=0
insertionPnt(2)=0
SetblockObj=ThisDrawing.Blocks.Add_
(insertionPnt,"BlockWithAttribute")
'Addanattributetotheblock
DimattributeObjAsAcadAttribute
DimheightAsDouble
DimmodeAsLong
DimpromptAsString
DiminsertionPoint(0To2)AsDouble
DimtagAsString
DimvalueAsString
height=1
mode=acAttributeModeVerify
prompt="NewPrompt"
insertionPoint(0)=5
insertionPoint(1)=5
insertionPoint(2)=0
tag="NewTag"
value="NewValue"
SetattributeObj=blockObj.AddAttribute(height,mode,_
prompt,insertionPoint,tag,value)
'Inserttheblock,creatingablockreference
'andanattributereference
DimblockRefObjAsAcadBlockReference
insertionPnt(0)=2
insertionPnt(1)=2
insertionPnt(2)=0
SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_
(insertionPnt,"BlockWithAttribute",1#,1#,1#,0)
'Redefinetheattributetexttodisplaybackwards.
attributeObj.Backward=True
attributeObj.Update
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndebloquesyatributos>Utilizacióndeatributos>
Extraccióndelainformacióndeatributos
PuedeextraerinformacióndelosatributosdeundibujomediantelosmétodosGetAttributesyGetConstantAttributes.GetAttributesdevuelveunamatrizdetodaslasreferenciasaatributosenlazadasaunbloque,juntoconsusvaloresactuales.GetConstantAttributesdevuelveunamatrizdelosatributosconstantesenlazadosconelbloqueolareferenciaexterna.Losatributosquedevuelveestemétodosondefinicionesdeatributosconstantes,nodereferenciasaatributos.
Paraextraerinformacióndeatributosnoesprecisoutilizararchivosdeplantillanicreararchivosdeinformacióndeatributos.PuedeexaminarlainformacióndelosatributossencillamenteiterandoenlamatrizdereferenciasdeatributoconlaspropiedadesTagStringyTextStringdelareferencia.
LapropiedadTagStringrepresentaelidentificadorindividualdelareferenciadeatributo.LapropiedadTextStringcontieneelvalordelareferenciadeatributo.
Paraobtenermásinformaciónacercadelaextraccióndeinformacióndeatributos,véase“Extraccióndedatosdeatributosdebloque“enelManualdelusuario.
Obtencióndeinformacióndereferenciadeatributos
Esteejemplocreaunbloqueyleañadeunatributo.Despuésseinsertaelbloqueeneldibujo.Seobtienenlosdatosdeatributosysemuestranenuncuadrodemensaje.Despuésseactualizanparalareferenciadebloqueydenuevoseobtienenysemuestranenuncuadrodemensaje.
SubCh10_GettingAttributes()
'Createtheblock
DimblockObjAsAcadBlock
DiminsertionPnt(0To2)AsDouble
insertionPnt(0)=0
insertionPnt(1)=0
insertionPnt(2)=0
SetblockObj=ThisDrawing.Blocks.Add_
(insertionPnt,"TESTBLOCK")
'Definetheattributedefinition
DimattributeObjAsAcadAttribute
DimheightAsDouble
DimmodeAsLong
DimpromptAsString
DiminsertionPoint(0To2)AsDouble
DimtagAsString
DimvalueAsString
height=1#
mode=acAttributeModeVerify
prompt="AttributePrompt"
insertionPoint(0)=5
insertionPoint(1)=5
insertionPoint(2)=0
tag="AttributeTag"
value="AttributeValue"
'Createtheattributedefinitionobjectontheblock
SetattributeObj=blockObj.AddAttribute_
(height,mode,prompt,_
insertionPoint,tag,value)
'Inserttheblock
DimblockRefObjAsAcadBlockReference
insertionPnt(0)=2
insertionPnt(1)=2
insertionPnt(2)=0
SetblockRefObj=ThisDrawing.ModelSpace.InsertBlock_
(insertionPnt,"TESTBLOCK",1,1,1,0)
ZoomAll
'Gettheattributesfortheblockreference
DimvarAttributesAsVariant
varAttributes=blockRefObj.GetAttributes
'Movetheattributetagsandvaluesintoa
'stringtobedisplayedinaMsgbox
DimstrAttributesAsString
strAttributes=""
DimIAsInteger
ForI=LBound(varAttributes)ToUBound(varAttributes)
strAttributes=strAttributes+"Tag:"+_
varAttributes(I).TagString+vbCrLf+_
"Value:"+varAttributes(I).textString
Next
MsgBox"TheattributesforblockReference"+_
blockRefObj.Name&"are:"&vbCrLf_
&strAttributes
'Changethevalueoftheattribute
'Note:ThereisnoSetAttributes.Onceyouhavethe
'variantarray,youhavetheobjects.
'Changingthemchangestheobjectsinthedrawing.
varAttributes(0).textString="NEWVALUE!"
'Gettheattributesagain
DimnewvarAttributesAsVariant
newvarAttributes=blockRefObj.GetAttributes
'Again,displaythetagsandvalues
strAttributes=""
ForI=LBound(varAttributes)ToUBound(varAttributes)
strAttributes=strAttributes+"Tag:"+_
newvarAttributes(I).TagString+vbCrLf+_
"Value:"+newvarAttributes(I).textString
Next
MsgBox"TheattributesforblockReference"&_
blockRefObj.Name&"are:"&vbCrLf_
&strAttributes
EndSub
¿Comentarios?
<$nopage>refx.
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>
Utilizacióndereferenciasexternas
Lasreferenciasexternas(refX)vinculanotrodibujoconelactual.Cuandoseinsertaundibujocomobloque,elbloqueseguardacontodalageometríaasociadaenlabasededatosdeldibujoactual.Noseactualizasisemodificaeldibujooriginal.Sinembargo,alinsertarundibujocomounareferenciaexterna,ésteseactualizaalmodificareldibujooriginal.Portanto,losdibujosquecontienenreferenciasexternasreflejansiempreloscambiosmásrecientesefectuadosenlosarchivosreferidosdesdeelexterior.
Aligualqueunareferenciaabloque,unareferenciacruzadasemuestraeneldibujoactualcomounúnicoobjeto.Sinembargo,apenasaumentaeltamañodelarchivodeldibujoactualynopuededescomponerse.Comoenlosbloques,lasreferenciasexternasasociadasaldibujopuedenanidarse.
Paraobtenermásinformaciónacercadelasreferenciasexternas,véase“Enlace,actualizaciónyunióndereferenciasexternas“enelManualdelusuario.
ActualizacióndereferenciasexternasEnlacedereferenciasexternasDesenlacedereferenciasexternasRecargadereferenciasexternasDescargadereferenciasexternasUnióndereferenciasexternasDelimitacióndebloquesyreferenciasexternasSolicituddecargayrendimientodelasreferenciasexternas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>
Actualizacióndereferenciasexternas
Cuandoseabreoimprimeundibujo,AutoCADcargalasreferenciasexternasdeformaqueeldibujoreferidosereflejeenelestadomásreciente.Unavezefectuadaslasmodificacioneseneldibujoreferidoexternamenteyguardadoelarchivo,otrosusuariospodránaccederinmediatamentealasmodificacionescontansólovolveracargarlareferenciaexterna.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>
Enlacedereferenciasexternas
Alenlazarunareferenciaexterna,seasociaundibujo(elarchivodereferenciaolareferenciaexterna)coneldibujoactual.Cuandoundibujohacealusiónaunareferenciaexterna,AutoCADsóloenlazaladefinicióndelaRefXaldibujo,adiferenciadelosbloquesnormales,enlosqueseguardaladefiniciónyelcontenidodelbloqueconeldibujoactual.AutoCADleeeldibujodereferenciaparadeterminarloquedebemostrarseeneldibujoactual.Sielarchivodereferencianoexisteoestádañado,susdatosnosemuestraneneldibujoactual.Cadavezqueseabreundibujo,AutoCADcargatodoslosobjetosgráficosynográficos(comocapas,tiposdelíneayestilosdetexto)desdelosarchivosdereferencia.SiVISRETAINestáactivada,AutoCADguardatodalainformacióndecapadependientedelareferenciaexternaquesehayaactualizadoeneldibujoactual.
Lasreferenciasexternaspuedenenlazarsetantasvecescomosedeseeycadaunaenunaposición,conunaescalayunánguloderotacióndiferentes.Tambiénpuedencontrolarselascapasdependientesylaspropiedadesdetipodelíneadefinidasenlareferenciaexterna.
Paraenlazarunareferenciaexterna,utiliceelmétodoAttachExternalReference.Estemétodorequierelarutayelnombredearchivodeldibujoalquesevaahacerreferencia,elnombredelareferenciaexternaquesevaautilizareneldibujoactual,elpuntodeinserción,laescalaylainformaciónderotacióndelareferenciaexterna.ElmétodoAttachExternalReferencedevuelveelobjetoExternalReferencereciéncreado.
Paraobtenermásinformaciónsobreelenlacedereferenciasexternas,véase“Enlacedereferenciasexternas”enelManualdelusuario.
Enlacedeunareferenciaexternaaundibujo
Esteejemplomuestratodoslosbloquesdeldibujoactualantesydespuésdeañadirunareferenciaexterna.Seutilizaelarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.
SubCh10_AttachingExternalReference()
OnErrorGoToERRORHANDLER
DimInsertPoint(0To2)AsDouble
DiminsertedBlockAsAcadExternalReference
DimtempBlockAsAcadBlock
DimmsgAsString,PathNameAsString
'Defineexternalreferencetobeinserted
InsertPoint(0)=1
InsertPoint(1)=1
InsertPoint(2)=0
PathName="C:/ProgramFiles/AutoCAD2008/sample/3DHouse.dwg"
'DisplaycurrentBlockinformationforthisdrawing
GoSubListBlocks
'Addtheexternalreferencetothedrawing
SetinsertedBlock=ThisDrawing.ModelSpace._
AttachExternalReference(PathName,"XREF_IMAGE",_
InsertPoint,1,1,1,0,False)
ZoomAll
'DisplaynewBlockinformationforthisdrawing
GoSubListBlocks
ExitSub
ListBlocks:
msg=vbCrLf'Resetmessage
ForEachtempBlockInThisDrawing.Blocks
msg=msg&tempBlock.Name&vbCrLf
Next
MsgBox"Thecurrentblocksinthisdrawingare:"&msg
Return
ERRORHANDLER:
MsgBoxErr.Description
EndSub
Superposicióndereferenciasexternas
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>Enlacedereferenciasexternas>
Superposicióndereferenciasexternas
Superponeresparecidoaenlazar,exceptocuandoseenlazaosesuperponeundibujo.Cualquierotrasuperposiciónqueestéanidadaseignoray,porlotanto,nosevisualiza.Enotraspalabras,lassuperposicionesanidadasnosecargan.
Parasuperponerunareferenciaexterna,asigneelvalorTRUEalparámetroOverlaydelmétodoAttachExternalReference.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>
Desenlacedereferenciasexternas
Puededesenlazardefinicionesdereferenciasexternasparasuprimirlasreferenciastotalmentedeldibujo.Tambiénpuedeborrarlasreferenciasexternasporseparado.Aldesenlazarunadefinicióndereferenciaexternaseeliminantodoslossímbolosdependientesasociadosaella.Siseborrantodaslascopiasdeunareferenciaexternaeneldibujo,AutoCADeliminaladefinicióndelareferenciaexternacuandosevuelveaabrireldibujo.
Paradesenlazarunareferenciaexterna,utiliceelmétodoDetach.Lasreferenciasexternasanidadasnosepuedendesenlazar.
Desenlacedeunadefinicióndereferenciaexterna
Esteejemploenlazaunareferenciaexternaydespuésladesenlaza.Seutilizaelarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.
SubCh10_DetachingExternalReference()
OnErrorGoToERRORHANDLER
'Defineexternalreferencetobeinserted
DimxrefHomeAsAcadBlock
DimxrefInsertedAsAcadExternalReference
DiminsertionPnt(0To2)AsDouble
DimPathNameAsString
insertionPnt(0)=1
insertionPnt(1)=1
insertionPnt(2)=0
PathName="c:/AutoCAD2008/sample/3DHouse.dwg"
'Addtheexternalreference
SetxrefInserted=ThisDrawing.ModelSpace._
AttachExternalReference(PathName,"XREF_IMAGE",_
insertionPnt,1,1,1,0,False)
ZoomAll
MsgBox"Theexternalreferenceisattached."
'Detachtheexternalreferencedefinition
DimnameAsString
name=xrefInserted.name
ThisDrawing.Blocks.Item(name).Detach
MsgBox"Theexternalreferenceisdetached."
ExitSub
ERRORHANDLER:
MsgBoxErr.Description
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>
Recargadereferenciasexternas
Sialgúnusuariomodificaundibujoreferidoexternamentemientrassetrabajaeneldibujoalqueestáenlazadalareferenciaexterna,puedeactualizareldibujoquecontienelareferenciaexternaconelmétodoReload.Alvolveracargarlo,eldibujodereferenciaexternaseleccionadoseactualizaeneldibujoreceptor.Además,sihadescargadounareferenciaexterna,puedecargardenuevoeldibujoreferidoexternamenteencualquiermomento.
Recargadeunadefinicióndereferenciaexterna
Esteejemploenlazaunareferenciaexternaydespuéslavuelveacargar.Seutilizaelarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.
SubCh10_ReloadingExternalReference()
OnErrorGoToERRORHANDLER
'Defineexternalreferencetobeinserted
DimxrefHomeAsAcadBlock
DimxrefInsertedAsAcadExternalReference
DiminsertionPnt(0To2)AsDouble
DimPathNameAsString
insertionPnt(0)=1
insertionPnt(1)=1
insertionPnt(2)=0
PathName="c:/AutoCAD2008/sample/3DHouse.dwg"
'Addtheexternalreferencetotheblock
SetxrefInserted=ThisDrawing.ModelSpace._
AttachExternalReference(PathName,"XREF_IMAGE",_
insertionPnt,1,1,1,0,False)
ZoomAll
MsgBox"Theexternalreferenceisattached."
'Reloadtheexternalreferencedefinition
ThisDrawing.Blocks.Item(xrefInserted.name).Reload
MsgBox"Theexternalreferenceisreloaded."
ExitSub
ERRORHANDLER:
MsgBoxErr.Description
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>
Descargadereferenciasexternas
Paradescargarunareferenciaexterna,utiliceelmétodoUnload.Cuandosedescargaunarchivodereferenciaquenoutilizaeldibujoactual,elrendimientodeAutoCADaumenta,yaquenotienequeleernimostrargeometríainnecesarianiinformacióndetablasdesímbolos.Lageometríadelasreferenciasexternasydelasanidadas,silashay,nosemuestraeneldibujoactivomientrasnosevuelvanacargar.
Descargadeunadefinicióndereferenciaexterna
Esteejemploenlazaunareferenciaexternaydespuésladescarga.Seutilizaelarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.
SubCh10_UnloadingExternalReference()
OnErrorGoToERRORHANDLER
'Defineexternalreferencetobeinserted
DimxrefHomeAsAcadBlock
DimxrefInsertedAsAcadExternalReference
DiminsertionPnt(0To2)AsDouble
DimPathNameAsString
insertionPnt(0)=1
insertionPnt(1)=1
insertionPnt(2)=0
PathName="c:/AutoCAD2008/sample/3DHouse.dwg"
'Addtheexternalreference
SetxrefInserted=ThisDrawing.ModelSpace._
AttachExternalReference(PathName,"XREF_IMAGE",_
insertionPnt,1,1,1,0,False)
ZoomAll
MsgBox"Theexternalreferenceisattached."
'Unloadtheexternalreferencedefinition
ThisDrawing.Blocks.Item(xrefInserted.name).Unload
MsgBox"Theexternalreferenceisunloaded."
ExitSub
ERRORHANDLER:
MsgBoxErr.Description
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>
Unióndereferenciasexternas
LaunióndeunareferenciaexternaconundibujomedianteelmétodoBindhacequelareferenciaformepartepermanentedeldibujoydejedeconsiderarseunarchivodereferenciaexterna.Lainformaciónreferidaexternamenteseconvierteenunbloque.Alactualizareldibujoreferidoexternamente,noseactualizalareferenciaexternaunida.Esteprocesounedeformacompletalabasededatosdeldibujo,incluidostodossussímbolosdependientes.
Lossímbolosdependientessonobjetosguardados,comoporejemplobloques,estilosdecotas,capas,tiposdelíneayestilosdetexto.Alunirlareferenciaexternasepuedenutilizarlosobjetosconnombreeneldibujoactual.
ElmétodoBindsólorequierelaentradadeunparámetro:bPrefixName.SiseasignaabPrefixNameelvalorTRUE,losnombresdesímbolodeldibujodelareferenciaexternaapareceneneldibujoactualconelprefijo<nombredebloque>$x$,dondexesunnúmeroenteroqueaumentaautomáticamenteparaevitarquesereemplacenlasdefinicionesdebloqueexistentes.SiseasignaalparámetrobPrefixNameelvalorFALSE,losnombresdesímbolodeldibujodelareferenciaexternasefusionanconeldibujoactualsinelprefijo.Sihaynombresduplicados,AutoCADutilizalossímbolosdefinidosconanterioridadeneldibujo.Sinoestásegurodesieldibujocontienenombresdesímbolosduplicados,esrecomendablequeasignealprefijobPrefixNameelvalorTRUE.
Paraobtenermásinformaciónacercadelaasignacióndereferenciasexternas,véase“Archivodedibujosquecontienenreferenciasexternas(unión)“enelManualdelusuario.
Unióndeunadefinicióndereferenciaexterna
Esteejemploenlazaunareferenciaexternaydespuéslaunealdibujo.Seutiliza
elarchivo3DHouse.dwgdeldirectoriodeejemplos.Sinotieneestaimagenosiestásituadaenundirectoriodiferente,escribaunarutayunnombredearchivoválidosparalavariablePathName.
SubCh10_BindingExternalReference()
OnErrorGoToERRORHANDLER
'Defineexternalreferencetobeinserted
DimxrefHomeAsAcadBlock
DimxrefInsertedAsAcadExternalReference
DiminsertionPnt(0To2)AsDouble
DimPathNameAsString
insertionPnt(0)=1
insertionPnt(1)=1
insertionPnt(2)=0
PathName="c:/AutoCAD2008/sample/3DHouse.dwg"
'Addtheexternalreference
SetxrefInserted=ThisDrawing.ModelSpace._
AttachExternalReference(PathName,"XREF_IMAGE",_
insertionPnt,1,1,1,0,False)
ZoomAll
MsgBox"Theexternalreferenceisattached."
'Bindtheexternalreferencedefinition
ThisDrawing.Blocks.Item(xrefInserted.name).BindFalse
MsgBox"Theexternalreferenceisbound."
ExitSub
ERRORHANDLER:
MsgBoxErr.Description
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>
Delimitacióndebloquesyreferenciasexternas
ActiveXAutomationnodisponedeningúnmétodoparadelimitarcontornosdebloquesyreferenciasexternas.UtiliceelcomandoXCLIPdeAutoCADoenvíeelcomandoXCLIPaAutoCADutilizandoelmétodoSendCommand.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>Utilizacióndereferenciasexternas>
Solicituddecargayrendimientodelasreferenciasexternas
Medianteunacombinacióndesolicituddecargayusodeíndicesparaguardarlosdibujos,esposibleaumentarelrendimientodelosdibujosconreferenciasexternas.LasolicituddecargafuncionajuntoconlasvariablesdesistemaXLOADCTLeINDEXCTL.Siseactivalasolicituddecargaysehanguardadoíndicesenlosdibujosreferidos,AutoCADcargaenmemoriasólolosdatosdeldibujoreferidoqueseanecesariopararegenerareldibujoactual.Esdecir,loselementosdereferenciasepuedenleer“previasolicitud”.
Parapoderutilizaralmáximolasventajasdelasolicituddecarga,anteshayqueguardarlosdibujosreferidosconíndicesespacialesydecapa.Lasmejorasenelrendimientoqueseproducenconlassolicitudesdecargasonmásevidentescuando:
Serecortaunareferenciaexternaparamostrarunapequeñapartedelamismayseguardauníndiceespacialeneldibujoreferidoexternamente.
Seinutilizanvariascapasdelareferenciaexternayeldibujoreferidoexternamenteseguardaconuníndicedecapa.
Paraactivarlasolicituddecarga,utiliceelmétodoXRefDemandLoad.SidecideactivarlacargamediantesolicitudconlaopciónacDemandLoadEnabledWithCopy,AutoCADcreaunacopiatemporaldelarchivoreferidoexternamenteycargamediantesolicitudelarchivotemporal.Deestemodo,puedecargarporsolicitudlareferenciaexternaalavezquepermitequeotrosusuariosmodifiqueneldibujodereferenciaoriginal.Cuandodesactivelasolicituddecarga,AutoCADcargaráeldibujodereferenciacompletoindependientementedelavisibilidaddelascapasodelapresenciadedelimitaciones.
Paraactivarlosíndicesespacialesydecapa,establezcalavariabledesistema
INDEXCTLmedianteelmétodoSetVariable.LosparámetrossiguientesseaplicanalavariabledesistemaINDEXCTL:
0=nosehancreadoíndices.
1=sehacreadoelíndicedecapas.
2=sehacreadoelíndiceespacial.
3=sehancreadoelíndiceespacialyeldecapas.
Pordefecto,INDEXCTLvale0cuandosecreaundibujonuevodeAutoCAD.
Paraobtenermásinformaciónacercadelasolicituddecargayreferenciasexternas,véase“Incrementodelrendimientoconreferenciasexternasdegrantamaño”enelManualdelusuario.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>Técnicasavanzadasdedibujoyorganización>
Asignaciónyrecuperacióndedatosextendidos
Puedeutilizardatosextendidos(datoseX)comounmedioparaenlazarinformaciónconlosobjetosdeundibujo.
Asignacióndedatosextendidosaunconjuntodeselección
Enesteejemplo,sepidealusuarioquedesigneobjetosdeldibujo.Losobjetosdesignadosseintroducenenunconjuntodeselecciónylosdatosextendidosespecificadosseenlazancontodoslosobjetosdedichoconjunto
SubCh10_AttachXDataToSelectionSetObjects()
'Createtheselectionset
DimssetAsObject
Setsset=ThisDrawing.SelectionSets.Add("SS1")
'Prompttheusertoselectobjects
sset.SelectOnScreen
'Definethexdata
DimappNameAsString,xdataStrAsString
appName="MY_APP"
xdataStr="Thisissomexdata"
DimxdataType(0To1)AsInteger
Dimxdata(0To1)AsVariant
'Definethevaluesforeacharray
'1001indicatestheappName
xdataType(0)=1001
xdata(0)=appName
'1000indicatesastringvalue
xdataType(1)=1000
xdata(1)=xdataStr
'Loopthroughallentitiesintheselection
'setandassignthexdatatoeachentity
DimentAsObject
ForEachentInsset
ent.SetXDataxdataType,xdata
Nextent
EndSub
Visualizacióndelosdatosextendidosdetodoslosobjetosdeunconjuntodeselección
Esteejemplomuestralosdatosextendidosenlazadosenelejemploanterior.Sienlazadatosextendidosquenosoncadenas(tipo1000),necesitarácorregirestecódigo
SubCh10_ViewXData()
'Findtheselectioncreatedinpreviousexample
DimssetAsObject
Setsset=ThisDrawing.SelectionSets.Item("SS1")
'Definethexdatavariablestoholdxdatainformation
DimxdataTypeAsVariant
DimxdataAsVariant
DimxdAsVariant
'Defineindexcounter
DimxdiAsInteger
xdi=0
'Loopthroughtheobjectsintheselectionset
'andretrievethexdatafortheobject
DimmsgstrAsString
DimappNameAsString
DimentAsAcadEntity
appName="MY_APP"
ForEachentInsset
msgstr=""
xdi=0
'RetrievetheappNamexdatatypeandvalue
ent.GetXDataappName,xdataType,xdata
'IfthexdataTypevariableisnotinitialized,there
'wasnoappNamexdatatoretrieveforthatentity
IfVarType(xdataType)<>vbEmptyThen
ForEachxdInxdata
msgstr=msgstr&vbCrLf&xdataType(xdi)_
&":"&xd
xdi=xdi+1
Nextxd
EndIf
'IfthemsgstrvariableisNULL,therewasnoxdata
Ifmsgstr=""Thenmsgstr=vbCrLf&"NONE"
MsgBoxappName&"xdataon"&ent.ObjectName&_
":"&vbCrLf&msgstr
Nextent
EndSub
¿Comentarios?
<$nopage>controlesdecuadrosdediálogo.<$nopage>controlesdeformularios.
ManualdeldesarrolladordeActiveXyVBA>
DesarrollodeaplicacionesconVBA
MuchastareasdeprogramaciónimplicanalgomásquetrabajarconelmodelodeobjetosActiveXdeAutoCAD.Estecapítuloproporcionaunabreveintroducciónalacreacióndecuadrosdediálogo,almanejodeerrores,elcontroldelfocodelaventanayladistribucióndelaaplicaciónaterceros.
RecuerdequeladocumentacióndeMicrosoftparaVBAcontienemásinformaciónsobreestostemas.
AlgunaterminologíadeVBAFormulariosdeVBAGestióndeerroresCodificacióndemódulosdecódigodeVBAEjecucióndemacrosdeVBAdesdeunabarradeherramientasounmenúCargaautomáticadeunproyectoVBAEjecuciónautomáticadeunamacrodeVBAAperturaautomáticadelIDEdeVBAalcargarunproyectoUtilizacióndeunestadodecerodocumentosDistribucióndeaplicacionesMigraciónde64bits
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
AlgunaterminologíadeVBA
EnestecapítuloseamplíalainformaciónsobreVBA.LossiguientestérminosleayudaránaconocerytrabajarmejorenelentornoVBA.
Proyecto
Conjuntodeformulariosymódulosqueseagrupanenunsoloarchivo.
Módulo
Grupodesubrutinasyfunciones(posiblementerelacionadas).
Macro
Subrutinaofunciónpública.Lasmacrosestánadisposicióndelusuariocomocomponentesejecutablesdelproyectopersonal.
Cuadrodediálogo
Medioutilizadoparamostraruobtenerdatosdurantelaejecucióndeaplicaciones.
Forma
Contenedordeloscontrolesdelcuadrodediálogo.
¿Comentarios?
<$nopage>controlesdecuadrosdediálogo.<$nopage>controlesdeformularios.
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
FormulariosdeVBA
Losformulariossonlaspiezasbásicasapartirdelascualessecreanloscuadrosdediálogoespecialesdecadaaplicación.Atravésdelosformulariospersonalizadosseproporcionainformaciónalosusuarios,serecogendatosdelosusuariosyseotorgacontrolaéstossobrelaactividaddelaaplicación.
Losformulariossoncomounlienzo:alprincipioestánenblanco.Pararellenarellienzoseutilizaunapaleta.Enestecaso,lapaletaeselcuadrodeherramientasdecontrol.Eldesarrollador,comoelartista,colocaenelformularioloscontrolesseleccionadosenelcuadrodeherramientas.Sepuedenañadirtantoscontrolescomosedesee.Encualquiermomentosepuedenajustareltamañoylaspropiedadesdeloscontrolesydelpropioformulario.Porúltimo,seañadealoscontroleselcódigoquelosdotadefunciones.
AunqueVisualBasic6admitevariostiposdeformularios,VBAsóloadmitelosdeltipoUserForm.EstosignificaquealgunosformularioscreadosyexportadosenVisualBasic6nopuedenimportarseenVBA.
LosUserForms—oformularios,comosedenominanenestemanual—puedensermodalesosinmodo.LapropiedadShowModaldeunformulariodeterminasisondeunouotrotipo.Losformulariosmodalesquesepresentanenlaaplicaciónenusodebencerrarseparaquesepuedaefectuarcualquierotraacciónenlaaplicación.Paraobtenermásinformaciónacercadelosformulariosmodales,véaseFormulariosmodales.
Paracrearunnuevoformularioenelproyecto
1. AbralaventanaProyectoenelIDEdeVBAyseleccioneelproyectoalquedeseaañadirelformulario.
2. EnelmenúInsertar,elijaUserForm.Secreaunformulariovacíoyseañadealproyecto.
Paracrearunformulariosinmodoenelproyecto
1. AbralaventanaProyectoenelIDEdeVBAyseleccioneelproyectoalquedeseaañadirelformulario.
2. EnelmenúInsertar,elijaUserFormycambieaFalsolapropiedadShowModal.
3. AñadaAcFocusCtrl(AcFocusCtrl.dll)alcuadrodeherramientasyarrastreelcontrolalformulario.AcFocusCtrlmantieneelenfoqueenelformulariodurantelainteracciónconelusuario.ModosdediseñoydeejecuciónAdicióndecontrolesaunformularioPresentaciónyocultacióndeformulariosCargaydescargadeformulariosFormulariosmodales
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>
Modosdediseñoydeejecución
Losformulariossecreanenelmododediseño,enelqueesposiblehacerlosiguiente:
Añadircontroles
Cambiarlaspropiedades
Cambiarlaspropiedadesdeloscontroles
Añadircontrolesalmódulo
Enelmododediseñonohayinteracciónentreelusuario,lainterfazdeusuariodeAutoCAD®yelformulario.
Cuandoseejecutalaaplicación,elformularioseencuentraenmododeejecución.Enelmododeejecuciónnosepuedenrealizarajustesdirectamenteenelformulario.Noobstante,elformulariosemuestraenlainterfazdeusuariodeAutoCADyelusuariopuedeinteractuarconélconnormalidad.
¿Comentarios?
<$nopage>controlesdecuadrosdediálogo.<$nopage>controlesdeformularios.
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>
Adicióndecontrolesaunformulario
Añadircontrolesaunformularioesmuysencillo.Bastaconseleccionaruncontrolenelcuadrodeherramientasyarrastrarloalformulario.Alsoltarelratón,secolocaráenelformulariounacopiadelcontrolseleccionado.Después,sepuedecambiarsuposiciónysutamaño.Puedeañadirtantoscontrolescomodesee.
Ademásdelmétododearrastrarysoltarexistenmásformasdecolocarcontrolesenunformulario.
CambiodetamañoyposicióndeloscontrolesUtilizacióndecontrolesdeformatoModificacióndelaspropiedadesdeuncontrolAdicióndecódigoauncontrol
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>
Cambiodetamañoyposicióndeloscontroles
Paramoveruncontrol,bastaconseleccionarloyarrastrarlohastasunuevaposiciónenelformulario.
Paracambiareltamañodeuncontrol,hagaclicenélunavezparaseleccionarlo.Cuandouncontrolestáseleccionado,sumarcoesvisible.Paracambiareltamañodelcontrol,bastaconseleccionarunodelospinzamientosdetamaño(ahoravisibles)delmarcoyarrastrarlohastalanuevaposición.Alsoltarelpinzamiento,elcontrolcambiadetamañodeacuerdoconesaposición.Sepuedeseguirelmismoprocedimientoparacambiardetamañoelformulario.
Paramoverocambiardetamañoavarioscontrolesalavez,selecciónelosunoaunomientrasmantienepulsadalateclaMAYÚS.Seresaltarántodosloscontroles.Ahorapuededesplazarocambiareltamañodeloscontrolescomosisetrataradeungrupo.
Paracambiareltamañodeuncontrolmientrassecoloca
1. Seleccioneelcontrolenelcuadrodeherramientasdecontrol.
2. Enelformulario,pulse,arrastreysuelteelbotóndelratón.Elcontrolseleccionadoquedarácolocadoenelformulario.Eltamañovaríasegúnsearrastraelratón.
Paracolocarvariosejemplaresdelmismocontrol
1. Enelcuadrodeherramientasdecontrol,hagadobleclicenelcontrolquedeseecolocar.
2. Enelformulario,hagaclicenlaposicióndondedeseecolocarunacopiadelcontrol.Despláceseaotraposicióndelformularioyhagaclicdenuevo.Apareceráotracopiadelcontrol.Sepuedenañadirtantascopias
delcontrolcomosenecesiten.
3. Cuandoterminedetrabajarconelcontrol,regresealcuadrodeherramientasdecontrolyvuelvaahacerclicenelcontrolparaquedejedeestarseleccionado.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>
Utilizacióndecontrolesdeformato
VBAproporcionavarioscontrolesdeformatoqueayudanaajustarlapresentaciónfinaldelformulario.EstoscontrolespuedenhallarseenelmenúFormatodeIDEdeVBA.Permitenalinearcontrolesentresí,hacerquedosomáscontrolestenganelmismotamaño,cambiarladistanciaentreellosycentrarlosenelformulario.
Cuandoutiliceloscontrolesdeformato,recuerdequeesposibleseleccionarvariosalavezpormediodeMAYÚS.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>
Modificacióndelaspropiedadesdeuncontrol
Laspropiedadesdeterminandiversascaracterísticasdeloscontroles,comoeltamaño,laforma,elcolor,laetiquetaylosvalorespordefecto.SepuedemodificarlaspropiedadesdeuncontrolenelmododediseñoutilizandolaventanaPropiedades.
Paracambiarlaspropiedadesdeuncontrol
1. Enelformulario,seleccioneuncontrol.
2. PulseF4paraabrirlaventanaPropiedades,siaúnnoestáabierta.
3. EnlaventanaPropiedades,localicelapropiedadquedeseemodificaryseleccioneelvaloractualdelamisma.
4. Cambieelvalorporelqueestimeconvenienteparalapropiedad.
Tambiénpuedecambiarlapropiedaddeuncontroldurantelaejecuciónsiescribecódigoparaaccederalamisma.Paraobtenerinformaciónacercadelcambiodepropiedadesdeuncontrolentiempodeejecución,véaseladocumentacióndeMicrosoft.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>Adicióndecontrolesaunformulario>
Adicióndecódigoauncontrol
Ahoraqueyatieneunformularioconelaspectoadecuado,puedeañadircódigoaloscontroles.Paraabrirlaventanadecódigosdeuncontrol,hagadobleclicenélenlaventanaUserForm.SeabrelaventanaCódigo,conunasubrutinacreadaparaesecontrolysuprocedimientodeeventopredeterminado.
Puedeañadircódigoalprocedimientodeeventopredeterminadooelegirunprocedimientodistintodelalistadesplegabledeprocedimientos,queseencuentraenlaesquinasuperiorderechadelaventanaCódigo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>
Presentaciónyocultacióndeformularios
Enestemomentoyatieneunformularioconelaspectoadecuadoyconcódigodetrásdetodossuscontroles.Elúltimopasoesconseguirqueelformulariosemuestrealusuariodurantelaejecución.LapresentaciónenpantalladelosformulariosserealizaatravésdelmétodoShowdeVBA.PuedellamaralmétodoShowdesdecualquiermódulodecódigodelaaplicación.
Elformulariocreadoesmodalpordefecto,loqueimpidealusuariointeractuardirectamenteconAutoCADmientraselformularioestéenpantalla.Porejemplo,elusuarionopodráseleccionarunpuntouobjetodeldibujomientrasestéabiertoelformulario.ParaqueelusuariopuedaaccederaldibujodeAutoCAD,deberáutilizarelmétodoHidedeVBA.ElmétodoHideocultaelformularioyconcedealusuariounaccesolimitadoaAutoCAD.CuandoseutilizaelmétodoHide,esimportanterecordarqueelformularionosedescargadelamemoria;conservarátodoslosvaloresactualesmientrasestéoculto.
LasllamadasalmétodoHideserealizanigualquelasdelmétodoShow.
Presentacióndeunformulario
Enesteejemplosemuestraelformulariollamado“UserForm1”:
PublicSubMyApplication()
UserForm1.Show
EndSub
Ahorasepuedellamaralasubrutina(quehacequesepresenteelformulario)comomacro,desdeelcomandoVBARUNodesdeunmenúdeAutoCAD.
Ocultacióndeunformulario
Enesteejemploseocultaelformulariollamado“UserForm1”:
PublicSubMyAppHide()
UserForm1.Hide
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>
Cargaydescargadeformularios
Esposiblequeenalgunasocasionesdeseecargarunformularioenmemoriadurantelaejecución,peronomostrarlo.Estopuedeserútilparaconseguiruncontrolmejorcuandotienelugarlacargaenlaaplicación,ocuándoelprogramanecesitaaccederalformularioperonohacefaltamostrárseloalusuario.
Paracargarunformulariosinmostrarloenpantalla,utiliceelmétodoLoaddeVBA.PosteriormentepodráutilizarelmétodoShowparahacerlovisibleenelmomentoadecuadodurantelaejecucióndelaaplicación.Recuerdequeelusuarionopodráinteractuarconelformulariomientrasnoestévisible.
SisellamaalmétodoShowyaúnnosehacargadoelformulario,secargaráautomáticamente.
Enalgunoscasosesposiblequedeseedescargarunformularioconcreto.Cuandosedescargaunformulario,éstedesaparecedelamemoria,yelsistemarecuperatodalamemoriaasociadaalmismo.Hastaqueelformulariosevuelveacargar,mediantelosmétodosLoadoShow,nielusuarionielprogramapuedenaccederalmismo.Podríaoptarpordescargarunformulariosisabequenoseutilizarámásenlaaplicaciónynecesitadejarlibrelamemoria.
ElmétodoHidenorealizaningunadescarga.Sifinalizalaejecucióndelaaplicaciónyelformularionosehadescargado,sedescargaráautomáticamente.EnlatablasiguientesecomparanlosmétodosShow,Hide,LoadyUnloaddeVBA:
MétodosShow,Hide,LoadyUnloaddeVBA:
Método Descripción
Show Presentaunformulario.Siaúnnosehacargado,el
formulariosecargaautomáticamente.
Hide Ocultaunformulario.Elformularionosedescargadelamemoria.
Cargar Cargaunformularioenmemoria,peronolomuestraenpantalla.
Unload Descargaunformulariodelamemoria.PuedeefectuarsedeformaexplícitadesdeelmétodoUnloadodeformaautomáticaalcerrarlaaplicación.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>FormulariosdeVBA>
Formulariosmodales
Cuandosedefineuncuadrodediálogocomo'modal'enVBAdeAutoCAD,elusuariodeberesponderalmismoantesdepodercontinuarutilizandolaaplicación.ElsiguientecódigonoseejecutarámientrasnosecierreelcuadrodediálogomodalconunodelosmétodosHideoUnload.Portanto,elprogramadordelaaplicacióndebeestudiarcuidadosamentedóndeycuándoesconvenienteutilizarcuadrosdediálogo.
Porejemplo,puedepresentarseuncuadrodediálogoquesolicitealusuariolaseleccióndeunobjetoeneldibujodeAutoCAD.ParaqueelusuariopuedadesignarelobjetoenlaventanadelaaplicacióndeAutoCAD,esprecisoocultarprimeroelformulariomedianteelmétodoHide.Unavezquesehaseleccionadoelobjeto,sepuedeutilizarelmétodoShowparavolverapresentarelformulario,contodossusdatos,ycontinuarconlaaplicación.
Nota Aunqueotrosformulariosdelaaplicaciónsedesactivencuandoseabreuncuadrodediálogomodal,noocurrelomismoconlasotrasaplicaciones.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
Gestióndeerrores
Lamayoríadelosentornosdedesarrolloproporcionanunsistemadetratamientodeerrorespordefecto.EnVByVBA,lareacciónpordefectoanteunerrorconsisteenmostrarunmensajedeerrorycerrarlaaplicación.Sibienestecomportamientoeseladecuadoenlasfasesdedesarrollo,noeselmásconvenienteparaelusuariofinal.Puedehabererroresquesedeseenignorar,yotrosquedebanproducirunarespuestaespecial.Enalgunasocasionespuedeseraconsejablesuprimirlapresentacióndelmensajedeerror,osimplemente,controlarelmensajequesepresentaalusuario.Además,laterminaciónautomáticadelasaplicacionesnotendránuncaunabuenaacogidaporpartedelusuariofinal.
Porlogeneral,lasrutinasdecontroldeerroressonnecesariascuandoserequierequeelusuariointroduzcaalgúndatoycuandosetrabajaconentradaysalidadearchivos.Recuerdeque,aunqueestésegurodequeelarchivonecesarioexisteyestádisponibleparasuproceso,puedendarseciertascondicionesimprevistasqueprovoquenerrores.
Nota LamayoríadeejemplosdecódigoqueseencuentranenladocumentacióndeAutoCADutilizanidentificacióndeerrores.Deestaformaelejemploesmenoscomplejoymáspreciso.Perocomoocurrecontodosloslenguajesdeprogramación,esimprescindibleunacorrectaidentificaciónysolucióndeloserroresparaquelasaplicacionesseanestables.
DefinicióndetiposdeerrordelasaplicacionesIdentificacióndeerroresdeejecuciónRespuestaaerroresidentificadosRespuestaaerroresdeentradadedatosdelusuariodeAutoCAD
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>
Definicióndetiposdeerrordelasaplicaciones
Existentrestiposdiferentesdeerroresquepodráencontrarensusaplicaciones:erroresdecompilación,erroresdeejecuciónyerroreslógicos.
Loserroresdecompilaciónseproducenalcrearlaaplicación.Ensumayoríasonerroresdesintaxis,problemasrelativosalalcancedelasvariablesyfallosdeescritura.EnVBA,estostiposdeerrorsedetectanenelentornodedesarrollo.Cuandoseintroduceunalíneadecódigoincorrecta,éstaseresaltayapareceunmensajedeerrorquedescribeelproblema.Loserroresqueseproducendurantelacompilacióndebencorregirseparaquelaaplicaciónsepuedaejecutar.
Loserroresdeejecuciónsonunpocomásdifícilesdedetectarycorregir.Seproducendurantelaejecucióndelcódigo,yamenudoincluyenlaentradadedatosporpartedelusuario.Porejemplo,silaaplicaciónsolicitaalusuarioqueintroduzcaelnombredeundibujoyelnombrequeescribenoexiste,seproduceunerrordetiempodeejecución.Paragestionarconeficacialoserroresdeejecuciónesnecesariopreverlosproblemasposiblesyescribirelcódigonecesariopararesolverestassituaciones.
Loserroreslógicossonlosquepresentanmayordificultaddedetecciónyderesolución.Unasituaciónenlaquenoexistenerroresdecompilaciónnideejecuciónyelresultadodelprogramasigasiendoincorrectopuedesersíntomadeunerrorlógico.Estoesloquelosprogramadoresconocencomo"bug",quepuedesermuyfácilomuydifícildeidentificar.
Paraobtenerinformaciónacercadelalocalizaciónycorreccióndeestostrestiposdeerror,véaseladocumentacióndelentornodedesarrollopropio.LoserroresespecíficosdeAutoCADseconsideranerroresdeejecución,yporlotantoeseltipodeerrorquesetrataconmásdetenimientoenestapublicación.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>
Identificacióndeerroresdeejecución
EnVByVBA,loserroresdeejecuciónseidentificanpormediodelainstrucciónOnError.Estainstrucciónponeliteralmenteunatrampaalsistemay,cuandoseproduceunerror,elprocesosedesvíahaciaelgestordeerroresconcretoquesehayaespecificado.Enestecasoseomitelagestióndeerroresestablecidapordefecto.
LainstrucciónOnErrortienetresmodalidades:
OnErrorResumeNext
OnErrorGoToLabel
OnErrorGoTo0
LainstrucciónOnErrorResumeNextseutilizacuandosedeseaignorarloserrores.Estainstrucciónidentificaelerror,yenvezdepresentarunmensajedeerrorycerrarelprograma,pasaalasiguientelíneadecódigoycontinúaconlaejecución.Porejemplo,supongaquedeseacrearunasubrutinaparaiterarenelespaciomodeloycambiarelcolordecadaentidad,perosabequeAutoCADarrojaráunerrorsiseintentaasignarcoloraunaentidadqueseencuentraenunacapabloqueada.Enlugardecerrarelprograma,bastaconquesesaltelaentidaddelacapabloqueadaycontinúeprocesandolasdemásentidades.Estoes,precisamente,loquelainstrucciónOnErrorResumeNextpermitehacer.
LainstrucciónOnErrorGoToLabelseutilizaparaescribirrutinasespecíficasdecontroldeerrores.Estainstrucciónidentificaelerror,yenvezdepresentarunmensajedeerrorycerrarelprograma,saltaaunpuntoconcretodelcódigo.Acontinuación,elcódigorespondealerrordelaformamásidóneaparalaaplicación.Porejemplo,elcódigoanteriorpodríaampliarseparaquesemuestreunmensajeconelidentificadordetodaslasentidadesdelacapa
bloqueada.
GestióndeerroresconlasecuenciaOnErrorResumeNext
Lasiguientesubrutinaiteraenelespaciomodeloycambiaarojoelcolordelasentidades.Intenteejecutarestasubrutinaenundibujoquetengaalgunasdesusentidadesenunacapabloqueada.Acontinuación,amplíeconexplicacioneslainstrucciónOnErrorResumeNextyvuelvaaejecutarlasubrutina.Observaráquelasubrutinaseinterrumpeenlaprimeraentidaddelacapabloqueada.
SubCh11_ColorEntities()
DimentryAsObject
OnErrorResumeNext
ForEachentryInThisDrawing.ModelSpace
entry.Color=acRed
Nextentry
EndSub
GestióndeerroresconlainstrucciónOnErrorGoTo
Lasiguientesubrutinaiteraenelespaciomodeloycambiaarojoelcolordelasentidades.Elgestordeerroresmuestra,porcadaentidaddelacapabloqueada,unmensajedeerrorjuntoconelidentificadordelaentidad.Intenteejecutarestasubrutinaenundibujoquetengaalgunasdesusentidadesenunacapabloqueada.Acontinuación,amplíeconexplicacioneslainstrucciónOnErrorResumeGoToMyErrorHandlingyvuelvaaejecutarlasubrutina.Observaráquelasubrutinaseinterrumpeenlaprimeraentidaddelacapabloqueada.
SubCh11_ColorEntities2()
DimentryAsObject
OnErrorGoToMyErrorHandler
ForEachentryInThisDrawing.ModelSpace
entry.Color=acRed
Nextentry
'Important!Exitthesubroutinebeforetheerrorhandler
ExitSub
MyErrorHandler:
Msgboxentry.EntityName+"isonalockedlayer."+_
"Thehandleis:"+entry.Handle
ResumeNext
EndSub
LainstrucciónOnErrorGoTo0cancelaelidentificadordelerroractual.LasinstruccionesOnErrorResumeNextyOnErrorGoToLabelsiguenactivashastaquefinalizalasubrutina,hastaquesedeclaraotrarutinadecontroldeerroresohastaquesecancelalarutinadecontroldeerroresconlainstrucciónOnErrorGoTo0.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>
Respuestaaerroresidentificados
Unavezidentificadoelerror,¿quéhacerconél?Larespuestadependedelanaturalezadelaaplicaciónydelerrormismo.
VByVBAproporcionaninformaciónsobreeltipodeerroridentificado,pormediodelobjetoErr.Esteobjetopresentavariaspropiedades:Number,Description,Source,Helpfile,HelpContextyLastDLLError.LaspropiedadesdelobjetoErrserellenanconlainformacióndelúltimoerrorqueseproduce.Laspropiedadesdenúmeroydescripciónsonlasmásimportantes.LapropiedadNumbercontieneelcódigodeerrorúnicoquetieneasociadoelerror,mientrasquelapropiedadDescriptionincluyeelmensajedeerrorquesepresentaría.
SepuedeutilizarelidentificadordelerrorparacompararlapropiedadNumberdelerrorconunvalorsupuestamenteesperado,yconocerlanaturalezadelerrorproducido.Unavezqueseconozcaeltipodeerror,sepuedenemprenderlasaccionesnecesariaspararesolverlo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Gestióndeerrores>
RespuestaaerroresdeentradadedatosdelusuariodeAutoCAD
Losmétodosquerequierenlaentradadedeterminadosdatosporpartedelusuarioincorporanciertacantidaddeidentificacióndeerrores.Sielusuariointentaintroducirdatosdistintosdelosespecificados,AutoCADrechazalaentradayvuelveapreguntar.ElusodelmétodoInitializeUserInputproporcionauncontroladicionaldelosdatosintroducidosporelusuario,perotambiénpuedeincluircondicionesadicionalesquesedebenverificarpormediodelaidentificacióndeerrores.Sideseaverunejemplodeidentificacióndeerroresrequeridaconciertostiposdedatosintroducidosporelusuario,consulteSolicituddedatosdeusuario
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
CodificacióndemódulosdecódigodeVBA
AunqueVBAnoadmitelacreacióndeejecutables,síofreceprotecciónporcontraseñaparalavisibilidaddelosformulariosdeproyectos,lasclasesylosmódulosenelniveldeproyectos.PuedeencontrarestafuncióndeprotecciónenelmenúdelIDEdeVBA.SeleccioneHerramientas PropiedadesdeproyectoProtección.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
EjecucióndemacrosdeVBAdesdeunabarradeherramientasounmenú
ParaejecutarunamacrodeVBAdesdeunabarradeherramientasounmenúdeAutoCAD,bastaconmodificarlapropiedadMacrodedichomenúobarradeherramientas.LapropiedadMacrodebetenerdefinidoIguala.
-VBARUNnombrearchivo.dvb!nombremódulo.nombremacro
dondenombrearchivoeselnombredelarchivodeproyecto,nombremóduloelnombredelmódulodondesehallalamacroquesedebeejecutarynombremacroelnombredelamacro.ElnombredelarchivosóloserequierecuandoelarchivonosecargaenlasesiónactualdeAutoCAD.Siseproporcionaelnombredelarchivo,éstesecarga.
Paraobtenermásinformaciónacercadelamodificacióndemenúsybarrasdeherramientas,véasePersonalizacióndebarrasdeherramientasymenús.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
CargaautomáticadeunproyectoVBA
ExistendosmanerasdecargarautomáticamenteunproyectodeVBA:
Cuandoestácargado,VBAbuscaeneldirectoriodeAutoCADunproyectollamadoacad.dvb.Estearchivosecargaautomáticamentecomoproyectopordefecto.
Exceptoelpredeterminado,acad.dvb,todoslosdemásproyectossepuedenutilizarcargándolosexpresamenteeneliniciopormediodelcomandoVBALOAD.LasiguientemuestradecódigoutilizaelarchivodeiniciodeAutoLISPparacargarVBAyunproyectodeVBAllamadomyproj.dvbcuandoseiniciaAutoCAD.AbraelBlocdenotasdeWindows(notepad.exe)ycreeelarchivoacad.lsp,oábralosiyaexiste,yescribaoañadaalfinallassiguienteslíneas:(defunS::STARTUP()
(command"_VBALOAD""myproj.dvb")
)
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
EjecuciónautomáticadeunamacrodeVBA
Esposibleejecutarautomáticamentecualquiermacrodelarchivoacad.dvb,siselellamaconlaversióndelíneadecomandodeVBARUNdesdeunafuncióndeiniciodeAutoCADcomoacad.lsp.Porejemplo,paraejecutardeformaautomáticaunamacrollamadadrawline,enprimerlugarguardelamacrodrawlineenelarchivoacad.dvb.Acontinuación,ejecutenotepad.exeycree(oañada)lassiguienteslíneasdeacad.lsp:
(defunS::STARTUP()
(command"_-vbarun""drawline")
)
SepuedeconseguirqueseejecuteunamacroalcargarVBAsiseleasignaelnombredemacroAcadStartup.Unamacrodelarchivoacad.dvbquesellameAcadStartupseejecutadeformaautomáticaalcargarseVBA.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
AperturaautomáticadelIDEdeVBAalcargarunproyecto
EnelcuadrodediálogoAbrirproyectoVBAexisteunaopciónquepermiteabrirautomáticamenteelentornodedesarrollointeractivo.ActivelacasilladeselecciónAbrirelEditordeVisualBasic,situadaenlaesquinainferiorizquierdadelcuadrodediálogo,yelIDEdeVBAseabriráautomáticamentealcargarunproyectoVBA.Estaopciónpermaneceráactivahastaqueladesactive.
Nota ParaaccederalcuadrodediálogoAbrirproyectoVBA,escribaVBALOADenlalíneadecomando.Seabriráelcuadrodediálogoypodráelegirelproyectoquedeseecargar.SinoveelcuadrodediálogoAbrirproyectoVBA,esprobablequeestosedebaaquelavariabledesistemaFILEDIAestédesactivada.Lavariabledesistemaactivaydesactivalapresentacióndeloscuadrosdediálogo.ParavolveraactivarFILEDIAasígneleelvalor1.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
Utilizacióndeunestadodecerodocumentos
UnestadodecerodocumentosenAutoCADesaquélenelquenoestáabiertoningúndibujo.DebentenerseencuentavariasconsideracionescuandosetrabajeenVBAenunestadodecerodocumentos:
ElobjetoThisDrawingnoestádefinidocuandoAutoCADseencuentraenunestadodecerodocumentos.SiseintentautilizarThisDrawing,seproduceunerror.
Losobjetosquedependendelosdocumentostampocoestándefinidosenunestadodecerodocumentos.EstosobjetossonaquellosqueestándebajodelobjetoDocumentenelmodelodeobjetosdeAutoCAD.Sepuedetrabajarconobjetosquenodependendedocumentos,comoApplicationoMenuBar.
AutoCADnotienelíneadecomandoenelestadodecerodocumentos.TodointentodeaccederalalíneadecomandodeAutoCADenunestadodecerodocumentosproduceunerror.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
Distribucióndeaplicaciones
LasaplicacionesVBApuedendistribuirsededosformas:
IncrustadasenunarchivodedibujodeAutoCAD
AlmacenadasenunarchivodeproyectoVBA
Debeelegirselaopcióndedistribuciónmásapropiadaparalaaplicaciónconcreta.Lasaplicacionesespecíficasdeldibujoactualyquenonecesitanaccederaotrosdibujossuelenincrustarseeneldibujo.Laincrustacióndelaaplicacióneneldibujogarantizaqueéstasecarguealabrireldibujoyqueelusuariolatengadisponiblemientraseldibujosemantengaabierto.
Lasaplicacionesquesecompartenentredistintosusuarios,queseactualizanconfrecuencia,querequierenabrirycerrarotrosdibujosoquenoseutilizanamenudo,suelesermásconvenienteguardarlasenunarchivodeproyectoVBA.Deestaforma,laaplicacióntieneunaubicacióncentralizadayseaseguraquetodosutilizansuúltimaversión.
SideseamásinformaciónsobrelosproyectosincrustadosylosarchivosdeproyectodeVBA,consulteDescripcióndelosproyectosVBAglobaleseincrustados.
DistribucióndeaplicacionesdeVisualBasic6
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Distribucióndeaplicaciones>
DistribucióndeaplicacionesdeVisualBasic6
LasaplicacionesdeVisualBasic6,asícomootrasaplicacionesexternasalproceso,nopuedenalmacenarseenlosdibujosdeAutoCAD.Estasaplicacionessecompilanenejecutablesindependientes(EXE).
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>
Migraciónde64bits
Microsoftnoproporcionaunaversiónde64bitsdeVBAparadesarrolladores;portantoseránecesariocambiarlasaplicacionesde32bitsquesedesarrollenparalasversionesdeAutoCADde64bits.En64bits,VBAseejecutacomocomponentefueradeproceso,alqueseaccedeatravésdeunacapade"conversión"de32a64bits.
NosegarantizaqueelcomportamientodeVBAenlaversiónde64bitsdeAutoCADseaidénticoaldeVBAcon32bitsdeAutoCAD.Porejemplo,sielIDEdeVBAestáactivoosisemuestraunaventanademodos,puedequehayaunpequeñoretrasocuandosevuelvaapintarunaventanadeAutoCAD.
Paraobtenermásinformación,consulteelAutoCADMigrationGuideCreacióndeinstanciasdeobjetosdeAutoCADenVBAGestióndeIDdeobjetosApéndicedemétodosde32bits
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Migraciónde64bits>
CreacióndeinstanciasdeobjetosdeAutoCADenVBA
Lossistemasoperativosde64bitspuedenejecutaraplicacionesde32y64bits,peronopuedenmezclarestostiposenunproceso.Porejemplo,noesposiblecargararchivosDLLde32bitsenunprocesode64bitsniviceversa.Todosloscomponentesejecutables(archivosEXEyDLL)quesecarganenunprocesodebencoincidireneltipobinariodelproceso.Loscomponentesenprocesodelasaplicacionesde64bitsdebencambiarseaprocesosde64bitssiemprequeseaposible.
Puedeproducirseunerroralintentarcrearunobjetonuevo.EltecladoNewdeVBintentarácargarlosarchivosDLLCOMdeAutoCADde64bits.PuestoqueVBAesunaaplicaciónde32bits,nopuedecargararchivosDLLde64bits.Porejemplo,uncódigodeltipo
DimcolorAsAcadAcCmColor
Setcolor=NewAcadAcCmColor
or
DimcolorAsNewAcadAcCmColor
color.SomeMethod()
necesitamodificarseocambiarsea
DimcolorAsAcadAcCmColor
Setcolor=AcadApplication.GetInterfaceObject(“Autocad.AcCmColor.17”).
ElproblemaanteriordebesolucionarsemedianteAcadApplication.GetInterfaceObject(“ProgIdOfAcAnyObject”)
paracualquierobjetoderivadodeIDispatch.NoseesperaquelasclasesderivadasdeIUnknown(porejemplo,AcSmSheetSet,AcSmSheetMgr,etc.)migrenaVBAde64bits.EsrecomendablecambiarestosprocesosaVB.Net.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Migraciónde64bits>
GestióndeIDdeobjetos
AliniciarAutoCAD2008de64bits,losIDdeobjetosserepresentanmedianteuntipodedatosdeenterosde64bits(_int64).SiseaccedeaestosvaloresenVBAde32bitsseproduciráunerrordecompilación.Comosolución,seutilizaunnuevoconjuntodenombresdemétodosconelsufijo"32"correspondientesalosmétodosanteriores(porejemploObjectID32(),OwnerID32()).EstosmétodosutilizaneltipodedatosLONGqueseasignademanerainternaaltipodedatosdeenterosde64bits.
Parasermásprecisos,unIDdeobjetode32bitssecreadeformainternaparacadaIDdeobjetonecesarioenVBA.EsteIDseasignaasuIDrealde64bitsdemaneraquesisedevuelveelIDde32bitsaAutoCADapartirdeuncódigoVBA,elIDdeobjetode64bitssedevolveráyseutilizarádeformainternaparatodoslosfines.
EnelsiguienteejemplosemuestrauncódigodeIDdeobjetode32bitscambiado.
Códigooriginal:
DimsplineObjAsAcadSpline
DimobjectIDAsLong
objectID=splineObj.objectID
DimtempObjAsAcadObject
SettempObj=ThisDrawing.ObjectIdToObject(objectID)
Códigocambiadoparaqueseacompatiblecon64bits:
DimsplineObjAsAcadSpline
DimobjectIDAsLong
objectID=splineObj.objectID32
DimtempObjAsAcadObject
SettempObj=ThisDrawing.ObjectIdToObject32(objectID)
LasaplicacionesdeVBAtambiénpuedenutilizarunidentificadordeobjetosenlugardesuIDdeobjeto.EnelsiguienteejemplosemuestracómoutilizarelidentificadorenlugardelIDdeobjeto:
Códigooriginal:
DimsplineObjAsAcadSpline
DimobjectIDAsLong
objectID=splineObj.objectID
DimtempObjAsAcadObject
SettempObj=ThisDrawing.ObjectIdToObject(objectID)
Códigocambiadoparaqueseacompatiblecon64bits:
DimsplineObjAsAcadSpline
DimobjectHandleAsString
objectHandle=splineObj.Handle
DimtempObjAsAcadObject
SettempObj=ThisDrawing.HandleToObject(objectHandle)
Nota :SeignoraráelsoporteparaVBAenfuturasversionesdeAutoCAD.LosdesarrolladoresdeVBAdebenprepararseparacambiarsucódigoVBAaVB.Net.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>DesarrollodeaplicacionesconVBA>Migraciónde64bits>
Apéndicedemétodosde32bits
EnlasiguientetablaseenumeranlosnuevoscódigosañadidosenAutoCAD2008paralassustitucionesde32bits:
TablademétodosdeVBAparasistemasde64bits
Método Descripción
GetBlockAttributeValue32 DevuelveelvalordeatributodesdeunaceldadebloqueespecificadaparaelobjetodedefinicióndeatributocontenidoenelbloquemedianteelcorrespondienteIDdeobjetode32bits.
GetBlockTableRecordId32 ObtieneelIDdeobjetode32bitsdelregistrodelatabladebloquesasociadoalaceldatipodelbloqueyanContent.
GetDataLink32 DevuelveelIDdeobjetode32bitsdelobjetodevínculodedatos.
GetFieldId32 DevuelveelIDdeobjetode32bitsdelobjetodecampoasociadoalaceldaespecificada.
GetGridLinetype32 DevuelveelobjetodeIDde32bitsdelobjetodetipodelíneade
rejilla.
Key32 EspecificaelIDdeobjetodelobjetodeorigenenlaoperaciónCopyObjectsdeunsistemade64bits.
ObjectID32 ObtieneelIDdeobjetodeunsistemade64bits.
ObjectIDtoObject32 ObtieneelobjetoquecorrespondeaundeterminadoIDdeobjetodeunsistemade64bits.
OwnerID32 ObtieneelIDdeobjetodelobjetodepropietario(primario)deunsistemade64bits.
SetBlockAttributeValue32 EstableceelvalordeatributodesdeunaceldadebloqueespecificadaparaelobjetodedefinicióndeatributocontenidoenelbloqueyennContentmedianteelcorrespondienteIDdeobjetode32bits.
SetBlockTableRecordId32 EstableceelregistrodetabladebloquesdelIDdeobjetode32bitsasociadoalaceldatipodelbloqueyanContent.
SetDataLink32 EstableceelIDdeobjetode32bitsdelobjetodevínculodedatos.
SetFieldId32 EstableceelIDdeobjetode32bitsdelobjetodecampoasociadoalaceldaespecificadayanContent.
SetGridLinetype32 EstableceelIDdeobjetode32bitsdelobjetodetipoderejilla.
Value32 EspecificaelvaloractualdelapropiedadodelIDdeobjetodelobjetoclonadoqueseacabadecrearparaunsistemade64bits.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>
InteracciónconotrasaplicacionesyconlasAPIdeWindows
LatecnologíaActiveXpermiteintercambiarinformaciónfácilmenteconotrasaplicacionesdeAutoCADyconaplicacionescompatiblesconActiveX,comoMicrosoftExceloMicrosoftWord.Enestecapítuloseexponenalgunosprocedimientosbásicosparalainteracciónconotrasaplicaciones.
InteracciónconaplicacionesdeVisualLISPInteracciónconotrasaplicacionesdeWindowsAccesoalasAPIdeWindowsdesdeVBA
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>
InteracciónconaplicacionesdeVisualLISP
LasaplicacionesdeVisualLISP®tienenaccesoatodoelrangodeobjetosActiveX®.PuedenllamaratodoslosmétodosdeActiveX,ydefiniryrecuperarsuspropiedades.Además,lasaplicacionesdeVisualLISPpuedenejecutarmacrosdeVBApormediodelcomandoVBARUN
LasaplicacionesdeActiveXyVBApuedenejecutaraplicacionesdeVisualLISPpormediodelmétodoSendCommand.EstemétodopermiteaActiveXyalasaplicacionesVBAenviarcomandosalalíneadecomandodeAutoCAD.
ParaobtenermásinformaciónacercadelaccesoaobjetosActiveXatravésdeVisualLISP,véaseAutoLISPDeveloper’sGuide.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>
InteracciónconotrasaplicacionesdeWindows
LatecnologíaActiveXdeAutoCAD®permiteintercambiarinformaciónfácilmenteconotrasaplicacionescompatiblesconActiveX,comoMicrosoftExcelyMicrosoftWord.Estacapacidadpermitealusuariorecopilar,almacenarypresentarinformacióndeAutoCADconformatosdistintosalosdibujosdeAutoCAD.TambiénfacilitalacargadeinformaciónenAutoCADdesdeestasaplicacionesparadirigirlosprocesosdecreaciónomanipulacióndeobjetosdeAutoCAD.Unejemploprácticodeestatecnologíaeslacreacióndeunalistadeelementos,apartirdelosobjetosdeundibujodeAutoCAD,conelformatodehojadecálculodeMicrosoftExcel.
YasehavistolaformadeescribircódigopormediodelModelodeobjetosdeActiveXdeAutoCAD.ParaintercambiarinformaciónconotrasaplicacionescompatiblesconActiveXbastaconhacerunareferenciaalmodelodeobjetosdeActiveXdelaotraaplicaciónyescribirelcódigonecesarioparautilizarsusobjetos.
Nota Enestecapítulosóloseproporcionaunaintroducciónbrevedelasfuncionesdeprogramaciónentreaplicaciones.PuestoqueeltemanoesespecíficodeAutoCAD,setratatambiénenladocumentacióndeMicrosoftyenotrasguíasdeprogramaciónindependientes.
ParaintercambiarinformaciónentremodelosdeobjetosdeActiveX
1. IncluyareferenciasalmodelodeobjetosdeActiveXdelasotrasaplicaciones.Deestaforma,elcódigoconsideralosnombresylasrelacionesdelosobjetosdelotromodelodeobjetos.
2. Creeunainstanciadelaotraaplicación.Secreanobjetosválidosparainiciarinstanciasdelosobjetosbásicosen
elotromodelodeobjetos.
3. EscribaelcódigoutilizandotantoelmodelodeobjetosdeAutoCADcomoelmodelodeobjetosdelasotrasaplicaciones.Aquíserealizaelintercambiodedatos.ReferenciasalabibliotecadeobjetosActiveXdeotrasaplicacionesCreacióndeunainstanciadelaotraaplicaciónProgramaciónconobjetosdeotrasaplicaciones
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>InteracciónconotrasaplicacionesdeWindows>
ReferenciasalabibliotecadeobjetosActiveXdeotrasaplicaciones
Paraescribircódigoqueconsulteotraaplicación,debeindicaraVBAquelepermitadisponerdelosobjetosdelaotraaplicación.Paraello,seestableceunareferenciaenlabibliotecadeobjetosdelaotraaplicación.Setratadeunarchivosituadoensuordenadorenelqueestándefinidostodoslosobjetos,métodos,propiedades,constantesyeventosdelaaplicación.
LasreferenciasaunabibliotecadeobjetosserealizandesdeelentornoIDEdeVBA.EnelIDEdeVBA,enelmenúHerramientas,existeunaopciónllamadaReferencias.EstaopcióndemenúabreuncuadrodediálogoconlalistadetodaslasbibliotecasdeobjetosVBAqueseencuentranenelsistema.Paraestablecerunareferenciaaunabiblioteca,bastaconseleccionarlabibliotecaenlalista.Lasbibliotecasquetienencasillasdeselecciónmarcadascuentanyaconreferenciasenelproyectoactual.Porejemplo,paraañadirlabibliotecadeobjetosdeMicrosoftExcel,seleccionelaentradacorrespondientedelalista.
Cuandohayacreadounareferenciaalabibliotecadeobjetosdelaotraaplicación,podráutilizarelExaminadordeobjetosdeVBAparaverunalistadelosobjetosdelaaplicación.
Nota DebeestablecerlareferenciadecadaproyectoVBAquevayaautilizarestemodelodeobjetos.Cuandoseestablecelareferenciaparaunproyecto,éstanoseestableceautomáticamenteparaningúnotroproyecto,pormotivosdeeficacia.
Paraestablecerunareferenciaalabibliotecadeobjetosdeotraaplicación
1. EnelIDEdeVBA,abraelmenúHerramientasyseleccionelaopcióndemenúReferencias.
2. BusqueyseleccioneelelementocorrespondientealaaplicaciónalaquedeseaaccederenlalistaReferencias.
3. SeleccioneAceptarparacerrarelcuadrodediálogoconlasmodificacionesrealizadas.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>InteracciónconotrasaplicacionesdeWindows>
Creacióndeunainstanciadelaotraaplicación
Unavezestablecidaunareferenciaalabibliotecadeobjetosdeunaaplicación,esnecesariocrearunainstanciadelaaplicación.Estosignificaquesedebeiniciarlaotraaplicacióndesdeelprograma,paraqueelcódigotengaaccesoalosobjetosconlosquedebetrabajar.
Paraello,primerodebedeclararunavariablequerepresentelaotraaplicación.UtilicelainstrucciónDimparaseguirelmismoprocedimientoqueconlosobjetosinternos.DeberíaincluirunacualificacióndeltipodeaplicaciónenlainstrucciónDim.Porejemplo,estainstrucciónDimdeclaraunavariabledeobjetodeltipoExcel.Application:
DimExcelAppObjasExcel.Application
Trasdeclararlavariable,utilicelainstrucciónSetconlapalabraclaveNewparaquelavariableequivalgaaunacopiadelaaplicaciónqueseestéejecutando.Porejemplo,lasiguienteinstrucciónSetestablecelavariabledeclaradamásarribacomolaaplicaciónExcel.LapalabraclaveNewiniciaunanuevasesióndeExcel.
SetExcelAppObj=NewExcel.Application
Nota Algunasaplicacionessólopermitenunainstanciaenejecucióndelaaplicaciónporvez.SiseutilizalanuevapalabraclaveNewconunadeestasaplicaciones,seestableceunareferenciaalainstanciaexistenteynoseejecutaunanuevasesióndelaaplicación.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>InteracciónconotrasaplicacionesdeWindows>
Programaciónconobjetosdeotrasaplicaciones
Despuésdeañadirunareferenciaalabibliotecadeobjetosycrearunainstanciadelaaplicaciónpuedecrearymanipularobjetosenella.Puedeutilizartodoslosobjetos,métodosypropiedadesdefinidosporelmodelodeobjetos.Porejemplo,siseutilizanlasdeclaracionesdevariabledelasecciónanterior,lasiguientelíneadecódigopresentalasesióndeExcelalusuario.
ExcelAppObj.Visible=TRUE
Deberíaestudiarenprofundidadelmodelodeobjetosdelaaplicaciónparalaqueestéescribiendoelcódigo.PuedeutilizarelExaminadordeobjetosdeVBAoelarchivodeayudadelaaplicaciónparaobtenermásinformaciónsobrecualquiermodelodeobjetosalquesehagareferencia.
Salidadelaotraaplicación
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>InteracciónconotrasaplicacionesdeWindows>Programaciónconobjetosdeotrasaplicaciones>
Salidadelaotraaplicación
Cuandoseiniciaunaaplicaciónmedianteprogramación,seutilizamemoriadelordenador.Salgadelaaplicaciónencuantoterminedeutilizarlaparaquequedenlibreslosrecursosdelsistema.
AunquecadaModelodeobjetosesdistinto,casitodostienenunmétodoQuitparaelobjetoApplication,quesepuedeutilizarparacerrarlaaplicacióncorrectamente.Porejemplo,siseutilizanlasdeclaracionesdevariabledelasecciónanterior,lasiguientelíneadecódigoejecutalasalidadeExcel:
ExcelAppObj.Application.Quit
Nota Nidestruirnisuperarelalcancedelavariabledelobjetooriginanobligatoriamenteelfindelaaplicación.Latotallimpiezadelamemoriasóloseasegurautilizandoelmétodoapropiadoparasalirdelaaplicación.
EnumeracióndeatributosdeAutoCADenunahojadecálculodeExcel
Estasubrutinalocalizatodaslasreferenciasdebloquedeldibujoactual.Acontinuación,encuentralosatributosenlazadosadichasreferenciasdebloqueylospresentaenunahojadecálculodeExcel.Paraejecutaresteejemplo,sigaestospasos:
1. Abraundibujoquecontengareferenciasabloqueconatributos(eldibujodeejemplosample/activeX/attrib.dwgcontienereferenciasabloquedeestetipo).
2. AbraelIDEdeVBAutilizandoelcomandoVBAIDEdeAutoCAD.
3. EnelIDEdeVBA,elijaHerramientas ReferenciasyseleccioneMicrosoftExcel8.0ObjectModel.
4. CopieestasubrutinaenunaventanadecódigodeVBAyejecútela.
SubCh12_Extract()
DimExcelAsExcel.Application
DimExcelSheetAsObject
DimExcelWorkbookAsObject
DimRowNumAsInteger
DimHeaderAsBoolean
DimelemAsAcadEntity
DimArray1AsVariant
DimCountAsInteger
'LaunchExcel.
SetExcel=NewExcel.Application
'Createanewworkbookandfindtheactivesheet.
SetExcelWorkbook=Excel.Workbooks.Add
SetExcelSheet=Excel.ActiveSheet
ExcelWorkbook.SaveAs"Attribute.xls"
RowNum=1
Header=False
'Iteratethroughmodelspacefinding
'allblockreferences.
ForEachelemInThisDrawing.ModelSpace
Withelem
'Whenablockreferencehasbeenfound,
'checkitforattributes
IfStrComp(.EntityName,"AcDbBlockReference",1)_
=0Then
If.HasAttributesThen
'Gettheattributes
Array1=.GetAttributes
'CopytheTagstringsforthe
'AttributesintoExcel
ForCount=LBound(Array1)ToUBound(Array1)
IfHeader=FalseThen
IfStrComp(Array1(Count).EntityName,_
"AcDbAttribute",1)=0Then
ExcelSheet.Cells(RowNum,_
Count+1).value=_
Array1(Count).TagString
EndIf
EndIf
NextCount
RowNum=RowNum+1
ForCount=LBound(Array1)ToUBound(Array1)
ExcelSheet.Cells(RowNum,Count+1).value_
=Array1(Count).textString
NextCount
Header=True
EndIf
EndIf
EndWith
Nextelem
Excel.Application.Quit
EndSub
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>InteracciónconotrasaplicacionesyconlasAPIdeWindows>
AccesoalasAPIdeWindowsdesdeVBA
EsposibleaccederalosprocedimientosAPIdeWindows®desdelamayoríadelasaplicacionesdeWindows.Estosprocedimientospermitenampliarlacapacidadfuncionaldelaaplicación.
LasAPIdeWindowspermitenobtenerinformaciónsobreelsistemaactual,comolosotrosprogramasinstaladosoenejecución,ellugardondeseencuentralainformaciónylaconfiguracióndecontrolactual.Tambiénpermitenaccederaloscontrolesdesonido,multimediaypalancademandos.EstastareassólorepresentanalgunadelasmuchasfuncionesqueproporcionanlasAPIdeWindows.
ParautilizarunaAPIdeWindows,primerosedebedeclararenlaaplicación.EstosellevaacaboconlainstrucciónDeclare.LainstrucciónDeclarerequiereciertainformación:
Elnombredelabibliotecadevínculosdinámicos(DLL)quecontengaelprocedimientoquedeseeutilizar.
ElnombredelprocedimientoconformeaparezcaenlaDLL.
Elnombredelprocedimientoconformedeseeutilizarloenlaaplicación.
Losparámetrosqueelprocedimientoespererecibir.
Eltipodedatosdelvalordevuelto(sielprocedimientollamadoesunafunción).
LainstrucciónDeclarepuedecolocarseencualquieradelosmódulosdeVBA.Sisesitúaenunmóduloestándar,elprocedimientoestarádisponibleparatodoslosmódulosdelaaplicación,amenosqueselimitesualcanceconlapalabraclavePrivate.SiseubicalainstrucciónDeclareenunmódulodeformulariooclase,elprocedimientosóloestarádisponibleendichomódulo.
Despuésdedeclararunprocedimientoesposiblellamarlo,comoacualquierotroprocedimientodelaaplicación.
NoesfácilinterpretarbienlasinstruccionesDeclarecorrectas.Sinembargo,esmuyfácilinterpretarDeclaredemodoincorrecto,ylasconsecuenciaspuedensercatastróficas.NoolvideguardartodalainformacióndelasaplicacionesactivasantesdeprobarunainstrucciónDeclarenueva.
ParafacilitarelusodelasinstruccionesDeclare,Microsoftproporcionaunarchivoquepresentaenunalistamuchasdelasinstruccionesdeusomásfrecuente.ElarchivosellamaWin32api.txtysesuministraconVisualBasic6yconOffice.PuedebuscarenésteelprocedimientoquenecesitaycopiarladeclaraciónDeclareenelcódigo.
LadocumentacióndeMicrosoftVBAcontienemásinformaciónsobrelainstrucciónDeclareyunejemplodesuuso.LareferenciadelasAPIdeMicrosoftWindowsformapartedelosCDqueseentreganalosprogramadoressuscritosalCentrodeRecursosparaDesarrolladoresdeMicrosoftyproporcionaunareferenciadetodoslosprocedimientosdisponiblesenlasAPIdeWindows.EllibroVisualBasicProgrammer'sGuidetotheWin32API,deDanAppleman,constituyeunexcelenterecursoparalosprogramadoresdeVisualBasic6.
¿Comentarios?
<$nopage>aprendizaje:
ManualdeldesarrolladordeActiveXyVBA>
AprendizajedeActiveX/VBA:Diseñodelcaminodejardín
EsteaprendizajemuestracómoutilizarActiveXyVisualBasicparaAplicaciones(VBA)ycómoañadirunamacroaAutoCAD.Seorientahacialaarquitecturapaisajística,perolosconceptosquecontienesepuedenaplicaracualquierespecialidad.
EsteAprendizajeestádestinadoalusuarioavanzadodeAutoCADqueasuvezesprincipianteenprogramaciónVBA.
InspeccionarelentornoDefinirelobjetivoLaprimerafunciónObtencióndedatosDibujodelcontornodelcaminoDibujodelaslosetasIntegracióndeloselementosEjecucióndelcódigopasoapasoEjecucióndelamacroAdicióndeinterfazdecuadrodediálogo
¿Comentarios?
<$nopage>aprendizaje:
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Inspeccionarelentorno
Paraelaprendizaje,necesitaráelentornodedesarrollointegradodeVBA(VBAIDE)deAutoCAD®.VBAIDEseinstalaautomáticamenteconlaopcióndeinstalaciónCompletadelprogramadeinstalacióndeAutoCAD.SiseleccionólaopcióndeinstalaciónPersonalizadaenelmomentodeinstalarAutoCAD,VBAIDEpuedenohaberseinstalado.EsposiblequetengaqueinstalarloejecutandodenuevoelprogramadeinstalacióndeAutoCAD.
ParacomprobarsiVBAIDEestáinstalado
1. InicieAutoCAD.
2. Enlalíneadecomando,escribavbaideypulseINTRO.SiseabreVBAIDE,estosignificaqueestáinstalado.Siapareceelmensaje“AutoCADVBAnoseencuentrainstalado”,VBAIDEnoestáinstalado.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Definirelobjetivo
ElobjetivodeesteaprendizajeesdesarrollarunanuevamacroparaAutoCADquedibujeelcaminodeunjardínylorelleneconlosetascircularesdecemento.Lanuevamacrotendrálasiguientesecuenciadesolicitudes:
Command:gardenpath
Puntoinicialdelcamino:Elusuarioespecificaráelpuntoinicial
Puntofinaldelcamino:Elusuarioespecificaráelpuntofinal
Mitaddelaanchuradelcamino:Elusuarioespecificaráunnúmero
Radiodelaslosetas:Elusuarioespecificaráunnúmero
Espacioentrelaslosetas:Elusuarioespecificaráunnúmero
Enprimerlugar,lamacrosolicitaráalusuarioqueespecifiquelospuntosinicialyfinalquedeterminaránlalíneadecentrodelcamino.Luego,solicitaráalusuarioqueespecifiquelamitaddelaanchuradelcaminoyelradiodelaslosetascirculares.Finalmente,elusuarioespecificaráelespacioentrelaslosetas.Usarálamitaddelaanchuradelcaminoenvezdelaanchuracompletapuestoqueesmásfácilvisualizarlamitaddelaanchuradesdelalíneadecentrodelcamino.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Laprimerafunción
LamacroGardenpathsedesarrollautilizandounaseriedefuncionesysubrutinas.Muchassubrutinasrequierenlamanipulacióndeángulos.PuestoqueActiveXespecificaángulosenradianes,perolamayoríadelosusuariosutilizagradosparamedirángulos,comenzaremosporcrearunafunciónqueconviertagradosaradianes.
Paraconvertirgradosaradianes
1. Enlalíneadecomando,escribavbaideypulseINTRO.
2. EnVBAIDE,enelmenúVer,pulseCódigoparaabrirlaventanaCódigo.
3. EscribaelsiguientecódigoenlaventanaCódigo:
Constpi=3.14159
'Conversióndeunánguloengradosaradianes
Functiondtr(aAsDouble)AsDouble
dtr=(a/180)*pi
EndFunction
ObservequetanprontocomosepulsaINTROdespuésdeescribirlalíneaFunctiondtr(aAsDouble)AsDouble,EndFunctionseañadeautomáticamente.EstogarantizaquetodaslassubrutinasyfuncionestienenunainstrucciónEndasociada.Ahorareviseelcódigo.Primero,laconstantepisedefineconelvalorde3.14159.Estopermitequeseutilicelapalabrapienlugardetenerqueteclear3.14159cadavezquevayaausarelvalor.Acontinuación,defineunafunciónllamadadtr(abreviacióndegradosaradianes).Lafuncióndtrtomaunargumento,a,queeselánguloengrados.Elresultadoseobtienedividiendoelánguloengradospor180y,
acontinuación,multiplicandosuvalorporpi.Lalíneaquecomienzaporunacomillasimpleesuncomentario.VBAignoratodoeltextoquehayaenunalíneadespuésdeunacomillasimple.Ahoraestafunciónpuedeutilizarseenotrassubrutinasdetodoelproyecto
4. Guardesutrabajo.PulseArchivo GuardarGlobal1.Escribagardenpath.dvbcomonombredelproyecto.
Acontinuación,añadiráunafunciónparacalcularladistanciaentrepuntos.
Paracalcularladistanciaentredospuntos
1. Escribaelsiguientecódigodespuésdelafuncióndtr:
'Cálculodeladistanciaentredospuntos
Functiondistance(spAsVariant,epAsVariant)_
AsDouble
DimxAsDouble
DimyAsDouble
DimzAsDouble
x=sp(0)-ep(0)
y=sp(1)-ep(1)
z=sp(2)-ep(2)
distance=Sqr((Sqr((x^2)+(y^2))^2)+(z^2))
EndFunction
2. Guardesutrabajo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Obtencióndedatos
LamacroGardenpathpreguntaalusuariodóndedebedibujarseelcamino,quéanchuradebetener,dequétamañosonlaslosetasdecementoycuáleselespacioentreéstas.Ahoradefiniráunasubrutinaquesolicitaalusuariotodosestosdatosyquecalculadiversosnúmerosqueseutilizaránenelrestodelamacro.
Enestasubrutina,utilizarálosmétodosdeentradadedatosdeusuariodelobjetoUtility.
DeclaracióndevariablesEscrituradelasubrutinagpuser
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Obtencióndedatos>
Declaracióndevariables
Lasiguientesubrutinautilizadiversasvariables.Todaslasvariablesdebendeclararsepreviamenteparaquelasubrutinapuedaaccederaellas.
EnVBAIDE,escribaelsiguientecódigoenlaventanaCódigo,inmediatamentedespuésdelalíneaConstpi=3.14159:
Privatesp(0To2)AsDouble
Privateep(0To2)AsDouble
PrivatehwidthAsDouble
PrivatetradAsDouble
PrivatetspacAsDouble
PrivatepangleAsDouble
PrivateplengthAsDouble
PrivatetotalwidthAsDouble
Privateangp90AsDouble
Privateangm90AsDouble
AhoraobservelasdoslistasdesplegablesdelapartesuperiordelaventanaCódigo.EstaslistassedenominancuadroObjetoycuadroProcedimiento/Eventoyactualmentemuestranrespectivamentelostérminos(General)y(Declaraciones).Estaslistasmuestranlaseccióndelcódigoenlaqueestátrabajandoenestemomento,ylepermitendesplazarserápidamenteaotrasecciónsimplementeseleccionándolaenlalista.Lasección(Declaraciones)esellugarapropiadoparadeclararvariablesquevaautilizarenmásdeunasubrutina.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Obtencióndedatos>
Escrituradelasubrutinagpuser
Lasubrutinagpusersolicitaalusuariolainformaciónnecesariaparadibujaruncaminodejardín.Escribalosiguientedespuésdelafuncióndistance:
'Adquisicióndeinformaciónparaelcaminodeljardín
PrivateSubgpuser()
DimvarRetAsVariant
varRet=ThisDrawing.Utility.GetPoint(_
,"Puntoinicialdelcamino:")
sp(0)=varRet(0)
sp(1)=varRet(1)
sp(2)=varRet(2)
varRet=ThisDrawing.Utility.GetPoint(_
,"Puntofinaldelcamino:")
ep(0)=varRet(0)
ep(1)=varRet(1)
ep(2)=varRet(2)
hwidth=ThisDrawing.Utility._
GetDistance(sp,"Mitaddeanchuradelcamino:")
trad=ThisDrawing.Utility._
GetDistance(sp,"Radiodelaslosetas:")
tspac=ThisDrawing.Utility._
GetDistance(sp,"Espacioentrelosetas:")
pangle=ThisDrawing.Utility.AngleFromXAxis(_
sp,ep)
totalwidth=2*hwidth
plength=distance(sp,ep)
angp90=pangle+dtr(90)
angm90=pangle-dtr(90)
EndSub
Enlasubrutinagpuser,lalíneaDimvarRetAsVariantdeclaralavariablevarRet.Puestoqueestavariableseutilizasolamenteenestasubrutina,puededeclararseaquílocalmente,envezdehacerloenlasección(Declaraciones).
Lasiguientelínea,varRet=ThisDrawing.Utility.GetPoint(,"Puntoinicialdelcamino:"),llamaalmétodoGetPoint.Elcarácterdesubrayadosirveparaqueunalínealargaseamásfácildeleer,yaqueindicaaVBAquedebeleeresalíneaylasiguientecomosiformaranunasolalínea.Elcarácterdesubrayadopuedeeliminarsecolocandotodoelcódigoenunaúnicalínea.
ParaaccederalmétodoGetPoint,antesdebeiralobjetoThisDrawingquerepresentaeldibujoactual.DespuésdeescribirThisDrawingseescribeunpunto(.),loquesignificaquevaaaccederaalgoquehaydentrodeeseobjeto.Despuésdelpunto,seescribeUtilityyotropunto.Unavezmás,vaaaccederaalgoquehaydentrodelobjetoUtility.Finalmente,escribaGetPoint,queeselnombredelmétodoqueseestáinvocando.
ElmétodoGetPointtomadosparámetros.Elprimerparámetroesopcionalynoseutilizará.Dejeelparámetroenblancoyescribaúnicamenteunacomaparamarcarsuubicación.Elsegundoparámetroeslasolicitud,quetambiénesopcional.Paraesteparámetro,haescritounacadenaquesolicitaalusuarioqueespecifiqueelpuntoinicial.ElpuntoespecificadoporelusuariosecolocaenlavariablevarRet.Lastreslíneassiguientesdelasubrutinacopianelpuntodevueltoporelusuarioenlamatrizsp.
Elpuntofinalseobtienedelamismaforma.
ElmétodoGetDistanceseutilizaparaobtenerlamitaddelaanchuradelcamino(hwidth),elradiodelaslosetas(trad),yelespacioentreéstas(tspac).ElmétodoGetDistanceutilizadosparámetros.Elprimerparámetroesunpuntobase.Paraestevalor,usteddeterminaelpuntoinicial.Elsegundoparámetroeslasolicitud,paralaqueproporcionaunacadenaquesolicitaalusuarioeldatocorrespondiente.LointeresanteacercadelmétodoGetDistanceesquepuededevolvertantounvalorescritoenlalíneadecomandocomoladistanciaentreelpuntoinicialyunpuntoseleccionadoenAutoCAD.
Lasubrutinacontinuacalculandodiversasvariablesutilizadasmástardeenlamacro.LavariablepanglesedefineconelánguloentrelospuntosinicialyfinalysehallautilizandoelmétodoAngleFromXAxis.Laanchuradelcaminosehallamultiplicandolamitaddelaanchurapordos.Lavariableplengthsedefinecomolalongituddelcaminoysehallautilizandolafuncióndistanciaescritaanteriormente.Finalmente,secalculayseguardaelángulodelcaminomásymenos90gradosenangp90yangm90,respectivamente.
Lasiguienteilustraciónmuestralaformaenlaquelasvariablesobtenidasporgpuserespecificanlasdimensionesdelcamino.
Guardesutrabajo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Dibujodelcontornodelcamino
Ahoraquehaobtenidolaubicaciónylaanchuradelcamino,puededibujarsucontorno.Añadaelsiguientecódigobajolasubrutinagpuser:
'Dibujodelcontornodelcamino
PrivateSubdrawout()
Dimpoints(0To9)AsDouble
DimplineAsAcadLWPolyline
DimvarRetAsVariant
varRet=ThisDrawing.Utility.PolarPoint(_
sp,angm90,hwidth)
points(0)=varRet(0)
points(1)=varRet(1)
points(8)=varRet(0)
points(9)=varRet(1)
varRet=ThisDrawing.Utility.PolarPoint(_
varRet,pangle,plength)
points(2)=varRet(0)
points(3)=varRet(1)
varRet=ThisDrawing.Utility.PolarPoint(_
varRet,angp90,totalwidth)
points(4)=varRet(0)
points(5)=varRet(1)
varRet=ThisDrawing.Utility.PolarPoint(_
varRet,pangle+dtr(180),plength)
points(6)=varRet(0)
points(7)=varRet(1)
Setpline=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
EndSub
EstasubrutinadibujaelcontornodelcaminoutilizandoelmétodoAddLightweightPolyline.Estemétodorequiereunparámetro:unamatrizdepuntosquegenerelapolilínea.Debehallartodoslospuntosqueformanelobjetodepolilíneaycolocarlosenunamatrizenelordenenquedebendibujarse.Paraestapolilínea,lospuntosnecesariossonlosvérticesdelcamino.
Parahallarlosvérticesdelcamino,utiliceelmétodoPolarPoint.Estemétodoencuentraunpuntoqueestáaunánguloyunadistanciadeterminadosdesdeunpuntobase.Comienceporelpuntoinicial(sp)yencuentreelprimervérticedelcaminotrabajandoendireccióncontrariaalasagujasdelreloj.Estevérticeestaráaunadistanciaequivalentealamitaddelaanchuradelcamino(hwidth)ya-90gradosdelángulodelcamino.Puestoquedeseadibujarunrectángulocerradoparaelcamino,esepuntoseconvierteenelprimeryúltimopuntodelamatriz.Porlotanto,lascoordenadasXeYobtenidasconelmétodoPolarPointsedesplazanalaprimerayalaúltimaposicióndelamatrizdepuntos.
Losrestantesvérticesdelcaminosehallandelamismaformautilizandolalongitudylaanchuradelcamino(plengthywidth),yelángulodelcamino.CadavezqueseinvocaelmétodoPolarPoint,lascoordenadasobtenidas(varRet)secopianenlamatrizdepuntos.
Unavezidentificadoslosvérticesenlamatrizdepuntos,seinvocaelmétodoAddLightweightPolyline.ObservequeestemétodoesinvocadodesdeelobjetoModelSpace.Siejecutaraestamacro,veríaquelapolilíneatodavíanoesvisibleenAutoCAD.Lapolilíneanoserávisiblehastaqueactualicelavisualización,cosaqueharámástarde.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Dibujodelaslosetas
Ahoraquesehadesarrolladolasubrutinadeentradadedatosdeusuarioylasubrutinaparadibujarelcontorno,yasepuederellenarelcaminoconlosetascirculares.Estatarearequierealgodegeometría.
EnVBAIDE,escribaelsiguientecódigoenlaventanaCódigo,despuésdelarutinadrawout:
'Colocacióndeunahileradelosetasalolargodeladistanciadadadelcamino
'yposiblementedesfasedeésta
PrivateSubdrow(pdAsDouble,offsetAsDouble)
Dimpfirst(0To2)AsDouble
Dimpctile(0To2)AsDouble
Dimpltile(0To2)AsDouble
DimcirAsAcadCircle
DimvarRetAsVariant
varRet=ThisDrawing.Utility.PolarPoint(_
sp,pangle,pd)
pfirst(0)=varRet(0)
pfirst(1)=varRet(1)
pfirst(2)=varRet(2)
varRet=ThisDrawing.Utility.PolarPoint(_
pfirst,angp90,offset)
pctile(0)=varRet(0)
pctile(1)=varRet(1)
pctile(2)=varRet(2)
pltile(0)=pctile(0)
pltile(1)=pctile(1)
pltile(2)=pctile(2)
DoWhiledistance(pfirst,pltile)<(hwidth-trad)
Setcir=ThisDrawing.ModelSpace.AddCircle(_
pltile,trad)
varRet=ThisDrawing.Utility.PolarPoint(_
pltile,angp90,(tspac+trad+trad))
pltile(0)=varRet(0)
pltile(1)=varRet(1)
pltile(2)=varRet(2)
Loop
varRet=ThisDrawing.Utility.PolarPoint(_
pctile,angm90,tspac+trad+trad)
pltile(0)=varRet(0)
pltile(1)=varRet(1)
pltile(2)=varRet(2)
DoWhiledistance(pfirst,pltile)<(hwidth-trad)
Setcir=ThisDrawing.ModelSpace.AddCircle(_
pltile,trad)
varRet=ThisDrawing.Utility.PolarPoint(_
pltile,angm90,(tspac+trad+trad))
pltile(0)=varRet(0)
pltile(1)=varRet(1)
pltile(2)=varRet(2)
Loop
EndSub
'Dibujodelashilerasdelosetas
PrivateSubdrawtiles()
DimpdistAsDouble
DimoffsetAsDouble
pdist=trad+tspac
offset=0
DoWhilepdist<=(plength-trad)
drowpdist,offset
pdist=pdist+((tspac+trad+trad)*Sin(dtr(60)))
Ifoffset=0Then
offset=(tspac+trad+trad)*Cos(dtr(60))
Else
offset=0
EndIf
Loop
EndSub
Paracomprendercómofuncionanestassubrutinas,consultelasiguienteilustración.Lasubrutinadrowdibujaunahileradelosetasaunadistanciadadaalolargodelcaminoespecificadaporsuprimerargumento,ydesfasalahileraperpendicularmentealcaminoconunadistanciaespecificadaporelsegundoargumento.Sedeseadesfasarlaslosetasenhilerasalternasparaquecubranmásespacioysedistribuyandeformamásestética.
LasubrutinadrowhallalaubicacióndelaprimerahileramedianteelmétodoPolarPointparadesplazarlaalolargodelcaminoconladistanciaespecificadaporelprimerargumento.LasubrutinavuelveautilizarentonceselmétodoPolarPointparadesplazarseperpendicularmentealcaminoparaefectuareldesfase.LasubrutinautilizalainstrucciónWhileparacontinuardibujandocírculoshastaqueseencuentraelfinaldelcamino.ElmétodoPolarPointdelaprimerainstrucciónWhilesedesplazaalasiguienteposicióndelosetacreandounespacioequivalenteadosradiosdeloseta(trad)másunespacioentrelosetas(tspac).Elsegundobuclewhiledibujaentonceslaslosetasdelahileraenlaotradirecciónhastaqueseencuentraelotroborde.
Lasubrutinadrawtilesinvocadrowrepetidamentehastaquesedibujantodaslashilerasdelosetas.LasubrutinaWhilelooprecorrepasoapasoelcamino,invocandodrowparacadahilera.Laslosetasdelashilerasadyacentesformantriángulosequiláteros,talcomosemuestraenlailustraciónanterior.Lasaristasdeestostriángulosequivalenaldobledelradiodelalosetamáselespacioentrelosetas.Porlotanto,porlatrigonometría,ladistanciaalolargodelcaminoentrehileraseselsenode60gradosmultiplicadoporestacantidad,yeldesfasedelashilerasimpareseselcosenosesentagradosmultiplicadoporestacantidad.
LainstrucciónIfseutilizaendrawtilesparadesfasarhilerasalternas.Sieldesfaseesiguala0,defínalocomoelespacioentreloscentrosdelashilerasmultiplicadasporelcosenode60grados,talcomoseexplicóanteriormente.Sieldesfasenoesiguala0,establézcaloen0.Estoalternaeldesfasedelashilerasdelaformadeseada.
Guardesutrabajo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Integracióndeloselementos
AhorayaesposiblecombinarlassubrutinasenlamacroGardenpath.EnVBAIDEescribaelsiguientecódigoenlaventanaCódigo,despuésdelasubrutinadrawtiles:
'Ejecucióndelcomando,invocandolasfuncionesconstituyentes
Subgardenpath()
DimsblipAsVariant
DimscmdeAsVariant
gpuser
sblip=ThisDrawing.GetVariable("blipmode")
scmde=ThisDrawing.GetVariable("cmdecho")
ThisDrawing.SetVariable"blipmode",0
ThisDrawing.SetVariable"cmdecho",0
drawout
drawtiles
ThisDrawing.SetVariable"blipmode",sblip
ThisDrawing.SetVariable"cmdecho",scmde
EndSub
Lasubrutinapathinvocagpuserparaobtenerlaentradadelosdatosnecesarios.ElmétodoGetVariableseutilizaentoncesparaobtenerlosvaloresactualesdelasvariablesdesistemaBLIPMODEyCMDECHOyguardaestosvalorescomosblipyscmde.LasubrutinautilizaentonceselmétodoSetVariableparaestablecerambasvariablesdesistemaen0,desactivandomarcasauxiliaresyecodecomandos.Acontinuación,sedibujaelcaminousandolassubrutinasdrawoutydrawtiles.Finalmente,seutilizaelmétodoSetVariablepararestablecerelvalororiginaldelasvariablesdesistema.
Comopuedeverse,éstaeslaúnicasubrutina,entrelasquehaescrito,quenocomienzaconlapalabraclavePrivate,quegarantizaquelasubrutinasólopuedeinvocarsedesdeelmóduloactual.Puestoquelasubrutinagardenpathdebeestardisponibleparaelusuario,debeomitirselapalabraclavePrivate.
Guardesutrabajo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Ejecucióndelcódigopasoapaso
Ahoraejecutelamacro,recorriendoelcódigopasoapasoamedidaqueseejecuta.
EnelmenúHerr.deAutoCAD,pulseMacro Macros.EnelcuadrodediálogoMacros,seleccioneThisDrawing.gardenpathypulseEntrar.
VBAIDEapareceráenprimerplanoenlapantalla,ylaprimeralíneadelamacrogardenpathapareceráresaltada.Lalínearesaltadaeslalíneadecódigoqueestáapuntodeejecutarse.Paraejecutarlalínea,pulseF8.Lasiguientelíneadecódigoquedebeejecutarseeslasubrutinagpuser.ParaejecutarpasoapasolasubrutinagpuservuelvaapulsarF8.
Ahoraestáalprincipiodelarutinagpuser.PulseF8unavezmáspararesaltarelprimermétodoGetPoint.AntesdeejecutarestalíneaabralaventanaLocalespulsandoVer VentanaLocales.EstaventanasemuestraenlaparteinferiordeVBAIDE.TodaslasvariableslocalesysusvaloressemuestranenlaventanaLocalesmientrasseejecutalamacro.
AhorapulseF8paraejecutarelmétodoGetPoint.Observequeelresaltadodesapareceynosepresentanuevocódigo.EstoesporqueelmétodoGetPointestáesperandoaqueelusuarioespecifiqueunpuntoenAutoCAD.VuelvaalaventanadeAutoCAD.VerálasolicitudquehaespecificadoenlallamadaGetPointdelalíneadecomandos.Especifiqueunpunto.
Elcontrolvuelveahoraalamacro.LalíneaquesiguealallamadaalmétodoGetPointquedaresaltada.ContinúelaejecuciónpasoapasodelcódigopulsandoF8.RecuerdevolveralaventanadeAutoCADcuandotengaqueintroducirdatos.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Ejecucióndelamacro
Noesnecesariorecorrerpasoapasoelcódigocadavezqueseejecutalamacro.SepuedeejecutarlamacrodesdeelmenúHerr.pulsandoMacro Macros,seleccionandounamacroypulsandoEjecutar.Estolepermiteverelflujodeejecucióndelamismaformaenqueloharíaelusuario.EjecutelamacrodesdeAutoCAD,especificandolossiguientesvalores:
Puntoinicialdelcamino:2,2
Puntofinaldelcamino:9,8
Mitaddeanchuradelcamino:2
Radiodelaslosetas:0,2
Espacioentrelosetas:0,1
Esteejemplodeberíadibujaruncaminodejardíncomoelquesemuestraenlasiguientefigura:
PuedeexperimentarconlamacroGardenpathespecificandocondatosdiferentes.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>
Adicióndeinterfazdecuadrodediálogo
LamacroGardenpathsehaescritoparaaceptarlaintroduccióndedatosenlalíneadecomando.Paraañadircuadrosdediálogo,utilicelosformulariosdeVBAIDE.
Primero,copielaversiónterminadadegardenpath.dvbenotroarchivo,gpdialog.dvb.Luegoarrastregpdialog.dvbaAutoCAD.
CreacióndelcuadrodediálogoUtilizacióndelaventanaProyectoparanavegarporelproyectoActualizacióndelcódigoexistenteAdicióndecódigoalcuadrodediálogo
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Adicióndeinterfazdecuadrodediálogo>
Creacióndelcuadrodediálogo
Elcuadrodediálogoquevaacrearcontienedosbotonesdeopción(siseseleccionauno,elotrosedeselecciona)paraescogerlaformadelaloseta:circularopoligonal.Elcuadrodediálogoincluyetambiéntrescajasdetextoparaintroducirlossiguientesvaloresnuméricos:elradiodelaslosetas,elespaciadoentrelasmismasyelnúmerodeladosdelaloseta(queestásólodisponiblesisehaseleccionadolaopciónPolígono).
ParacrearuncuadrodediálogoenVBAIDE
1. EnelmenúInsertar,pulseUserFormparaabrirunnuevoformulario.Semuestrandosventanas,uncuadrodeherramientasyunformularioenblancodeusuario.
2. Seleccioneyarrastreunoporunolossiguientescontrolesdesdeelcuadrodeherramientasysitúelosenelformulariodeusuario.Tendráquecolocardosbotonesdeopción(
),tresetiquetas(
),trescuadrosdetexto(
)ydosbotonesdecomando(
),talcomoseapreciaenelsiguienteformulario:
3. Cierreelcuadrodeherramientas.
Paraestablecerlaspropiedadesdeloscontrolesdebotóndeopción
1. Enelformulariodeusuario,seleccioneelcontrolOptionButton1.EnelmenúVer,pulseVentanaPropiedadesycambielassiguientespropiedadesparaOptionButton1:(Name)=gp_polyCaption=PolígonoControlTipText=LosetaenformadepolígonoAccelerator=P
2. Enelformulariodeusuario,seleccioneelcontrolOptionButton2.EnlaventanaPropiedades,cambielassiguientespropiedadesparaOptionButton2:(Name)=gp_circCaption=CírculoControlTipText=LosetaenformadecírculoAccelerator=I
Paradefinirlaspropiedadesdeloscontrolesdeetiqueta
1. Enelformulariodeusuario,seleccioneelcontrolLabel1.Enlaventana
Propiedades,cambielassiguientespropiedadesparaLabel1:(Name)=label_tradCaption=RadiodelaslosetasTabStop=True
2. Enelformulariodeusuario,seleccioneelcontrolLabel2.EnlaventanaPropiedades,cambielassiguientespropiedadesparaLabel2:(Name)=label_tspacCaption=EspacioentrelosetasTabStop=True
3. Enelformulariodeusuario,seleccioneelcontrolLabel3.EnlaventanaPropiedades,cambielassiguientespropiedadesparaLabel3:(Name)=label_tsidesCaption=NúmerodecarasTabStop=True
Paradefinirlaspropiedadesdeloscontrolesdelcuadrodetexto
1. Enelformulariodeusuario,seleccioneelcontrolTextBox1.EnlaventanaPropiedades,cambielassiguientespropiedadesparaTextBox1:(Name)=gp_trad
2. Enelformulariodeusuario,seleccioneelcontrolTextBox2.EnlaventanaPropiedades,cambielassiguientespropiedadesparaTextBox2:(Name)=gp_tspac
3. Enelformulariodeusuario,seleccioneelcontrolTextBox3.EnlaventanaPropiedades,cambielassiguientespropiedadesparaTextBox3:(Name)=gp_tsides
Paraestablecerlaspropiedadesdeloscontrolesdebotóndecomandoylaventanadeformulario
1. Enelformulariodeusuario,seleccioneelcontrolCommandButton1.EnlaventanaPropiedades,cambielassiguientespropiedadespara
CommandButton1:(Name)=acceptCaption=AceptarControlTipText=AceptalasopcionesAccelerator=ODefault=True
2. Enelformulariodeusuario,seleccioneelcontrolCommandButton2.EnlaventanaPropiedades,cambielassiguientespropiedadesparaCommandButton2:(Name)=cancelCaption=CancelarControlTipText=CancelalaoperaciónAccelerator=C
3. Seleccionetodoelformulariohaciendoclicenelfondodelformulario,lejosdecualquiercontrol.EnlaventanaPropiedades,cambielassiguientespropiedadesparaelformulario:(Name)=gpDialogCaption=CaminodejardínElformulariodeberáahorateneresteaspecto:
4. Guardesutrabajo.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Adicióndeinterfazdecuadrodediálogo>
UtilizacióndelaventanaProyectoparanavegarporelproyecto
EnVBAIDE,laventanaProyectocontieneelnombreylaubicacióndelproyecto,unacarpetallamadaAutoCADObjetosyunacarpetallamadaFormularios.(PuedequetengaquepulsarAlternarcarpetasparaverlascarpetas.)CuandoseabrelacarpetaAutoCADObjetos(puedequeyaestéabierta),puedeverseuniconodedibujoyelnombreThisDrawing.AlabrirlacarpetaFormularios(puedequeyaestéabierta),puedeverseuniconodeformularioyelnombregpDialog,elformularioqueacabadecrear.
PuedeutilizarlaventanaProyectoparanavegarporelcódigoyparaqueleayudeasaberdóndeestátrabajando.Porejemplo,paraverelcódigoasociadoconelformularioquehacreado,resaltegpDialogenlaventanaProyectoypulseVercódigo.
SeabrelaventanaCódigocorrespondientealformulario.
ResalteThisDrawingenlaventanaProyecto.PuedeverelcódigohaciendoclicenVercódigo.Todoelcódigoquehaescritoestáenestaventana.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Adicióndeinterfazdecuadrodediálogo>
Actualizacióndelcódigoexistente
Ahoraquehacreadouncuadrodediálogo,puedeañadiromodificarcódigo.
Paramodificarelcódigoexistente
1. AbraelcódigocorrespondienteaThisDrawing,sitodavíanoestáabierto.
2. ActualicelassiguienteslíneasdelasecciónDeclaraciones:
PublictradAsDouble'Actualizado
PublictspacAsDouble'Actualizado
PublictsidesAsInteger'Adición
PublictshapeAsString'Adición
Puestoqueelcódigodelformularioaccedeatradytspac,haactualizadosusdefinicionesparahacerlaspúblicas.Lasvariablesprivadassóloestándisponiblesenelmóduloenelquesehandefinido,porloquelasvariablesdebenconvertirseenpúblicas.Además,haañadidotsidesparaelnúmerodeladosdelaslosetaspoligonalesytshapeparaqueelusuarioseleccionelaformadelaslosetas,quepuedeseruncírculoounpolígono.
3. Vayaalasubrutinagpuser.Eliminelasdoslíneasqueobtienenelradiodelaslosetasyelespacioentreellas,puestoqueestainformaciónseobtieneahoraatravésdelformulario.Enconcreto,eliminelosiguiente:
trad=ThisDrawing.Utility._
GetDistance(sp,"Radiodelaslosetas:")
tspac=ThisDrawing.Utility._
GetDistance(sp,"Espacioentrelosetas:")
4. Añadalaslíneasquecarganymuestranelformulario.Añadalassiguienteslíneasenellugardelaslíneaseliminadasenelpaso3:
LoadgpDialog
gpDialog.Show
5. Añadaunasubrutinaalfinaldelarchivodecódigoquedibujatantolaslosetascircularescomolaslosetaspoligonales:
'Dibujalalosetaconlaformaseleccionada
SubDrawShape(pltile)
DimangleSegmentAsDouble
DimcurrentAngleAsDouble
DimangleInRadiansAsDouble
DimcurrentSideAsInteger
DimvarRetAsVariant
DimaCircleAsAcadCircle
DimaPolygonAsAcadLWPolyline
ReDimpoints(1Totsides*2)AsDouble
'Ramabasadaeneltipodeformaadibujar
SelectCasetshape
Case"Círculo"
SetaCircle=ThisDrawing.ModelSpace._
AddCircle(pltile,trad)
Case"Polígono"
angleSegment=360/tsides
currentAngle=0
ForcurrentSide=0To(tsides-1)
angleInRadians=dtr(currentAngle)
varRet=ThisDrawing.Utility.PolarPoint(pltile,_
angleInRadians,trad)
points((currentSide*2)+1)=varRet(0)
points((currentSide*2)+2)=varRet(1)
currentAngle=currentAngle+angleSegment
NextcurrentSide
SetaPolygon=ThisDrawing.ModelSpace._
AddLightWeightPolyline(points)
aPolygon.Closed=True
EndSelect
EndSub
EstasubrutinautilizalainstrucciónSelectCasepararamificarelcontroldelprogramasegúneltipodeformaquesedebadibujar.Lavariabletshapeseutilizaparadeterminareltipodeforma.
6. Acontinuación,vayaalasubrutinadrow.Encuentrelosdoscasosenlosqueaparecelasiguientelínea:
Setcir=ThisDrawing.ModelSpace.AddCircle(pltile,trad)
Cambieestaslíneasparaquedibujenlaformacorrespondientedelosetas,comosemuestraacontinuación:
DrawShape(pltile)'Actualizado
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>AprendizajedeActiveX/VBA:Diseñodelcaminodejardín>Adicióndeinterfazdecuadrodediálogo>
Adicióndecódigoalcuadrodediálogo
AhorapuedeeliminarelcódigoparalacreacióndelosetascirculareseinvocarlasubrutinaDrawShapeparaquedibujelaformaapropiada.
Paraañadirgestoresdeeventosparaelcuadrodediálogo
1. AbrirelcódigoparagpDialog.
2. Escribaelsiguientecódigoenlapartesuperiordelaventana:
PrivateSubgp_poly_Click()
gp_tsides.Enabled=True
ThisDrawing.tshape="Polígono"
EndSub
PrivateSubgp_circ_Click()
gp_tsides.Enabled=False
ThisDrawing.tshape="Círculo"
EndSub
Observequelassubrutinasgp_poly_Click()ygp_circ_Click()tienenelmismonombrequelosdoscontrolesdeopciónañadidosanteriormente,conlaadiciónde_Click.Estassubrutinasseejecutanautomáticamentecuandoelusuariopulsaenelcontrolrespectivo.ObservetambiénqueelcuadroObjetomuestraloscontrolesdelformulario,ordenadosalfabéticamenteporlapropiedad"Name"(nombre).
3. SitúeelcursorsobrelalíneaPrivateSubgp_poly_Click()yabraelcuadroProcedimiento/Evento.Podráverunalistadetodosloseventosalosquepuederesponderparaelcontroldeopcióngp_poly.LasdossubrutinasquehaescritogestionaneleventoClick.TambiénpuedeañadircódigopararesponderaleventoDblClick,queseejecutaráautomáticamentecuandoelusuariohagadobleclicenelcontrol.Puedeañadircódigoparacualquieradeloseventosdelalista.Estostiposdesubrutinassedenominangestoresdeeventos.Observeelcódigoquehaescritoparaestosdosgestoresdeeventos.ElprimergestordeeventosrespondealeventoClickquecorrespondealcontroldeopcióngp_poly.Laprimeralíneadecódigoactivaelcuadrodetextoparaelnúmerodelados.Estecuadrodetextosóloestádisponibleparapolígonos,porloquenoestáactivadoanoserqueseleccioneelcontrolPolígono.LasiguientelíneadecódigoestablecelavariabletshapecomoPolígono.ElsegundogestordeeventosrespondealeventoClickparaelcontroldeopcióngp_circ.EstegestordesactivaelcuadrodetextoparanúmerodeladosyestablecelavariabletshapeenCírculo.
4. AñadaelsiguientegestordeeventosparaelbotónAceptar:
PrivateSubaccept_Click()
IfThisDrawing.tshape="Polígono"Then
ThisDrawing.tsides=CInt(gp_tsides.text)
If(ThisDrawing.tsides<3#)Or_
(ThisDrawing.tsides>1024#)Then
MsgBox"Escribaunvalorentre3y"&_
"1024paraelnúmerodelados."
ExitSub
EndIf
EndIf
ThisDrawing.trad=CDbl(gp_trad.text)
ThisDrawing.tspac=CDbl(gp_tspac.text)
IfThisDrawing.trad<0#Then
MsgBox"Escribaunvalorpositivoparaelradio."
ExitSub
EndIf
If(ThisDrawing.tspac<0#)Then
MsgBox"Escribaunvalorpositivoparaelespaciado."
ExitSub
EndIf
GPDialog.Hide
EndSub
Estecódigocompruebasilaelecciónfinaldelaformahasidoladepolígono.Siesasí,elcódigoobtieneelnúmerodeladosdelcontrolgp_tsides.ElvalorqueintroduceelusuariosealmacenaenlapropiedadText.Puestoquesealmacenacomocadenadetexto,lacadenadebeconvertirsealenteroequivalenteutilizandolafunciónCInt.Unavezobtenido,elgestordeeventoscompruebaelrangodelvalorparaasegurarqueseencuentraentre3y1024.Sinoesasí,semuestraunmensajeysesaledelgestordeeventossinquetengalugarningúnotroproceso.Elresultadoesqueapareceunmensajeyqueelusuariotieneotraoportunidadparacambiarelvalor.DespuésdepulsardenuevoelbotónAceptar,estegestordeeventosseejecutayvuelveacomprobarelvalor.Lamacroobtienevaloresderadioydeespacio,peroestosvaloressondobles,noenteros,yseobtienenutilizandolafunciónCDbl.Estosvalorestambiénseverificanparacomprobarquesonpositivos.Unavezobtenidosyverificadoslosvalores,lainstruccióngpDialog.Hideocultaelformulario,devolviendoelcontrolalasubrutinaqueinvocóelformularioporprimeravez.
5. AñadaelsiguientegestordeeventosparaelbotónCancelar:
PrivateSubcancel_Click()
UnloadMe
Final
EndSub
Estesencillogestordeeventosdescargaelformularioycompletala
macro.Loúnicoquetodavíanohahechoesañadirlosvaloresinicialesparaelformulario.HayuneventollamadoInitializequeseaplicaalformulario.Seejecutacuandosecargaelformularioporprimeravez.
6. Añadaelsiguientegestordeeventosparalainicializacióndeformularios:
PrivateSubUserForm_Initialize()
gp_circ.Value=True
gp_trad.Text=".2"
gp_tspac.Text=".1"
gp_tsides.Text="5"
gp_tsides.Enabled=False
ThisDrawing.tsides=5
EndSub
Estecódigoestablecelosvaloresinicialesdelformularioyparalavariabletsides.Latsidesdebeestablecerseenunnúmeropositivomayorque3,aunqueelusuarioseleccioneuncírculo.Paracomprenderesto,fíjeseenlasubrutinaDrawShapequehaescritoanteriormente.Hayunavariablellamadapointsquesedefineutilizandoelnúmerodeladosdelpolígono.Tantosisesolicitaunaformadepolígonocomosino,seasignamemoriaalavariable.Porestemotivo,tsidesdebeestardentrodeunrangoválido.Elusuariopuedecambiarestevalordurantelaejecucióndelamacro.
AhorapuedeguardarlamacroyejecutarladesdeAutoCAD.
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>
ComparaciónentreVisualLISPyActiveX/VBA
LamayoríadelasfuncionesdisponiblesenlainterfazdeVisualLISPseencuentrantambiénenlainterfazdeActiveXyVBA.EsteapéndicepretendeservirdereferenciaalosdesarrolladoresqueyaconocenVisualLISP,paraqueconozcanlacorrespondenciadelasfuncionesenActiveXyVBA.
ComparaciónentreVisualLISPyActiveX/VBA
¿Comentarios?
ManualdeldesarrolladordeActiveXyVBA>ComparaciónentreVisualLISPyActiveX/VBA>
ComparaciónentreVisualLISPyActiveX/VBA
EnlasiguientetablasecomparanlasfuncionesdeVisualLISPconlosoperadoresylasfuncionessimilaresdeActiveX®,VBAyVisualBasic6.LosequivalentesdeActiveXAutomationestánindicadospor“AutoCAD.Application.”ylosequivalentesdeVisualBasic6seenumerancomofunciónuoperador.
ComparaciónentreVisualLISPyActiveX/VBA
FuncióndeAutoLISP EquivalentedeActiveX,VBAoVisualBasic6
+(suma) +(operadordesuma)
–(resta) -(operadorderesta)
*(multiplicación)
*(operadordemultiplicación)
/(división) /(operadordedivisión)
=(esigualque) =(igualque,operadordecomparación)
!=(distintode) <>(distintode,operadordecomparación)
<(menorque) <(menorque,operadordecomparación)
<=(menoroigualque)
<=(menoroigualque,operadordecomparación)
!=(distintode) <>(distintode,operadordecomparación)
>(mayorque) >(mayorque,operadordecomparación)
>(mayorqueesigualque)
>=(mayoroigualque,operadordecomparación)
~(Nobinario) OperadorNo
1+(incremento)
Utilizar+(operadordesuma)
1-(decremento) Utilizar–(operadorderesta)
abs FunciónAbs
acad_colordlg Noexiste
acad_helpdlg BuscarHELPenelíndicedeAyudaenpantalla
acad_strlsort BuscarSORTenelíndicedeAyudaenpantalla
action_tile Utilizareleditordediálogo
add_list Utilizareleditordediálogo
ads MétodoAutoCAD.Application.ListADS
alert FunciónMsgBox
and OperadorAnd
angle MétodoAutoCAD.Application.ActiveDocument.Utility.AngleFromXAxis
angtof MétodoAutoCAD.Application.ActiveDocument.Utility.
angtos MétodoAutoCAD.Application.ActiveDocument.Utility.
MétodoAngleToString
append Utilizarlasfuncionesdegestióndematrices
apply Noexiste
arx MétodoAutoCAD.Application.ListARX
arxload MétodoAutoCAD.Application.LoadARX
arxunload MétodoAutoCAD.Application.UnloadARX
ascii FunciónAsc
assoc Noexiste
atan FunciónAtn
atof FunciónCDbl
atoi FunciónCint
atom BuscarISenelíndicedeAyudaenpantalla
atoms-family Noexiste
autoarxload Noexiste
autoload Noexiste
Boole Utilizaroperadoreslógicos
boundp BuscarISenelíndicedeAyudaenpantalla
car/cdr Utilizarlasfuncionesdegestióndematrices
chr FunciónChr
client_data_tile Utilizareleditordediálogo
close MétodoAutoCAD.Application.Documents.Close
comando MétodoAutoCAD.ActiveDocument.SendCommand
cond InstrucciónSelectCase
cons UsarlasfuncionesdegestióndematricesoelmétodoAutoCAD.Application.collection.Add<entityname>
cos FunciónCos
cvunit Utilizarlasfuncionesdeconversión
defun PalabrasclaveFunctionyEndFunction
dictadd MétodoAutoCAD.Application.ActiveDocument.Dictionaries.Add
dictnext MétodoAutoCAD.Application.ActiveDocument.Dictionaries.Item
dictremove AutoCAD.Application.ActiveDocument.Dictionaries.MétodoDictionary.Delete
dictrename AutoCAD.Application.ActiveDocument.Dictionaries.MétodoDictionary.Rename
dictsearch AutoCAD.Application.ActiveDocument.Dictionaries.MétodosDictionary.GetNameyGetObject
dimx_tileydimy_tile
Utilizareleditordediálogo
distance MétodoAutoCAD.Application.Utility.GetDistanceinteractivo.
distof Noexiste
done_dialog Utilizareleditordediálogo
end_image Utilizareleditordediálogo
end_list Utilizareleditordediálogo
entdel AutoCAD.Application.ActiveDocument.collection_object.MétodoDelete
entget AutoCAD.Application.ActiveDocument.collection_object.propertyproperties
entlast AutoCAD.Application.ActiveDocument.Modelspace.Item(count-1)
entmake AutoCAD.Application.ActiveDocument.Modelspace.MétodoAdd<entityname>
entmakex AutoCAD.Application.ActiveDocument.Modelspace.MétodoAdd<entityname>
entmod Utilizarcualquieradelaspropiedadesdelecturayescrituradelobjeto
entnext MétodoAutoCAD.Application.ActiveDocument.collection.Item
entsel Objeto/métodos/propiedadesAutoCAD.Application.ActiveDocument.SelectionSets
entupd AutoCAD.Application.ActiveDocument.Modelspace.object.MétodoUpdate
eq Noexiste
equal OperadorEqv
*error* Objeto/método/propiedadesdeerror
eval Noexiste
exit MétodoAutoCAD.Application.Quit
exp FunciónExp
expand Noexiste
expt ^(operadorexponencial)
fill_image Utilizareleditordediálogo
findfile FunciónDir
fix FuncionesFix,Int,Cint
float FunciónCDbl
foreach InstrucciónForEach...Next
gc AutoCAD.Application.ActiveDocument.PurgeAll
gcd Noexiste
get_attr Utilizareleditordediálogo
get_tile Utilizareleditordediálogo
getangle MétodoAutoCAD.Application.ActiveDocument.Utility.GetAngle
getcfg PropiedadAutoCAD.Application.Preferences.property
getcname Noexiste
getcorner MétodoAutoCAD.Application.ActiveDocument.Utility.GetCorner
getdist MétodoAutoCAD.Application.ActiveDocument.Utility.GetDistance
getenv PropiedadAutoCAD.Application.Preferences.property
getfiled Utilizarelcuadrodediálogodearchivo
getint MétodoAutoCAD.Application.ActiveDocument.Utility.GetInteger
getkword MétodoAutoCAD.Application.ActiveDocument.Utility.GetKeyword
getorient MétodoAutoCAD.Application.ActiveDocument.Utility.MétodoGetOrientation
getpoint MétodoAutoCAD.Application.ActiveDocument.Utility.GetPoint
getreal MétodoAutoCAD.Application.ActiveDocument.Utility.GetReal
getstring MétodoAutoCAD.Application.ActiveDocument.Utility.GetString
getvar MétodoAutoCAD.Application.GetVariable
graphscr AppActivateAutoCAD.Application.Caption
grclear Funciónanticuada
grdraw Noexiste
grread Noexiste
grtext AutoCAD.Application.ActiveDocument.Utility.Prompt
grvecs Noexiste
handent AutoCAD.Application.ActiveDocument.ModelSpace.object.PropiedadHandle
help BuscarHELPenelíndicedeAyudaenpantalla
if InstrucciónIf…Then…Else
initget MétodoAutoCAD.Application.ActiveDocument.Utility.InitializeUserInput
inters AutoCAD.Application.ActiveDocument.Modelspace.object.IntersectWith
itoa FunciónStr
lambda Noexiste
last arrayname(UBound(arrayname))
length FunciónUBound
(lista) InstrucciónReDim
listp FunciónIsArray
load_dialog Utilizareleditordediálogo
load AutoLISPnopuedeutilizarseconAutomation
log FunciónLog
logand FunciónAnd
logior FunciónOr
lsh FunciónImp
mapcar Noexiste
max FunciónMax
mem Noexiste
member Utilizarcolección
menucmd ObjetoAutoCAD.Application.MenuBar
menugroup ObjetoAutoCAD.Application.MenuGroup
min FunciónMin
minusp Usarsintaxis<0
mode_tile Utilizareleditordediálogo
namedobjdict ColecciónAutoCAD.Application.ActiveDocument.
nentsel AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.SelectAtPoint
nentselp AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.SelectAtPoint
new_dialog Utilizareleditordediálogo
not Utilizarlosoperadoreslógicos
nth Utilizarsintaxisdeobjeto(n)
null FunciónIsNull
numberp TypeName(función)
open FunciónOpen
or Utilizarlosoperadoreslógicos
osnap Noexiste(SepuedeutilizarelmétodoSetVariableparacontrolarlavariabledesistemaOSMODE.)
polar MétodoAutoCAD.Application.ActiveDocument.Utility.PolarPoint
prin1 AutoCAD.Application.ActiveDocument.Utility.Prompt
princ AutoCAD.Application.ActiveDocument.Utility.Prompt
print AutoCAD.Application.ActiveDocument.Utility.Prompt
progn Noexiste
prompt AutoCAD.Application.ActiveDocument.Utility.Prompt
quit MétodoAutoCAD.Application.Quit
quote Noexiste
read Noexiste
read-char FunciónInput
read-line FunciónLineInput
redraw AutoCAD.Application.ActiveDocument.Modelspace.object.MétodoUpdate
regapp AutoCAD.Application.ActiveDocument.MétodoRegisteredApplications.Add
rem FunciónMod
repeat For… Each,While,
reverse Noexiste
rtos MétodoAutoCAD.Application.ActiveDocument.Utility.RealToString
set FunciónSet
set_tile Utilizareleditordediálogo
setcfg PropiedadAutoCAD.Application.Preferences.property
setfunhelp Noexiste
setq FunciónSet
setvar MétodoAutoCAD.Application.SetVariable
sin FunciónSin
setview AutoCAD.Application.ActiveDocument.Viewports.Viewport.MétodoSetView
slide_image Utilizareleditordediálogo
snvalid Noexiste
sqrt FunciónSqr
ssadd MétodoAutoCAD.Application.ActiveDocument.SelectionSets.Add
ssdel AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.Delete
ssget AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.SelectOnScreen
ssgetfirst Noexiste
sslength AutoCAD.Application.ActiveDocument.SelectionSets.MétodoSelectionSet.Count
ssmemb CompararIDdeobjetoconlosmiembrosdeSelectionSet
ssname AutoCAD.Application.ActiveDocument.SelectionSets.PropiedadSelectionSet.Name
ssnamex Noexiste
sssetfirst AutoCAD.Application.ActiveDocument.PickfirstSelectionSet
startapp FunciónShell
start_dialog Utilizareleditordediálogo
start_image Utilizareleditordediálogo
start_list Utilizareleditordediálogo
strcase FunciónStrConv
strcat Operador&
strlen FunciónLen
subst Noexiste
substr FunciónMid
tablero Noexiste
tblnext AutoCAD.Application.ActiveDocument.collection_object.MétodoItem
tblobjname AutoCAD.Application.ActiveDocument.collection_object.MétodoName
tblsearch AutoCAD.Application.ActiveDocument.collection_object.MétodoName
term_dialog Utilizareleditordediálogo
terpri Noexiste
textbox AutoCAD.Application.ActiveDocument.space.object.MétodoGetBoundingBox
textpage Noexiste
textscr Noexiste
trace Noexiste
trans MétodoAutoCAD.Application.ActiveDocument.Utility.MétodoTranslateCoordinates
type TypeName(función)
unload_dialog Utilizareleditordediálogo
untrace Noexiste
vector_image Utilizareleditordediálogo
ver PropiedadAutoCAD.Application.Version
ventanas ColecciónAutoCAD.Application.ActiveDocument.
wcmatch OperadorLike
while While… Wend
write-char FunciónPrint
write-line FunciónPrint
xdroom Noexiste
xdsize Noexiste
zerop Usar=0sintaxis
¿Comentarios?
Recommended