明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 629|回复: 13

[提问] entmake动态生成带弧度的填充实体时遇到的问题求助,谢谢~

[复制链接]
发表于 2024-9-25 18:12:26 | 显示全部楼层 |阅读模式
本帖最后由 逗亦斗霸 于 2024-9-25 18:14 编辑
  1. (defun c:tt (/ p0)
  2. (setq p0 (getpoint "\n起点: ")
  3.     pn (getpoint p0 "\n终点: ")
  4.     jd (angle p0 pn)
  5.       p1 (mapcar '+ p0 '(420 0 0) )
  6.       p2 (mapcar '+ p0 '(0 -210 0) )
  7.     jd1 (angle p0 p2)
  8. )
  9. (setq
  10.       pt1  (polar p0 jd 420)
  11.       pt2  (polar p0 (+ jd jd1) 210)
  12.       pt3  (polar pt2 jd 420)
  13. )
  14. (entmake
  15.     (list
  16.      '(0 . "hatch")
  17.        '(100 . "AcDbEntity")
  18.        '(67 . 0)
  19.        '(410 . "Model")
  20.         (cons 8 "0")
  21.        '(100 . "AcDbHatch")
  22.        '(10 0.0 0.0 0.0)
  23.        '(210 0.0 0.0 1.0)
  24.         (cons 2 "SOLID")
  25.        '(70 . 1)
  26.        '(71 . 1)
  27.        '(91 . 1)
  28.        '(92 . 1)
  29.        '(93 . 3)
  30.        '(72 . 1)
  31.        (cons 10 p0)
  32.        (cons 11 pt1)
  33.        '(72 . 2)
  34.        (cons 10 pt3)
  35.        '(40 . 210)
  36.        (cons 50 (+ (* pi (/ jd 180.) ) (/ pi 2) ) )
  37.        (cons 51 (+ (* pi (/ jd 180.) ) pi) )
  38.        '(73 . 1)
  39.        '(72 . 2)
  40.        (cons 10 pt2)
  41.        '(40 . 210)
  42.        (cons 50 (+ (* pi (/ jd 180.) ) (* pi 2) ) )
  43.        (cons 51 (+ (* pi (/ jd 180.) ) (* pi 2.5) ) )
  44.        '(73 . 1)
  45.        '(97 . 0)
  46.        '(75 . 1)
  47.        '(76 . 1)
  48.        '(98 . 1)
  49.        (cons 10 p0)
  50.       '(453 . 2)
  51.       '(463 . 0)
  52.       '(463 . 1)
  53.       '(470 . "LINEAR")
  54.      )
  55. )
  56. (princ)
  57. )
此代码水平零角度时可以正常生成我想要的填充样式(图1),但当有角度时则会出现异样(图2和图3),问题应该是出在DXF组码50和51,尝试修改却未成功,现请求大佬指点一下怎么修改?谢谢~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-9-29 09:01:19 | 显示全部楼层
本帖最后由 飞雪神光 于 2024-9-29 09:03 编辑

@统一网名 回复的就是一种答案 我换掉了command  
  1. (defun c:tt (/ an lastobj num p0 p1 pt pt1 pt2 pt3)
  2.   (setq
  3.     p0 (getpoint "\n起点:")
  4.     pt (getpoint p0 "\n终点:")
  5.     num (getint "\n生成数量:<1>")
  6.     pt1(polar p0 0 420)
  7.     pt2(polar p0 (* pi 1.5) 210)
  8.     pt3(polar pt2 0 420)
  9.   )
  10.         (or num (setq num 1))
  11.         (entmake
  12.                 (list
  13.                         '(0 . "hatch")
  14.                         '(100 . "AcDbEntity")
  15.                         '(67 . 0)
  16.                         '(410 . "Model")
  17.                         (cons 8 "0")
  18.                         '(100 . "AcDbHatch")
  19.                         '(10 0.0 0.0 0.0)
  20.                         '(210 0.0 0.0 1.0)
  21.                         (cons 2 "SOLID")
  22.                         '(70 . 1)
  23.                         '(71 . 1)
  24.                         '(91 . 1)
  25.                         '(92 . 1)
  26.                         '(93 . 3)
  27.                         '(72 . 1)
  28.                         (cons 10 p0)
  29.                         (cons 11 pt1)
  30.                         '(72 . 2)
  31.                         (cons 10 pt3)
  32.                         '(40 . 210)
  33.                         (cons 50 (* pi 0.5))
  34.                         (cons 51 pi)
  35.                         '(73 . 1)
  36.                         '(72 . 2)
  37.                         (cons 10 pt2)
  38.                         '(40 . 210)
  39.                         (cons 50 (* pi 2.))
  40.                         (cons 51 (* pi 2.5))
  41.                         '(73 . 1)
  42.                         '(97 . 0)
  43.                         '(75 . 1)
  44.                         '(76 . 1)
  45.                         '(98 . 1)
  46.                         (cons 10 p0)
  47.                         '(453 . 2)
  48.                         '(463 . 0)
  49.                         '(463 . 1)
  50.                         '(470 . "LINEAR")
  51.                 )
  52.         )
  53.         (vla-Rotate (setq lastobj (vlax-ename->vla-object (entlast))) (vlax-3D-point p0) (setq an (angle p0 pt)))
  54.         (repeat (1- num)
  55.                 (setq p1 (polar p0 an 420));间距
  56.                 (vla-Move (setq lastobj (vla-Copy lastobj)) (vlax-3D-point p0) (vlax-3D-point p1))
  57.                 (setq p0 p1)
  58.         )
  59.         (princ)
  60. )
