Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

J’expérimente, je tâtonne,mais la je trébuche, sans doute sur un simple petit cailloux, mais j'ai beau le chercher, je ne le trouve pas ...

 

Voici la route :

;---------------MAIN---------------------------
(defun c:test01 ()

 (setq th 70)
 (setq epw 35)
 (setq pw 900)
 (setq pt1 (getpoint "\nPick start point : "))
 (setq pt2 (getpoint "\nPick end point : "))
;  (setq wl (distance pt1 pt2))
;  (setq ang (angle pt1 pt2))
;  (setq pn (fix (+ (/ wl pw) 1)))


;-------------Create Layer for Panels----------
 (if (null (tblsearch "LAYER" "005_kpanel"))
   (entmake
     (list
'(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(70 . 0)
(cons 2 "005_kpanel")
(cons 6 "Continuous")
(cons 62 2)
(cons 290 1)
(cons 370 18)
     );_list
   );_entmake
 );_if


;------------Make Start Endpost----------------
 (setq v1 (list (- (car pt1) epw) (- (cadr pt1) (/ th 2))))
 (setq v2 (list (- (car pt1) epw) (+ (cadr pt1) (/ th 2))))
 (setq v3 (list (car pt1) (+ (cadr pt1) (/ th 2))))
 (setq v4 (list (car pt1) (- (cadr pt1) (/ th 2))))
 
 (entmake
   (list
     '(0 . "LWPOLYLINE")
     '(8 . "005_kpanel")
     '(90 . 4)
     '(70 . 1)
     (cons 10 v1)
     (cons 10 v2)
     (cons 10 v3)
     (cons 10 v4)
   );_list
 );_entmake

);_defun

 

Resultat :

 

コマンド: TEST01
Pick start point : 0,0
Pick end point : 0,2000
nil

 

Pas de message d'erreur, c'est cool, mais je ne vois pas polyligne ...

 

J'ai essaye de mettre osmode a 0, et j'obtiends ca :

 

コマンド: test01
Pick start point : 0,0
Pick end point : 0,2000
14847

 

Toujours pas de polyligne ... :unsure:

 

