Aller au contenu

[Résolu] Créer un calque en LiSP


DenisHen

Messages recommandés

Bonjour à tous

 

J'aimerais créer en LiSP un calque comme le fait cette macro :

^c-calque;e;Nom du Calque;co;50;;ep;0.3;;tl;cache;;;

J'ai cherché partout mais tout le monde passe par

(commande "-calque" "e" ...

J'ai cherché dans d'autres LiSP (comme InsTopo) mais je n'ai pas trouvé...

 

D'avance, merci.

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Je viens de trouver ça dans une routine d'Azerty :

;;; ============================================= 
;;; CreeCalque 
;;; Création d'un Calque avec ses attributs 
;;; Usage : (CreeCalque "NomDuCalque" "Style de ligne" "Epaisseur" "Couleur" "Tracer") 
;;; Tracer = 1 , Ne pas tracer = 0 
;;; Epaisseur : 20 pour 0.20 , -1 pour DuCalque , -1 pour Par_Défaut ... 
;;; ============================================= 
(defun CreeCalque (Calque LT Ep Col Plot)
 (entmakex
   (list
     (cons 0 "LAYER")
     (cons 100 "AcDbSymbolTableRecord")
     (cons 100 "AcDbLayerTableRecord")
     (cons 70 0)
     (cons 2 Calque)
     (cons 62 (atoi Col))
     (cons 6 LT)
     (cons 370 (atoi Ep))
     (cons 290 (atoi Plot))
   ) ;_ Fin:list
 ) ;_ Fin:entmakex
) ;_ Fin:defun

 

Mais celà ne me rend pas le calque créé courant...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

A toutes fins utiles, j'ai ajouter çà à la fin de la routine...

(setvar "clayer" Calque)

Qui rend le calque créé courant, je peux donc lancer la commande _pline à la suite de la macro, qui est maintenant ;

^C^C(c:CreeCalque "CalqueNouveau" "cachex2" "0.20" "5");^C_pline;

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Hello DenisH

 

SVP tu fais attention et tu es patient quand tu crees de nouveaux sujets !

Il faut attendre que le site "CADXP" valide ton nouveau sujet : 20s-1mn parfois ...

 

Cela evitera aux moderateurs de passer du temps a selectionner puis effacer tes sujets en double/triple/etc

 

Merci d'avance, Bonne continuation, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Merci pour ces remarques, je sais que je vais parfoit trop vite, mais là, c'est "CADXP" qui me disait qu'il fallait que je recommence à poster dans 3 secondes. Et c'est là que j'ai compris les "post multiple" d'autres membres...

 

Bonne journée à tous...

 

Denis. ;)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

  • 3 ans après...

Bonjour, désolé de déterrer le post mais voila je me pose une question, en cour de lisp on à été un peu laissé de côté donc j'avais trouvé une astuce pour créer un calque, le choisir, changer sa couleur puis à la fin de la commande, retourner dans le calque 0

 

J'aimerai donc votre avis et m'indiquer si c'est la bonne façon de faire ou s'il y à plus simple, plus compliqué ?

Je tiens à dire que je n'ai eu que 4 jours de formation scolaire ou l'on à recopié un PDF pour "nous apprendre" <_< vive l'éducation nationale donc soyez indulgent :D

 

 

 

(command "-calque" "n" "parking" "" "" )

(command "-calque" "ch" "parking" "" )

(command "-calque" "co" "u" "255,0,255" "" "" "" )

 

(command "-calque" "ch" "0" "" )

“L'environnement est important, pour sauver un arbre, mangez un castor !”

Lien vers le commentaire
Partager sur d’autres sites

Je croyais "détenir" une solution mais malheureusement je tombe sur un problème ...

 

Je souhaiterai dans ma commande qui me permet de tracer une polyligne puis de la décaler, placer la première polyligne tracée dans le calque "TOTO" et placer son décallage dans le calque "TATA" mais je n'y arrive pas HEEEEELP :D :D

 

 

 

(defun c:borax (/ ent REP EP DC)

(setvar "OSMODE" 6)

(initget "A1 A2")

(setq REP (getkword "\nType de bordure [A1/A2] <A1> : "))

(if (not rep)

(setq rep "A1")

)

(cond

 

((= REP "A1")

 

(Prompt

"\nCliquer le parcour de votre réseau <Taper (Return) pour FIN>"

)

(terpri) je pensai donner l'ordre calque TOTO ici

(setq pt (getpoint "\nPoint de Départ: "))

(command "polylign" pt "la" 0.02 0.02)

(while pt

(setq pt (getpoint "\nPoint suivant ou fin (Return pour FIN): "))

(command pt)

)

Et l'ordre TATA ici mais malheureusement ma "semi-combine" ne fonctionne pas :huh:

(setq EP 0.00)

(setq DC 0.2)

)

 

 

 

((= REP "A2")

(Prompt

"\nCliquer le parcour de votre réseau <Taper (Return) pour FIN>"

)

(terpri)

(setq pt (getpoint "\nPoint d'origine: "))

(command "polylign" pt "la" 0.02 0.02)

(while pt

(setq pt (getpoint "\nPoint suivant(Return pour FIN): "))

(command pt)

)

(setq EP 0.00)

(setq DC 0.15)

)

)

 

 

 

(if (setq ent (car (entsel)))

(progn

(command "_.offset" DC ent pause "")

(command "_.pedit" (entlast) "la" EP "")

) ; fin progn

) ; fin if

(princ)

)

“L'environnement est important, pour sauver un arbre, mangez un castor !”

Lien vers le commentaire
Partager sur d’autres sites

