乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 沿po分布顶点

[复制链接]

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 18:55:03 | 显示全部楼层 |阅读模式
你好
我在网上搜索lisp,以沿多段线添加或分布垂直线,但找不到足够接近我需要的东西。
我只需要通过定义顶点之间的长度沿多段线添加顶点。正如measure命令对多边形所做的那样,但我需要它是顶点,而不是点
谢谢
谢伊
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 18:58:48 | 显示全部楼层
将AddVertex方法作为起点。
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 19:02:01 | 显示全部楼层
我希望有些人可以删除一些行,因为我不知道如何编程visal basic
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 19:07:00 | 显示全部楼层
  1. (Defun c:demo ()
  2. (if (and (setq pline (car (entsel "\nSelect Polyline:")))
  3.           (eq (cdr (assoc 0 (entget pline))) "LWPOLYLINE")
  4.           (setq int (getdist "\nEnter Interval:"))
  5.           (setq in int)
  6.      )
  7.    (while (Setq pt (vlax-curve-getPointAtDist pline int))
  8.      (setq ppt (vlax-curve-getparamatpoint pline pt))
  9.      (vlax-invoke
  10.        (vlax-ename->vla-object pline)
  11.        'AddVertex
  12.        (1+ (fix ppt))
  13.        (list (car pt) (Cadr pt))
  14.      )
  15.      (setq int (+ int in))
  16.    )
  17. )
  18. )
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 19:09:33 | 显示全部楼层
剧本写得很棒!
谢谢你的朋友
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 19:12:03 | 显示全部楼层
 
samifox干杯,很高兴我能帮上忙。
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 19:16:52 | 显示全部楼层
 
你好
 
我正在分析你的代码,我需要在“while循环”之后的第二段得到帮助。
 
 
这里如何使用vlax curve getPointAtDist和vlax curve getparamatpoint?
 
谢谢
谢伊
 
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 19:18:25 | 显示全部楼层
你好
 
这段代码要求用户输入间隔,然后沿多边形分布顶点,但间隔不是很精确,因为每次迭代都会被fix()四舍五入。
我试图在我的项目中实现这段代码,但这个问题无法用这种方式解决。
 
是否有人可以发布一个代码,该代码与所有十进制数字相同,但不舍入?
 
谢谢
谢伊
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 19:20:39 | 显示全部楼层
此特定代码上的函数fix与段号samifox有关。事后一点。
 
向我展示并发布一个结果不精确的示例图,让我们看看我们可以做些什么来“修复”代码(双关语)
 
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 19:26:19 | 显示全部楼层
代码询问点a和b以及多段线,然后发送点a和b进行分割,并返回段长度和段数。然后添加顶点作为分段数,并(假设)将其分布在分段长度间隔中
 
您可以看到连接线分布正确,但顶点分布不正确。我希望顶点与xline完全一样分布
 
