nazemrap
Membres-
Compteur de contenus
204 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par nazemrap
-
Bonsoir. Il n'est effectivement pas possible de créer en VBA un bloc dynamique. Mais dans la mesure où celui-ci est créé, la commande d'insertion en vba me semble adéquate. Je viens d'essayer et mon bloc reste dynamique. Je suis peut-être passé à côté, mais il semble que le problème soit ailleurs. Sauf si un des facteurs a été modifié !!!! nazemrap [Edité le 25/5/2006 par nazemrap]
-
Bonjour. Voici du code qui te permet de cliquer sur un objet et qui renvoie le nom du groupe auquel cet objet appartient. Cela te permettra peut-être d'avancer... Public Sub grp_or_not_grp() Dim obj As AcadObject Dim groupe As AcadGroup Dim averif As String ThisDrawing.Utility.GetEntity obj, ptbase averif = obj.Handle For Each groupe In ThisDrawing.Groups For Each obj In groupe If obj.Handle = averif Then MsgBox "l' objet appartient au groupe: " & groupe.Name Next Next End Sub nazemrap
-
Bonjour. Si tu as exécuté le code, le groupe est créé avec les objets concernés. Si tu exécutes à nouveau, les objets sont déjà présents dans le groupe. Il faut donc supprimer le groupe avant de recommencer la commande, ou enlever les objets du groupe. nazemrap
-
Perte de la fonction \"doubleclick\" ?!? [REGLE]
nazemrap a répondu à un(e) sujet de smile68 dans AutoCAD 2004
Bonjour Voir si la variable pickfirst=1 outils > options > sélection > selection action Un endroit precieux: http://www.rebcad.fr/TOP%20QUIZ%20des%20Gal%E8res%20AutoCAD.pdf nazemrap [Edité le 26/4/2006 par nazemrap] -
Bonjour. Si il s'agit bien de changer le type de point depuis VBA, le plus simple me semble d' utiliser la méthode SetVariable. intData correspondant au numéro du point de la boite de dialogue Dim sysVarName As String Dim sysVarData As Variant Dim intData As Integer sysVarName = "PDMODE" intData = 3 sysVarData = intData ThisDrawing.SetVariable sysVarName, sysVarData nazemrap
-
re Je crois que j'y suis: Le texte sous un solide 3d, puis cache avec l'option des lignes en discontinu. Exploser le texte avec le menu express, exploser 2 fois ensuite. Cache pour vérifier. Pfff. nazemrap
-
Re Pour la seconde j'ai un tuc tarabiscoté qui passe par wmf mais qui marche à la suite du premier ? nazemrap
-
bonsoir. Pour la première je crois qu'il faut savoir jouer à cache cache ? pour la seconde je sèche encore... nazemrap
-
Bonjour. Je pense que le Lisp est en effet plus performant. Mais je ne suis qu'un bricoleur, et j'aime bien le côté 'bout de ficelle" du VBA. Tu me dis si ça marche !? nazemrap
-
Bonsoir. Je ne suis pas très efficace en programation vb. Mon soucis est d'arriver à un résultat. La copie de la polyligne se justifie pour la conserver après avoir décomposer la première, sinon elle n' éxisterait plus. Elle est décomposée pour récupérer le segment souhaité. Le segment est identifié par la sélection effectuée qui insère un point. Attention le mode d'accrochage "proche" ou autre est utilisé pour la sélection, cela garantit que le point est sur le segment La méthode delete efface les segments. la valeur de l'angle est renvoyée en degré. Je joins le fichier exemple. 'renvoi l'angle d'un segment de polyligne Public Sub truc() Dim objetselection As AcadEntity Dim polyligne, copiepolyligne As AcadLWPolyline Dim pointdeselection As Variant Dim coordodeselection(0 To 2) As Double Dim explosepoly As Variant Dim point As AcadPoint Dim intpoints As Variant Dim ligne As AcadLine 'NB l'accrochage "proche" doit être utilisé pendant la sélection 'Récupère la polyligne ThisDrawing.Utility.GetEntity objetselection, pointdeselection, "Sélectionnez la polyligne !" Set polyligne = objetselection 'Récupère les coordonnées du point de sélection coordodeselection(0) = pointdeselection(0): coordodeselection(1) = pointdeselection(1) 'Insère un point Set point = ThisDrawing.ModelSpace.AddPoint(pointdeselection) 'Decompose la polyligne explosepoly = polyligne.Explode 'Boucle sur les objets résultants Dim I As Integer For I = 0 To UBound(explosepoly) If explosepoly(I).ObjectName = "AcDbLine" Then Set ligne = explosepoly(I) 'Teste l'intersection avec le point intpoints = ligne.IntersectWith(point, acExtendNone) If VarType(intpoints) <> vbEmpty Then If UBound(intpoints) = 2 Then 'renvoi de la valeur de l'angle en degré MsgBox ligne.Angle * (180 / 3.141589) End If End If End If Next ligne.Delete point.Delete End Sub
-
Bonsoir. Sélection de la polylige en identifiant le point de sélection. Copier la polyligne si besoin. Décomposer la polyligne. Renvoyer la valeur de l'angle du segment correspondant au point de sélection. Le tout en visual. :) nazemrap [Edité le 21/3/2006 par nazemrap]
-
Problèmes Questions AutoCAD en tout genre, la suite...
nazemrap a répondu à un(e) sujet de rebcao dans AutoCAD LT 2006
Bonsoir. Super tableau, vraiment bien !!! C'est vrai qu'il faudrait pouvoir y accéder avant chaque question ! J'étais un peu passé à côté. nazemrap -
perturbations sur CADxp !!!!!!
nazemrap a répondu à un(e) sujet de rebcao dans CADxp, comment ça marche?
Bonjour. Pareil, impossible jusqu'à maintenant de me connecter. nazemrap -
Hello. y a pas de quoi. Tu sais qu'il y a plein d'exemples dans vba autocad. Penses à utiliser l'explorateur d'objets ça aide bien. Bonne continuation nazemrap
-
Bonjour. Sendcommand reviendrait à travailler sur la ligne de commande en sélectionnant les régions. Voici un essai avec le même programme depuis une sélection de 2 polylignes, qui effectue une soustraction. A adapter aux circonstances... Public Sub version3() Dim poly As AcadLWPolyline Dim poly_ef As AcadLWPolyline Dim region As Variant Dim region_element(1) As AcadEntity Dim selec As AcadSelectionSet Dim sel_ctrl As AcadSelectionSet Dim n As Integer 'création de la sélection des polylignes On Error GoTo ici Set selec = ThisDrawing.SelectionSets.Add("truc") selec.SelectOnScreen 'appliquer éventuellement un filtre 'Boucle sur la selection For Each poly In selec 'Ouvrir la polyligne attention si option clore a été utilisée. poly.Closed = False 'Affecter la polyligne Set region_element(n) = poly n = n + 1 Next 'création de la région region = ThisDrawing.ModelSpace.AddRegion(region_element) 'affectation Dim reg1 As AcadRegion Dim reg2 As AcadRegion Set reg1 = region(0) Set reg2 = region(1) 'soustraction reg1.Boolean acSubtraction, reg2 'efface For n = 0 To 1 region_element(n).Delete Next ici: ThisDrawing.SelectionSets("truc").Delete End Sub nazemrap
-
Bonjour. La polyligne fermée empêche de reconnaitre une liste d'entités qui pourraient constituer la région. Voici donc un exemple qui décompose la polyligne pour la reconstituer en région. Public Sub poly_en_region() Dim region As Variant Dim poly As AcadLWPolyline Dim poly_explosee As Variant Dim region_element() As AcadEntity Dim tour As Integer Dim n As Integer 'sélection de la polyligne ThisDrawing.Utility.GetEntity poly, pntbase, "sélectionnez la polyligne" 'Exploser la polyligne poly_explosee = poly.Explode 'recupération du nombre d'objets qui composent la polyligne n = UBound(poly_explosee) 'Dimensionnement de la variable qui reçoit la liste des éléments ReDim region_element(n) As AcadEntity 'Affectation des éléments For tour = 0 To n Set region_element(tour) = poly_explosee(tour) Next 'création de la région region = ThisDrawing.ModelSpace.AddRegion(region_element) 'effacement pour ne conserver que la région For tour = 0 To n poly_explosee(tour).Delete Next poly.Delete End Sub Je pense qu'il y a mieux à faire, mais si cela peut te donner une piste... Je ne comprend pas trop l'objet de la seconde question. Amicalement nazemrap Je viens de tester autre chose, plus court. Public Sub version2() Dim poly As AcadLWPolyline Dim region As Variant Dim region_element(0) As AcadEntity 'sélection de la polyligne ThisDrawing.Utility.GetEntity poly, pntbase, "sélectionnez la polyligne" 'Ouvrir la polyligne attention si option clore a été utilisée. poly.Closed = False 'Affecter la polyligne Set region_element(0) = poly 'création de la région region = ThisDrawing.ModelSpace.AddRegion(region_element) poly.Delete End Sub [Edité le 7/3/2006 par nazemrap]
-
Bonjour. Il s'agit peut-être de la variable" PICKFIRST" qui doit être à 1. Cela revient à cocher dans le menu déroulant "outils" > "options" > onglet "séléction" > la case "sélection nom/verbe". Amicalement. nazemrap
-
Bonjour. Si c'est en haut à gauche, l'aide donne ceci: "StartUpPosition, propriété Renvoie ou définit une valeur indiquant la position d'un objet UserForm lors de sa première apparition. La propriété StartUpPosition peut prendre l'une des quatre valeurs suivantes : Valeur Paramètre Description Manual 0 Aucune valeur initiale n'est indiquée. CenterOwner 1 Centre l'objet UserForm au sein de l'élément auquel il appartient. CenterScreen 2 Centre l'objet par rapport à l'écran. WindowsDefault 3 Place l'objet dans l'angle supérieur gauche de l'écran. Remarques Vous pouvez définir la propriété StartUpPosition par programmation ou depuis la fenêtre Propriétés" nazemrap [Edité le 25/2/2006 par nazemrap]
-
Bonsoir. Juste un truc, c'est du 3 D. Est-ce qu'il n'y a a pas des calques désactivés avec des objets 3d dessus ? Cache tient compte des objets sur calque désactivés. nazemrap
-
Bonjour. j'ai trouvé sur le site Velux 0.9 mini pour l'allège http://www.velux.fr/veluxcommon/resources/cache/dc5b957c-7ffc-4a88-9f07-1e3bdeab948c_legislation%20VELUX.pdf nazemrap
-
Bonjour. Il me semble qu'à ce stade le résultat est une variable "variant". Il faut encore l'affecter à une variable polyligne, après l'avoir déclarée. dim objetpolyligne as AcadLWPolyline set objetpolyligne=polyline_décalée(0) nazemrap
-
Bonsoir . Je me suis fait une macro vba qui transforme les 3dface sen solides et donc une surfgau. nazemrap
-
Bonsoir. Peu-être par "parcourir " vers c:\windows\system32\FM20.dll . C'est ce que je trouve comme indication. nazemrap
-
Bonjour. J'ai eu besoin de cela: copier un ou des objets plusieurs fois à une distance donnée, suivant l'axe des X (éventuellement orienté), sans gérer les colonnes, sur une ligne donc. Si ça peut servir .... Si j'ai fait des bétises, je veux bien qu'on me le dise. Dim cppt() As AcadEntity Dim point(0 To 2) As Double Dim distance As Double Dim plus As Double Dim nombre As Double Dim pnt As Variant Dim selection_objets As AcadSelectionSet Dim obj As AcadEntity Dim selec As AcadSelectionSet Public Sub copie_fois_distance() distance = 0 For Each selec In ThisDrawing.SelectionSets If selec.Name = "selecobj" Then selec.Delete: Exit For Next Set selection_objets = ThisDrawing.SelectionSets.Add("selecobj") selection_objets.SelectOnScreen pnt = ThisDrawing.Utility.GetPoint(, "Quel est le point de base? ") point(0) = pnt(0): point(1) = pnt(1): point(2) = pnt(2) nombre = InputBox("combien d'objets ?") plus = InputBox("Quelle distance ?") nombre = nombre + 1 ReDim cppt(nombre) For Each obj In selection_objets For tour = 1 To nombre point(0) = pnt(0): point(1) = pnt(1): point(2) = pnt(2) Set cppt(tour) = obj.Copy point(0) = point(0) + distance ' Transcrit les points en coordonnées générales Dim pointUCS1 As Variant Dim pointUCS2 As Variant pointUCS1 = ThisDrawing.Utility.TranslateCoordinates(pnt, acUCS, acWorld, False) pointUCS2 = ThisDrawing.Utility.TranslateCoordinates(point, acUCS, acWorld, False) cppt(tour).Move pointUCS1, pointUCS2 distance = distance + plus Next distance = 0 Next ThisDrawing.SelectionSets("selecobj").Delete End Sub
-
Bonsoir. Est-ce que ce ne serait pas surftab1 et surftab2 qui permettent de densifier le maillage dans la commande surfgau ? nazemrap