Alors, un coup de main ne serait pas de refus :(

Posté(e)

Bonjour Julian-Nihon,

Tout comme pour la création du calque, il faut que tu ajoute les 2 codes de groupes 100

'(100 . "AcDbEntity")

'(100 . "AcDbPolyline")

Dans la liste dxf.

Bonne journée.

 

PS : J'adore les caractères Japonais dans les résultats d'interprétations. :D

Posté(e)

Bonjour,

 

Depuis l'apparition des sous-classe (code DXF 100), on est obligé de fournir ces classes pour que la liste soit valide pour entmake, il n'y a pas de valeur par defaut. Comme tu l'as fait d'ailleurs pour l'entité LAYER.

 

Donc:

 (entmake
   (list
     '(0 . "LWPOLYLINE")
     '(100 . "AcDbEntity")
     '(8 . "005_kpanel")
     '(100 . "AcDbPolyline")
     '(90 . 4)
     '(70 . 1)
     (cons 10 v1)
     (cons 10 v2)
     (cons 10 v3)
     (cons 10 v4)
   );_list
 );_entmake

 

devrait fonctionner sans problème

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bonjour,

 

Avec des marqueurs de sous classes, cela devrait mieux se passer…

(entmake
   (list
     '(0 . "LWPOLYLINE")
     '(100 . "AcDbEntity")
     '(8 . "005_kpanel")
     '(100 . "AcDbPolyline")
     '(90 . 4)
     '(70 . 1)
     (cons 10 v1)
     (cons 10 v2)
     (cons 10 v3)
     (cons 10 v4)
   );_list
 );_entmake

Apprendre => Prendre => Rendre

Posté(e)

Re,

 

Visible bonuscad a été le plus rapide, bravo à lui.

 

Dans ce cas pour apporter quelque chose au post, je vais essayer de compléter cette histoire de sous classes, avec ce que j’en ai compris par expérimentation. Comme l'a précisé bonuscad depuis leurs apparitions ces définitions sont nécessaires pour les entités qui leurs sont contemporaines cas des polylignes optimisées apparue depuis la version R14.

 

Par contre pour les entités antérieures à l’apparition des sous-classes ces définitions sont facultatives dans les définitions d’entmake (certainement pour des soucis de compatibilité entre application lisp), c’est le cas des entités historique que sont les cercles, arc, lignes ect..

 

Ceci explique à mon avis qu’une ligne peut être définie comme ceci avec entmake sans marqueur de sous-classe contrairement à la polyligne:

(entmake (list '(0 . "LINE") (cons 10 pt1) (cons 11 pt2))

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Salut

 

Et bien, c'est du rapide pour les réponses ;)

 

Je donne quand même ma routine pour créer des polylignes, cela peut aider à comprendre.

(defun dessine_poly_patrick(pts coul cal esp / lst ent)
 (setq ent (mapcar '(lambda(x)(cons 10 x)) pts)
ent (append (vl-remove
	    nil
	    (list
	      (cons   0 "LWPOLYLINE")
	      (cons 100 "AcDbEntity")
	      (cons 100 "AcDbPolyline")
	      (cons  70 0)
	      (cons  90 (1+ (length pts)))
	      (cons   6 "BYLAYER")
	      (car coul)
	      (if (cadr coul)
	        (cadr coul)
	      )
	      (if (caddr coul)
	        (caddr coul)
	      )
	      (if esp
		(cons 8 cal)
		(progn
		  (cons   8 "0")
		  (cons  67 1)
		  (cons 410 cal)
		)
	      )
	    )
	  )
	  ent
    )
 )
 (entmake ent)
)

 

Exemple

(setq Ma_Poly (dessine_poly_patrick '((0.0 0.0 0.0) (1.0 1.0 0.0) (5.0 5.0 0.0)) '((62 . 1) nil nil) "Mon_Calque" T))

 

pts = liste de points --> Exemple '((0.0 0.0 0.0) (1.0 1.0 0.0) (5.0 5.0 0.0))

coul = couleur de la poly --> Exemple '((62 . 1) nil nil) pour la couleur rouge. Les deux nils sont pour les couleurs vraies ou le nom de la couleur (dxf 420/430)

cal est pour le nom du calque

esp est pour l'espace objet/papier --> valeur différent de nil --> Espace Papier

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Merci VDH-BRUNO,

Merci pour la précision, car en effet je ne comprenais pas pourquoi certaine fois entmake pouvais fonctionner sans ces marqueurs.

Olivier

PS : Regarde bien, j'avais grillé bonuscad au poteau(sur l'épaisseur de l'écorce) :D

Posté(e)

PS : Regarde bien, j'avais grillé bonuscad au poteau(sur l'épaisseur de l'écorce) :D

 

Effectivement bravo, j'avais pas vu avec prés d'1 minute derrière, j'étais vraiment bon dernier :D :D :D

Apprendre => Prendre => Rendre

Posté(e)

Merci a tout le monde, rapide et efficace :o

 

Et moi, ben, je me coucherais moins bete ce soir ...

 

Meme si le "probleme" est resolu, quelqu'un aurait-il une idee sur que represente ce "nil" et ce "14847" (quand osmode=0) ?

 

PS : J'adore les caractères Japonais dans les résultats d'interprétations.

 

Si tu veux, j'ai aussi les erreurs en japonais, les options en japonais ..... :(rires forts):

Posté(e)

Meme si le "probleme" est resolu, quelqu'un aurait-il une idee sur que represente ce "nil" et ce "14847" (quand osmode=0) ?

 

Difficile de dire comme cela, je pense (mais je peux me tromper) que c'est la valeur d'OSMODE qui est retournée.

 

Quand les accrochages aux objets sont désactivés à l'aide du bouton Accrobj de la barre d'état, le code binaire 16384 (0x4000) est renvoyé, en plus de la valeur normale d'OSMODE.

 

Donc:

(- 16384 14847) -> 1537

 

1537 -> (+ 1024 512 1)

 

1024 Annule tous les accrochages aux objets.

512 PROche

1 EXTREmité

 

A mon avis tu avais ces 3 modes d'actif avant d'inactiver l'accroche objet.

 

NB: 1 - Je n'ai pas réussi à reproduire ce que tu décrit.

 

2 - La définition de ce qui est dit pour la valeur 1024 dans l'aide à propos d'OSMODE correspond (dans les anciennes versions d'Autocad) au mode rapide d'accrochage (le terme "Annule" employé ne me convient pas, à moins que quelque chose m’aie échappé)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Difficile de dire comme cela, je pense (mais je peux me tromper) que c'est la valeur d'OSMODE qui est retournée.

 

 

 

Donc:

(- 16384 14847) -> 1537

 

1537 -> (+ 1024 512 1)

 

1024 Annule tous les accrochages aux objets.

512 PROche

1 EXTREmité

 

A mon avis tu avais ces 3 modes d'actif avant d'inactiver l'accroche objet.

 

NB: 1 - Je n'ai pas réussi à reproduire ce que tu décrit.

 

2 - La définition de ce qui est dit pour la valeur 1024 dans l'aide à propos d'OSMODE correspond (dans les anciennes versions d'Autocad) au mode rapide d'accrochage (le terme "Annule" employé ne me convient pas, à moins que quelque chose m’aie échappé)

 

 

Bonjour,

 

BonusCAD, merci pour ces precisions.

En faisant varier les points d'accroche, le résultat change, donc il semblerait que ton raisonnement soit correct ...

 

Bref, il faut que je fasse attention et que je lise la doc :(rires forts):

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é