谢谢
谢伊
 
 
  1. (vl-load-com)
  2. (defun c:m ()
  3. (setq userData (wl:getUserData))
  4. (setq proData (extractSegment userData 6.0 8.0))
  5. (drawVers userData proData)
  6. )
  7. (defun wl:getUserData (/ ptst pten)
  8. (if (setq ptst (getpoint "\nStart point of path: "))
  9.    (if    (setq pten (getpoint ptst "\nEndpoint of path: "))
  10.      (progn
  11.    ;(setq ptst (trans ptst 1 0) pten (trans pten 1 0))
  12.    (setq wall (getPoly wall "\nSelect Wall eleveation line"))
  13.    (setq front (getPoly front "\nSelect Front eleveation line"))
  14.    (setq back (getPoly back "\nSelect Back eleveation line"))
  15.    (setq exist (getPoly exist "\nSelect Exist eleveation line"))
  16.    (list
  17.      (cons 10 ptst)
  18.      (cons 11 pten)
  19.      (cons 41 (distance ptst pten))
  20.      (cons 51 wall)
  21.      (cons 52 front)
  22.      (cons 53 back)
  23.      (cons 54 exist)
  24.    ) ;_list
  25.      ) ;_progn
  26.    ) ;_if endpt
  27. ) ;_if strp
  28. ) ;_defun
  29. (defun getPoly (ent msg)
  30. (if (setq ent (car (entsel msg)))
  31.    (if    (eq (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
  32.      ent
  33.    ) ;_if
  34.    (alert "\nThe selected object is not a polyline")
  35. ) ;_if
  36. ) ;_defun
  37. ;_______________________________________________________________________________________________________
  38. (defun extractSegment (userData minv maxv / ptst pten d n6 n8 n1 n2 n k stpt enpt)
  39. (setq ptst (cdr (assoc 10 userData)))
  40. (setq pten (cdr (assoc 11 userData)))
  41. (setq d (cdr (assoc 41 userData)))
  42.                    ;getiing unrestricted devition
  43. (setq n6 (/ d 6.0))
  44. (setq n8 (/ d 8.0))
  45. (cond
  46.        ( (equal n6 1.0 1e-15);what is 1e-15???
  47.          (setq n 1.0)
  48.        )
  49.        ( (and (null n) (> n6 1.0))
  50.          (setq n1 (fix n8) n2 (+ (fix n6) 1))
  51.          (repeat (+ (- n2 n1) 1)
  52.            (if (<= 6.0 (if (/= n1 0) (/ d (float n1)) 0.0) 8.0)
  53.              (setq n n1)
  54.              (if (null n) (setq n nil))
  55.            )
  56.            (setq n1 (1+ n1))
  57.          )
  58.        )
  59.        ( (< n6 1.0)
  60.          (setq n nil)
  61.        )
  62. )
  63. (if n
  64.    (progn
  65.      (setq k -1.0)
  66.      (repeat (fix n)
  67.        (setq stpt (mapcar '+ ptst (mapcar '* (mapcar '/ (mapcar '- pten ptst) (list n n n)) (list (setq k (1+ k)) k k))))
  68.        (setq enpt (mapcar '+ stpt (mapcar '/ (mapcar '- pten ptst) (list n n n))))
  69.        (entmake (list '(0 . "LINE") '(62 . 1) (cons 10 stpt) (cons 11 enpt) (list 210 0.0 0.0 1.0)))
  70.    (command "xline" "V" stpt "")
  71.      )
  72.    )
  73.    (prompt "\nOriginal line couldn't be divided into lines with 6-8 units lengths criteria")
  74. )
  75. (list
  76.    (cons 81 n)
  77.    (cons 82 (distance stpt enpt) )
  78.    )
  79. )
  80. ;_______________________________________________________________________________________________________
  81. (Defun drawVers    (userData proData)
  82. (setq wall (cdr (assoc 51 userData)))
  83. (setq front (cdr (assoc 52 userData)))
  84. (setq back (cdr (assoc 53 userData)))
  85. (setq exist (cdr (assoc 54 userData)))
  86. (setq seglen (cdr (assoc 82 proData)) )
  87. (setq segcnt (cdr (assoc 81 proData)) )
  88. (setq in segcnt)
  89. (while (Setq pt (vlax-curve-getPointAtDist wall seglen))
  90.      (setq ppt (vlax-curve-getparamatpoint wall pt))
  91.      (vlax-invoke
  92.        (vlax-ename->vla-object wall)
  93.        'AddVertex
  94.        (1+ (fix ppt))
  95.        (list (car pt) (Cadr pt))
  96.      )
  97.      (setq seglen (+ seglen in))
  98.    )
  99. )

 
谢谢你的timr伙计
 
这是我不懂的台词(红色)
 
 
[列表=1]
  • 在获得多边形id和间隔信息后,您分配给int为什么?
  • (比while循环直到nill)
  • pt根据间隔获取第一个点
  • ppt,然后获取到该点的距离
  • 然后调用转换和调用AddVertex
  • 比你的ppt提高1,为什么?
  • 然后列出实体,为什么?
    [/列表]
    (对所有人开放:)
     
    谢谢
    谢伊
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-12 13:26 , Processed in 0.613540 second(s), 72 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表