发表于 2024-9-26 08:56:42 | 显示全部楼层
没有搞明白是咋运行的,但是换个思路可以实现,先平行画一个,然后旋转就可以了。

  • (defun c:tt (/ ang jd jd1 p0 p1 p2 pn pt pt1 pt2 pt3)
  •   (setq
  •     p0 (getpoint "\n起点: ")
  •     pt (getpoint p0 "\n终点: ")
  •   )
  •   (setq
  •     pn (polar p0 0 300)
  •     jd (angle p0 pn)
  •     p1 (mapcar '+ p0 '(420 0 0) )
  •     p2 (mapcar '+ p0 '(0 -210 0) )
  •     jd1 (angle p0 p2)
  •   )
  •   (setq
  •     pt1  (polar p0 jd 420)
  •     pt2  (polar p0 (+ jd jd1) 210)
  •     pt3  (polar pt2 jd 420)
  •   )
  •   (entmake
  •     (list
  •       '(0 . "hatch")
  •       '(100 . "AcDbEntity")
  •       '(67 . 0)
  •       '(410 . "Model")
  •       (cons 8 "0")
  •       '(100 . "AcDbHatch")
  •       '(10 0.0 0.0 0.0)
  •       '(210 0.0 0.0 1.0)
  •       (cons 2 "SOLID")
  •       '(70 . 1)
  •       '(71 . 1)
  •       '(91 . 1)
  •       '(92 . 1)
  •       '(93 . 3)
  •       '(72 . 1)
  •       (cons 10 p0)
  •       (cons 11 pt1)
  •       '(72 . 2)
  •       (cons 10 pt3)
  •       '(40 . 210)
  •       (cons 50 (+ (* pi (/ jd 180.) ) (/ pi 2) ) )
  •       (cons 51 (+ (* pi (/ jd 180.) ) pi) )
  •       '(73 . 1)
  •       '(72 . 2)
  •       (cons 10 pt2)
  •       '(40 . 210)
  •       (cons 50 (+ (* pi (/ jd 180.) ) (* pi 2) ) )
  •       (cons 51 (+ (* pi (/ jd 180.) ) (* pi 2.5) ) )
  •       '(73 . 1)
  •       '(97 . 0)
  •       '(75 . 1)
  •       '(76 . 1)
  •       '(98 . 1)
  •       (cons 10 p0)
  •       '(453 . 2)
  •       '(463 . 0)
  •       '(463 . 1)
  •       '(470 . "LINEAR")
  •     )
  •   )
  •   (setq ang  (- 360 (* (- (angle p0 pn)(angle p0 pt))(/ 180 pi))))
  •   (command "_.rotate" (entlast) "" p0 ang )
  •   (princ)
  • )








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-9-29 09:02:51 | 显示全部楼层
逗亦斗霸 发表于 2024-9-26 14:45
恩恩,用command偶会哦,我就是想学用entmake的,那个快呀~

  哪个快我也不知道,更改以下代码,你原来的就可以正常运行了      
            (cons 50 (+ jd (/ pi 2.0)))  
            (cons 51 (+ jd pi))  
                                                                      
            (cons 50 (+ jd (* pi 2.0)))  
            (cons 51 (+ jd (* pi 2.5)))  
 楼主| 发表于 2024-9-26 10:49:16 | 显示全部楼层
统一网名 发表于 2024-9-26 08:56
没有搞明白是咋运行的,但是换个思路可以实现,先平行画一个,然后旋转就可以了。

感谢回复!单独一个的这样确实可以,但我想生成多个的话(  (entlast) 换成“p”  )没有旋转成功。另外我用command来填充的话也可以成功,但数量多的话使用command生成确实要慢不少~
发表于 2024-9-26 11:24:01 | 显示全部楼层
逗亦斗霸 发表于 2024-9-26 10:49
感谢回复!单独一个的这样确实可以,但我想生成多个的话(  (entlast) 换成“p”  )没有旋转成功。另外我 ...

不明白你说的多个具体是啥情况
 楼主| 发表于 2024-9-26 11:28:40 | 显示全部楼层
统一网名 发表于 2024-9-26 11:24
不明白你说的多个具体是啥情况

沿着起点和终点路径生成多个~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-9-26 13:54:47 | 显示全部楼层
逗亦斗霸 发表于 2024-9-26 11:28
沿着起点和终点路径生成多个~

        (repeat 2                
                (setq d2 (polar p0 (angle p0 pt)  440))
                (command "copy" (entlast) "" p0 d2);
                (setq p0 d2)
        )
后面加一个循环复制,次数和间距自己设置吧
 楼主| 发表于 2024-9-26 14:45:24 | 显示全部楼层
统一网名 发表于 2024-9-26 13:54
(repeat 2                
                (setq d2 (polar p0 (angle p0 pt)  440))
                (command "copy" (entlast) "" p0 d2);

恩恩,用command偶会哦,我就是想学用entmake的,那个快呀~
 楼主| 发表于 2024-9-29 09:27:47 | 显示全部楼层
飞雪神光 发表于 2024-9-29 09:01
@统一网名 回复的就是一种答案 我换掉了command

感谢飞版!这就是我想要的,之前的指北角度问题和这个问题都是不会用pi(这段代码里的pi其实也没看太懂)我再去琢磨一下~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-22 15:38 , Processed in 0.193397 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表