Super !! sa fonctionne !!

 

Testé en tant que commande cela marche mais une fois dans le LISP ...

 

par contre j'aurai 2 ou 3 questions,

 

la première: dans ta commande, le (entlast) je ne comprend pas pourquoi il n'est pas entres guillemets :blink: prcke la il n'est pas compté comme texte écrit comme le "_chprop"

 

la deuxième: toujours dans ta commande, pourquoi le variable-calque lui non plus n'est pas entre guillemets ?

 

la troisième: comment se fait il que ma commande pour changer de calques ne fonctionne pas ?

 

(command "-calque" "ch" "nom_du_calque" "" )

car j'appelle la commande "_calque", oublié de mettre le (entlast) ici ?, choisir avec "ch" et le nommer entre "" puis valider

 

j'énumère mes questions mais c'est pour être le plus clair possible pour ne pas m'égarer dans une phrases pour tout expliquer :D

Modifié par Red

“L'environnement est important, pour sauver un arbre, mangez un castor !”

Lien vers le commentaire
Partager sur d’autres sites

Il y à un truc que je ne pige pas encore ...

 

Comment je peut savoir ou mettre ta commande ? :blink:

 

Intuitivement je place la première après la création de la polyligne et la seconde après le décalage mais visiblement cela ne marche pas ... qu'est ce que je ne comprend pas, est ce que je n'arrive pas à différencier la polyligne tracée et celle décalée dans mon lisp ?

 

Je vois aussi qu'à la fin de ma commande, les autres polylignes restent en épaisseur de 0.02, est ce que je dois lancer un "_pedit" "0" ?

 

(defun c:borax (/ ent REP EP DC)
 (setvar "OSMODE" 6)
 (initget "A1 A2")
 (setq REP (getkword "\nType de bordure [A1/A2] <A1> : "))
 (if (not rep)
   (setq rep "A1")
 )
 (cond

   ((= REP "A1")
    (Prompt
      "\nCliquer le parcour de votre réseau <Taper (Return) pour FIN>"
    )
    (terpri)
    (setq pt (getpoint "\nPoint de Départ: "))
    (command "polylign" pt "la" 0.02 0.02)
    (while pt
      (setq pt (getpoint "\nPoint suivant ou fin (Return pour FIN): "))
      (command pt)
    )
(command "_chprop" (entlast) "" "_la" SRMV_Bordure_A1_AVANT "")
    (setq EP 0.02)
    (setq DC 0.2)
(command "_chprop" (entlast) "" "_la" SRMV_Bordure_A1_ARRIERE "")
   )

   ((= REP "A2")
    (Prompt
      "\nCliquer le parcour de votre réseau <Taper (Return) pour FIN>"
    )
    (terpri)
    (setq pt (getpoint "\nPoint d'origine: "))
    (command "polylign" pt "la" 0.02 0.02)
    (while pt
      (setq pt (getpoint "\nPoint suivant(Return pour FIN): "))
      (command pt)
    )
    (setq EP 0.02)
    (setq DC 0.15)
   )
 )

 (if (setq ent (car (entsel)))
   (progn
     (command "_.offset" DC ent pause "")
     (command "_.pedit" (entlast) "la" EP "")
   )					; fin progn
 )					; fin if
 (princ)
)

“L'environnement est important, pour sauver un arbre, mangez un castor !”

Lien vers le commentaire
Partager sur d’autres sites

Solution trouvé par Bonuscad,

 

(defun c:boraxt ( / REP DC)
       (setvar "OSMODE" 6)
       (initget "A1 A2")
       (setq REP (getkword "\nType de bordure [A1/A2] <A1> : "))
       (if (not rep)
               (setq rep "A1")
       )
       (if (not (tblsearch "LAYER" "Bordure_A1_AVANT"))
               (command "_.layer" "_new" "Bordure_A1_AVANT" "")
       )
       (if (not (tblsearch "LAYER" "Bordure_A1_ARRIERE"))
               (command "_.layer" "_new" "Bordure_A1_ARRIERE" "")
       )
       (if (not (tblsearch "LAYER" "Bordure_A2_AVANT"))
               (command "_.layer" "_new" "SRMV_Bordure_A2_AVANT" "")
       )
       (if (not (tblsearch "LAYER" "Bordure_A2_ARRIERE"))
               (command "_.layer" "_new" "Bordure_A2_ARRIERE" "")
       )
 
       (prin1 "\nCliquer le parcour de votre réseau <Taper (Return) pour FIN>")
       (command "_.pline" pause "_width" 0.02 0.02)
       (while (not (zerop (getvar "CMDACTIVE")))
               (command pause)
       )
       (cond
               ((= REP "A1")(command "_.chprop" (entlast) "" "_layer" "Bordure_A1_AVANT" "")
                       (setq DC 0.2)
       (command "_.offset" DC (entlast) pause "")
       (command "_.chprop" (entlast) "" "_layer" "Bordure_A1_ARRIERE" "")
       (prin1)

                )
               ((= REP "A2")(command "_.chprop" (entlast) "" "_layer" "SBordure_A2_AVANT" "")
                       (setq DC 0.15)
       (command "_.offset" DC (entlast) pause "")
       (command "_.chprop" (entlast) "" "_layer" "Bordure_A2_ARRIERE" "")
       (prin1)

                )
       )

)

 

c'est la commande (command "_.chprop" (entlast) "" "_layer" "SBordure_A2_AVANT" "") qui à résolu mon soucis.

 

Pour ma part le sujet est clos et résolu un grand MERCI à tous !!! :D

“L'environnement est important, pour sauver un arbre, mangez un castor !”

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité